Les Carnets de Byfeel domotique , Objets connectés , DIY , Programmation, Nouvelles Technologies ….
Daylight saving time avec NotifheureXL

Mise a jour / Modification auto (été-hiver) NotifHeureXL.

Un article rapide , pour expliquer comment mettre à jour ou modifier facilement l’heure du NotifHeure. En ces temps de changement d’heure , on me redemande souvent comment mettre a jour l’heure . Bien qu’il soit possible de le faire via l’interface web , celaxige une intervention manuel.

Aujourd’hui je vais expliquer comment automatiser le décalage horaire via le protocole MQTT. Et ainsi avoir un NotifHeure toujours a l’heure même lors du changement été / hiver ( DST* )

Prérequis , avoir la dernière version du firmware NotifHeureXL en place.

Rappel sur la commande Configuration via MQTT

La commande via le protocole MQTT , est sous la forme :

Topic : byfeel/NotifheureXL/xxxxxx/name/config ( xxxxxx : numéro série ESP et name : nom donné au NotifHeure )

Texte Json { « key« : »value » } ou key= tzoffset et value = 120 ( temps en minutes ) pour deux heures . Je suis sur le fuseau UTC+1 et avec 1H00 de plus pour le DST* je dois donc passer mon réglage de 60 à 120 minutes.

exemple avec MQTT Explorer :

Si ok , le NotifHeure reboot automatiquement et la nouvelle heure sera affichée.

Pour info , voici quelques autres exemples de commande à envoyer via le topic config :

  • speed : modifie la vitesse de défilement par défaut (0 à 100 , 0 très rapide 100 très lent , par défaut 40 )
  • pause : modifie la pause par défaut en fin de scrolling , avant d’afficher la prochaine information
  • name : modifie le nom de votre NotifHeure
  • tzoffset : modifie le décalage de l’heure par rapport à l’heure GMT
  • nntpserver : modifie le nom ou l’ip du serveur stp
  • etc ….

Pour illustrer l’automatisation , je vais m’appuyer sur deux box domotique , Home assistant et jeedom … facilement adaptable à d’autres box.

Automatisation sous home assistant

Je crée un script , afin d’avoir un service a appeler pour modifier l’heure, dans le menu paramètre -> automatisation et scene -> script .
Apres lui avoir donné un nom ,je sauvegarde, et je bascule en mode yaml .

Ce script sera appelé en lui fournissant deux variables :

  • offset : temps en minutes pour le décalage
  • target : Le NotifHeure a modifié ( si plusieurs NotifHeure , si un seul on peut simplifier le script )

Dans ce script , je montre un exemple avec 3 NotifHeures , si vous en avez qu’un la ligne topic ne contiendra qu’un seul topic

alias: Update time NotifHeure
## definition des champs
fields:
  offset:
    description: time Offset
    example: 120
## Si Un seul NotifHeure , la variable target peut être supprimé
  target:
    description: target NotifHeure
    example: bureau
##debut script avec notification par défaut le bureau
sequence:
  - service: mqtt.publish
    data_template:
      payload: "{\"tzoffset\":\"{{ offset }}\"}"
      qos: 0
      retain: false
## si un seul NotifHeure la commande topic est sous la forme
## topic: "byfeel/NotifheureXL/236a40/salon/config "
      topic: >
        {% if target == "bureau" %}  byfeel/NotifheureXL/46fac3/bureau/config 
        {% elif target == "salon" %}  byfeel/NotifheureXL/236a40/salon/config 
        {% elif target == "cuisine" %}  byfeel/NotifheureXL/680a1a/cuisine/config
        {% else %} 
## NotifHeure par défaut 
        byfeel/NotifheureXL/46fdc2/bureau/config {% endif %}
mode: single
icon: mdi:clock-digital
exemple du script

Pour tester le script , se rendre dans le menu « Outils de développement ». « services » et chercher le script nouvellement créé.

On renseigne offset: 120 et on appelle le service , votre NotifHeure reboot et affiche l’heure avec un décalage de 120 minutes sur l’heure GMT.

Il ne reste plus qu’a automatiser cet appel de script a chaque changement hiver – > été .

Automatisation DST :

Pour mener a bien cette derniére, je vais avoir besoin d’un déclencheur , pour me prévenir du passage au changement d’heure.

Je crée un « binary-sensor » basé sur la fonction now() inclus dans home assistant. J’utilise template pour la création du sensor ( plus d’indo sur la documentation sur template dans home assistant ).

A renseigner dans votre fichier .yaml , basé sur la fonction now().timetuple() .

template:   
   - binary_sensor:       
        - name: "isDST Time"
          state: " {{now().timetuple().tm_isdst}}"
          unique_id: isdst-0242ac120002
now().timetuple() renvoie un objet sous la forme
time.struct_time(tm_year=2019, tm_mon=12, tm_mday=31, tm_hour=23, 
tm_min=59, tm_sec=59, tm_wday=1, tm_yday=365, tm_isdst=-1)

L’objet qui m’intéresse dans mon cas est tm_isdst , qui renvoie 1 si DST actif , 0 si inactif et -1 si inexistant.

Mon Sensor aura donc la valeur « true » si tm_isdst=1 et « false » pour les autres valeurs ( 0 ou -1 ).

exemple affichage sensor is_dst :

Ce qui donne pour l’automatisation :

résumé automatisation

Création de la nouvelle automatisation , pour les déclencheurs , je choisi un déclenchement sur état . Heure été quand is_dst passe de OFF a ON et heure hiver quand is_dst passe de On à OFF

Exemple déclenchement heure été

Puis appel du script pour mettre à jour, en une fois, tous les NotifHeure ( je passe par la commande répéter ) , via un script yaml

Ci dessous le script complet de l’automatisation ( a adapter en fonction de vos NotifHeure ) :

alias: Notifheure DST auto Ete-Hiver
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.isdst_time
    from: "off"
    to: "on"
    for:
      hours: 0
      minutes: 0
      seconds: 10
    id: Heure_ete
  - platform: state
    entity_id:
      - binary_sensor.isdst_time
    id: Heure_hiver
    from: "on"
    to: "off"
    for:
      hours: 0
      minutes: 0
      seconds: 10
action:
  - choose:
      - conditions:
          - condition: trigger
            id: Heure_ete
        sequence:
          - alias: repeter action ete pour chaque notifheure
            repeat:
              for_each:
                - salon
                - bureau
                - cuisine
              sequence:
                service: script.update_time_notifheure
                data:
                  offset: 120
                  target: "{{ repeat.item }}"
      - conditions:
          - condition: trigger
            id: Heure_hiver
        sequence:
          - alias: repeter action hiver pour chaque notifheure
            repeat:
              for_each:
                - salon
                - bureau
                - cuisine
              sequence:
                service: script.update_time_notifheure
                data:
                  offset: 60
                  target: "{{ repeat.item }}"
mode: single

Home assistant permet de parvenir a ses fins par d’autres chemins, a vous de voir celui qui vous convient le mieux.

Voyons sous jeedom comment faire …

Automatisation sous Jeedom

Je crée une nouvelle commande action dans l’équipement NotifHeure avec le plugin JMQTT

Plusieurs façon de procéder ( soit avec une commande curseur , afin de paramétrer à la minute près )

Ajouter une commande action
Type: Choisir curseur
Topic : byfeel/NotifheureXL/xxxxxx/name/config. ( remplacer xxxxx et name , par les valeurs de votre NotifHeure )
Valeur: Rentrer le format JSON suivant {‘tzoffset’:’#slider#’} ( tzoffset est la clé , et la valeur du curseur sera le décalage horaire en minute )
Unité : Indiquer 0 à 180 ( pour des décalage allant de 0 à 3heures ) ou selon votre zone horaire par rapport à GMT ( l’amplitude qui vous correspond ).
Retain et Qos : Vous pouvez laisser les valeurs par défaut

Soit avec une commande action de type list , afin de choisir entre mode été ou hiver:

Type: Choisir liste
Topic : byfeel/NotifheureXL/xxxxxx/name/config. ( remplacer xxxxx et name , par les valeurs de votre NotifHeure )
Valeur: Rentrer le format JSON suivant {‘tzoffset’:’#select#’} ( tzoffset est la clé , select la valeur numérique de la liste ( en minutes )
Unité : J’indique mes choix possibles. ici concernant ma localisation ( en France ) 60|Hiver;120|Eté
Retain et Qos : Vous pouvez laisser les valeurs par défaut

La page d’affichage de votre équipement :


Détection du changement DST :

Pour detecter le changement de DST , je crée un script sous jeedom que j’actualise tous les jours à 03h00 du matin.

Puis dans l’onglet commande je crée une commande info basé sur un script bash.

et le script bash utilisé

#!/bin/sh
date=$(date +%Y%m%d%H%M.%S)
isdst=$(date +%Z)
if [ "$isdst" = "CEST" ] 
then
	echo "Eté"
else
	echo "Hiver"
fi

Le scenario :

Dans le menu scenario de jeedom , nouveau scenario , déclenchement provoqué par la commande dsttest du script.

puis deux bloc if qui test la valeur de dsttest , et autant d’action qu’il y a de NotifHeure ….

sur chaque bloc if , j’interdis la répétition des actions tant que la valeur de dsttest ne change pas

Concernant les autres box , il sera assez facile de reproduire ces actions , des que vous pouvez utiliser le protocole MQTT.

* DST signifie « heure d’été » ou « daylight saving time » en anglais. Il s’agit d’une pratique consistant à avancer les horloges d’une heure pendant les mois d’été, de sorte que la lumière du jour soit mieux exploitée pendant les heures de veille.

chatGPT

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

12 commentaires sur “Mise a jour / Modification auto (été-hiver) NotifHeureXL.”

%d blogueurs aiment cette page :