Hi there,
I’m struggling with this simple condition which never fires:
- platform: gpio
name: "SSR Pumpe"
id: pump
pin:
sn74hc595: sn74hc595_hub
number: 0
inverted: false
on_turn_on:
then:
if:
condition:
- switch.is_off: v1
then:
- logger.log: "Valve 1 is off!"
- switch.turn_off: pump
It’s a fairly easy part of my script but I don’t get this to work. It’s the code for my DIY Triac-based irrigation controller.
That’s the complete code and everything else is working fine:
esphome:
name: bewaesserung
platform: ESP8266
board: d1_mini
on_boot:
then:
- switch.turn_off: v1
- switch.turn_off: v2
- switch.turn_off: v3
- switch.turn_off: v4
- switch.turn_off: v5
- switch.turn_off: pump
- sensor.rotary_encoder.set_value:
id: enc
value: 0
# Enable logging
logger:
baud_rate: 0
# Enable Home Assistant API
api:
ota:
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Bewaesserung Fallback Hotspot"
password: !secret fallback_password
captive_portal:
time:
- platform: homeassistant
id: homeassistant_time
sn74hc595:
- id: 'sn74hc595_hub'
data_pin: D5
clock_pin: D6
latch_pin: D7
oe_pin: D2
sr_count: 1
# Individual outputs
switch:
- platform: gpio
name: "Ventil Ost"
id: v1
pin:
sn74hc595: sn74hc595_hub
# Use pin number 1
number: 1
inverted: false
interlock: [v2,v4,v5]
on_turn_on:
- switch.turn_on: pump
- delay: 10s
- switch.turn_off: v1
- platform: gpio
name: "Ventil West"
id: v2
pin:
sn74hc595: sn74hc595_hub
# Use pin number 2
number: 2
inverted: false
interlock: [v1,v4,v5]
on_turn_on:
- switch.turn_on: pump
- delay: 10s
- switch.turn_off: v2
- platform: gpio
name: "Ventil Beet"
id: v3
pin:
sn74hc595: sn74hc595_hub
# Use pin number 3
number: 3
inverted: false
interlock: [v2]
on_turn_on:
- switch.turn_on: pump
- delay: 10s
- switch.turn_off: v3
- platform: gpio
name: "Ventil Vorgarten"
id: v4
pin:
sn74hc595: sn74hc595_hub
# Use pin number 2
number: 4
inverted: false
interlock: [v1,v2]
on_turn_on:
- switch.turn_on: pump
- delay: 10s
- switch.turn_off: v4
- platform: gpio
name: "Ventil Einfahrt"
id: v5
pin:
sn74hc595: sn74hc595_hub
# Use pin number 1
number: 5
inverted: false
interlock: [v2,v5]
on_turn_on:
- switch.turn_on: pump
- delay: 10s
- switch.turn_off: v5
- platform: gpio
name: "SSR Pumpe"
id: pump
pin:
sn74hc595: sn74hc595_hub
number: 0
inverted: false
on_turn_on:
then:
if:
condition:
- switch.is_off: v1
then:
- logger.log: "Valve 1 is off!"
- switch.turn_off: pump
spi:
clk_pin: D0
mosi_pin: D1
globals:
- id: setpage #Einstellmodus
type: bool
restore_value: no
initial_value: 'false'
- id: setvalve #
type: int
restore_value: no
initial_value: '0'
display:
- platform: max7219
cs_pin: D3
num_chips: 1
update_interval: 300ms
lambda: |-
// Page 5 Uhrzeit anzeigen
if ((id(enc).state == 5) && (id(setpage) == false)) {
it.print(" ");
it.strftime("%H.%M.%S", id(homeassistant_time).now());
}
// Page 4 Wifi Level
if ((id(enc).state == 4) && (id(setpage) == false)) {
it.print(" ");
it.printf("Wi %.0fdB", id(wlan_signal).state);
}
// Page 1 Wasserstand Höhe
if ((id(enc).state == 1) && (id(setpage) == false)) {
it.print(" ");
it.printf("FH %.1fcn", id(zisterne_cm).state);
}
// Page 2 Wasserstand Liter
if ((id(enc).state == 2) && (id(setpage) == false)) {
it.print(" ");
it.printf("FS %.0fL", id(zisterne_liter).state);
}
// Page 3 Wasserverbrauch heute
if ((id(enc).state == 3) && (id(setpage) == false)) {
it.print(" ");
it.printf(1,"= %.0f L", id(zisterne_delta_heute).state);
}
// Page 0 Status Ventile
if ((id(enc).state == 0) && (id(setpage) == false)) {
it.print(" ");
if ((id(v1).state)) {
it.print("o");
} else {
it.print("_");
}
if ((id(v2).state)) {
it.print(1,"o");
} else {
it.print(1,"_");
}
if ((id(v3).state)) {
it.print(2,"o");
} else {
it.print(2,"_");
}
if ((id(v4).state)) {
it.print(3,"o");
} else {
it.print(3,"_");
}
if ((id(v5).state)) {
it.print(4,"o");
} else {
it.print(4,"_");
}
if ((id(pump).state)) {
it.print(6,"P");
} else {
it.print(6,"_");
}
}
// Erste Seite Setup-Page
if (id(setpage) == true && id(enc).state == 0) {
it.print(" S");
if ((id(v1).state)) {
it.print("o");
} else {
it.print("_");
}
if ((id(v2).state)) {
it.print(1,"o");
} else {
it.print(1,"_");
}
if ((id(v3).state)) {
it.print(2,"o");
} else {
it.print(2,"_");
}
if ((id(v4).state)) {
it.print(3,"o");
} else {
it.print(3,"_");
}
if ((id(v5).state)) {
it.print(4,"o");
} else {
it.print(4,"_");
}
if ((id(pump).state)) {
it.print(6,"P");
} else {
it.print(6,"_");
}
}
// Ventil 1 einstellen
if (id(setpage) == true && id(enc).state == 1) {
if ((id(v1).state)) {
it.print("o.");
} else {
it.print("_.");
}
if ((id(v2).state)) {
it.print(1,"o");
} else {
it.print(1,"_");
}
if ((id(v3).state)) {
it.print(2,"o");
} else {
it.print(2,"_");
}
if ((id(v4).state)) {
it.print(3,"o");
} else {
it.print(3,"_");
}
if ((id(v5).state)) {
it.print(4,"o");
} else {
it.print(4,"_");
}
} // Ende V1
// Ventil 2 einstellen
if (id(setpage) == true && id(enc).state == 2) {
if ((id(v1).state)) {
it.print("o");
} else {
it.print("_");
}
if ((id(v2).state)) {
it.print(1,"o.");
} else {
it.print(1,"_.");
}
if ((id(v3).state)) {
it.print(2,"o");
} else {
it.print(2,"_");
}
if ((id(v4).state)) {
it.print(3,"o");
} else {
it.print(3,"_");
}
if ((id(v5).state)) {
it.print(4,"o");
} else {
it.print(4,"_");
}
}
if (id(setpage) == true && id(enc).state == 3) {
if ((id(v1).state)) {
it.print("o");
} else {
it.print("_");
}
if ((id(v2).state)) {
it.print(1,"o");
} else {
it.print(1,"_");
}
if ((id(v3).state)) {
it.print(2,"o.");
} else {
it.print(2,"_.");
}
if ((id(v4).state)) {
it.print(3,"o");
} else {
it.print(3,"_");
}
if ((id(v5).state)) {
it.print(4,"o");
} else {
it.print(4,"_");
}
}
if (id(setpage) == true && id(enc).state == 4) {
if ((id(v1).state)) {
it.print("o");
} else {
it.print("_");
}
if ((id(v2).state)) {
it.print(1,"o");
} else {
it.print(1,"_");
}
if ((id(v3).state)) {
it.print(2,"o");
} else {
it.print(2,"_");
}
if ((id(v4).state)) {
it.print(3,"o.");
} else {
it.print(3,"_.");
}
if ((id(v5).state)) {
it.print(4,"o");
} else {
it.print(4,"_");
}
}
if (id(setpage) == true && id(enc).state == 5) {
if ((id(v1).state)) {
it.print("o");
} else {
it.print("_");
}
if ((id(v2).state)) {
it.print(1,"o");
} else {
it.print(1,"_");
}
if ((id(v3).state)) {
it.print(2,"o");
} else {
it.print(2,"_");
}
if ((id(v4).state)) {
it.print(3,"o");
} else {
it.print(3,"_");
}
if ((id(v5).state)) {
it.print(4,"o.");
} else {
it.print(4,"_.");
}
}
sensor:
- platform: rotary_encoder
name: "Rotary Encoder"
id: enc
publish_initial_value: true
pin_a:
number: TX
inverted: true
mode:
input: true
pullup: true
pin_b:
number: RX
inverted: true
mode:
input: true
pullup: true
max_value: 5
min_value: 0
- platform: homeassistant
id: zisterne_liter
entity_id: sensor.zisterne_liter
- platform: homeassistant
id: zisterne_delta_heute
entity_id: sensor.zisterne_delta_heute
- platform: homeassistant
id: zisterne_cm
entity_id: sensor.wasserstandraw # Notabschaltung niedriger Wasserstand
on_value_range:
- below: 71
then:
- switch.turn_off: v1
- switch.turn_off: v2
- switch.turn_off: v3
- switch.turn_off: v4
- switch.turn_off: v5
- switch.turn_off: pump
- platform: wifi_signal
name: "Bewaesserung ESP Wifi Signal"
update_interval: 30s
id: wlan_signal
binary_sensor:
- platform: gpio
id: encswitch
pin:
number: GPIO2
mode: INPUT_PULLUP
inverted: True
on_click:
- min_length: 50ms
max_length: 250ms
then:
- lambda: |-
if(id(setpage)) {
id(setpage) = false;
} else {
id(setpage) = true;
//id(enc).state = 0;
}
- min_length: 800ms
max_length: 1500ms
then:
- if:
condition:
lambda: 'return (id(setpage) == true && id(enc).state == 1);'
then:
switch.toggle: v1
- if:
condition:
lambda: 'return (id(setpage) == true && id(enc).state == 2);'
then:
switch.toggle: v2
- if:
condition:
switch.is_on: v2
then:
- delay: 5s
- switch.turn_off: v2
- if:
condition:
lambda: 'return (id(setpage) == true && id(enc).state == 3);'
then:
switch.toggle: v3
- if:
condition:
switch.is_on: v3
then:
- delay: 5s
- switch.turn_off: v3
- if:
condition:
lambda: 'return (id(setpage) == true && id(enc).state == 4);'
then:
switch.toggle: v4
- if:
condition:
switch.is_on: v4
then:
- delay: 5s
- switch.turn_off: v4
- if:
condition:
lambda: 'return (id(setpage) == true && id(enc).state == 5);'
then:
switch.toggle: v5
- if:
condition:
switch.is_on: v5
then:
- delay: 5s
- switch.turn_off: v5
- min_length: 3000ms # alle ventile aus
max_length: 60000ms
then:
- switch.turn_off: v1
- switch.turn_off: v2
- switch.turn_off: v3
- switch.turn_off: v4
- switch.turn_off: v5
- switch.turn_off: pump