Bonjour,
Pour ceux qui voudrais alimenter leur Denky sur batterie et qui tomberait sur ces échanges, je vous propose ci dessous une config ESPHome qui permet de faire fonctionner le Denky avec HomeAssistant et qui fait des cycles 1 minute en activité / 4 minutes en veille/deepsleep.
Il est certainement possible de faire pareil avec le firmware tasmota qui vient avec le Denky mais si j'ai bien trouvé comment configurer le temps ou il reste en deepsleep (commande DeepSleepTime) je n'ai pas compris par quelle mécanique l'esp décide de passer en deepsleep (ne voulant pas utiliser MQTT, donc tasmota, je n'ai surtout ni cherché ni testé)
Quelques information avant de passer à la configuration.
En fonctionnement j'ai mesuré une consommation de 0.14 à 0.16Ah (140 à 160mAh). En deepsleep 0.00Ah, la valeur réel n'est forcement pas 0 mais mon appareil de mesure n'est pas assez précis pour mesurer le faible courant en deepsleep.
Avec une batterie externe de 4000mAh, sans deepsleep l'esp va donc tenir ~ 4000 / 150 = 26h
J'ai pu vérifié en pratique ce calcul théorique.
En extrapolant, avec une batterie de 20'000 mAh (courant de nos jours) on monte a 5 jours et demi. Si vous etes en deepsleep 4/5 du temps, ca donne 27 jours. A vous d'ajuster le curseur entre fréquence d'actualisation des données et fréquence de recharge de la batterie..
Attention tout de même entre la théorie et la pratique :
- La consommation en deepsleep n'est pas nul ce qui va rogner à la marge la durée de vie de la batterie.
- Dans la configuration ci dessous, le mode deep sleep ne s'active pas tant que l'ESP n'est pas connecté au Wifi. Si comme chez moi votre wifi capte mal, au lieu de rester actif 60s toutes les 4m, il va rester plus longtemps ce qui va diminuer la durée de vie pratique de la batterie. Si votre priorité est la durée de la batterie quitte à rater des mesure, il est possible d'enclencher le deepsleep même si le wifi n'as pas connecté. Pour cela reitrer
priority: 250
dans on_boot:
, voir https://esphome.io/components/esphome.html#on-boot
La configuration ESPHome ci dessous permet de désactiver le deepsleep depuis un "toogle" HomeAssistant.
Il y a plusieurs intérêts à pouvoir faire ca:
- Couper le deepleep pour avoir assez de temps pour faire une mise à jour OTA.
- Avoir temporairement une actualisation plus rapide des données
Il faut donc commencer par créer le toogle pour cela sur HomeAssistant allez dans Settings -> Devices & Services -> Helpers (en haut) -> Create Helper (en bas). Choisissez Toogle en bas de la liste, donner lui comme nom disable_sleep_on_teleinfo
. Par défaut il sera sur off (donc deepsleep actif), si vous le passez à on
le deepsleep se desactivera tant qu'il ne repasse pas a Off
Pourquoi un choix de run_duration a 1 minutes ? C'est assez conservateur, l'ESP met au moins 35s a se connecter au Wifi et avec la configuration ci dessous il ne passera de toute facon pas en deepsleep avant d'être connecté. Vous pouvez probablement baisser a 45s, il faudra pas contre changer update_interval: 20s
par une frequence plus rapide, probablement 5s à 10s.
La configuration est adapté à un compteur en tarif BASE et en mode Historique.
Si vous etes en mode Standard il faut passer baud_rate: 1200
à 9600 et historical_mode: true
a false.d
Si vous etes en HP/HC il faudra ajouter des sensors pour récupérer HCHC et HCHP.
Il y a deux sensors pour PAPP
pour renvoyer la valeur en VA et en W. J'ai lu HomeAssistant ne traite pas pareil l'historisation des valeurs en VA et W.
La configuration permet une integration direct dans le dashboard Energy de HomeAssistant
Voici donc une configuration ESPHome
esphome:
name: teleinfo
friendly_name: Teleinfo
project:
name: my.teleinfo
version: "1.0"
on_boot:
priority: 250 # Do not enter deep sleep before Wifi is on | https://esphome.io/components/esphome.html#on-boot
then:
- script.execute: should_deep_sleep
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
deep_sleep:
run_duration: 1min
sleep_duration: 4min
id: deep_sleep_control
script:
- id: should_deep_sleep
mode: queued
then:
- delay: 10s # Safe guard
- if:
condition:
binary_sensor.is_on: disable_deep_sleep
then:
- logger.log: 'Prevent deep_sleep'
- deep_sleep.prevent: deep_sleep_control
else:
- logger.log: 'Deep_sleep enabled'
- deep_sleep.enter: deep_sleep_control
binary_sensor:
platform: homeassistant
id: disable_deep_sleep
entity_id: input_boolean.disable_sleep_on_teleinfo
on_press:
then:
- logger.log: "Prevent deep sleep ON"
- deep_sleep.prevent: deep_sleep_control
on_release:
then:
- logger.log: "Prevent deep sleep OFF"
- deep_sleep.enter: deep_sleep_control
web_server:
port: 80
include_internal: true
esp32:
board: denky_d4
uart:
rx_pin: GPIO8
baud_rate: 1200 # 1200 for Historical Mode, 9600 for Standard Mode
parity: EVEN
data_bits: 7
stop_bits: 1
teleinfo:
update_interval: 20s
historical_mode: true
sensor:
- platform: teleinfo
tag_name: "BASE"
name: "BASE"
unit_of_measurement: "Wh"
icon: mdi:flash
device_class: "energy"
state_class: "total"
- platform: teleinfo
tag_name: "PAPP"
name: "PAPP"
unit_of_measurement: "VA"
state_class: "measurement"
device_class: "apparent_power"
icon: mdi:flash
- platform: teleinfo
tag_name: "PAPP"
name: "POWER"
state_class: measurement
unit_of_measurement: W
device_class: power
icon: mdi:flash
- platform: teleinfo
tag_name: "IINST"
name: "IINST"
unit_of_measurement: "A"
icon: mdi:flash
state_class: "measurement"
device_class: "current"
text_sensor:
- platform: teleinfo
tag_name: "OPTARIF"
name: "OPTARIF"
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: !secret api_password
ota:
password: !secret ota_password