Bonjour à tous…
Je vous partage ici une astuce qui permet de connaître le temps d’allumage d’un appareil. Que ce soit une prise connectée, une lumière, etc…
C’est idiot, mais certaines prises vous remontent la puissance, le voltage, mais pas la durée d’allumage.
Je souhaitais cela à la base pour calculer le temps de chauffage de mon thermostat Netatmo.
Mais c’est compliqué du fait de ses modes internes… Je n’abandonne pas, et cela peut marcher avec d’autres marques de thermostat, mais Netatmo est mal foutu sur le sujet. Bref…
Ducoup j’ai utilisé ceci pour avoir le temps d’allumage des prises wifi et zigbee de la salle de jeux des gosses par exemple. Sur laquelle sont branchés ordis et consoles.
Comme j’ai pu le faire pour calculer le temps d’allumage de la TV, à la journée, hier, semaine ou mois.
C’est drôle, mais cela a bien fait réagir les gosses qui ne s’attendaient pas à un tel résultat
Donc, voici ce qu’on obtient :
Pour arriver à cela, on va devoir créer des templates et des sensors.
Pour mon exemple, les templates !
template:
sensor:
temps_pm_today:
device_class: duration
value_template: "{% set hours = states('sensor.temps_allumage_pm_today') | float %}
{% set minutes = ((hours % 1) * 60) | int %}
{{ '%02ih %02im'%(hours // 1, minutes) }}"
friendly_name: temps_pm_today
unique_id: "temps_pm_today"
temps__pm_hier:
device_class: duration
value_template: "{% set hours = states('sensor.temps_allumage_pm_hier') | float %}
{% set minutes = ((hours % 1) * 60) | int %}
{{ '%02ih %02im'%(hours // 1, minutes) }}"
friendly_name: temps_pm_hier
unique_id: "temps_pm_hier"
temps__pm7_semaine:
device_class: duration
value_template: "{% set hours = states('sensor.temps_allumage_pm_semaine') | float %}
{% set minutes = ((hours % 1) * 60) | int %}
{{ '%02ih %02im'%(hours // 1, minutes) }}"
friendly_name: temps_pm_semaine
unique_id: "temps_pm_semaine"
temps__pm_mois:
device_class: duration
value_template: "{% set hours = states('sensor.temps_allumage_pm_mois') | float %}
{% set minutes = ((hours % 1) * 60) | int %}
{{ '%02ih %02im'%(hours // 1, minutes) }}"
friendly_name: temps_pm_mois
unique_id: "ttemps_pm_mois"
Et les sensors correspondant :
- platform: history_stats
name: temps_allumage_pm_today
entity_id: light.socket_1
state: 'on'
type: time
start: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
end: "{{ now() }}"
- platform: history_stats
name: temps_allumage_pm_hier
entity_id: light.socket_1
state: 'on'
type: time
end: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
duration:
hours: 24
- platform: history_stats
name: temps_allumage_pm_semaine
entity_id: light.socket_1
state: 'on'
type: time
start: "{{ as_timestamp( now().replace(hour=0, minute=0, second=0, microsecond=0) ) - now().weekday() * 86400 }}"
end: "{{ now() }}"
- platform: history_stats
name: temps_allumage_pm_mois
entity_id: light.socket_1
state: 'on'
type: time
start: "{{ now().replace(day=1, hour=0, minute=0, second=0, microsecond=0 ) }}"
end: "{{ now() }}"
Remplacez évidemment le entity ID dans le sensor, par celui dont vous souhaitez mesurer le temps.
Et ce qui est primordial, c’est que le nom de l’entité dans le value_template du template, soit le même que le name du sensor.
Une fois ces fichiers modifiés, soit directement dans votre configuration.yaml, soit comme moi, sur des fichiers templates et sensors.yaml dédiés, passez par les outils de développement pour vérifier la configuration.
Cela permet de vérifier que vous n’avez pas d’erreur dans le code.
Si tout est ok, redémarrer HA pour prendre en compte les modifs;
Une fois redémarré, vous verrez apparaitre vos nouveaux sensors dans l’onglet statistiques des outils de développement. C’est pour cela qu’on utilise dans les sensors, le platform: history_stats.
Ben après, vous n’avez plus qu’à les intégrer comme bon vous semble. En entité, en graph, ou la carte que vous souhaitez.
A noter que vous calculez ici la durée d’un état. Moi j’ai le state ‹ on ›, mais à contrario, vous pouvez calculer une durée d’extinction avec un state ‹ off ›.
Et cela fonctionne sur tous les états de votre entité. Et pour connaître les états possibles, il faut vous rendre sur les outils de développement de HA, et aller dans « Etats ». Et vous verrez les états possible de votre appareil.
Si on gère une fonction de présence à la maison, on peut par exemple calculer la durée d’absence ou de présence d’une personne : state: "home’ ou state: ‹ not_home ›…
Après, laissez libre court à votre imagination
Si vous souhaitez calculer sur des durées différentes, référez vous à History Stats - Home Assistant
En espérant que cela vous plaira :).
Syl20