AWARIA....Pomóżcie w przerobieniu YAML

Bardzo proszę o pomoc Was o pomoc w przerobieniu YAML wESPHome.
Nosiłem się z zamiarem zastąpienia sterownika obiegów grzewczych w domu.
Dzisiaj rano sterownik odmówił posłuszeństwa, po prostu się zjeba…
Ostatnio “zdobyłem” YAML sterownika zaworu trójdrogowego na esphome ale dla jednego obiegu, chciałbym aby ten YAML sterował trzema obiegami.
Nie mam już koncepcji, siły i wiedzy aby dalej z tym walczyć…
Założenia są takie:
Temperaturę zadaną odczytuję z HA ( i to działa)
Temperaturę obiegu odczytuję z HA (też działa)
Potrzebuję sterować niezależnie trzema zaworami z danych przejętych z HA
Hardware mam już gotowe.
YAML:

esphome:
  name: z3d

  on_boot:
    then:
      - switch.turn_on: z3d_minus
      - delay: 147s
      - switch.turn_off: z3d_minus
      - lambda: |- 
          auto call = id(kotlownia_3d).make_call();
          call.set_position(0);
          call.perform();

time:
  - platform: homeassistant
    id: homeassistant_time 
    on_time:
      - seconds: /5
        
        
        then:
          - lambda: |- 
              if (id(automat_3d).state) {         
                if (id(kotlownia1_temp_dom_zas).state < id(temp_zas).state-1) {
                  if (id(kotlownia_3d).position<1) {
                    auto call = id(kotlownia_3d).make_call();
                    call.set_position(id(kotlownia_3d).position+0.02);
                    call.perform();
                  }
                }
                if (id(kotlownia1_temp_dom_zas).state > id(temp_zas).state+1) {
                  if (id(kotlownia_3d).position>0) {
                    auto call = id(kotlownia_3d).make_call();
                    call.set_position(id(kotlownia_3d).position-0.02);
                    call.perform();
                  }                  
                }

              }      

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "+R4Y7adcgQPezgvsCAsSF5zmWCJ0iCtPMXsVyBOIwp8="

ota:
  password: "5c1626cd4fa07288175fbfd196f65b19"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Z3D Fallback Hotspot"
    password: "ybqAesiAybfm"
web_server:
  port: 80


captive_portal:


sensor:
  - platform: homeassistant
    
    name: "Kotłownia1 Temp Dom Zas"
    entity_id: sensor.temp_zas_pietro
    internal: false
    id: kotlownia1_temp_dom_zas
    accuracy_decimals: 1

  - platform: homeassistant
    name: "Zadana temperatura zasilania"
    entity_id: sensor.custom_heating_curve
    internal: false
    id: temp_zas
    accuracy_decimals: 1
  


switch: 
- platform: gpio
  name: "kotlownia1_3D_Minus"
  id: z3d_minus
  pin:
    
    number: 14
    mode:
      output: true
    inverted: true
  restore_mode: RESTORE_DEFAULT_OFF

- platform: gpio
  name: "kotlownia1_3D_Plus"
  id: z3d_plus    
  pin:
    
    number: 13
    mode:
      output: true
    inverted: true
  restore_mode: RESTORE_DEFAULT_OFF

- platform: template
  name: "3D automat"
  id: automat_3d 
  optimistic: true
  restore_state: True

cover:
  - platform: time_based
    name: "Kotlownia1 3D"
    id: kotlownia_3d

    open_action:
      - switch.turn_on: z3d_plus
    open_duration: 2 min

    close_action:
      - switch.turn_on: z3d_minus
    close_duration: 2 min

    stop_action:
      - switch.turn_off: z3d_minus
      - switch.turn_off: z3d_plus


Pomóżcie proszę bo teraz steruje tym wszystkim manualnie.
Pozdrawiam :slight_smile:

Może podrzuć jakieś linki skąd to “zdobyłeś”.
Bo generalnie ta konfiguracja jest poprawna tj. nawet się to kompiluje.

YAML to nie jest template, to tak z innej beczki, ale jeśli masz 3 zestawy danych z HA to wystarczy 3x wykorzystać te same bloki funkcjonalne podmieniając tylko zestawy tych danych źródłowych, oczywiście też trzeba zdefiniować 3 GPIO wyjściowe. (to takie najprostsze rozwiązanie)

To może też jakieś info o sprzęcie?
Przecież nie zgadniemy jakie GPIO chcesz użyć.

Zdobyłem z FB, od jednego z grupowiczów. Tak, to działa dla jednego obiegu, testuje to od kilku dni, natomiast nie potrafię tego “sklonować” dla trzech obiegów.
Hardware to ESP32 z sześcioma przekaźnikami do sterowania zaworami 3d i to wszystko :slight_smile:
Kwestia GPIO nie ma znaczenia ponieważ jest to złożone na płytce pcb uniwersalnej i GPIO podłączę tam gdzie sobie wymarzymy (nieprecyzyjnie ująłem że hardware gotowe)

Wiem że YAML to nie template :slight_smile:

To z grubsza tak, tylko sprawdź czy nie występują istotne błędy w działaniu (GPIO wpisałem na pałę więc to musisz dostosować do możliwości sprzętu, a nie mam czasu ani warunków by to na spokojnie zweryfikować, Edit “dobre” GPIO, to np. 13, 12, 14, 27, 26, 25 to musi pasować do użytej płytki, tu wymieniłem 6 pinów po kolei w układzie typowym dla “ESP32 devkit v.x” , musisz je w YAMLu poprawić to samo dotyczy nazw encji - pokazałem tylko ogólną regułę “klonowania”)

esphome:
  name: z3d

  on_boot:
    then:
      - switch.turn_on: z3d_minus
      - switch.turn_on: z3d_minus_2
      - switch.turn_on: z3d_minus_3
      - delay: 147s
      - switch.turn_off: z3d_minus
      - switch.turn_off: z3d_minus_2
      - switch.turn_off: z3d_minus_3
      - lambda: |- 
          auto call = id(kotlownia_3d).make_call();
          call.set_position(0);
          call.perform();
      - lambda: |- 
          auto call = id(kotlownia_3d_2).make_call();
          call.set_position(0);
          call.perform();
      - lambda: |-
          auto call = id(kotlownia_3d_3).make_call();
          call.set_position(0);
          call.perform();

esp32:
  board: esp32dev
  framework:
    type: arduino
# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "+R4Y7adcgQPezgvsCAsSF5zmWCJ0iCtPMXsVyBOIwp8="

ota:
  password: "5c1626cd4fa07288175fbfd196f65b19"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Z3D Fallback Hotspot"
    password: "ybqAesiAybfm"
web_server:
  port: 80


captive_portal:

time:
  - platform: homeassistant
    id: homeassistant_time 
    on_time:
      - seconds: /5
        
        then:
          - lambda: |- 
              if (id(automat_3d).state) {         
                if (id(kotlownia1_temp_dom_zas).state < id(temp_zas).state-1) {
                  if (id(kotlownia_3d).position<1) {
                    auto call = id(kotlownia_3d).make_call();
                    call.set_position(id(kotlownia_3d).position+0.02);
                    call.perform();
                  }
                }
                if (id(kotlownia1_temp_dom_zas).state > id(temp_zas).state+1) {
                  if (id(kotlownia_3d).position>0) {
                    auto call = id(kotlownia_3d).make_call();
                    call.set_position(id(kotlownia_3d).position-0.02);
                    call.perform();
                  }                  
                }
              }

          - lambda: |- 
              if (id(automat_3d_2).state) {         
                if (id(kotlownia1_temp_dom_zas_2).state < id(temp_zas_2).state-1) {
                  if (id(kotlownia_3d_2).position<1) {
                    auto call = id(kotlownia_3d_2).make_call();
                    call.set_position(id(kotlownia_3d_2).position+0.02);
                    call.perform();
                  }
                }
                if (id(kotlownia1_temp_dom_zas_2).state > id(temp_zas_2).state+1) {
                  if (id(kotlownia_3d_2).position>0) {
                    auto call = id(kotlownia_3d_2).make_call();
                    call.set_position(id(kotlownia_3d_2).position-0.02);
                    call.perform();
                  }                  
                }
              }
              

          - lambda: |- 
              if (id(automat_3d_3).state) {         
                if (id(kotlownia1_temp_dom_zas_3).state < id(temp_zas_3).state-1) {
                  if (id(kotlownia_3d_3).position<1) {
                    auto call = id(kotlownia_3d_3).make_call();
                    call.set_position(id(kotlownia_3d_3).position+0.02);
                    call.perform();
                  }
                }
                if (id(kotlownia1_temp_dom_zas_3).state > id(temp_zas_3).state+1) {
                  if (id(kotlownia_3d_3).position>0) {
                    auto call = id(kotlownia_3d_3).make_call();
                    call.set_position(id(kotlownia_3d_3).position-0.02);
                    call.perform();
                  }                  
                }
              }      



sensor:
  - platform: homeassistant
    name: "Kotłownia1 Temp Dom Zas"
    entity_id: sensor.temp_zas_pietro
    internal: false
    id: kotlownia1_temp_dom_zas
    accuracy_decimals: 1
  - platform: homeassistant
    name: "Kotłownia1 Temp Dom Zas_2"
    entity_id: sensor.temp_zas_pietro_2
    internal: false
    id: kotlownia1_temp_dom_zas_2
    accuracy_decimals: 1
  - platform: homeassistant
    name: "Kotłownia1 Temp Dom Zas_3"
    entity_id: sensor.temp_zas_pietro_3
    internal: false
    id: kotlownia1_temp_dom_zas_3
    accuracy_decimals: 1

  - platform: homeassistant
    name: "Zadana temperatura zasilania"
    entity_id: sensor.custom_heating_curve
    internal: false
    id: temp_zas
    accuracy_decimals: 1
  - platform: homeassistant
    name: "Zadana temperatura zasilania_2"
    entity_id: sensor.custom_heating_curve_2
    internal: false
    id: temp_zas_2
    accuracy_decimals: 1
  - platform: homeassistant
    name: "Zadana temperatura zasilania_3"
    entity_id: sensor.custom_heating_curve_3
    internal: false
    id: temp_zas_3
    accuracy_decimals: 1


switch: 
- platform: gpio
  name: "kotlownia1_3D_Minus"
  id: z3d_minus
  pin:
    
    number: 14
    mode:
      output: true
    inverted: true
  restore_mode: RESTORE_DEFAULT_OFF

- platform: gpio
  name: "kotlownia1_3D_Plus"
  id: z3d_plus    
  pin:
    
    number: 13
    mode:
      output: true
    inverted: true
  restore_mode: RESTORE_DEFAULT_OFF

- platform: gpio
  name: "kotlownia1_3D_Minus_2"
  id: z3d_minus_2
  pin:
    
    number: 16
    mode:
      output: true
    inverted: true
  restore_mode: RESTORE_DEFAULT_OFF

- platform: gpio
  name: "kotlownia1_3D_Plus_2"
  id: z3d_plus_2
  pin:
    
    number: 15
    mode:
      output: true
    inverted: true
  restore_mode: RESTORE_DEFAULT_OFF

- platform: gpio
  name: "kotlownia1_3D_Minus_3"
  id: z3d_minus_3
  pin:
    
    number: 18
    mode:
      output: true
    inverted: true
  restore_mode: RESTORE_DEFAULT_OFF

- platform: gpio
  name: "kotlownia1_3D_Plus_3"
  id: z3d_plus_3
  pin:
    
    number: 17
    mode:
      output: true
    inverted: true
  restore_mode: RESTORE_DEFAULT_OFF

- platform: template
  name: "3D automat"
  id: automat_3d 
  optimistic: true
  restore_state: True

- platform: template
  name: "3D automat_2"
  id: automat_3d_2
  optimistic: true
  restore_state: True

- platform: template
  name: "3D automat_3"
  id: automat_3d_3
  optimistic: true
  restore_state: True

cover:
  - platform: time_based
    name: "Kotlownia1 3D"
    id: kotlownia_3d

    open_action:
      - switch.turn_on: z3d_plus
    open_duration: 2 min

    close_action:
      - switch.turn_on: z3d_minus
    close_duration: 2 min

    stop_action:
      - switch.turn_off: z3d_minus
      - switch.turn_off: z3d_plus

  - platform: time_based
    name: "Kotlownia1 3D_2"
    id: kotlownia_3d_2

    open_action:
      - switch.turn_on: z3d_plus_2
    open_duration: 2 min

    close_action:
      - switch.turn_on: z3d_minus_2
    close_duration: 2 min

    stop_action:
      - switch.turn_off: z3d_minus_2
      - switch.turn_off: z3d_plus_2

  - platform: time_based
    name: "Kotlownia1 3D_3"
    id: kotlownia_3d_3

    open_action:
      - switch.turn_on: z3d_plus_3
    open_duration: 2 min

    close_action:
      - switch.turn_on: z3d_minus_3
    close_duration: 2 min

    stop_action:
      - switch.turn_off: z3d_minus_3
      - switch.turn_off: z3d_plus_3
1 polubienie

Dziękuję, działa poprawnie :slight_smile:
EDIT: Dlaczego encja cover nie wyświetla aktualnej pozycji ?
image
Info o pozycji jest dostępne

Pozdrawiam.