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
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 :
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
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.
12 commentaires sur “Mise a jour / Modification auto (été-hiver) NotifHeureXL.”
Bonjour Byfeel, petite mise a jour faite ce matin pour mon home assistant puis petit message :
Discovered entities with a name that starts with the device name
Ceci ne fonctionnera plus dans la version 2024.2.0. Veuillez y remédier avant de mettre à jour.
Some MQTT entities have an entity name that starts with the device name. This is not expected. To avoid a duplicate name the device name prefix is stripped of the entity name as a work-a-round. Please inform the maintainer of the software application that supplies the affected entities to fix this issue.
List of affected entities:
sensor.notif_reseau_uptime
sensor.notif_placard_ip
switch.notif_reseau_sec
sensor.notif_bureau_wifi
switch.notif_bureau_sec
switch.notif_bureau_hor
switch.notif_reseau_hor
sensor.notif_placard_uptime
switch.notif_placard_sec
switch.notif_placard_hor
sensor.notif_reseau_wifi
sensor.notif_bureau_uptime
sensor.notif_bureau_ip
switch.notif_placard_lum
sensor.notif_placard_wifi
sensor.notif_reseau_ip
J’imagine qu’il faut y voir un petite Maj de Notif heure ?
Hello , tout a fait , j’ai corrigé le problème avec la mise a jour 1.1.2.
salut ça ne concerne pas précisément la mise a jour de l’heure mais sur mon dernier notifheure j ai un problème d’affichage les caractères s’affiche dans le bon sens mais pas dans le bonne ordre pour l heure j’ai les seconde en premier puis les minutes puis 1 caractère de l’heure puis : puis le second caractère des heure 46 131:2 pour 21:13 et 46 sec et les notifs s’affiche de la matrice tout a gauche vers celle de droite..
comment faire
ps c’est une matrice de 8×1 d’1 bloc https://www.aliexpress.com/item/1005005256589138.html?spm=a2g0o.order_list.order_list_main.49.55205e5bNG8tgX
et l’esp c’est un d1 mini
merci
Cela arrive si ce n’est pas le bon HARDWARE_type qui est défini : Par exemple ICS ou FC16 souvent . Avec quel type de firmware avait vous fait la mise a jour ?
Bonjour,
Merci pour ces informations, j’étais justement sur la question, sans avoir trouvé une solution aussi belle.
j’en profite, pour remonter un bug, quand j’utilise l’envois de message par mqtt. si 2 messages sont envoyés avec un liégés décalage, alors il s’over lap. (j’ai souvent le cas entre l’affichage de ma conso elect instantané, et mon niveau de particule fine) j’ai regardé dans le code, mais pas trouvez de solution qui fonctionne correctement.
As tu une idée ?
Merci encore pour ton travail
Désolé pour le doublon.
Peux tu le supprimer stp ?
Merci.
Merci, je vais regarder pour tes conseils et je vs redis.
Bonjour, J’ai bien suivi le tuto et testé avec les 2 méthodes sous jeedom. Mon notifheure reste désespéramment à l’heure d’hiver alors que je vois bien la commande config {‘tzoffset’:’120′} passer dans mqtt explorer
par ailleurs j’arrive bien à envoyer un message avec mon équipement notifheure créé avec jmqtt.
Bonjour Marc,
Le plus simple est de remonter la chaine :
1) verifier déjà directement dans mqtt explorer en publiant directement sur le topic config , qui doit être sous la forme
byfeel/NotifheureXL/xxxxx/nom_notif/config. est la valeur dans Json {« tzoffset »: »120″}. ( attention au guillemet , utiliser les doubles )
Si ça marche , c’est bon signe , le problème vient de l’envoie de la commande depuis jeedom ( il doit y avoir une erreur de syntax quelque part )
Si ça ne marche pas , il y a un problème soit dans le serveur MQTT , soit dans le topic ( pas le bon ? byfeel/NotifheureXL/abcdef/nom_notif/config ) , soit dans la configuration du notifheureXL. ( quel version de firmware utilisez vous ? )
A creuser …
Je suis en 1.1.1 j’ai essayé de publier directement de mqtt explorer, je vois bien que c’est parti mais mon notif n’exploite pas ce qu’il reçoit 🙁
je publies bien sous byfeel/NotifheureXL/465465/notif_cuisine/config
je vois bien dans mqtt explorer
state={« rssi »: »-39″, »up »: »0d 2h 51m 24s », »ip »: »192.168.5.19″, »sec »:true, »hor »:true, »lum »:false}
message={« msg »: »retest », »opt »: »coucou »}
config={« tzoffset »: »120″}
Le message retest était envoyé de mon équipement dans jeedom, et il a bien été affiché sur le notifheure comme ce que mes scénarios envoies.
A part que mon notifheure ne comprend pas la commande config en tout cas avec cette syntaxe, je ne vois pas.
Si vous voulez voir des copies d’écran, envoyez moi un mail car ici je ne peux pas en mettre
Bien cordialement
Bonsoir marc ,
Mon e-mail contact@byfeel.info
Si je comprend bien ça ne marche pas depuis Mqtt explorer ? Il faudrait voir la configuration mqtt du notif : export de la config via ipnotif/getInfo
Et la configuration du mqtt explorer.
Quel est le broker utilisé ?
Bonjour,
Merci Byfell, pour cette procédure.
Je suis sous Jeedom, les notif en avec la dernière version de ton firmware.
J’ai suivi la deuxième méthode que tu proposes.
J’ai le même problème que Marc,
Commande envoyée depuis JMQTT vers le serveur MQTT (paquet synology) mais pas de changement ( de prise en compte) sur le Notif.
Je vois bien la commande sur MQTT Explorer.
Toutes les autres commandes depuis JMQTT: affichage heure on/off, affichage secondes, etc fonctionnent correctement.
Les 2 choses que je n’arrive pas faire sont :
– faire varier la luminosité depuis JMQTT.
– je ne trouve plus l’option affichage de la température depuis l’interface Web, non plus avec JMQTT.
D’avance merci pour ton retour.
Bon Dimanche.
Bonjour a vous deux,
Apres vos différents retour je pense que le Client MQTT du notifHeure se met en erreur et plante. Il n’y a pas de message particulier qui prévient de son plantage , tout semble fonctionner normalement mais plus aucune commande MQTT ne repond. On peut constater un certains ralentissent dans l’obtention des infos ( via getInfo ) et parfois le serveur web est très ralentit aussi …..
Quels sont les raisons du plantage :
ça joue aussi sur le chargement de la configuration qui est parfois aléatoire ….Certaines commandes arrive à passer , malgré le service planté.
Que faire en cas de plantage :
Redémarrer le notifheure , ON / OFF , ou via commande http si serveur web fonctionne : ipnotif/Config?reboot=true
Retourner dans la configuration et verifier si ip broker , login et mdp bien rechargé.
Si service web bien réactif , pas de ralentissement …
Puis test de nouveau avec QOS = 0 , cela devrait fonctionner.
Sur tous mes Notifheures cela fonctionne bien …..
Si le fichier config est corrompus , ou pas modifiable ( comme la suppression du mot de passe MQTT ) , je vous conseille pour l’instant de recharger l’interface web via la commande :
python espota.py -i 192.168.5.19 -s -f notifheureXL_LITTLEFS_2.0.1.bin
En ce qui concerne les demandes de Nico