Mode Vacances : envoi de rapports d'activités quotidiens (script & automatisation)

Bonjour à tous,

Pour mon serveur Home Assistant, j’ai mis en place un système de rapport d’activités quotidien qui m’est envoyé chaque jour lorsque je suis à l’extérieur, pendant plusieurs jours.
J’ai appelé ça le « mode vacances », qui une fois activé permet à HA de m’envoyer ledit rapport quotidiennement grâce à un script et une automatisation.
Je reçois ainsi plusieurs infos concernant l’état de ma maison et de ses différents systèmes.

Concrètement, comment ça marche:

  • J’envoie le mot « Vacances » à mon bot Telegram
  • Ce qui déclenche le mode vacance grâce à un script
  • Le script vient alors activer l’automatisation d’envoi de rapports quotidiens par Telegram
  • Je pars au soleil et m’envoie pleins de mojitos (facultatif mais nécessaire)
  • Pour stopper le mode vacance, je renvoie simplement le même mot « Vacances » à mon bot Telegram
  • Ce qui déclenchera à nouveau le script mais cette fois pour couper l’automatisation d’envoi.

À noter que l’envoi du mot « Vacances » à mon bot pour lancer/stopper le mode peut totalement être remplacé par un switch sur le dashboard par exemple. Et ce switch viendra lancer le script.

Le résultat en image :

C’est encore en phase de test chez moi et peut sûrement être optimisé/fiabilisé.
Je voulais vous partager cela car ça peut être utile à certains et donner des idées pour d’autres utilisations (infos de production solaire, consommation d’eau/électricité…etc.).
Si certains sont intéressés, je pourrai détailler la mise en place et vous partager le script et l’automatisation utilisés dans mon cas.

Ps: pour les modos qui passeraient par là, j’espère ne pas avoir posté mon message au mauvais endroit, si c’est le cas désolé vous pouvez bien sûr le déplacer.

6 « J'aime »

Bonjour,

C’est une très bonne chose , Je suis bien intéressé de ce que tu a fait !

Pareil; n’hesites pas a partager le code quand tu auras fini. Merci par avance

Bonsoir @Integra

J’utilise Telegram uniquement pour HA, je veux bien savoir aussi comment tu fais ça, même si je trouve plus pertinent de juste recevoir instantanément une notification sur un problème rencontré, que tu as aussi j’imagine.
Bob

Très bien, je vais faire un mini-tuto pour vous expliquez la marche à suivre, je le posterai ce-soir ou demain !

Pas de soucis @Bob j’aborderai ça dans le tuto. C’est très facile à faire avec Node-red (envoi d’un message au bot => action côté HA), je crois que c’est également possible avec des blueprints mais plus contraignant… .
Et oui je reçois également des notifications en cas de problème (déclenchement d’alarme, coupure de courant…etc.) donc je vois ça comme une double sécurité => quand tout va bien je reçois un message si je suis en vacances pour m’informer que tout est okay et fonctionne.

Comme promis voici la marche à suivre:

Prérequis :

  • Un bot Telegram configuré et opérationnel (ou tout autre moyen pour être notifié depuis l’extérieur)

1ère étape - Création de l’automatisation d’envoi d’un rapport :

  • Créer une automatisation (Paramètres > Automatisations & scènes > Créer une automatisation)
  • Choisir une heure en tant que déclencheur (= trigger) dans mon cas 14h00
  • En action, choisir le service d’envoi de message de votre bot Telegram
  • Éditer le message/rapport à vous envoyer quotidiennement avec les alertes que vous choisirez
  • Enregistrer votre automatisation

Ci-dessous le code mon auto :

Automatisation
alias: Système - Notification Mode vacances
description: ""
triggers:
  - trigger: time
    at: "14:00:00"
conditions: []
actions:
  - action: notify.bot_telegram
    metadata: {}
    data:
      message: >-
        📊 Rapport du jour ({{as_timestamp(now()) |
        timestamp_custom('%d/%m/%y')}}):
           
        • Home Assistant fonctionne correctement (uptime : {{ relative_time(
        states('sensor.uptime') | as_datetime ) }}) ✅


        • {% if as_timestamp(now()) -
        as_timestamp(states.sensor.eaton3s850fr_code_d_etat.last_changed) | int
        > 86400 %}Aucune panne de courant détectée ✅{% else %}Panne de courant
        détectée, revenu à la normale à  {{
        as_timestamp(states.sensor.eaton3s850fr_code_d_etat.last_changed)  |
        timestamp_custom('%Hh%Mmn') }}{% endif %} ⚡


        • {% if is_state('binary_sensor.portes_fenetres', 'on') %}Portes ou
        fenêtres ouvertes : {{ (expand('binary_sensor.portes_fenetres') |
        selectattr('state', 'eq', 'on') | map(attribute='name') | join(',
        ')) }} ! ❌{% else %}Toutes les portes & fenêtres sont fermées ✅{% endif
        %}

        {% if as_timestamp(now()) -
        as_timestamp(states.binary_sensor.portes_fenetres.last_changed) | int >
        86400 %}(aucune activité détectée){% else %}(dernière activité à {{
        as_timestamp(states.binary_sensor.portes_fenetres.last_changed)  |
        timestamp_custom('%Hh%Mmn') }}){% endif %}


        • {% if as_timestamp(now()) -
        as_timestamp(states.alarm_control_panel.alarmo.last_changed) | int >
        86400 %}L'alarme est {{ state_translated("alarm_control_panel.alarmo")
        }} et ne s'est pas déclenchée RAS ✅{% else %}L'alarme est passée à {{
        state_translated("alarm_control_panel.alarmo") }} à {{
        as_timestamp(states.alarm_control_panel.alarmo.last_changed)  |
        timestamp_custom('%Hh%Mmn') }}{% endif %} 🔒


        • {% if is_state('camera.salon', 'unavailable') %}La caméra n'est pas
        disponible ! ❌{% else %}La caméra est opérationnelle ✅{% endif %}


        • {% if as_timestamp(now()) -
        as_timestamp(states.binary_sensor.salon_person_occupancy.last_changed) |
        int > 86400 %}Frigate n'a détecté aucun mouvement ✅{% else %}Frigate a
        détecté une personne à {{
        as_timestamp(states.binary_sensor.salon_person_occupancy.last_changed) 
        | timestamp_custom('%Hh%Mmn') }} !{% endif %} ⚠️
mode: single

2ème étape - Création d’une seconde automatisation pour activer/désactiver le « Mode vacances » (= activer l’auto de l’étape 1)

  • Créer une automatisation (Paramètres > Automatisations & scènes > Créer une automatisation)
  • Copier le code de mon auto :
Automatisation
alias: Système - Activation/Désactivation Mode vacances
description: ""
triggers:
  - trigger: event
    event_type: telegram_text
    event_data:
      text: Vacances
      chat_id: 0123456789
    alias: Lorsque le mot "Vacances" est reçu par le bot
conditions: []
actions:
  - alias: Activation/désactivation du mode vacances
    if:
      - condition: state
        entity_id: automation.notification_mode_vacances
        state: "off"
    then:
      - action: notify.bot_telegram
        data:
          title: "Mode vacances activé ! "
          message: |-
            Un rapport sera envoyé quotidiennement sur l'activité de la maison.

            Bonnes vacances !
      - action: automation.turn_on
        metadata: {}
        data: {}
        target:
          entity_id: automation.notification_mode_vacances
    else:
      - action: notify.bot_telegram
        data:
          message: Bon retour !
          title: Mode vacances désactivé !
      - action: automation.turn_off
        metadata: {}
        data:
          stop_actions: true
        target:
          entity_id: automation.notification_mode_vacances
mode: single

  • Adapter les entités pour correspondre à votre config (entity_id de l’auto. de l’étape 1 & celui de votre bot Telegram), à savoir :
Capture

  • Enregistrer votre automatisation

Si vous préférez lancer le mode vacances depuis un switch sur votre dashboard par exemple, remplacez l’étape 2 par un script qui reprendra la partie « action » de cette étape, votre switch devra ensuite lancer ce script.

Voilà normalement c’est fini, vous pouvez ensuite tester le tout en envoyant le mot choisi à votre bot Telegram.
Celui ci devrait vous informer s’il a activé ou désactivé le mode vacances.
Si activé, vous recevrez un rapport à l’heure définie dans votre automatisation (vous pouvez exécuter l’auto manuellement pour tester sans avoir à attendre l’heure choisie).

Info. importante : si vous remarquez que toutes les heures de vos différentes alertes sont identiques, cela signifie très probablement que l’OS de Home Assistant a redémarré dans la journée. Vous pouvez le vérifier grâce à l’uptime (si heure des alertes = uptime).
La raison : l’attribut « last_changed » des capteurs utilisés pour les alertes est réinitialisé à chaque redémarrage d’HA, ce qui entraîne ces « fausses » alertes.

5 « J'aime »

Bonjour,
Très bon tuto et exemple de ce qu’on peut faire.
Merci pour le partage.

1 « J'aime »

Après quelques jours de test, plusieurs choses :

  • Je m’aperçois qu’utiliser un seul et même bot Telegram côté HA et Node-Red pose problème. L’API du bot Telegram n’autorise qu’un seul « Client » donc soit HA soit Node-Red mais pas les deux. Je recevais beaucoup d’erreurs dans les logs de HA. La solution fonctionne malgré tout dans mon cas mais je préfère éviter.
  • Je me suis aperçu que j’avais mal lu/compris la doc au sujet de l’utilisation du bot Telegram. C’est finalement très simple et peu contraignant de gérer l’activation du mode directement dans HA (=sans passer par Node-Red)

J’ai donc adapté le post tuto un peu plus haut pour simplifier, ce qui donne :

  • Une auto pour activer/désactiver le mode et m’en informer
  • Une autre qui enverra le rapport quotidiennement

Le tout est donc géré entièrement par HA !

Pour ceux utilisant exclusivement Node-Red, ci-dessous le tuto initial qui explique brièvement la marche à suivre de ce côté là :

V1 avec Node-Red pour archive

Comme promis voici la marche à suivre:

Prérequis :

  • Un bot Telegram configuré et opérationnel (ou tout autre moyen pour être notifié depuis l’extérieur)

Facultatif :

  • Node-red d’installé ainsi que ce Node pour déclencher le mode depuis Telegram par message (facultatif et non nécessaire si vous souhaitez utiliser un switch pour déclencher le mode Vacances)

1ère étape - Création de l’automatisation d’envoi d’un rapport :

  • Créer une automatisation (Paramètres > Automatisations & scènes > Créer une automatisation)
  • Choisir une heure en tant que déclencheur (= trigger) dans mon cas 14h00
  • En action, choisir le service d’envoi de message de votre bot Telegram
  • Éditer le message/rapport à vous envoyer quotidiennement avec les alertes que vous choisirez
  • Enregistrer votre automatisation

Ci-dessous le code mon auto :

Automatisation
alias: Système - Notification Mode vacances
description: ""
triggers:
  - trigger: time
    at: "14:00:00"
conditions: []
actions:
  - action: notify.bot_telegram
    metadata: {}
    data:
      message: >-
        📊 Rapport du jour ({{as_timestamp(now()) |
        timestamp_custom('%d/%m/%y')}}):
           
        • Home Assistant fonctionne correctement (uptime : {{ relative_time(
        states('sensor.uptime') | as_datetime ) }}) ✅


        • {% if as_timestamp(now()) -
        as_timestamp(states.sensor.eaton3s850fr_code_d_etat.last_changed) | int
        > 86400 %}Aucune panne de courant détectée ✅{% else %}Panne de courant
        détectée, revenu à la normale à  {{
        as_timestamp(states.sensor.eaton3s850fr_code_d_etat.last_changed)  |
        timestamp_custom('%Hh%Mmn') }}{% endif %} ⚡


        • {% if is_state('binary_sensor.portes_fenetres', 'on') %}Portes ou
        fenêtres ouvertes : {{ (expand('binary_sensor.portes_fenetres') |
        selectattr('state', 'eq', 'on') | map(attribute='entity_id') | join(',
        ')) }} ! ❌{% else %}Toutes les portes & fenêtres sont fermées ✅{% endif
        %}

        {% if as_timestamp(now()) -
        as_timestamp(states.binary_sensor.portes_fenetres.last_changed) | int >
        86400 %}(aucune activité détectée){% else %}(dernière activité à {{
        as_timestamp(states.binary_sensor.portes_fenetres.last_changed)  |
        timestamp_custom('%Hh%Mmn') }}){% endif %}


        • {% if as_timestamp(now()) -
        as_timestamp(states.alarm_control_panel.alarmo.last_changed) | int >
        86400 %}L'alarme est {{ state_translated("alarm_control_panel.alarmo")
        }} et ne s'est pas déclenchée RAS ✅{% else %}L'alarme est passée à {{
        state_translated("alarm_control_panel.alarmo") }} à {{
        as_timestamp(states.alarm_control_panel.alarmo.last_changed)  |
        timestamp_custom('%Hh%Mmn') }}{% endif %} 🔒


        • {% if is_state('camera.salon', 'unavailable') %}La caméra n'est pas
        disponible ! ❌{% else %}La caméra est opérationnelle ✅{% endif %}


        • {% if as_timestamp(now()) -
        as_timestamp(states.binary_sensor.salon_person_occupancy.last_changed) |
        int > 86400 %}Frigate n'a détecté aucun mouvement ✅{% else %}Frigate a
        détecté une personne à {{
        as_timestamp(states.binary_sensor.salon_person_occupancy.last_changed) 
        | timestamp_custom('%Hh%Mmn') }} !{% endif %} ⚠️
mode: single

2ème étape - Création du script « Mode vacances » pour activer/désactiver l’auto. de l’étape 1

  • Créer un script (Paramètres > Automatisations & scènes > onglet Scripts > Ajouter un script
  • Copier le code de mon script :
Script
alias: Switch Mode vacances
sequence:
  - alias: Activation/désactivation du mode vacances
    if:
      - condition: state
        entity_id: automation.notification_mode_vacances
        state: "off"
    then:
      - action: notify.bot_telegram
        metadata: {}
        data:
          message: |-
            Un rapport sera envoyé quotidiennement sur l'activité de la maison.
            Bonnes vacances !
          title: "Mode vacances activé ! "
      - action: automation.turn_on
        metadata: {}
        data: {}
        target:
          entity_id: automation.notification_mode_vacances
    else:
      - action: notify.bot_telegram
        metadata: {}
        data:
          message: Bon retour !
          title: Mode vacances désactivé !
      - action: automation.turn_off
        metadata: {}
        data:
          stop_actions: true
        target:
          entity_id: automation.notification_mode_vacances
description: ""

  • Adapter les entités pour correspondre à votre config (entity_id de l’auto. de l’étape 1 & celui de votre bot Telegram), à savoir :
Capture

  • Enregistrer votre script

3ème étape - L’envoi du message pour déclencher le mode

  • Importer le flux suivant sous Node-red :
Flux Node-red
[{"id":"9b54a138c9464043","type":"tab","label":"Telegram - Mode vacances","disabled":false,"info":"","env":[]},{"id":"3b66bd607ef49a83","type":"telegram command","z":"9b54a138c9464043","name":"Message reçu","command":"Vacances","description":"","registercommand":false,"language":"","scope":"default","bot":"b97e9b6fa2a7f268","strict":false,"hasresponse":true,"useregex":false,"removeregexcommand":false,"outputs":2,"x":210,"y":100,"wires":[["2ec936c9b6daaf94"],[]]},{"id":"2ec936c9b6daaf94","type":"api-call-service","z":"9b54a138c9464043","name":"Script Mode vacances","server":"cc7e32c2.da4f1","version":7,"debugenabled":false,"action":"script.switch_mode_vacances","floorId":[],"areaId":[],"deviceId":[],"entityId":[],"labelId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":true,"domain":"script","service":"switch_mode_vacances","x":540,"y":100,"wires":[[]]},{"id":"b97e9b6fa2a7f268","type":"telegram bot","botname":"HA_bot","usernames":"","chatids":"","baseapiurl":"","testenvironment":false,"updatemode":"polling","addressfamily":"","pollinterval":"300","usesocks":false,"sockshost":"","socksprotocol":"socks5","socksport":"6667","socksusername":"anonymous","sockspassword":"","bothost":"","botpath":"","localbotport":"8443","publicbotport":"8443","privatekey":"","certificate":"","useselfsignedcertificate":false,"sslterminated":false,"verboselogging":false},{"id":"cc7e32c2.da4f1","type":"server","name":"Home Assistant","addon":true}]
  • Configurer le noeud « Message reçu » pour indiquer le mot qui lancera le script (ici « Vacances ») Cf. capture du point suivant
  • Configurer les infos de votre bot, à savoir le « Token » de votre bot et éventuellement le/les « ChatsIds » souhaité(s)
Capture

  • Configurer le noeud « Script Mode vacances » pour qu’il lance votre scipt créé en étape 2
Capture

  • Déployer votre flux

Comme dit précédemment, cette 3ème étape est facultative et peut-être remplacée par un switch sur votre dahsboard par exemple, qui viendra déclencher le script de l’étape 2.

Voilà normalement c’est fini, vous pouvez ensuite tester le tout en envoyant le mot choisi à votre bot Telegram.
Celui ci devrait vous informer s’il a activé ou désactivé le mode vacances.
Si activé, vous recevrez un rapport à l’heure définie dans votre automatisation (vous pouvez exécuter l’auto manuellement pour tester sans avoir à attendre l’heure choisie).

Info. importantes : si vous remarquez que toutes les heures de vos différentes alertes sont identiques, cela signifie très probablement que l’OS de Home Assistant a redémarré dans la journée. Vous pouvez le vérifier grâce à l’uptime (si heure des alertes = uptime).
La raison : l’attribut « last_changed » des capteurs utilisés pour les alertes est réinitialisé à chaque redémarrage d’HA, ce qui entraîne ces « fausses » alertes.