marcinw
(Marcin)
25 Listopad 2022 18:27
1
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
szopen
25 Listopad 2022 20:22
2
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)
marcinw:
Hardware mam już gotowe.
To może też jakieś info o sprzęcie?
Przecież nie zgadniemy jakie GPIO chcesz użyć.
marcinw
(Marcin)
25 Listopad 2022 20:29
3
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
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
szopen
25 Listopad 2022 21:44
4
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
marcinw
(Marcin)
26 Listopad 2022 11:26
5
Dziękuję, działa poprawnie
EDIT: Dlaczego encja cover nie wyświetla aktualnej pozycji ?
Info o pozycji jest dostępne
Pozdrawiam.