C’est ce soir les poubelles ?

Pour quoi faire ?

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.

En plus ma femme n’a de cesse de me demander si « y’a des poubelles à sortir ? » si « c’est pas le bac jaune ce soir ? » ou autre dans le même genre.

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

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 !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

bookmark
required required
web