Dans le fichier configuration.yaml, pas besoin de créer le fichier, il sera créé par HA (si il a les droits Unix pour le faire)
Bonjour @roumano ,
Bon ben je reviens vers toi et ton expertise dans ke domaine car je n’ai toujours pas trouvé la solution et j’espère que tu seras en mesure de m’aider.
Comme tu peux le voir la calibration du power cycle fonctionne bien. Pour en être certain j’ai également ajouté un calibrate une fois la machine terminée…la remise à zéro fonctionne mais l’utility meter m’indique toujours le cumul global de toutes les machines effectuées. Du coup je tourne en rond.
je poste ici mon code des fois qu’une coquille y serait insérée…
pour l’utility_meter
utility_meter:
# données utiles pour envoy
daily_energy_import:
source: sensor.energy_imported_wh
cycle: daily
daily_energy_export:
source: sensor.energy_exported_wh
cycle: daily
# calcul Pluie hebdomadaire, mensuelle et annuelle
rain_week:
source: sensor.rainfall_today
cycle: weekly
rain_month:
source: sensor.rainfall_today
cycle: monthly
rain_year:
source: sensor.rainfall_today
cycle: yearly
lave_linge_power_cycle:
source: sensor.konyks_1_power
cycle: daily
periodically_resetting: true
pour les input: machine en cours de type interrupteur
pour les automatismes,
alias: Machine à laver en cours
description: >-
détecte la modification de puissance sur la prise machine à laver , passe
l'interrupteur de off à on et notifie le oneplus 8t du début de la machine
trigger:
- type: power
platform: device
device_id: 2089a00f0cdef9bdf19ecf1f5d7e6e51
entity_id: sensor.konyks_1_power
domain: sensor
above: 1
condition:
- condition: state
entity_id: input_boolean.machine_en_cours
state: "off"
action:
- service: utility_meter.calibrate
data:
value: "0"
target:
entity_id: sensor.lave_linge_power_cycle
- service: input_boolean.turn_on
data: {}
target:
entity_id: input_boolean.machine_en_cours
- service: notify.mobile_app_kb2003
data:
title: 📢 Machine
message: La machine à laver est en cours
- service: notify.mobile_app_ne2213
data:
message: La machine à laver est en cours
title: 📢 Machine
mode: single
pour la fin de la machine
alias: machine à laver terminée
description: >-
si puissance descend en dessous de 20w et machine en cours sur on , alors fin
de la machine. notifications sur les deux téléphones
trigger:
- type: power
platform: device
device_id: 2089a00f0cdef9bdf19ecf1f5d7e6e51
entity_id: sensor.konyks_1_power
domain: sensor
below: 3
for:
hours: 0
minutes: 3
seconds: 0
condition:
- condition: state
entity_id: input_boolean.machine_en_cours
state: "on"
action:
- service: input_boolean.turn_off
data: {}
target:
entity_id: input_boolean.machine_en_cours
- service: notify.mobile_app_kb2003
data:
message: >-
La machine à laver est terminée. Le cycle s'est déroulé de
{{
((state_attr('automation.machine_a_laver_en_cours','last_triggered'))
| as_local).strftime("%Hh%M") }} à {{
((state_attr('automation.fin_machine_a_laver','last_triggered')) |
as_local).strftime("%Hh%M") }}. Soit une durée de {{ ((
(state_attr('automation.fin_machine_a_laver','last_triggered')) -
(state_attr('automation.machine_a_laver_en_cours','last_triggered'))).seconds
/ 3600 )| int }}h{{
((((state_attr('automation.fin_machine_a_laver','last_triggered'))
-
(state_attr('automation.machine_a_laver_en_cours','last_triggered'))).seconds
% 3600 )/60 )| round }}mn. Le cycle à consommé
{{ states(''sensor.lave_linge_power_cycle'') }}Wh\n
title: 💥 Machine à étendre..
- service: notify.mobile_app_ne2213
data:
message: >-
La machine à laver est terminée. Le cycle s'est déroulé de
{{
((state_attr('automation.machine_a_laver_en_cours','last_triggered'))
| as_local).strftime("%Hh%M") }} à {{
((state_attr('automation.fin_machine_a_laver','last_triggered')) |
as_local).strftime("%Hh%M") }}. Soit une durée de {{ ((
(state_attr('automation.fin_machine_a_laver','last_triggered')) -
(state_attr('automation.machine_a_laver_en_cours','last_triggered'))).seconds
/ 3600 )| int }}h{{
((((state_attr('automation.fin_machine_a_laver','last_triggered'))
-
(state_attr('automation.machine_a_laver_en_cours','last_triggered'))).seconds
% 3600 )/60 )| round }}mn. Le cycle à consommé
{{ states(''sensor.lave_linge_power_cycle'') }}Wh\n
title: 💥 Machine à étendre..
- service: notify.mobile_app_kb2003
data:
data:
ttl: 0
priority: high
media_stream: alarm_stream_max
tts_text: >-
Attention Philippe, la machine à laver est à étendre. Le cycle
s'est déroulé de {{
((state_attr('automation.machine_a_laver_en_cours','last_triggered'))
| as_local).strftime("%Hh%M") }} à {{
((state_attr('automation.fin_machine_a_laver','last_triggered')) |
as_local).strftime("%Hh%M") }}. Soit une durée de {{ ((
(state_attr('automation.fin_machine_a_laver','last_triggered')) -
(state_attr('automation.machine_a_laver_en_cours','last_triggered'))).seconds
/ 3600 )| int }}h{{
((((state_attr('automation.fin_machine_a_laver','last_triggered')) -
(state_attr('automation.machine_a_laver_en_cours','last_triggered'))).seconds
% 3600 )/60 )| round }}mn. Le cycle à consommé
{{ states(''sensor.lave_linge_power_cycle'') }}Wh\n
message: TTS
- service: utility_meter.calibrate
data:
value: "0"
target:
entity_id: sensor.lave_linge_power_cycle
mode: single
Merci de ton aide.
Tu les places où les sensors ?
Un fichier plateform.yaml ou history.yaml ???
A vérifier, mais je pense que le souci est là : source: sensor.konyks_1_power
Tu devrais avoir un autre sensor pour ton konyks, mais de type energy, comme tes autres sensors de l’ utility meter.
Bonjour syl2042, bravo pour ta proposition.
Pour moi il me reste encore à ce que HA prenne en compte le fichier que j’ai créé sensors.yaml dans le directory de configuration.yaml,
Comment as-tu fait ?
Voici mon configuration.yaml à qui j’ai ajouté:
template: !include templates.yaml
homeassistant:
# KNX IP Interface ABB IP Router IPR/S
packages: !include_dir_named knxfiles
# Loads default set of integrations. Do not remove.
default_config:
# Load frontend themes from the themes folder
frontend:
themes: !include_dir_merge_named themes
# Text to speech
tts:
- platform: google_translate
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
camera: !include cameras.yaml
template: !include templates.yaml
Mais si j’ajoute = erreur de configuration
sensor: !include sensors.yaml
J’ai résolu mon problème après avoir trouvé et lu:
Répartir le fichier configuration.yaml en plusieurs fichiers
Bonne journée…
Bonjour @roumano
Très joli travail bravo
j’ai quelques questions pour bien comprendre ce qui est partagé.
Ton input_boolean.lave_vaisselle_cycle
est une entrée que tu as réalisé c’est pas un sensor d’une prise ou autre ? Une entrée pour bien matérialiser que le cycle est ON ou OFF en somme ?
Donc sur le Start
Tu regardes si le cylce est bien OFF, tu mets à 0 l’utility meter et tu mets à ON le cycle
Sur l’automation Fin ?
Tu regardes si le cycle est bien ON, tu lances la notification et tu passes le cycle à OFF
C’est bien ça ?
Le reste les calculs etc… se font dans la partie message des notifications ou bien entendu on adapte le sensor des coûts par exemple ou autres
Si j’ai bien compris la philosophie je vais regarder pour associer à ceci un compteur de cycle mensuel ou annuel, voir même cumuler les infos de cette notification pour voir l’usage global par mois ou année !
Merci encore une fois pour ce partage
Oui tu a bien compris.
J’ai étais obliger de créé ce bolean car les lave vaisselle fonctionne par cycle et pendant un long moment console pas mais n’ont pas fini leurs cycles.
A l’époque où j’étais sur Jeedom, j’avais un scénario pour la mise ne route qui regardait sur Puissance > x W puis 120 secondes plus si la Puissance > x W toujours alors c’est que la machine est bien démarrée.
De cette manière, on évite le ON/OFF par erreur entre autre
et pour le le scénario de OFF j’attendais 60 secondes pour affirmer que la machine est terminée
Je mettais un sleep dans le scénario
PS :
je viens de faire un vague de test pour faire un message embed discord (avec les infos sensor dedans) : un échec pour ce soir
Par contre dans le fichier csv il y a un hic il y 7h60m ! et un 8h2m au lieu de 8h02 pas méchant celui ci je pense mais pas encore regardé
Ton scénario ne fonctionne pas avec mon lave-vaisselle :
en fin de cycle, pendant le séchage, celui-ci consomme presque rien mais n’a pas fini.
Sur le graph ci-joint, mon cycle est vraiment fini a 16h19 (le tout petit pique d’environ 20watt pendant moins d’une minutes ) et non 15h08 comme l’aurais indiquer ton Jeedom scénario :
Bizarre, moi j’ai un résultat différent mais pas forcement mieux :
07/04/2023 ; 14h19 ; 17h19 ; 3h0m ; 948Wh ; 0.14€ ;
Idéalement, il faudrait écrire 3h
et non 3h0m
…
Par contre changer ça, c’est un peut la galère et pas facile , … ( le code incriminé est {{ ((((state_attr('automation.lave_vaisselle_fin','last_triggered')) - (state_attr('automation.lave_vaisselle_start','last_triggered'))).seconds % 3600 )/60 )| round }}m
il faudrait y rajouter un test, si c’est 60
ou 0
, ne rien mettre (même pas le m
)
Tu pense qu’il faudrait écrire 8h02
et non 8h2m
? ( si oui, il doit y avoir une fonction python pour que le nombre soit forcement sur 2 chiffres mais je connais pas.
Sinon, peut-être qu’on peut demander une évolution sur easy-time ( nouvelle fonctionne de macro ) pour permettre d’afficher « joliment » des différences de temps :
GitHub - Petro31/easy-time-jinja: Easy Time calculations for Home Assistant templates
Oui oui je comprends bien la difficulté, je partageais déjà le soucis vu sur les tests
J’ai un vrai cycle aujourd’hui sur mon lave vaisselles on verra ce que cela donne
J’ai pas encore pris le temps de regarder le sujet macro sur le temps les évolutions vont plus vite que moi
Mais oui dans l’idéal il faudrait écrire sur 2 digit c’est plus propre je trouve et autorisé aussi le 36hxx pas pour la machine à laver mais pour d’autres usages sur temps long sur deux journées plus !!
Les calculs sur dates et times sont pénibles c’est clair mais c’est la base
J’ai trouver comment faire (et rendre le code également un peut plus lisible également)
au début, il faut rajouter ça :
{%- set time = ((state_attr('automation.lave_linge_fin','last_triggered')) - (state_attr('automation.lave_linge_start','last_triggered'))).seconds -%}
{%- set minutes = ((time % 3600) / 60) | round | int -%}
{%- set hours = ((time % 86400) / 3600) | int -%}
Du coup, on peut remplacer ce gros pâter
{{ (((state_attr(''automation.lave_vaisselle_fin'',''last_triggered''))
- (state_attr(''automation.lave_vaisselle_start'', ''last_triggered''))).seconds
/ 3600 )| int }}h{{ ((((state_attr(''automation.lave_vaisselle_fin'',''last_triggered''))
- (state_attr(''automation.lave_vaisselle_start'',''last_triggered''))).seconds
% 3600 )/60 )| round }}m
par
{{ '{:01}h{:02}m'.format(hours, minutes) }}
Top ça pas certain de mettre en route to day mais je regarde
@roumano , super simplification. Je vais essayer aussi.
Lorsque tu dis « au début, il faut rajouter ça : », tu parles du début des actions de l’automatisation des notifications je présume. Correct?
De mon côté, je galère pour la mise en forme des notifications. Le formatage du Yaml pour arriver à générer des retours à la ligne est loin d’être évident, malgré la lecture de multiples threads sur les options de formatage de texte.
Je vais bien finir par y arriver, mais à chaue fois il faut attendre de lancer un lave-vaisselle pour tester
Au début de la notification, comme ça :
service: notify.lave_vaisselle
data:
message: >
{%- set time =
((state_attr('automation.lave_vaisselle_fin','last_triggered')) -
(state_attr('automation.lave_vaisselle_start','last_triggered'))).seconds
-%} {%- set minutes = ((time % 3600) / 60) | round | int -%} {%- set hours =
((time % 86400) / 3600) | int -%} {{ now().strftime("%d/%m/%Y") }} ; {{
((state_attr('automation.lave_vaisselle_start','last_triggered')) |
as_local).strftime("%Hh%M") }} ; {{
(state_attr('automation.lave_vaisselle_fin','last_triggered')|
as_local).strftime("%Hh%M") }} ; {{ '{:01}h{:02}m'.format(hours, minutes) }}
; {{ states('sensor.lave_vaisselle_power_cycle') | round }}Wh ; {{
(states('sensor.lave_vaisselle_power_cycle') | float(default=0) *
(states('sensor.edf_tempo_current_cost')| float(default=0)) /1000) |
round(2) }}€ ;
Tu peut lancer manuellement l’automatisation, …
Bonsoir
Sans avoir vraiment eu le temps de regarder je viens de copier coller à l’instant le dernier bout de code en changeant avec mes sensors et j’ai ce retour
Error: Error rendering data template: TypeError: unsupported operand type(s) for -: 'NoneType' and 'datetime.datetime'
EDIT :
Une erreur sur le nom de mon automation !!
Un sujet ICC encore une fois
Voici une adaptation de la notification
En fait 2 en une soit en texte soit en fields via l’automation HA
Avec les images ça passe sur smartphone ?
Tu peut partager ton code?
Merci et bon boulot, ça présente bien
Oui oui je peux partager mais j’étais pas en posture de pouvoir le faire (ipad et métro au moment du screen)
Dès que je suis sur le PC je partage le code sans soucis.
Sur téléphone c’est plus ramassé mais les images passe il faut les avoir sur une adresse https://
Pour faire ça j’ai déposé des images sur imgur.com si je me trompe pas l’adresse dans mon code marchera tant que je supprime pas l’image.
J’ai aussi ajouté un bout pour publier les résultats en mqtt afin d’utiliser ces infos dans un flow éventuel de Node Red car mon centre de notification est dans Node Red.
Bref je mettrais tout ça au propre
@roumano et tous ceux qui sont intéressés
Voici le code de la notification via bot discord
Notification discord simple sans fields
service: notify.VOTRE_BOT_DISCORD
data:
message: ""
target:
- "CHANNEL_ID"
data:
embed:
title: ""
description: >-
{%- set time =
((state_attr('automation.lave_vaisselle_fin_notification','last_triggered'))
-
(state_attr('automation.lave_vaisselle_start','last_triggered'))).seconds-%}
{%- set minutes = ((time % 3600) / 60) | round | int -%} {%- set hours =
((time % 86400) / 3600) | int -%} Le cycle s'est déroulé de
**{{((state_attr('automation.lave_vaisselle_start','last_triggered')) |
as_local).strftime("%Hh%M") }}** à **{{
(state_attr('automation.lave_vaisselle_fin_notification','last_triggered')
| as_local).strftime("%Hh%M") }}**
Pour une durée de **{{ '{:01}h{:02}'.format(hours, minutes) }}**
Le cycle à consommé
**{{states('sensor.pc_cuisine_lave_vaisselles_energy_kwh_heure') | round
}}** Wh
Pour un coût de
**{{(states('sensor.pc_cuisine_lave_vaisselles_energy_kwh_heure') |
float * (states('input_number.hp_energy_cout')| float)) | round(2) }}**
€
url: https://www.home-assistant.io
color: 199363
author:
name: Gestion des machines
url: https://www.home-assistant.io
icon_url: https://i.imgur.com/f9u45dD.png
footer:
text: "HA - Lave-Vaisselles Fin : Notification"
icon_url: https://www.home-assistant.io/images/favicon-192x192-full.png
thumbnail:
url: https://i.imgur.com/f9u45dD.png
Pour avoir ceci :
Sinon pour utiliser le fields :
Notification discord avec fields uniquement
service: notify.VOTRE_BOT_DISCORD
data:
message: ""
target:
- "CHANNEL_ID"
data:
embed:
title: ""
description: ""
url: https://www.home-assistant.io
color: 199363
author:
name: Gestion des machines
url: https://www.home-assistant.io
icon_url: https://i.imgur.com/f9u45dD.png
footer:
text: "HA - Lave-Vaisselles Fin : Notification"
icon_url: https://www.home-assistant.io/images/favicon-192x192-full.png
thumbnail:
url: https://i.imgur.com/f9u45dD.png
fields:
- name: Début du cycle
value: >-
{{((state_attr('automation.lave_vaisselle_start','last_triggered'))
| as_local).strftime("%Hh%M") }}
inline: true
- name: Fin du cycle
value: >-
{{(state_attr('automation.lave_vaisselle_fin_notification','last_triggered')
| as_local).strftime("%Hh%M") }}
inline: true
- name: Durée du cycle
value: >-
{%- set time =
((state_attr('automation.lave_vaisselle_fin_notification','last_triggered'))
-
(state_attr('automation.lave_vaisselle_start','last_triggered'))).seconds-%}
{%- set minutes = ((time % 3600) / 60) | round | int -%} {%- set
hours = ((time % 86400) / 3600) | int -%} **{{
'{:01}h{:02}'.format(hours, minutes) }}**
inline: true
- name: Consommation
value: >-
{{ states('sensor.pc_cuisine_lave_vaisselles_energy_kwh_heure') |
round }} Wh
inline: true
- name: Coût
value: >-
{{(states('sensor.pc_cuisine_lave_vaisselles_energy_kwh_heure') |
float * (states('input_number.hp_energy_cout')| float)) | round(2)
}} €
inline: true
- name: Nombre de cycle
value: >-
{{states('counter.cycle_lave_vaisselles') | float(default=0) |
round(0)}}
inline: true
pour avoir ceci
Ne pas oublier de modifier les sensors et les entités à votre propre usage.
Les valeurs sur mes screens sont des valeurs fictives de test bien entendu
Le test grandeur nature
Sur mon Jeedom :
Sur HA avec les automatisation de ce post :
Il semble que j’ai un soucis sur la partie conso qui n’est pas énorme