Mon problème
Bonjour,
Je cherche à piloter 2 gpio d’un ESP en fonction de l’état d’un « select component » dans ESPhome. Dans l’idée je voudrais que :
si option1 : gpio 1 =0 et gpio 2 = 0
si option2 : gpio 1=0 et gpio 2 = 1
...
Je pensais utiliser la fonction on_value, mais je ne comprend pas comment elle s’utilise.
Pourriez vous m’aider sur le sujet svp?
Merci d’avance
Bonjour à tous,
En farfouillant un peu sur le site esphome, j’ai trouvé des infos mais je ne m’en sort pas… Je n’ai pas d’erreur apparent mais je n’arrive à compiler…
Pourriez vous m’aider svp ?
Voici mon code :
output:
- platform: gpio
pin: D1
id: gpio1_output
- platform: gpio
pin: D2
id: gpio2_output
select:
- platform: template
name: "Mode de Chauffage"
options:
- "Off"
- "HG"
- "Eco"
- "Confort"
id: mode_de_chauffage
initial_option: "Confort"
optimistic: true
set_action:
- logger.log:
format: "Chosen option: %s"
args: ["x.c_str()"]
on_value:
then:
- if:
condition:
lambda: "return id(mode_de_chauffage).state == 'Off';"
then:
- output.turn_off: gpio1_output
A priori c’est la partie avec le lambda qui pose soucis. Quand je la commente, ça compile. Pourtant, ça ressemble beaucoup à ce qu’on trouve dans la doc…
on_...:
then:
- if:
condition:
lambda: 'return id(some_sensor).state < 30;'
then:
- logger.log: "The sensor value is below 30!"
- light.turn_on: my_light
- delay: 5s
else:
- logger.log: "The sensor value is above 30!"
- light.turn_off: my_light
la il manque beaucoup de ligne de code
Quel type esp ?
comment tu code ?
sérieux , comment voulez vous qu’on vous aide avec un tiers des infos !
Merci pour le retour. Le reste du code étant les infos de connexions, ota et api, je ne vois pas bien en quoi c’est important ici…
Comme évoqué, l’erreur se situe dans le lambda, en inversant les ’ ’ et les " " ça à solutionner le problème et ça compile. Par contre, je n’arrive pas à enchainer plusieurs if et je ne vois pas de manière de faire un else if dans la doc esphome. Il n’est fait mention que de else…
Comment faire pour gérer les 4 critères ?
Bonjour tout le monde, je cherche moi aussi a piloter plusieurs sorties via le imput select, j’ai declarer toutes les sorties mais au moment de la compilation ca plante j’ai chercher un moment pour trouver quelquechose de coherant sur le lamba mais ca veux pas ( je suis debutant sur esphome ) je penses que j’ai mal déclarer ou alors que je n’utilise pas le bon lambda.
Le but ici serait de pouvoir selectionner les vitesse différente et d’activer ou non des sorties en fonction du mode choisi. Je met mon bout de code ( qui n’est pas encore complet mais il y a l’essentiel pour cette fonction (enfin je penses ):
substitutions:
name: esphome-web-c52254
friendly_name: ESP piscine
esphome:
name: ${name}
friendly_name: ${friendly_name}
name_add_mac_suffix: false
project:
name: esphome.web
version: '1.0'
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
# Allow Over-The-Air updates
ota:
# Allow provisioning Wi-Fi via serial
improv_serial:
wifi:
# Set up a wifi access point
ap: {}
# In combination with the `ap` this allows the user
# to provision wifi credentials to the device via WiFi AP.
captive_portal:
dashboard_import:
package_import_url: github://esphome/example-configs/esphome-web/esp32.yaml@main
import_full_config: true
# Sets up Bluetooth LE (Only on ESP32) to allow the user
# to provision wifi credentials to the device.
esp32_improv:
authorizer: none
# To have a "next url" for improv serial
web_server:
time:
- platform: sntp
id: sntp_time
i2c:
sda: 21
scl: 22
scan: true
id: bus_a
sensor:
- platform: wifi_signal
name: "WiFi Signal dB"
id: wifi_signal_db
update_interval: 60s
entity_category: "diagnostic"
- platform: copy
source_id: wifi_signal_db
name: "WiFi Signal Percent"
filters:
- lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
unit_of_measurement: "Signal %"
entity_category: "diagnostic"
- platform: internal_temperature
name: "Temperature esp"
- platform: pulse_counter
name: "vitesse moteur"
id: pump_speed
unit_of_measurement: 'RPM'
pin:
number: GPIO17
inverted: true
mode:
input: true
pullup: true
update_interval: 3s
- platform: pulse_counter
name: "debit filtration"
icon: mdi:water
id: water_speed
unit_of_measurement: 'l/mn'
filters:
- lambda: return x / (45/100); # 1l = 7.5 impulsionspour dn16 = 27 pour dn40
pin:
number: GPIO32
inverted: true
mode:
input: true
pullup: true
update_interval: 3s
- platform: ntc
name: NTC Temperature
sensor: resistance_sensor
calibration:
- 632.2kOhm -> -10°C
- 354.6kOhm -> 0°C
- 33.45kOhm -> 50°C
#b_constant: 3950
#reference_temperature: 25°C
#reference_resistance: 100kOhm #129.2kOhm
- platform: resistance
id: resistance_sensor
sensor: source_sensor
configuration: UPSTREAM #thermistance coté 3.3v
resistor: 4.68kOhm
name: Resistance Sensor
- platform: adc
id: source_sensor
pin: A0
filters:
- multiply: 3.3
output:
- platform: gpio
id: pompe_arret
pin: GPIO26
inverted: True
#restore_mode: always_off
- platform: gpio
id: pompe_marche
pin: GPIO18
- platform: gpio
id: pompe_auto
pin: GPIO14
- platform: gpio
id: pompe_v1
pin: GPIO19
- platform: gpio
id: pompe_v2
pin: GPIO23
- platform: gpio
id: pompe_v3
pin: GPIO27
- platform: gpio
id: pompe_uvc
pin: GPIO33
select:
- platform: template
name: "Vitesse pompe"
options:
- 'Off'
- 'V1'
- 'V2'
- 'V3'
id: vitesse_pompe
initial_option: "Off"
optimistic: true
set_action:
- logger.log:
format: "Chosen option: %s"
args: ["x.c_str()"]
on_value:
then:
- lambda: !lambda |-
auto options = id(vitesse_pompe).traits.get_options();
id(vitesse_pompe) = std::distance(options.begin(), std::find(options.begin(), options.end(),x) );
- if:
condition:
lambda: "return id(vitesse_pompe).state == 'Off';"
then:
- output.turn_off: pompe_arret
- output.turn_off: pompe_marche
- output.turn_off: pompe_v1
- output.turn_off: pompe_v2
- output.turn_off: pompe_v3
- output.turn_off: pompe_uvc
else:
- output.turn_on: pompe_arret
- if:
condition:
lambda: "return id(vitesse_pompe).state == 'V1';"
then:
- output.turn_on: pompe_marche
- output.turn_on: pompe_v1
- output.turn_on: pompe_uvc
- output.turn_off: pompe_v2
- output.turn_off: pompe_v3
- if:
condition:
lambda: "return id(vitesse_pompe).state == 'V2';"
then:
- output.turn_on: pompe_marche
- output.turn_on: pompe_v2
- output.turn_on: pompe_uvc
- output.turn_off: pompe_v1
- output.turn_off: pompe_v3
- if:
condition:
lambda: "return id(vitesse_pompe).state == 'V3';"
then:
- output.turn_on: pompe_marche
- output.turn_on: pompe_v3
- output.turn_off: pompe_uvc
- output.turn_off: pompe_v1
- output.turn_off: pompe_v2
merci d’avance pour l’aide.
Après avoir pas mal cherché et fait appel à chatGPT,
Voici à quoi je suis arrivé :
output:
- platform: gpio
pin: D1
id: gpio1_output
- platform: gpio
pin: D2
id: gpio2_output
select:
- platform: template
name: "Mode de Chauffage"
options:
- "Off"
- "HG"
- "Eco"
- "Confort"
id: mode_de_chauffage
initial_option: "Off"
optimistic: true
on_value:
then:
- if:
condition:
lambda: 'return id(mode_de_chauffage).state == "Off";'
then:
- logger.log: "GPIO1: OFF, GPIO2: ON"
- output.turn_on: gpio1_output
- output.turn_off: gpio2_output
- if:
condition:
lambda: 'return id(mode_de_chauffage).state == "HG";'
then:
- logger.log: "GPIO1: ON, GPIO2: OFF"
- output.turn_off: gpio1_output
- output.turn_on: gpio2_output
- if:
condition:
lambda: 'return id(mode_de_chauffage).state == "Eco";'
then:
- logger.log: "GPIO1: ON, GPIO2: ON"
- output.turn_on: gpio1_output
- output.turn_on: gpio2_output
- if:
condition:
lambda: 'return id(mode_de_chauffage).state == "Confort";'
then:
- logger.log: "GPIO1: OFF, GPIO2: OFF"
- output.turn_off: gpio1_output
- output.turn_off: gpio2_output
Si jamais ça peut t’aider
avec chat GPT!! lol
ok je vais y pensser mais ca pourrais me servir comment t’as fait?
Je viens de tester chatGPT!!! c’est de la balle, j’ai donc mon bout de code opérationnel, avec mon imput select. je vais voir si il est encore possible de l’optimiser. Je partagerais ici
donc voici ce qui en est ressorti avec « optimisation » du code en faisant les déclarations des pins en tête de fichier:
substitutions:
# Pins GPIO
gpio_pompe_arret: '26'
gpio_pompe_marche: '18'
gpio_lampe_uvc: '33'
gpio_pompe_v1: '19'
gpio_pompe_v2: '23'
gpio_pompe_v3: '27'
pour les switchs j’ai preferer les masquer afin de n’avoir que le select d’affichable
switch:
- platform: gpio
pin: GPIO${gpio_pompe_arret}
name: "pompe_arret"
id: pompe_arret
- platform: gpio
pin: GPIO${gpio_pompe_marche}
name: "pompe_marche"
id: pompe_marche
- platform: gpio
pin: GPIO${gpio_lampe_uvc}
name: "lampe_uvc"
id: lampe_uvc
interlock:
- pompe_v3
- platform: gpio
pin: GPIO${gpio_pompe_v1}
name: "pompe_v1"
id: pompe_v1
internal: true
interlock:
- pompe_v2
- pompe_v3
disabled_by_default: true
- platform: gpio
pin: GPIO${gpio_pompe_v2}
name: "pompe_v2"
id: pompe_v2
internal: true
interlock:
- pompe_v1
- pompe_v3
disabled_by_default: true
- platform: gpio
pin: GPIO${gpio_pompe_v3}
name: "pompe_v3"
id: pompe_v3
internal: true
interlock:
- pompe_v1
- pompe_v2
- lampe_uvc
disabled_by_default: true
select:
- platform: template
name: "Vitesse pompe"
options:
- "Off"
- "V1"
- "V2"
- "V3"
id: vitesse_pompe
initial_option: "Off"
optimistic: true
on_value:
then:
- if:
condition:
lambda: "return id(vitesse_pompe).state == \"Off\";"
then:
- logger.log: "All outputs OFF"
- switch.turn_off: pompe_arret
- switch.turn_off: pompe_marche
- switch.turn_off: pompe_v1
- switch.turn_off: pompe_v2
- switch.turn_off: pompe_v3
- switch.turn_off: lampe_uvc
- if:
condition:
lambda: "return id(vitesse_pompe).state == \"V1\";"
then:
- logger.log: "V1 selected"
- switch.turn_off: pompe_v3
- switch.turn_off: pompe_v2
- switch.turn_on: pompe_marche
- switch.turn_on: pompe_v1
- switch.turn_on: lampe_uvc
- if:
condition:
lambda: "return id(vitesse_pompe).state == \"V2\";"
then:
- logger.log: "V2 selected"
- switch.turn_off: pompe_v1
- switch.turn_off: pompe_v3
- switch.turn_on: pompe_marche
- switch.turn_on: pompe_v2
- switch.turn_on: lampe_uvc
- if:
condition:
lambda: "return id(vitesse_pompe).state == \"V3\";"
then:
- logger.log: "V3 selected"
- switch.turn_off: lampe_uvc
- switch.turn_off: pompe_v1
- switch.turn_off: pompe_v2
- switch.turn_on: pompe_marche
- switch.turn_on: pompe_v3
J’avais entendu parler de chatGPT mais de la a te sortir un code en faisant un copier coller et lui adjoindre les logs de compilations afin de corriger!!! c’est fou.
1 « J'aime »