Bonjour,
Comme demandé dans le sujet Solar Optimizer, voici comment j’ai automatisé le fonctionnement de mon lave vaisselle.
Pour commencer, j’utilise une simple prise Zigbee qui me remonte les données de conso instantanée que l’on peut couper à distance.
Mon lave vaisselle est un modèle ikéa tout simple, sans minuteur, et je n’utilise que le mode ECO ou 65°.
Le principe:
Je déclenche mon LV normalement en choisissant l’un des 2 cycles, HA détecte un changement de conso, coupe le LV et notifie mon mobile (ou groupe de mobile dans mon cas) afin de proposer 3 possibilités.
Soit on le lance maintenant, de nuit (heures creuses) ou en solaire.
Si aucun choix n’est fait, HA lance le LV au bout de 5 mn.
Le mode solaire se base sur l’intégration SolarOptimizer de JM Collin, si vous n’en avez pas l’utilité, il faudra supprimer ces lignes.
Pour cela, j’ai créer 2 variables de type liste déroulante, une pour définir le mode de départ du LV:
Une pour déterminer si on attend un retour de l’utilisateur:
J’ai ensuite créer un dashboard « questions » que j’ai ensuite caché dans la barre latérale de l’appli mobile.
et voici le code du dashboard:
views:
- title: Questions
sections:
- type: grid
cards:
- type: heading
heading: Le lave vaisselle a démarré, que dois-je faire ?
heading_style: title
- show_name: true
show_icon: true
type: button
tap_action:
action: perform-action
perform_action: input_select.select_option
target:
entity_id: input_select.mode_lave_vaisselle
data:
option: Continue
entity: input_select.mode_lave_vaisselle
hold_action:
action: none
icon: mdi:timer-alert
name: Maintenant
visibility:
- condition: state
entity: input_select.mode_lave_vaisselle
state: Rien
- show_name: true
show_icon: true
type: button
tap_action:
action: perform-action
perform_action: input_select.select_option
target:
entity_id: input_select.mode_lave_vaisselle
data:
option: Nuit
entity: input_select.mode_lave_vaisselle
hold_action:
action: none
icon: mdi:weather-night
name: Cette nuit
visibility:
- condition: state
entity: input_select.mode_lave_vaisselle
state: Rien
- show_name: true
show_icon: true
type: button
tap_action:
action: perform-action
perform_action: input_select.select_option
target:
entity_id: input_select.mode_lave_vaisselle
data:
option: Solaire
entity: input_select.mode_lave_vaisselle
hold_action:
action: none
icon: mdi:weather-sunny
name: En solaire
visibility:
- condition: state
entity: input_select.mode_lave_vaisselle
state: Rien
- type: entity
entity: input_select.mode_lave_vaisselle
state_color: true
visibility:
- condition: state
entity: input_select.mode_lave_vaisselle
state_not: Rien
- type: conditional
conditions:
- condition: state
entity: input_select.mode_lave_vaisselle
state_not: Rien
card:
type: heading
icon: mdi:menu-close
heading: Revenir au menu
heading_style: title
tap_action:
action: navigate
navigation_path: /dashboard-solaire
column_span: 2
visibility:
- condition: state
entity: input_select.question
state: LV
- type: grid
cards:
- type: conditional
conditions: []
card:
type: heading
icon: mdi:fridge
heading: Rien a faire, revenir au menu
heading_style: title
tap_action:
action: navigate
navigation_path: /dashboard-solaire
visibility:
- condition: state
entity: input_select.question
state: RIEN
type: sections
max_columns: 4
cards: []
Ce Dashboard n’affichera la question a poser que si la liste déroulante question est sur LV.
(un second mode voiture n’est pas décrit ici). si un utilisateur du groupe notifié répond, les autres utilisateurs n’auront plus l’affichage du questionnaire.
Une fois une des options sélectionnée, l’affichage change et affiche uniquement le mode choisi, puis indiquera qu’il n’y a plus de question en attente.
Et enfin, l’automatisation associée:
alias: Init Lave-Vaisselle
description: ""
triggers:
- trigger: state
entity_id:
- sensor.pc_cuisine_lavevaisselle_power
from: "0"
for:
hours: 0
minutes: 0
seconds: 10
conditions:
- condition: not
conditions:
- condition: state
entity_id: sensor.pc_cuisine_lavevaisselle_power
state: unavailable
actions:
- choose:
- conditions:
- condition: state
entity_id: input_select.mode_lave_vaisselle
state: Solaire
sequence:
- action: input_select.select_option
metadata: {}
data:
option: Continue
target:
entity_id: input_select.mode_lave_vaisselle
- conditions:
- condition: state
entity_id: input_select.mode_lave_vaisselle
state: Rien
sequence:
- action: switch.turn_off
metadata: {}
data: {}
target:
entity_id: switch.pc_cuisine_lavevaisselle
- delay:
hours: 0
minutes: 0
seconds: 3
milliseconds: 0
- action: switch.turn_off
metadata: {}
data: {}
target:
entity_id: switch.pc_cuisine_lavevaisselle
- action: input_select.select_option
metadata: {}
data:
option: LV
target:
entity_id: input_select.question
- data:
message: Le lave vaisselle a démarré, que dois-je faire ?
data:
url: /dashboard-questions/0
actions:
- action: SOLAIRE
title: Lance le en solaire
icon: sfsymbols:sun.max.fill
- action: NUIT
title: Lance le cette nuit
icon: sfsymbols:moon
- action: NOW
title: maintenant
icon: sfsymbols:powerplug.fill
title: "{{ states('input_text.notif_question') }}"
action: notify.nous
- wait_for_trigger:
- event_type: mobile_app_notification_action
event_data:
action: SOLAIRE
id: SOLAIRE
trigger: event
- event_type: mobile_app_notification_action
event_data:
action: NUIT
id: NUIT
trigger: event
- event_type: mobile_app_notification_action
event_data:
action: NOW
id: NOW
trigger: event
- trigger: state
entity_id:
- input_select.mode_lave_vaisselle
from: Rien
timeout:
hours: 0
minutes: 5
seconds: 0
milliseconds: 0
continue_on_timeout: true
- choose:
- conditions:
- condition: template
value_template: "{{ wait.trigger.id == 'SOLAIRE' }}"
sequence:
- action: input_select.select_option
metadata: {}
data:
option: Solaire
target:
entity_id: input_select.mode_lave_vaisselle
- action: switch.turn_on
metadata: {}
data: {}
target:
entity_id: switch.enable_solar_optimizer_lave_vaisselle
- conditions:
- condition: template
value_template: "{{ wait.trigger.id == 'NUIT' }}"
sequence:
- if:
- condition: state
entity_id: binary_sensor.rte_tempo_heures_creuses
state: "on"
then:
- action: input_select.select_option
metadata: {}
data:
option: Continue
target:
entity_id: input_select.mode_lave_vaisselle
- action: switch.turn_on
metadata: {}
data: {}
target:
entity_id: switch.pc_cuisine_lavevaisselle
else:
- action: input_select.select_option
metadata: {}
data:
option: Nuit
target:
entity_id: input_select.mode_lave_vaisselle
- conditions:
- condition: template
value_template: "{{ wait.trigger.id == 'NOW' }}"
sequence:
- action: input_select.select_option
metadata: {}
data:
option: Continue
target:
entity_id: input_select.mode_lave_vaisselle
- action: switch.turn_on
metadata: {}
data: {}
target:
entity_id: switch.pc_cuisine_lavevaisselle
default:
- choose:
- conditions:
- condition: state
entity_id: input_select.mode_lave_vaisselle
state: Continue
sequence:
- action: input_select.select_option
metadata: {}
data:
option: Continue
target:
entity_id: input_select.mode_lave_vaisselle
- action: switch.turn_on
metadata: {}
data: {}
target:
entity_id: switch.pc_cuisine_lavevaisselle
- conditions:
- condition: state
entity_id: input_select.mode_lave_vaisselle
state: Solaire
sequence:
- action: input_select.select_option
metadata: {}
data:
option: Solaire
target:
entity_id: input_select.mode_lave_vaisselle
- action: switch.turn_on
metadata: {}
data: {}
target:
entity_id: switch.enable_solar_optimizer_lave_vaisselle
- conditions:
- condition: state
entity_id: input_select.mode_lave_vaisselle
state: Rien
sequence:
- action: input_select.select_option
metadata: {}
data:
option: Continue
target:
entity_id: input_select.mode_lave_vaisselle
- action: switch.turn_on
metadata: {}
data: {}
target:
device_id: 1416c3415351b7d64737a743a4045060
- delay:
hours: 0
minutes: 0
seconds: 10
milliseconds: 0
- action: input_select.select_option
metadata: {}
data:
option: RIEN
target:
entity_id: input_select.question
mode: single
Attention, les logos dans la notif sont ceux pour IOS, il faudra adapter le code à votre terminal.
J’utilise également une variable texte input_text.notif_question qui me permet de facilement décrire la demande à l’utilisateur, par exemple « HA à besoin de vous » ou dans le cas de l’input texte input_text.notif_info « HA vous informe ». Cela me permet de réutiliser ces 2 texte dans plusieurs automatisations, et si je veux le changer, je n’ai à le faire qu’à un seul endroit.
Là en clair, dès que le serveur détecte une conso du LV, il le coupe et envoie une notif actionnable aux utilisateurs. Soit l’utilisateur utilise le système de notif actionnable, soit (comme la plupart des utilisateurs), il clique dessus et atterrit sur le dashboard question.
Dans l’automatisation, il y a 4 détections de trigger mobile, les 3 1er pour le système de notif actionnable, le dernier prenant en compte un changement de la liste « mode LV ».
Il est également nécessaire de détecté que la fin cycle du LV afin de remettre le select Mode LV à « rien ». Pour çà j’utilise une automatisation qui est spécifique à mon LV. Il vous sera donc nécessaire de l’adapter au votre en fonction de niveau de conso et de durée des cycles.
L’automatisation envoie une notif au groupe de mobile pour prévenir que le LV est terminé et que l’on peux le vider ![]()
Pour le trigger de cette automatisation, il vous faudra remplacer les ID du device et de l’entité (une serie de lettre et de chiffre) par les votres
alias: Fin cycle LV
description: ""
triggers:
- type: power
device_id: DEVICE_ID_DE_LA_PRISE_LV
entity_id: ENTITY_ID_PUISSANCE_DE_LA_PRISE_LV
domain: sensor
trigger: device
above: 4
below: 12
for:
hours: 0
minutes: 0
seconds: 20
conditions: []
actions:
- if:
- condition: state
entity_id: input_select.mode_lave_vaisselle
state: Continue
for:
hours: 2
minutes: 28
seconds: 0
then:
- delay:
hours: 0
minutes: 1
seconds: 0
- action: input_select.select_option
metadata: {}
data:
option: Rien
target:
entity_id: input_select.mode_lave_vaisselle
- action: switch.turn_off
metadata: {}
data: {}
target:
entity_id: switch.enable_solar_optimizer_lave_vaisselle
- action: notify.nous
metadata: {}
data:
message: Lave Vaisselle fini !!
title: "{{ states('input_text.notif_info') }}"
else:
- if:
- condition: state
entity_id: input_select.mode_lave_vaisselle
state: Continue
for:
hours: 2
minutes: 4
seconds: 0
- condition: numeric_state
entity_id: sensor.pc_cuisine_lavevaisselle_power
below: 11
above: 2
then:
- if:
- condition: state
entity_id: input_select.mode_lave_vaisselle
state: Continue
for:
hours: 2
minutes: 10
seconds: 0
then: []
else:
- delay:
hours: 0
minutes: 0
seconds: 15
milliseconds: 0
- action: input_select.select_option
metadata: {}
data:
option: Rien
target:
entity_id: input_select.mode_lave_vaisselle
- action: switch.turn_off
metadata: {}
data: {}
target:
entity_id: switch.enable_solar_optimizer_lave_vaisselle
- action: notify.nous
metadata: {}
data:
message: Lave Vaisselle fini !!
title: "{{ states('input_text.notif_info') }}"
mode: single
Cette automatisation marche dans 95% des cas, mais parfois elle ne se déclenche pas.
J’ai donc créer une autre automatisation qui rebascule le mode LV à rien au bout de 2H45 (sans notif)
alias: Reinit mode LV
description: ""
triggers:
- trigger: state
entity_id:
- input_select.mode_lave_vaisselle
to: Continue
for:
hours: 2
minutes: 45
seconds: 0
conditions: []
actions:
- action: input_select.select_option
metadata: {}
data:
option: Rien
target:
entity_id: input_select.mode_lave_vaisselle
mode: single
J’utilise çà depuis décembre, et çà fonctionne plutôt bien si on évite les redémarrages HA pendant que le LV tourne. Là il est nécessaire d’aller modifier le Select Mode LV manuellement pour que le système puisse refonctionner normalement.
Ce n’est pas parfait, mais j’en suis plutôt content, et ma compagne aussi.
Si vous avez des suggestions/remarques, permettant d’améliorer tout cela, en espérant que çà puisse vous servir.



