Gestion d'un sèche-serviette avec Home Assistant et Tasmota
Le Module
C'est certainement un des modules les plus anciens utilisé dans cette maison : un SonOff Dual.
Pour gérer le fil pilote d'un équipement de chauffage, ce module est très pratique car il permet de lier les 2 sorties des relais sans trop de manipulation.
La mise en oeuvre de ce montage n'est pas objectif de cet article, des tutos sont disponibles sur Internet (ici par exemple)
Tasmota est installé sur ce module (depuis la version... SonOff-OTA je crois bien)
Le Sèche Serviette
Mon sèche serviette n'est pas le chauffage principal de la salle de bain.
Il sert essentiellement à apporter le surplus de chaleur lors de l'utilisation de celle-ci et bien entendu de sécher les serviettes.
Le pilotage par fil pilote à 4 états nécessite de configurer 3 températures de consigne sur l'appareil.
Libre à vous de régler ces T° comme bon vous semble (attention, le gouvernement vous surveille !! :p)
Ici c'est 25°C CONFORT et 22° ECO pour lancer rapidement le chauffage et ensuite garder la chaleur quelques temps.
L'objectif de cet article est d'expliquer ma logique de mise en oeuvre du pilotage de cet appareil.
L'idée générale est de garder au maximum le module autonome.
Cahier des charges
- 2 plages de chauffe (matin et soir)
- 1 plage de pré-chauffe pour l'hiver
- Enchainement automatique CONFORT - ECO - ARRET pour chaque allumage
- Gestion de la plage horaire matinale automatique en fonction du jour et des "états" de présence
- Gestion de la plage horaire de fin de journée statique et via notification smartphone
De manière empirique j'ai calculé qu'un cycle de chauffe efficace se déroule comme suit :
- CONFORT 40min
- ECO 40min
- ARRET
La règle sera donc la suivante, à chaque démarrage du mode CONFORT :
- il durera 40min pour ensuite
- passer au mode ECO pendant 40min
- et on arrête tout
Le mode "Pre Heat" consiste à lancer le mode CONFORT à 5h30 du matin, en heures creuses, afin d'avoir le sèche serviette déjà chaud pour la plage de chauffage matinale.
Ca coûte moins cher !
Comme indiqué en préambule, j'utilise Tasmota comme OS sur l'ESP du SonOff Dual.
On va donc essayer d'utiliser au maximum ses possibilités pour le rendre autonome, tout en gardant la reconfiguration et la télémétrie avec HA.
Implémentation et logique Tasmota
Les modes du fil pilote
Le module SonOff Dual R2 modifié permet d'activer les modes du fil pilote avec des combinaisons des 2 relais :
- STOP :
Power1 ON
etPower2 OFF
- HORS-GEL :
Power1 OFF
etPower2 ON
- ECO :
Power1 ON
etPower2 ON
- CONFORT :
Power1 OFF
etPower2 OFF
Pour se simplifier la vie, on va utiliser des Rules pour activer les modes (voir plus loin dans cet article)
Les Timers
Pour gérer des plages horaires, Tasmota dispose d'une fonction très sympa : les Timers.
Pour résumer les timers permettent de déclencher une action sur un relais à une heure fixe ou bien avec les heures du lever et coucher de soleil.
On peut configurer les jours où le timer est activé.
Par défaut, les actions d'un Timer sont on/off/toggle
ou blink
. Lorsqu'on utilise les "Rules
" de Tasmota, le mode blink disparait pour laisser un autre mode : rule
.
Et bien entendu, on vu utiliser les Rules !
Les Timers vont donc servir de déclencheur.
Maintenant nous allons voir comment on peut gérer la durée d'activation du chauffage.
On pourrait utiliser les Timers pour modifier les relais afin d'arrêter le mode CONFORT/ECO au bout des 40min.
Mais cela ne permettrait pas de prendre en compte l'activation du chauffage de manière manuelle. Mauvaise solution.
On va mettre en place un mécanisme qui fonctionne dans tous les cas ! (Timer et manuel)
Plutôt que de configurer les relais, on va créer des actions qui font tout : configurer les relais et activer les compteur de temps (RuleTimer)
Les RuleTimer
Cette fonction de Tasmota permet de faire un décompte.
Très intéressante lorsqu'on utilise les Rules
car dès qu'un RuleTimer
est terminé, nous avons un trigger
!
On va donc utiliser 2 RuleTimer :
RuleTimer1
: durée mode CONFORT (40min/2400s)RuleTimer2
: durée mode ECO (40min/2400s)
A chaque changement de mode on reconfigure les RuleTimer pour éviter d'avoir des bugs du genre mode ECO et CONFORT en même temps...
Les Number
C'est le moment de faire une parenthèse sur l'intéraction entre HA et Tasmota.
Lorsqu'on utilise un relais, dans HA il est configuré comme un switch
. Pas de problème pour le pilotage et les remontées d'états entre HA et Tasmota.
Par contre, lorsqu'on utilise un actionneur à plusieurs états c'est différent.
Ca ne peut pas être un sensor
(remontée uniquement dans le sens Tasmota -> HA).
Ca doit être une variable commune entre HA et Tasmota : merci les number
!
( voir https://www.home-assistant.io/integrations/number.mqtt/ )
Les number (MQTT number
dans notre cas) permettent d'avoir une variable synchronisée sur Tasmota et sur HA. Peut importe d'où elle est modifiée, les 2 systèmes sont immédiatement mis à jour.
On va donc utiliser un MQTT Number
de HA pour gérer nos 4 modes.
De manière arbitraire on définit :
0: Arrêt
1: Hors-Gel
2: Eco
3: Confort
J'ai ajouté un switch
"sport-today" qui permet d'activer le chauffage n'importe que jour, le soir (la douche après le sport c'est important !)
Ce mode peut être activé manuellement par un switch sur HA. Le auto-off du switch est géré par Tasmota.
Maintenant que nous avons tous les concepts, on peut passer à l'implémentation.
Configuration Tasmota
Variables
Topic: salledebain
FullTopic: home/tasmota/%topic%/%prefix%/
Mem2: home/tasmota/
Mem2: 0-3 Heat Mode
0: ARRET
1: HORS-GEL
2: ECO
3: CONFORT
Auto Switch OFF
Mode CONFORT 40min/2400s :
- RuleTimer1 2400
- RuleTimer2 0
Mode ECO 40min/2400s : - RuleTimer1 0
- RuleTimer2 2400
Programmation par Timers
- Timer1 : pre-heat
- Timer2 : morning
- Timer3 : evening
Exemple de conf Timer envoyé par HA
Action 3
: pour trigger des Rules
Timer1 {"Enable":1,"Mode":0,"Time":"05:35:00","Window":0,"Days":"SMTWTFS","Repeat":0,"Action":3}
Timer2 {"Enable":1,"Mode":0,"Time":"06:15:00","Window":0,"Days":"SMTWTFS","Repeat":0,"Action":3}
Timer3 {"Enable":1,"Mode":0,"Time":"18:45:00","Window":0,"Days":"SMTWTFS","Repeat":0,"Action":3}
Activation (globale) des Timers
Timers ON
RULE 1
Auto Switch OFF
Hardcoded Tasmota : RuleTimer1 (2400s)> Passage Eco + RuleTimer2 2400s > Off
HA en backup : 2500s
Trigger Modes
- Timer1 : PreHeat => Mode Confort
- Timer2 : Morning => Mode Confort
- Timer3 : Evening/Sport =>Mode Confort + disable MQTT switch sport-today
Timer1 : PreHeat Mode Confort Mem2 = 3
ON Clock#Timer=1
DO Mem2 3
ENDON
Timer2 : Morning Mode Confort Mem2 = 3
ON Clock#Timer=2
DO Mem2 3
ENDON
Timer3 : Evening/Sport Mode Confort + disable MQTT switch sport-today
ON Clock#Timer=3
DO Backlog
Mem2 3;
publish2 %mem1%%topic%/sport-today OFF
ENDON
RuleTimer1 terminé : passage en mode ECO avec Mem2 = 2
ON Rules#Timer=1
DO Mem2 2
ENDON
RuleTimer2 terminé : passage en mode ARRET avec Mem2 = 0
ON Rules#Timer=2
DO Mem2 0
ENDON
RULE 2
Activation des relais et des décomptes
OnBoot : refresh Mem2 (Mode) pour update HA
Mem2 = 0 : Arret
ON Mem2#state==0
DO backlog
POWER1 on;
POWER2 off;
RULETIMER1 0;
RULETIMER2 0
ENDON
Mem2 = 1 : Hors-Gel
ON Mem2#state==1
DO backlog
POWER1 off;
POWER2 on;
RULETIMER1 0;
RULETIMER2 0
ENDON
Mem2 = 2 : Eco
ON Mem2#state==2
DO backlog
POWER1 on;
POWER2 on;
RULETIMER1 0;
RULETIMER2 2400
ENDON
Mem2 = 3 : Confort
ON Mem2#state==3
DO backlog
POWER1 off;
POWER2 off;
RULETIMER1 2400;
RULETIMER2 0
ENDON
ON System#boot
DO Mem2
ENDON
Avec ces 2 règles le module est autonome.
Injection et Activation des règles dans Tasmota :
Rule1 "
Rule1 1
Rule1 ON Rules#Timer=1 DO Mem2 2 ENDON ON Rules#Timer=2 DO Mem2 0 ENDON ON Clock#Timer=1 DO Mem2 3 ENDON ON Clock#Timer=2 DO Mem2 3 ENDON ON Clock#Timer=3 DO Backlog Mem2 3; publish2 %mem1%%topic%/sport-today OFF ENDON
Rule2 "
Rule2 1
Rule2 ON Mem2#state==0 DO backlog POWER1 on; POWER2 off; RULETIMER1 0; RULETIMER2 0 ENDON ON Mem2#state==1 DO backlog POWER1 off; POWER2 on; RULETIMER1 0; RULETIMER2 0 ENDON ON Mem2#state==2 DO backlog POWER1 on; POWER2 on; RULETIMER1 0; RULETIMER2 2400 ENDON ON Mem2#state==3 DO backlog POWER1 off; POWER2 off; RULETIMER1 2400; RULETIMER2 0 ENDON ON System#boot DO Mem2 ENDON
Configuration HA
Passons maintenant à la configuration de HA.
De quoi avons-nous besoin ?
- 1x
MQTT Number
pour piloter les modes - 1x
Input Select
pour faire joli sur les DashBoard... - 1x
MQTT Switch
pour le mode sport today - Des
Binary
pour gérer les modes de présences (workday, vacances, teletravail, ...) - 1x
Sensor
de T° de la pièce pour le mode pre-heat de l'hiver - Une application modile déclarée et fonctionnelle
- 5x
automations
pour faire fonctionner tout ça - 1x
automation
pour couper tout ça (vacances !)
MQTT Number
Déclaration du MQTT Number qui se synchronise avec le retour de la commande Mem2
de Tasmota.
On surveille le topic RESULT
et on ne prends la valeur que lorsque celui-ci affiche Mem2
dans le JSON.
On limite les valeurs à [0-3]
- name: "Heater Sdb Mode"
state_topic: "home/tasmota/salledebain/stat/RESULT"
value_template: >
{% if value_json.Mem2 is defined %}
{{ value_json['Mem2'] |int(0) }}
{% else %}
{{ states('number.heater_sdb_mode') }}
{% endif %}
command_topic: "home/tasmota/salledebain/cmnd/Mem2"
min: 0
max: 3
availability_topic: "home/tasmota/salledebain/tele/LWT"
payload_available: "Online"
payload_not_available: "Offline"
retain: true
MQTT Switch
Switch virtual dans le broker MQTT.
Utile uniquement pour un affichage dans le DashBoard de HA.
Il permet de savoir si on a activé ou non la programmation du soir.
- name: "Sport Today"
state_topic: "home/tasmota/salledebain/sport-today"
command_topic: "home/tasmota/salledebain/sport-today"
payload_on: "ON"
payload_off: "OFF"
availability_topic: "home/tasmota/salledebain/tele/LWT"
payload_available: "Online"
payload_not_available: "Offline"
icon: "hass:karate"
retain: true
Binary Sensors
Libre à vous de définir vos binary pour gérer les scénarios.
Ici j'ai :
binary_sensor.workday
: Le WorkDay intégré à HAinput_boolean.nowork_day
: Un binary pour les jours de repasinput_boolean.homeoffice_day
: un binary pour les jours de TT
Input Select
heater_sdb:
name: 'Mode Chauffage'
options:
- 'Confort'
- 'Eco'
- 'Hors-Gel'
- 'Arrêt'
Les Automations :
Automation : Select Heater Mode
Cette automation permet de :
-
Synchroniser le
input_select
avec lenumber
pour toujours avoir HA et Tasmota dans le même mode -
Petite astuce pour éviter les boucles d'automation : la désactiver au début en la laissant terminer les actions, et la réactiver à la fin !
-
Trigger :
input_select
ounumber
-
Action : send MQTT Number to Tasmota (MQTT sonoff dual)
- alias: '[SDB] [HEATER] Select HeatMode'
id: 92616569-60f5-48e1-a3df-90aae08f6b3e
initial_state: true
trigger:
- platform: state
entity_id: input_select.heater_sdb
id: "input"
- platform: state
entity_id: number.heater_sdb_mode
id: "number"
variables:
id_mode: >
{% set heater_mode_list = {
'Arrêt':'0',
'Hors-Gel':'1',
'Eco':'2',
'Confort':'3',
}
%}
{{ heater_mode_list[states('input_select.heater_sdb')] if states("input_select.heater_sdb") in heater_mode_list.keys() else 'error' }}
select_mode: >
{% set heater_mode_list = {
'0':'Arrêt',
'1':'Hors-Gel',
'2':'Eco',
'3':'Confort',
}
%}
{{ heater_mode_list[states('number.heater_sdb_mode')] if states("number.heater_sdb_mode") in heater_mode_list.keys() else 'error' }}
action:
# Avoid loop : disable this automation.
- service: automation.turn_off
target:
entity_id: automation.sdb_heater_select_heatmode
data:
stop_actions: false
- choose:
# Sync Number from Select
- conditions:
- condition: trigger
id: "input"
sequence:
- service: number.set_value
target:
entity_id: number.heater_sdb_mode
data:
value: "{{ id_mode }}"
# Sync Select from Number
- conditions:
- condition: trigger
id: "number"
sequence:
- service: input_select.select_option
target:
entity_id: input_select.heater_sdb
data:
option: "{{ select_mode }}"
# Avoid loop : Enable this automation
- service: automation.turn_on
target:
entity_id: automation.sdb_heater_select_heatmode
Automation : Arrêt chauffage auto
Cette automation est un garde-fou si on a mouflé dans la conf Tasmota.
- Trigger : Mode Confort/Eco pdt 45 min (si Tasmota
RuleTimer
40min fail) - Action : Change Mode Confort -> Eco -> Arret
Normalement, cette automation n'est jamais lancé car les RuleTimers
de Tasmota changent les modes au bout de 40min.
- alias: '[SDB] [HEATER] Stop Auto'
id: 613ea8b7-dc23-4a0e-a696-ffaf5e15d4d8
initial_state: true
trigger:
- platform: state
entity_id: sensor.heater_sdb_status
to:
- 'Confort'
- 'Eco'
for:
minutes: 45
action:
- choose:
- conditions:
# Mode Confort depuis 45min : Mode Eco
- "{{ is_state('sensor.heater_sdb_status', 'Confort') }}"
sequence:
- service: input_select.select_option
target:
entity_id: input_select.heater_sdb
data:
option: 'Eco'
# Mode Eco depuis 45min : Mode Arret
- conditions:
- "{{ is_state('sensor.heater_sdb_status', 'Eco') }}"
sequence:
- service: input_select.select_option
target:
entity_id: input_select.heater_sdb
data:
option: 'Arrêt'
Automation : Programmation plages de chauffe
CONFORT
- 5h00 Workday ON et NoWork Day OFF et T° <20°C
- 6h15 Workday ON et NoWork Day OFF et Home Office Day OFF
- 6h45 Workday ON et NoWork Day OFF et Home Office Day ON
- 8h45 NoWork Day OFF et Sat
- 9h45 NoWork Day ON ou Sun
- 18h45 Sunday
- 6h05 Si il y a un loupé dans l'algo
Trigger :
binary_sensor.workday
input_boolean.nowork_day
input_boolean.homeoffice_day
- 4h00 au cas où...
Tasmota :
Timer1
: PreHeat MatinTimer2
: MatinTimer3
: Soir
Actions :
- Activer/Désactiver et régler Heure de
Timer1
,Timer2
etTimer3
- Notify MobileApp pour supervision
- alias: '[SDB] [Prog] Regular'
id: c6731b24-0d19-4ec5-975a-8ff080e35004
initial_state: true
trigger:
# Changement de jour/mode
- platform: state
entity_id:
- binary_sensor.workday
- input_boolean.nowork_day
- input_boolean.homeoffice_day
to:
- 'on'
- 'off'
# 4h00 au cas où fail au dessus
- platform: time
at:
- '04:00:00'
condition: []
variables:
morning_start_time: >
{# CONFORT 6h15 si WorkDay #}
{% if is_state('binary_sensor.workday', 'on') and is_state('input_boolean.nowork_day', 'off') and is_state('input_boolean.homeoffice_day', 'off') %}
06:15
{# CONFORT 6h45 si WorkDay HomeOffice #}
{% elif is_state('binary_sensor.workday', 'on') and is_state('input_boolean.nowork_day', 'off') and is_state('input_boolean.homeoffice_day', 'on') %}
06:45
{# CONFORT 8h45 si Saturday et NoWorkDay #}
{% elif is_state('binary_sensor.workday', 'off') and is_state('input_boolean.nowork_day', 'off') and (now().strftime('%A') == 'Saturday') %}
08:45
{# CONFORT 9h45 si NoWorkDay ou Sunday #}
{% elif is_state('input_boolean.nowork_day', 'on') or (now().strftime('%A') == 'Sunday') %}
09:45
{# CONFORT 6h05 si j'ai loupé qqc #}
{% else %}
06:05
{% endif %}
action:
#
# PreHeat
- choose:
#
# CONFORT 5h35 si WorkDay et T° < 20°C
- conditions:
- "{{ is_state('binary_sensor.workday', 'on') }}"
- "{{ is_state('input_boolean.nowork_day', 'off') }}"
- "{{ states('sensor.sdb_temperature_mean')|int(0) < 20 }}"
sequence:
# Mode Confort (OFF,OFF)
# Timer1 1 / Action 3 (rule)
- service: mqtt.publish
data:
topic: 'home/tasmota/salledebain/cmnd/Timer1'
payload_template: '{"Enable":1,"Mode":0,"Time":"05:35:00","Window":0,"Days":"SMTWTFS","Repeat":0,"Action":3}'
retain: false
# Notify Mobile App
- service: notify.mobile_app_mobile
data:
title: "Chauffage Salle de Bain"
message: "Activation PreHeat"
data:
subject: "Mode Confort : 05h35"
channel: "Salle de Bain"
tag: "sdb-prog-preheat"
#
# Evening
- choose:
#
# CONFORT 18h45 Sunday
- conditions:
- "{{ (now().strftime('%A') == 'Sunday') }}"
sequence:
# Mode Confort (OFF,OFF)
# Timer3 1 / Action 3 (rule)
- service: mqtt.publish
data:
topic: 'home/tasmota/salledebain/cmnd/Timer3'
payload_template: '{"Enable":1,"Mode":0,"Time":"18:45:00","Window":0,"Days":"S000000","Repeat":0,"Action":3}'
retain: false
# Notify Mobile App
- service: notify.mobile_app_mobile
data:
title: "Chauffage Salle de Bain"
message: "Activation Evening"
data:
subject: "Mode Confort : 18h45"
channel: "Salle de Bain"
tag: "sdb-prog-evening"
#
# Morning Every Trigger
# Mode Confort (OFF,OFF)
# Timer2 1 / Action 3 (rule)
# Si on veut activer la répétition permanente de ce Timer dans Tasmota => Mode : 1
- service: mqtt.publish
data:
topic: 'home/tasmota/salledebain/cmnd/Timer2'
payload_template: '{"Enable":1,"Mode":0,"Time":"{{ morning_start_time }}","Window":0,"Days":"SMTWTFS","Repeat":0,"Action":3}'
retain: false
# Notify Mobile App
- service: notify.mobile_app_mobile
data:
title: "Chauffage Salle de Bain"
message: "Reconfiguration Morning"
data:
subject: "Mode Confort : {{ morning_start_time }}"
channel: "Salle de Bain"
tag: "sdb-prog-morning"
Automation : Activer le mode CONFORT le soir
Trigger :
input_boolean
mobile_app
Actions :
- Reconfiguration Tasmota
Timers
- Activation
input_boolean
- alias: '[SDB] [Prog] Sport Today'
id: f38b2765-5387-4570-8e32-631d488f146b
initial_state: true
mode: restart
trigger:
- platform: state
entity_id: switch.sport_today
from:
- 'on'
- 'off'
to:
- 'on'
- 'off'
# Quand reboot : unavailable et flood...
id: "switch"
- platform: event
event_type: mobile_app_notification_action
event_data:
action: mode_sport_on
id: "mobile_app"
- platform: event
event_type: mobile_app_notification_action
event_data:
action: mode_sport_off
id: "mobile_app"
condition: []
variables:
timer_status: >
{% if is_state("switch.sport_today", "on") %}
1
{% else %}
0
{% endif %}
action:
- choose:
# Switch Trigger => Programmation + Notify MobileApp
- conditions:
- condition: trigger
id: "switch"
sequence:
# Mode Confort (OFF,OFF)
# Timer3 1 / Action 3 (rule)
- service: mqtt.publish
data:
topic: 'home/tasmota/salledebain/cmnd/Timer3'
payload_template: '{"Enable":{{ timer_status }},"Mode":0,"Time":"20:00:00","Window":0,"Days":"SMTWTFS","Repeat":0,"Action":3}'
retain: false
# Notify Mobile App
- service: notify.mobile_app_mobile
data:
title: "Salle de Bain"
message: "Programmation Chauffage Soir {{ states('switch.sport_today')|replace('off', 'désactivée')|replace('on', 'activée') }}"
data:
channel: Salle de Bain
tag: "sdb-prog-sport"
# MobileApp Trigger => Programmation (via switch sport_today)
- conditions:
- condition: trigger
id: "mobile_app"
sequence:
- service_template: >
{% if trigger.event.data.action == 'mode_sport_on' %}
switch.turn_on
{% elif trigger.event.data.action == 'mode_sport_off' %}
switch.turn_off
{% endif %}
data:
entity_id: switch.sport_today
Automation : Envoie des notifs sur l'application
Trigger :
Time
Et c'est tout ^^
Cette configuration tourne depuis un peu moins d'un mois et je n'ai pas rencontré de bug.
Le module est autonome grace à Tasmota pour lancer le chauffage (pas de soucis en cas de reboot ou panne de HA).
HA permet d'apporter tout le confort d'utilisation.
Petite exemple de ce qu'il se passe à la fin du mode ECO :
(oui, ce module est aussi équipé d'un DHT22 pour avoir T° et humidité)
11:03:35.110 MQT: home/tasmota/salledebain/tele/SENSOR = {"Time":"2022-10-02T11:03:35","AM2301":{"Temperature":21.5,"Humidity":79,"DewPoint":17.6},"TempUnit":"C"} (retained)
11:04:35.147 MQT: home/tasmota/salledebain/tele/STATE = {"Time":"2022-10-02T11:04:35","Uptime":"9T02:32:28","UptimeSec":786748,"Heap":24,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":9,"POWER1":"ON","POWER2":"ON","Wifi":{"AP":1,"SSId":"home-iot","BSSId":"58:59:C2:A2:20:12","Channel":6,"Mode":"11n","RSSI":62,"Signal":-69,"LinkCount":9,"Downtime":"0T00:00:57"}}
11:04:35.166 MQT: home/tasmota/salledebain/tele/SENSOR = {"Time":"2022-10-02T11:04:35","AM2301":{"Temperature":21.5,"Humidity":79,"DewPoint":17.7},"TempUnit":"C"} (retained)
11:05:02.108 RUL: RULES#TIMER=2 performs "Mem2 0"
11:05:02.119 MQT: home/tasmota/salledebain/stat/RESULT = {"Mem2":"0"}
11:05:02.171 RUL: MEM2#STATE==0 performs "backlog POWER1 on; POWER2 off; RULETIMER1 0; RULETIMER2 0"
11:05:02.220 MQT: home/tasmota/salledebain/stat/RESULT = {"POWER1":"ON"}
11:05:02.223 MQT: home/tasmota/salledebain/stat/POWER1 = ON (retained)
11:05:02.426 MQT: home/tasmota/salledebain/stat/RESULT = {"POWER2":"OFF"}
11:05:02.430 MQT: home/tasmota/salledebain/stat/POWER2 = OFF (retained)
11:05:02.678 MQT: home/tasmota/salledebain/stat/RESULT = {"T1":0,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
11:05:02.901 MQT: home/tasmota/salledebain/stat/RESULT = {"T1":0,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
11:05:35.094 MQT: home/tasmota/salledebain/tele/STATE = {"Time":"2022-10-02T11:05:35","Uptime":"9T02:33:28","UptimeSec":786808,"Heap":24,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":9,"POWER1":"ON","POWER2":"OFF","Wifi":{"AP":1,"SSId":"home-iot","BSSId":"AA:BB:CC:A2:20:12","Channel":6,"Mode":"11n","RSSI":62,"Signal":-69,"LinkCount":9,"Downtime":"0T00:00:57"}}
11:05:35.106 MQT: home/tasmota/salledebain/tele/SENSOR = {"Time":"2022-10-02T11:05:35","AM2301":{"Temperature":21.5,"Humidity":79,"DewPoint":17.7},"TempUnit":"C"} (retained)