C’est ce soir les poubelles ?
Pour quoi faire ?
« y’a des poubelles à sortir ? »
« c’est pas le bac jaune ce soir ? » …
Ma femme, chaque soir…
Parmi les sujets d’automations et de domotique les plus classique il y a la vie de tous les jours et parfois, l’humain ne peut être remplacer dans la chaine…
Sortir les poubelles, je sais pas vous, mais chez moi, c’est pour bibi. Aucun robot que je puisse programmer pour s’en charger. Merde.
J’ai un rappel dans mon agenda google avec le cycle très régulier de ces poubelles :
- Le dimanche : faut sortir le bac jardin
- Le lundi : le bac vert
- Le mardi : le bac jaune
- Le jeudi : re-le bac vert…
En bref…
J’utilise l’intégration Home Assistant pour Google Calendar et une automatisation :
- Quand il y a un rendez-vous dans le calendrier surveillé,
- Si il y a #ShinyNotify dans la description du rdv,
- j’allume une lampe pour rappeler à toute la famille que c’est LE moment !
- Option : possibilité de choisir la couleur de la lampe dans le rdv en donnant le nom css3
Prérequis et AddOns
- Utiliser Google Calendar
- Avoir activer l’intégration Google Calendar
- Avoir activé le module python script
- Avoir une entité lampe qui supporte les couleurs dans HA
- … Sortir les poubelles … Ou pas !
Scripts et mise en place
Script python
Il permet de parser la description des rendez-vous pour vérifier la présence de ShinyNotify et éventuellement récupérer la couleur désirée
"""
Shiny Notify
This script will turn lign on if #ShinyNotify is found in the description argument
Set the target color (white by default) : #ShinyNotify[color_name_css3]
from https://www.w3schools.com/colors/colors_names.asp
Arguments:
- title: - title of the persistent notification,
optional
- entity_id - light target (required)
- description - Main message (required)
"""
def find_between( s, first, last ):
try:
start = s.index( first ) + len( first )
end = s.index( last, start )
return s[start:end]
except ValueError:
return "white"
title = data.get('title')
description = data.get('description')
entity_id = data.get('entity_id')
if description.find('#ShinyNotify') is not -1:
color_name = find_between(description,'#ShinyNotify[',']')
if entity_id is not None:
service_data = {'title': title, 'message': description}
hass.services.call('persistent_notification', 'create', service_data, False)
service_data = {'entity_id': entity_id, 'color_name': color_name, 'brightness': 255 }
hass.services.call('light', 'turn_on', service_data, False)
Les deux automatisations pour le calendrier choisi sont simples :
- id: 'calendar_on'
alias: 'Un rendez-vous commence'
trigger:
- entity_id: calendar.nom_calendar
platform: state
to: 'on'
action:
- service: python_script.shiny_notify
data_template:
title: '{{states.calendar.nom_calendar.attributes["message"]}}'
description: '{{states.calendar.nom_calendar.attributes["description"]}}'
entity_id: light.nom_lumiere
- id: 'calendar_off'
alias: 'Un rendez-vous se termine'
trigger:
- entity_id: calendar.nom_calendar
platform: state
to: 'off'
action:
- service: light.turn_off
entity_id: light.nom_lumiere
Libre à vous d’ajouter d’autres actions quand un rdv commence ou se termine !