je suis débutant ce qui explique ma question tout à fait basique.
Ce que je veux faire en m’inspirant de schémas existants c’est créer une ou plusieurs bases . base temporelle qui me serviront de référence pour actionner des relais en cascade.
Dans le programme dont je m’inspire cette donnée est libellée de la façon suivante : {Temps1},{Temps2}.
En l’utilisant le programme bloque sur la définition de cette donnée.
J’ai lu et relu la littérature ESPHOME IO mais par manque de connaissance je n’arrive à intégrer ses informations.
Renseigner votre problème
Ma configuration
## System Information
version | core-2024.6.2
-- | --
installation_type | Home Assistant OS
dev | false
hassio | true
docker | true
user | root
virtualenv | false
python_version | 3.12.2
os_name | Linux
os_version | 6.6.28-haos-raspi
arch | aarch64
timezone | Europe/Paris
config_dir | /config
<details><summary>Home Assistant Cloud</summary>
logged_in | false
-- | --
can_reach_cert_server | ok
can_reach_cloud_auth | ok
can_reach_cloud | ok
</details>
<details><summary>Home Assistant Supervisor</summary>
host_os | Home Assistant OS 12.3
-- | --
update_channel | stable
supervisor_version | supervisor-2024.06.0
agent_version | 1.6.0
docker_version | 25.0.5
disk_total | 58.0 GB
disk_used | 8.3 GB
healthy | true
supported | true
host_connectivity | true
supervisor_connectivity | true
ntp_synchronized | true
virtualization |
board | rpi4-64
supervisor_api | ok
version_api | ok
installed_addons | ESPHome (2024.5.5), File editor (5.8.0), Advanced SSH & Web Terminal (18.0.0)
</details>
<details><summary>Dashboards</summary>
dashboards | 2
-- | --
resources | 0
views | 1
mode | storage
</details>
<details><summary>Recorder</summary>
oldest_recorder_run | 15 mai 2024 à 15:37
-- | --
current_recorder_run | 14 juin 2024 à 10:24
estimated_db_size | 4.64 MiB
database_engine | sqlite
database_version | 3.44.2
</details>
Mon bout de programme:```
esphome:
name: arrosage1v
friendly_name: arrosage1v
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "PCPLe4UaSkZ8bJec4JRQJDlL47pRRGgBXTGUQ/G9VNw="
ota:
password: "813d5cf4f8681792643601d4932922f7"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Arrosage-1V Fallback Hotspot"
password: "gPAilgkbB5yB"
captive_portal:
switch:
- platform: gpio
name: "Relay1"
icon: "mdi:restart"
pin: GPIO13
id: Relay1
on_turn_on:
- delay: 10000ms
- switch.turn_off: Relay1
- platform: gpio
pin: GPIO12
name : "relay2"
icon: "mdi:restart"
id: Relay2
on_turn_on:
- delay: 500ms
- switch.turn_off: Relay2
- platform: gpio
pin: GPIO14
name: "Relay3"
icon: "mdi:restart"
id: Relay3
on_turn_on:
- delay: 500ms
- switch.turn_off: Relay3
- platform: gpio
pin: GPIO16
name: "Relay4"
icon: "mdi:restart"
id: Relay4
on_turn_on:
- delay: 500ms
- switch.turn_off: Relay4
#automatisation des 4 voies en cascade
- switch.turn_off: Relay4
- switch.turn_off: Relay3
- switch.turn_off: Relay2
- switch.turn_off: Relay1
- platform: gpio
pin: GPIO17
name: "Arrosage zones en cascade"
icon: "mdi:restart"
on_turn_on
- switch.turn_off: relay1
- switch.turn_on: Relay2
- delay: ${Temps1} min
- switch.turn_off: Relay2
- switch.turn_on: Relay3
- delay: ${Temps1}min
- switch.turn_off: Relay3
- switch.turn_on: Relay4
- delay: ${Temps1}min
- switch.turn_off: Relay4
La 1ère partie consiste à déclencher individuellement les relais; dans la 2éme j'execute une séquences sur une base temps.
C'est cette base qui me pose problème.
Un petit bout de programme me permettrai de comprendre et d'y voir plus clair dans ce type de programmation.
Merci d'avance pour votre aide.
Cordialement
Christian.
Alors c’est basique sans doute, mais là comme ça, moi j’ai absolument pas compris le besoin, ni ce que tu as déjà fait… Comme dire un chanteur : « Vous n’avez pas les bases »
Peux-tu compléter avec un bout de code, un exemple complet du besoin ? Pas uniquement, 2 noms de variables
Par ailleurs attention, les fonctions d’attente c’est d’une façon générale une mauvaise pratique.
Il vaut mieux utiliser des notions de déclencheurs pour dérouler des actions les unes à la suite des autres plutôt que de se baser sur une temporalité.
C’est encore plus vrai sur esphome, puisque le reboot (volontaire ou coupure de courant) fait perdre la totalité du contexte d’exécution
Salut Pulpy-Lucke et merci de prendre ma question.
effectivement j’ai tellement bidouillé que j’ai supprimé le bout de code qui me posait problème, et j’ai oublié de le replacer
comme tu le dis je manque a peu prêt de tous les prérequis ce qui fait que je patine.
La finalité :
je veux reprendre la notion de {temps1} pour cadrer avec le programme dont je m’inspire , et pour l’étendre par la suite sur d’autres relais.
mais je voudrais d’abord que ça fonctionne a minima.
ce bout de prog est ce que j’ai pu glaner sans forcément comprendre les tenants et aboutissants,
j’ai beau potacer ,je ne comprend pas.
merci d’avance.
Et merci pour ton aide.
Je vais essayer ta solution, petit à petit les choses se décantent.
Question subsidiaire.
J’avais compris que le systeme delay posait avait ses limites ,mais tu me donne un exemple incluant le « delay »; il est vrai qu’avec les Lamba l’execution est plus souple d’après ce que j’ai compris.
dans l’exemple que tu me donne il faut si j’ai plusieurs relais que j’indique à chaque fois la durée.
ce qui me paraissait interressant c’était d’initilaliser des durées et pouvoir les choisir sur toute la config en une seule fois.
bref ,je sais ce que je veux faire , mais c’est pas simple.
Dernière question: j’aicherché de la litterature sur homeassistant ou esphome « style pour les nuls » mais je n’ai rien trouvé.
as tu des pistes à me proposer?
Encore merci et bon week-end.
Cordialement
christian.
Effectivement, là tu as un delay dans la commande parce qu’il n’y a pas vraiment possibilité de faire autrement : il n’y a rien qui permet de fixer une durée entre les étapes d’activation désactivation des relais.
Ce que je voulais dire, c’est qu’il faut éviter de faire par exemple pour sortir sa voiture :
j’ouvre le portail
j’attends 10 minutes
je ferme le portail
Dans les faits, il vaut mieux faire
j’ouvre le portail
je détecte que la voiture est partie (position GPS etc etc), ce qui ferme le portail
ça eviter de fermer le portail sur la voiture !
C’est encore plus vrai si la séquence est longue , tous les évènements qui se produisent (ou pas) pendant la temporisation, change le contexte d’exécution.
Là avec des vannes d’arrosages, c’est assez limité mais ça existe. Par exemple, c’est pas utile de continuer à arroser quand il se mets à pleuvoir pendant la tempo
La question c’est :
comment veux-tu les changer (un input_number dans HA ? un truc en dur dans un code, ou une variable globale)
à quelle fréquence les changes tu ? (par exemple 2 fois par an, une recompilation ESPHOME ça pourrait être simple)
Le forum, ou le portail, ensuite j’aime moins mais il ya des blogs divers et variés, voire des chaines youtube
je t’ai fait chercher.
je regarderai le portail ,mais pour l’instant je me concentre sur le programme, ça va un peu mieux; j’ai réussi a avoir la petite coche verte sur un bout de programme.
les choses rentrent petit a petit, mais c’est pas facile, toutes les cases sont pleines à mon âge.
home assistant est complet , certes mais pas franchement fait pour des novices.
il faut déjà comprendre leur langage parfois assez hermétique.
une chose à laquelle il faut faire attention , c’est que beaucoup de solutions sont faites pour l’esp8266 ; ce qui peut poser problème par rapport aux esp 32.
Encore merci .
J’enverrai mon programme une fois terminé.
Comme promis je te montre mon code qui devait fonctionner.
Mon gros soucis viens de la déclaration " - platform : gpio"
est-ce que cette config est mauvaise; est-ce que l’indentation n’est pas bonne ( j’ai tout essayé).
l’hors du test de validation une erreur :
while parsing a block mapping
in « /config/esphome/arrosage-1v.yaml », line 2, column 1
expected , but found ‹ - ›
in « /config/esphome/arrosage-1v.yaml », line 53, column 1
Le fait qu’elle renvoie a la ligne 2 ( esphome) me fait penser à l’indentation.
Dois je tout aligner sur l’indentation d’esphome , ligne 2 ?
il y a une logique ,mais là je sèche.
mon code:
esphome:
name: arrosage
friendly_name: arrosage
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "PCPLe4UaSkZ8bJec4JRQJDlL47pRRGgBXTGUQ/G9VNw="
ota:
password: "813d5cf4f8681792643601d4932922f7"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "devicename Hotspot"
password: "gPAilgkbB5yB"
# on active le serveur Web de l'esp32, en allant sur l'IP de l'esp,on tombe sur l'interface pour piloter les relais.
web_serveur:
port: 80
auth:
web_username: !secret web_username
web_password: !secret web_password
captive_portal:
# verification de la fermeture des vannes
on_boot:
priority: -10
then:
- switch.turn_off: Relay4
- switch.turn_off: Relay3
- switch.turn_off: Relay2
- switch.turn_off: Relay1
# definition des relais/ zones
- platform: gpio
name: "Relay1"
icon: "mdi:restart"
pin: GPIO13
id: Relay1
pin: GPIO12
name : "relay2"
icon: "mdi:restart"
in: relay2
pin: GPIO14
name: "Relay3"
icon: "mdi:restart"
id: Relay3
pin: GPIO16
name: "Relay4"
icon: "mdi:restart"
id: Relay4
# Enable Home Assistant API horloge
time:
- platform: homeassistant
id: homeassistant_time
- platform: sntp
# Every morning on weekdays# ...
on_time:
- seconds: 0
minutes: 30
hours: 20
then:
switch.toggle: my_script
- seconds: 0
minutes: 30
hours: 21
days_of_week: "*"
then:
switch.toggle: my_script
# realisation de l'automation
script:
- id: my_script
then:
-switch_turn_on: relay1
- delay: 15 min
- switch_turn_off: Relay1
- switch_turn_on: relay2
- delay: 15 min
- switch_turn_off: Relay2
- switch_turn_on: relay3
- delay: 15 min
- switch_turn_off: Relay3
-switch_turn_on:relay4
- delay: 15 min
- switch_turn_off: Relay4
je te remercie d’avance pour ton aide car je suis bloqué.
sans espaces ce qui n’est pas valable syntaxiquement.
après il faut y réfléchir, mais au final tu es dans la cas que je trouve problématique : tu enchaines 4 pauses de 15min, donc si pendant cette heure, il se passe n’importe quoi (une coupure de courant), tu es dans les embêtements potentiels.
Il faut essayer de faire un truc du genre :
Je lance l’arrosage 1 . Quand l’arrosage 1 est fini ça lance le 2. ça passe possiblement par des automatisations dans esphome (trigger de on à off pour détecter la fin)
Désolé pour les erreurs ,mais j’en fais tellement qu’il y a des trous dans la raquette.
Bref!!!
Voila une idée qu’elle est bonne !!
Effectivement, le process est moins problématique en cas d’incident.
appliquer à mon projet ,je comprend mieux la config.
J’ai toujours eu du mal avec les abstractions.
Ceci dit ,ça me parle.
Bon je mets ça en œuvre. dans la soirée et te tiens au courant.
Mille merci.
A plus.
Christian.
Salut.
Enfin !!!
hormis le point du switch.off , je n’avais pas mis « time » en tête de la platform.
bref ,j 'ai la petite coche verte.
un autre problème surgit c’est la compile du programme dans l’esp.
j'ai un code erreur.
INFO ESPHome 2024.6.1
INFO Reading configuration /config/esphome/arrosage-jardin-4v.yaml...
INFO Detected timezone 'Europe/Paris'
INFO Starting log output from arrosage-jardin-4v.local using esphome API
WARNING Can't connect to ESPHome API for arrosage-jardin-4v.local: Error resolving IP address: [Errno -5] No address associated with hostname (APIConnectionError)
INFO Trying to connect to arrosage-jardin-4v.local in the background.
je ne sais pas solutionner ce soucis.
je voudrais charger le fichier bin mais je ne sais pas ou le récupérer (si cette manip est possible).
encore un petit coup de pouce et j’espère que je ne t’embêterai plus.