macek
30 Październik 2024 07:17
1
//mod-edit: watek powstał z wydzielenia tej ciekawej dyskusji z innego wątku
W starym kotle węglowym monitorowałem w ten sposób na ESPHome zbyt wysoką temperaturę zasilania CO, działało idealnie przez dwa sezony grzewcze, potem wymienił ale piec na inne paliwo . Teraz ten sam czujnik Dallas jest podłączony do THR320D, na którym ESPHome steruje pompą CWU, również zero problemów. Osobiście wszędzie używam ESPHome, kupuję gotowe urządzenia i od razu wgrywam ESPHome, jak jest “trudno” wgrać zamawiam z wgranym ESPHome albo z Tasmotą a potem przez Tasmota wgrywam ESPHome.
1 polubienie
Gregor1
(Grzegorz)
30 Październik 2024 10:09
2
Właśnie też mam zamiar sterować pompami CO i CWU. Musi to być jednak w miarę stabilne i bezpieczne [i tak dołożę zwykły włącznik bimetalowy]. Urządzenia sterujące nimi muszą działać “same”, bez łączenia np. z automatyzacjami HA w razie zaniku jakiejś sieci radiowej, czy samego serwera z HA. Spróbuję pokombinować z płytkami ESP. Może uda mi się je zaprogramować do włączenia przekaźnika pompy na podstawie odczytu z czujnika temperatury bez automatyzacji HA.
A THR320D, bardzo dobra podpowiedź. Dziękuję. Mam coś podobnego do sterowania grzałką w zasobniku CWU. Działa to sobie już jakiś czas. Oczywiście sterowanie przez Tuyę. Ale bez internetu sterownik, też “wie co ma robić”. I oto chodzi.
macek
30 Październik 2024 12:34
3
To wszystko możesz zrealizować w ESPHome, u siebie mogę wyłączyć HA “na zawsze” i to co ma działać nadal będzie działać pod kontrolą samego ESPHome .
Żadnej TuYa nie mam w domu i nie będę mieć, dla mnie to “zło” .
1 polubienie
zaktom
31 Październik 2024 15:14
4
Ja mam właśnie tak zrealizowany sterownik na Esp32. Steruję 4 pompami CO, CWU, PODŁOGÓWKA I SOLARY. Czujniki temperatury Dallas
Cała automatyzacja jest w ESPHOME. HA używam tylko do wizualizacji danych. Działa bez problemu już drugi rok.
Tu jest opisany mój projekt Termostat różnicowy ESPHome - #32 przez zaktom
Gregor1
(Grzegorz)
31 Październik 2024 18:52
5
Pięknie to zrobiłeś. Jestem pod wrażeniem. Chętnie skorzystam [jeśli pozwolisz] z Twoich “kodów” może mi się uda. Generalnie na początek do ESP dopnę dallasa i przekaźnik sterujący pompą CO. Tam myślę, że można trochę się pouczyć na śladach w automatyzacjach z HA.
zaktom
31 Październik 2024 20:41
6
Jeżeli chodzi o automatyzacje w ESPHOME to nie będziesz miał śladów tych automatyzacji w HA, bo cała automatyzacja wykonuje się w ESP. W HA są tylko dane z czujników.
Jeżeli Ci to pomoże to zamieszczam kod ESPHOME
esphome:
name: kotlownia
compile_process_limit: 2
comment: ESP-32 sterowanie solary co i cwu
on_boot:
then:
# odczyt czasu RTC przy starcie
ds1307.read_time:
id: ds1307_time
# - lambda: |-
# id(my_ota).set_auth_password("");
preferences:
flash_write_interval: 60min
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
level: DEBUG
baud_rate: 0
# Enable Home Assistant API
api:
encryption:
key: "94aTXlxTwfc4L+pMBFONOwg4FdoPNQR85Og+Dzu5E6A="
ota:
- platform: esphome
id: my_ota
# password: "172f20f73359638583b7b0d95a363039"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.100.148
gateway: 192.168.100.1
subnet: 255.255.255.0
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Kotlownia Fallback Hotspot"
password: !secret wifi_password
captive_portal:
external_components:
- source: github://nrandell/dallasng
web_server:
port: 80
uart:
tx_pin: 1
rx_pin: 3
baud_rate: 256000
parity: NONE
stop_bits: 1
ld2410:
# timeout: 10s
# max_move_distance : 2.25m
# max_still_distance: 2.25m
# g0_move_threshold: 50
# g0_still_threshold: 10
# g1_move_threshold: 50
# g1_still_threshold: 20
# g2_move_threshold: 40
# g2_still_threshold: 40
# g3_move_threshold: 100
# g3_still_threshold: 100
# g4_move_threshold: 100
# g4_still_threshold: 100
# g5_move_threshold: 100
# g5_still_threshold: 100
# g6_move_threshold: 100
# g6_still_threshold: 100
# g7_move_threshold: 100
# g7_still_threshold: 100
# g8_move_threshold: 100
# g8_still_threshold: 100
button:
- platform: shutdown
name: "kotłownia Shutdown"
- platform: restart
name: "kotłownia restart"
- platform: safe_mode
name: "kotłownia restart (Safe Mode)"
- platform: factory_reset
name: "Restart do ustawień fabrycznych"
- platform: ld2410
factory_reset:
name: "factory reset"
restart:
name: "restart"
query_params:
name: query params
text_sensor:
- platform: wifi_info
ip_address:
name: "kotlownia IP Address"
id: esp_ip
ssid:
name: "kotlownia WIFI SSID"
id: esp_ssid
mac_address:
name: "kotlownia MAC Address"
id: esp_mac
- platform: sun
name: Wschód słońca
type: sunrise
- platform: sun
name: Zachód słońca
type: sunset
- platform: template
name: Kotłownia Uptime
id: uptime_human
icon: mdi:clock-start
i2c:
sda: 21
scl: 22
scan: true
id: bus_a
time:
- platform: ds1307
id: ds1307_time
update_interval: never
on_time:
- seconds: 0
minutes: 0
hours: 21
days_of_week: SUN
then:
- switch.turn_on: pompa_co
- switch.turn_on: pompa_cwu
- switch.turn_on: pompa_solar
- switch.turn_on: pompa_podl
- delay: 60s
- switch.turn_off: pompa_co
- switch.turn_off: pompa_cwu
- switch.turn_off: pompa_solar
- switch.turn_off: pompa_podl
# synchronizcja czasu RTC
- platform: homeassistant
on_time_sync:
then:
ds1307.write_time:
id: ds1307_time
sun:
latitude: 49.494949°
longitude: 22.222222°
switch:
# przekaznik pompy co
- platform: gpio
pin: 16
inverted: false
name: pompa co
icon: mdi:pump
id: pompa_co
restore_mode: ALWAYS_OFF
# przekaznik pompy solar
- platform: gpio
pin: 4
inverted: false
name: pompa solar
icon: mdi:pump
id: pompa_solar
restore_mode: ALWAYS_OFF
# przekaznik pompy cwu
- platform: gpio
pin: 17
inverted: false
name: pompa cwu
icon: mdi:pump
id: pompa_cwu
restore_mode: ALWAYS_OFF
# przekaznik pompy podłogówki
- platform: gpio
pin: 2
inverted: false
name: pompa podl
icon: mdi:pump
id: pompa_podl
restore_mode: ALWAYS_OFF
# switch buzzer
- platform: gpio
pin: 12
inverted: false
name: buzzer
icon: mdi:pump
id: buzzer
restore_mode: ALWAYS_OFF
# switch fan
- platform: gpio
pin: 23
inverted: false
name: fan
icon: mdi:pump
id: fan
restore_mode: ALWAYS_OFF
dallasng:
- pin: GPIO13
sensor:
- platform: wifi_signal
name: Kotlownia WiFi Signal
update_interval: 300s
# - platform: ld2410
# moving_distance:
# name : Moving Distance
# still_distance:
# name: Still Distance
# moving_energy:
# name: Move Energy
# still_energy:
# name: Still Energy
# detection_distance:
# name: Detection Distance
- platform: adc
id: cisnienie_solar
pin: 32
attenuation: auto
name: ciśnienie solary
unit_of_measurement: "bar"
device_class: "pressure"
accuracy_decimals: 2
filters:
- calibrate_linear:
- 0.45 -> 0.0
- 1.9 -> 1.75
- 2.25 -> 2
- 2.63 -> 2.5
- 3 -> 3
- 3.16 -> 3.15
- lambda: if (x > 0.45) return x; else return {};
- platform: adc
id: source_sensor
pin: 36
attenuation: auto
- platform: resistance
id: resistance_sensor
sensor: source_sensor
configuration: DOWNSTREAM
resistor: 5.6kOhm
reference_voltage: 3.3V
- platform: ntc
sensor: resistance_sensor
calibration:
b_constant: 3390
reference_temperature: 25°C
reference_resistance: 10kOhm
name: Temperatura solar
id: Tsolar
filters:
# - lambda: return x - 3.0;
- heartbeat: 60s
- platform: dallasng
address: 0x8d3c89f648a4c028
name: "Temperatura LCD"
unit_of_measurement: "°C"
device_class: "temperature"
accuracy_decimals: 1
id: temp_LCD
filters:
- heartbeat: 60s
on_value:
- if:
condition:
sensor.in_range:
id: temp_LCD
above: 55.0
then:
- switch.turn_on: fan
else:
- switch.turn_off: fan
- platform: dallasng
address: 0x053cfdf64892b728
name: "Temperatura podłogówka"
unit_of_measurement: "°C"
device_class: "temperature"
accuracy_decimals: 1
id: Tpodlogowka
filters:
- heartbeat: 60s
# - filter_out: nan
# temperatura bojlera dół
- platform: dallasng
address: 0x503c0bf64831f528
name: "Temperatura CWU_2"
unit_of_measurement: "°C"
device_class: "temperature"
accuracy_decimals: 1
id: Tcwu_2
filters:
- heartbeat: 60s
# - filter_out: nan
# temperatura bojlera góra
- platform: dallasng
address: 0xd13c3ef648f4ee28
name: "Temperatura CWU"
unit_of_measurement: "°C"
device_class: "temperature"
accuracy_decimals: 1
id: Tcwu
filters:
- heartbeat: 60s
# - filter_out: nan
- platform: dallasng
address: 0xdd3c1bf64878cc28
name: "Temperatura piec"
unit_of_measurement: "°C"
icon: "mdi:water-percent"
device_class: "temperature"
accuracy_decimals: 1
id: Tpiec
filters:
- heartbeat: 60s
# - filter_out: nan
on_value:
- if: # automatyzacja pompy co tryb priorytet cwu
condition:
lambda: |-
return id(tryb_co).state == "priorytet cwu";
then:
- if:
condition:
lambda: |-
return ( x > 45 && x < 70 && id(Tcwu).state < id(temperatura_cwu).state);
then:
- switch.turn_off: pompa_co
else:
- if:
condition:
lambda: |-
return x > id(temperatura_co_on).state;
then:
- switch.turn_on: pompa_co
- if:
condition:
lambda: |-
return x < (id(temperatura_co_on).state - 1);
then:
- switch.turn_off: pompa_co
- if: # automatyzacja pompy co tryb auto
condition:
lambda: |-
return id(tryb_co).state == "auto";
then:
- if:
condition:
lambda: |-
return id(Tpiec).state > id(temperatura_co_on).state;
then:
- switch.turn_on: pompa_co
- if:
condition:
lambda: |-
return id(Tpiec).state < (id(temperatura_co_on).state-1);
then:
- switch.turn_off: pompa_co
# - if: #tryb manual
# condition:
# lambda: |-
# return id(tryb_co).state == "manual";
# then:
# - if:
# condition:
# sensor.in_range:
# id: Tpiec
# above: 80.0
# then:
# - switch.turn_on: pompa_co
- if: # automatyzacja pompy podl tryb auto
condition:
lambda: |-
return id(tryb_podl).state == "auto";
then:
- if:
condition:
lambda: |-
return id(Tpiec).state > id(temperatura_podl_on).state;
then:
- switch.turn_on: pompa_podl
- if:
condition:
lambda: |-
return id(Tpiec).state < (id(temperatura_podl_on).state-1);
then:
- switch.turn_off: pompa_podl
- if: # automatyzacja pompy cwu tryb auto
condition:
lambda: |-
return id(tryb_cwu).state == "auto";
then:
- if:
condition:
lambda: |-
return (id(Tpiec).state > id(temperatura_cwu_on).state && id(Tpiec).state > id(Tcwu).state+2);
then:
- switch.turn_on: pompa_cwu
else:
# - if:
# condition:
# lambda: |-
# return id(Tpiec).state < (id(temperatura_cwu_on).state-1);
# then:
- switch.turn_off: pompa_cwu
# różnica Tsolar - Tcwu_2
- platform: template
name: "Delta Tsolar-Tcwu_2"
accuracy_decimals: 1
update_interval: 60s
device_class: temperature
unit_of_measurement: °C
filters:
- heartbeat: 60s
# - filter_out: nan
id: delta
lambda: |-
return id(Tsolar).state - id(Tcwu_2).state;
on_value:
- if: # automatyzacja pompy solar tryb auto
condition:
lambda: |-
return id(tryb_solar).state == "auto";
then:
- if:
condition:
- sun.is_above_horizon:
then:
- if:
condition:
lambda: |-
return (id(delta).state > id(histereza_on).state && id(Tsolar).state > id(Tcwu).state);
then:
- switch.turn_on: pompa_solar
- if:
condition:
lambda: |-
return id(delta).state < id(histereza_off).state;
then:
- switch.turn_off: pompa_solar
- if:
condition:
- sun.is_below_horizon:
then:
- switch.turn_off: pompa_solar
- if: # automatyzacja pompy solar tryb wakacje
condition:
lambda: |-
return id(tryb_solar).state == "wakacje";
then:
- if:
condition:
- sun.is_above_horizon:
then:
- if:
condition:
lambda: |-
return (id(delta).state > id(histereza_on).state && id(Tsolar).state > id(Tcwu).state);
then:
- switch.turn_on: pompa_solar
- if:
condition:
lambda: |-
return id(delta).state < id(histereza_off).state;
then:
- switch.turn_off: pompa_solar
else:
- if:
condition:
- sun.is_below_horizon:
then:
- if:
condition:
lambda: |-
return id(Tcwu).state > id(temp_wakacje).state;
then:
- switch.turn_on: pompa_solar
else:
- switch.turn_off: pompa_solar
- platform: uptime
id: uptime_sensor
internal: True
on_raw_value:
then:
- text_sensor.template.publish:
id: uptime_human
state: !lambda |-
int seconds = round(id(uptime_sensor).raw_state);
int days = seconds / (24 * 3600);
seconds = seconds % (24 * 3600);
int hours = seconds / 3600;
seconds = seconds % 3600;
int minutes = seconds / 60;
seconds = seconds % 60;
return (
(days ? to_string(days) + "d " : "") +
(hours ? to_string(hours) + "h " : "") +
(minutes ? to_string(minutes) + "m " : "") +
(to_string(seconds) + "s")
).c_str();
binary_sensor:
- platform: status
name: "Kotlownia Status"
id: esp32_status
- platform: ld2410
has_target:
name: Presence
has_moving_target:
name: Moving Target
has_still_target:
name: Still Target
#przycisk manual auto solar
- platform: gpio
pin:
number: GPIO35
inverted: true
mode:
input: true
name: "przycisk solar"
id: przycisk_solar
filters:
- delayed_on: 10ms
- delayed_off: 10ms
on_press:
then:
- if:
condition:
lambda: |-
return id(tryb_solar).state == "manual";
then:
- switch.toggle: pompa_solar
on_click:
- min_length: 1000ms
max_length: 20000ms
then:
- select.next: tryb_solar
#przycisk manual auto co
- platform: gpio
pin:
number: GPIO39
mode:
input: true
inverted: true
name: "przycisk co"
id: przycisk_co
filters:
- delayed_on: 10ms
- delayed_off: 10ms
on_press:
then:
- if:
condition:
lambda: |-
return id(tryb_co).state == "manual";
then:
- switch.toggle: pompa_co
on_click:
- min_length: 1000ms
max_length: 20000ms
then:
- select.next: tryb_co
#przycisk manual auto cwu
- platform: gpio
pin:
number: GPIO34
mode:
input: true
inverted: true
name: "przycisk cwu"
id: przycisk_cwu
filters:
- delayed_on: 10ms
- delayed_off: 10ms
on_press:
then:
- if:
condition:
lambda: |-
return id(tryb_cwu).state == "manual";
then:
- switch.toggle: pompa_cwu
on_click:
- min_length: 1000ms
max_length: 20000ms
then:
- select.next: tryb_cwu
#przycisk manual auto podłogówka
- platform: gpio
pin:
number: GPIO19
mode:
input: true
pullup: true
inverted: true
name: "przycisk podl"
id: przycisk_podl
filters:
- delayed_on: 10ms
- delayed_off: 10ms
on_press:
then:
- if:
condition:
lambda: |-
return id(tryb_podl).state == "manual";
then:
- switch.toggle: pompa_podl
on_click:
- min_length: 1000ms
max_length: 20000ms
then:
- select.next: tryb_podl
number:
# histereza załączenia pompy solar
- platform: template
name: "Histereza on solar"
icon: mdi:thermometer-chevron-up
unit_of_measurement: °C
optimistic: true
restore_value: true
initial_value: 10
mode: auto
min_value: 2
max_value: 15
step: 1
id: histereza_on
on_value:
then:
- if:
condition:
lambda: |-
return (x - id(histereza_off).state) < 1;
then:
- number.set:
id: histereza_off
value: !lambda |-
return x - 1;
# histereza wyłączenia pompy solar
- platform: template
name: "Histereza off solar"
icon: mdi:thermometer-chevron-down
unit_of_measurement: °C
optimistic: true
restore_value: true
initial_value: 5
mode: auto
min_value: 1
max_value: 10
step: 1
id: histereza_off
on_value:
then:
- if:
condition:
lambda: |-
return (id(histereza_on).state - x) < 1;
then:
- number.set:
id: histereza_on
value: !lambda |-
return x + 1;
# temperatura włączenia pompy co
- platform: template
name: Temperatura CO on
icon: mdi:thermometer-lines
unit_of_measurement: °C
optimistic: true
mode: auto
restore_value: true
min_value: 25
max_value: 42
initial_value: 35
step: 1
id: temperatura_co_on
# temperatura włączenia pompy cwu
- platform: template
name: Temperatura CWU on
icon: mdi:thermometer-lines
unit_of_measurement: °C
optimistic: true
mode: auto
restore_value: true
min_value: 30
max_value: 40
initial_value: 33
step: 1
id: temperatura_cwu_on
# temperatura włączenia pompy podl
- platform: template
name: Temperatura PODL on
icon: mdi:thermometer-lines
unit_of_measurement: °C
optimistic: true
mode: auto
restore_value: true
min_value: 28
max_value: 40
initial_value: 32
step: 1
id: temperatura_podl_on
# temperatura zadana cwu
- platform: template
name: Temperatura zadana CWU
icon: mdi:thermometer-lines
unit_of_measurement: °C
optimistic: true
mode: auto
restore_value: true
min_value: 32
max_value: 48
initial_value: 35
step: 1
id: temperatura_cwu
# temperatura chłodzenia w trybie wakacje
- platform: template
name: Temperatura chłodzenia CWU
icon: mdi:thermometer-lines
unit_of_measurement: °C
optimistic: true
mode: auto
restore_value: true
min_value: 40
max_value: 60
initial_value: 50
step: 5
id: temp_wakacje
- platform: ld2410
timeout:
name: timeout
light_threshold:
name: light threshold
max_move_distance_gate:
name: max move distance gate
max_still_distance_gate:
name: max still distance gate
g0:
move_threshold:
name: g0 move threshold
still_threshold:
name: g0 still threshold
g1:
move_threshold:
name: g1 move threshold
still_threshold:
name: g1 still threshold
g2:
move_threshold:
name: g2 move threshold
still_threshold:
name: g2 still threshold
g3:
move_threshold:
name: g3 move threshold
still_threshold:
name: g3 still threshold
g4:
move_threshold:
name: g4 move threshold
still_threshold:
name: g4 still threshold
g5:
move_threshold:
name: g5 move threshold
still_threshold:
name: g5 still threshold
g6:
move_threshold:
name: g6 move threshold
still_threshold:
name: g6 still threshold
g7:
move_threshold:
name: g7 move threshold
still_threshold:
name: g7 still threshold
g8:
move_threshold:
name: g8 move threshold
still_threshold:
name: g8 still threshold
light:
# LED stanu manual-auto solar
- platform: monochromatic
id: LED_solar
restore_mode: ALWAYS_OFF
output: solar_ledc
effects:
- pulse:
name: Fast Pulse
transition_length: 0.3s
update_interval: 0.3s
- pulse:
name: Slow Pulse
transition_length: 1s
update_interval: 1s
# LED stanu manual-auto co
- platform: monochromatic
id: LED_co
restore_mode: ALWAYS_OFF
output: co_ledc
effects:
- pulse:
name: Fast Pulse
transition_length: 0.3s
update_interval: 0.3s
- pulse:
name: Slow Pulse
transition_length: 1s
update_interval: 1s
# LED stanu manual-auto cwu
- platform: monochromatic
id: LED_cwu
restore_mode: ALWAYS_OFF
output: cwu_ledc
effects:
- pulse:
name: flash
transition_length: 0.3s
update_interval: 0.3s
# LED stanu manual-auto podl
- platform: monochromatic
id: LED_podl
restore_mode: ALWAYS_OFF
output: podl_ledc
effects:
- pulse:
name: flash
transition_length: 0.3s
update_interval: 0.3s
output:
- platform: ledc
id: solar_ledc
pin:
number: GPIO26
inverted: true
- platform: ledc
id: co_ledc
pin:
number: GPIO33
inverted: true
- platform: ledc
id: cwu_ledc
pin:
number: GPIO25
inverted: true
- platform: ledc
id: podl_ledc
pin:
number: GPIO27
inverted: true
select:
# tryb pompy co
- platform: template
name: tryb co
id: tryb_co
optimistic: true
options:
- "auto"
- "manual"
- "priorytet cwu"
initial_option: "auto"
on_value:
then:
- if:
condition:
lambda: 'return x == "manual";'
then:
- light.turn_on:
id: LED_co
effect: Fast Pulse
- if:
condition:
lambda: 'return x == "priorytet cwu";'
then:
- light.turn_on:
id: LED_co
effect: Slow Pulse
- if:
condition:
lambda: 'return x == "auto";'
then:
- light.turn_off:
id: LED_co
# tryb pompy solar
- platform: template
name: tryb solar
id: tryb_solar
optimistic: true
options:
- "auto"
- "manual"
- "wakacje"
initial_option: "auto"
on_value:
then:
- if:
condition:
lambda: 'return x == "manual";'
then:
- light.turn_on:
id: LED_solar
effect: Fast Pulse
- if:
condition:
lambda: 'return x == "wakacje";'
then:
- light.turn_on:
id: LED_solar
effect: Slow Pulse
- if:
condition:
lambda: 'return x == "auto";'
then:
- light.turn_off:
id: LED_solar
# tryb pompy cwu
- platform: template
name: tryb cwu
id: tryb_cwu
optimistic: true
options:
- "auto"
- "manual"
initial_option: "auto"
on_value:
then:
- if:
condition:
lambda: 'return x == "manual";'
then:
- light.turn_on:
id: LED_cwu
effect: flash
- if:
condition:
lambda: 'return x == "auto";'
then:
- light.turn_off:
id: LED_cwu
# tryb pompy podl
- platform: template
name: tryb podl
id: tryb_podl
optimistic: true
options:
- "auto"
- "manual"
initial_option: "auto"
on_value:
then:
- if:
condition:
lambda: 'return x == "manual";'
then:
- light.turn_on:
id: LED_podl
effect: flash
- if:
condition:
lambda: 'return x == "auto";'
then:
- light.turn_off:
id: LED_podl
Całość jest dość obszerna ale możesz sobie zobaczyć jak mniej więcej to wygląda.
Na początek jeżeli chcesz podłączyć jeden czujnik temperatury i jeden przekaźnik do pompy to skup się na tych wpisach
switch:
# przekaznik pompy co
- platform: gpio
pin: 16
inverted: false
name: pompa co
icon: mdi:pump
id: pompa_co
restore_mode: ALWAYS_OFF
- platform: dallasng
address: 0xdd3c1bf64878cc28
name: "Temperatura piec"
unit_of_measurement: "°C"
icon: "mdi:water-percent"
device_class: "temperature"
accuracy_decimals: 1
id: Tpiec
filters:
- heartbeat: 60s
# - filter_out: nan
on_value:
- if: # automatyzacja pompy co tryb priorytet cwu
condition:
lambda: |-
return id(tryb_co).state == "priorytet cwu";
then:
- if:
condition:
lambda: |-
return ( x > 45 && x < 70 && id(Tcwu).state < id(temperatura_cwu).state);
then:
- switch.turn_off: pompa_co
else:
- if:
condition:
lambda: |-
return x > id(temperatura_co_on).state;
then:
- switch.turn_on: pompa_co
- if:
condition:
lambda: |-
return x < (id(temperatura_co_on).state - 1);
then:
- switch.turn_off: pompa_co
- if: # automatyzacja pompy co tryb auto
condition:
lambda: |-
return id(tryb_co).state == "auto";
then:
- if:
condition:
lambda: |-
return id(Tpiec).state > id(temperatura_co_on).state;
then:
- switch.turn_on: pompa_co
- if:
condition:
lambda: |-
return id(Tpiec).state < (id(temperatura_co_on).state-1);
then:
- switch.turn_off: pompa_co
# - if: #tryb manual
# condition:
# lambda: |-
# return id(tryb_co).state == "manual";
# then:
# - if:
# condition:
# sensor.in_range:
# id: Tpiec
# above: 80.0
# then:
# - switch.turn_on: pompa_co
Ja mam zrobione jeszcze różne tryby pracy pompy: manual, auto, priorytet CWU oraz ustawienie temperatury przy której ma się załączyć pompa.
3 polubienia
szopen
31 Październik 2024 21:14
7
Tak mi się w oczy rzuciło wykorzystanie niestandardowego komponentu do obsługi DS18x20
external_components:
- source: github://nrandell/dallasng
[…]
- platform: dallasng
Czy miałeś problemy z nową platformą one_wire
(już po jej poprawieniu)?
zaktom
31 Październik 2024 21:26
8
W standardowej platformie co jakiś czas któryś z czujników miał wartość nieznany. Początkowo myślałem że to problem zakłóceń na magistrali one_wire. Próbowałem ekranować ale niewiele to zmieniło.Po wykorzystaniu tego niestandardowego komponentu dallasng problem zniknął i jak dotąd nie mam żadnych problemów z tym komponentem .
PS. Szczerze mówiąc nie sprawdzałem już potem po poprawie tej platformy Dallas jak to działa. Może z ciekawości sprawdzę.
1 polubienie
marek_k
(marek k)
1 Listopad 2024 08:14
9
Podzielę się swoimi projektami Automatyzacji kotłowni.
1 Solar CWU
Projekt ten powstał w celu wspomagania pracy ciśnieniowego kolektora słonecznego instalacją fotowoltaiczną.
captive_portal:
switch:
- platform: gpio
pin: D6
name: "SolarPV"
id: SolarPV
- platform: restart
name: "Solar restart"
binary_sensor:
- platform: gpio
pin:
number: D7
mode: INPUT_PULLUP
name: "Czujnik ciśnienia"
id: inputd7
filters:
- delayed_on: 500ms
- invert:
on_release:
then:
- switch.turn_off: SolarPV
- logger.log: "Czujnik ciśniena wyłączony"
# Example configuration entry
interval:
- interval: 1s
then:
- if:
condition:
binary_sensor.is_off: inputd7
then:
- switch.turn_off: SolarPV
one_wire:
- platform: gpio
pin: GPIO2
# Individual sensors
sensor:
- platform: dallas_temp
address: 0x953c17e3812e6b28
name: "Solar 1"
on_value_range:
- below: 83.0
then:
- switch.turn_on: SolarPV
- logger.log: "Temperatura CWU<83'C"
- above: 85.0
then:
- switch.turn_off: SolarPV
- logger.log: "Temperatura CWU>85'C"
2 Termet CWU
Jest to projekt który powstał ze względu na to gdyż chciałem stworzyć automatyzację która zmodyfikowała pracę pieca gazowego gazowego Termet Gold .
Krótkotrwałe odkręcenie wody poniżej 15sekund nie powoduje włączenia grzania wody.
Gdy temperatura wody Solar CWU przekracza ustalony próg w HA grzanie wody piecu gazowym się nie uruchamia.
captive_portal:
switch:
- platform: gpio
pin: D1
name: "CWU przekaźnik"
id: switchCWUp
inverted: True
on_turn_on:
- if:
condition:
binary_sensor.is_off: sp_CWU
then:
- delay:
5ms
- switch.turn_off: switchCWUp
- platform: gpio
inverted: True
pin: D2
name: "Termet Krzywa grzewcza/stała temp"
id: krzywa_stala
binary_sensor:
- platform: gpio
pin:
number: D6
mode: INPUT_PULLUP
inverted: true
name: "Sensor przepływu CWU"
id: sp_CWU
filters:
- delayed_on: 15s
on_press:
if:
condition:
binary_sensor.is_off: tempsolcwu
then:
- switch.turn_on: switchCWUp
on_release:
then:
- switch.turn_off: switchCWUp
- platform: homeassistant
id: tempsolcwu
entity_id: input_boolean.tempsolarcwu
3 polubienia
Gregor1
(Grzegorz)
1 Listopad 2024 16:59
11
Jak na razie to nie mogę dodać czujnika Dallas do ESP32 przez ESPHome. Robiłem to wielokrotnie w ESP 8266, a tu nie mogę.
one_wire:
- platform: gpio
pin: GPIO13
id: temperatura_kotla
Przekaźniki mam w HA, ale encji temperatury nie dam rady wyciągnąć. Chyba się poddam i wrócę do ESP 8266.
switch:
- platform: gpio
pin: GPIO12
restore_mode : ALWAYS_OFF
inverted: false
id: relay1
name: "pompa_CO"
- platform: gpio
pin: GPIO14
restore_mode : ALWAYS_OFF
inverted: false
id: relay2
name: "pompa_CWU"
one_wire:
- platform: gpio
pin: GPIO13
id: temperatura_kotla
szopen
1 Listopad 2024 17:03
12
Do zrobienia masz 2 rzeczy
Właściwe formatowanie postów, popraw posta powyżej, bo chciałem pomóc i go edytowałem, ale już go zmieniłeś… a nie jeszcze gorzej piszesz “posta pod postem” gdy nie pojawiła się żadna odpowiedź…
https://forum.arturhome.pl/t/jak-prawidlowo-zamieszczac-yaml-inny-kod-lub-logi-w-postach-na-forum/11455/
Czytanie dokumentacji
W standardowej platformie 1-wire trzeba zdefiniować 2 rzeczy
hub
one_wire:
- platform: gpio
pin: GPIO13
sensor - po zdefiniowaniu huba po kompilacji i uruchomieniu połączonego układu czytasz logi - tam zobaczysz wykryte sensory na magistrali, więc w drugim kroku dorzucasz do YAMLa coś w tym guście (tylko z adresem pasującym do egzemplarza Dallasa)
sensor:
- platform: dallas_temp
address: 0x1234567812345628
id: temperatura_kotla
name: "temperatura kotła"
update_interval: 120s
Gregor1:
Jak na razie to nie mogę dodać czujnika Dallas do ESP32 przez ESPHome. Robiłem to wielokrotnie w ESP 8266, a tu nie mogę.
To zdanie się kupy nie trzyma…
Firmware ESPHome możesz odpalić na różnych MCU - obojętnie czy ESP8266, ESP32 czy czymś innym na czym działa, ale co używałeś dotychczas to się zgadnąć nie da, ale o ESPHome to chyba nie masz pojęcia, więc nie wiem co używałeś…
Gregor1
(Grzegorz)
1 Listopad 2024 17:14
13
Zapomniałem się z tym wklejaniem. Sorka. Ale dzięki Tobie się obudziłem. Potrenuję to wklejanie. Tymczasem już leci wgrywanie.
Gregor1
(Grzegorz)
1 Listopad 2024 17:23
14
Jestem tylko leciwym elektrykiem, więc nie za bardzo znam się na tych terminach (nazwach}
Konfiguruję sobie płytki poprzez ESPHome (jak na razie z powodzeniem ESP8266). Robię to też przez esptool’a, czy inne podobne fleszerki.
Podłączam czujnik Dallas, wilgotności przekaźniki. W tym życiu już na pewno nie zbliżę się do Twojego poziomu. Ale dzięki Twojej uprzejmości czegoś się nauczę, za co bardzo Ci dziękuję.
szopen
1 Listopad 2024 17:29
15
Być może robiłeś to dawno (czytaj: przynajmniej kilka miesięcy wstecz) - akurat platforma dallas
już nie istnieje - wreszcie po wielu latach od powstania projektu ESPHome została zaimplementowana w miarę “prawdziwa” platforma 1-wire tj. taka nie ograniczona do tylko jednego modelu sensora, a uniwersalna (w tej chwili jest gotowa na obsługę zaledwie kilku modeli rożnych urządzeń 1-wire, ale jest to krok naprzód) więc musiała zostać dostosowana działaniem do innych platform obsługujących jakiekolwiek magistrale - stąd konieczność konfigurowania “huba” (dawne rozwiązanie nie było elastyczne - nie dałoby się na magistrali podpiąć żadnego innego czujnika niż DS18x20).
Jeśli znasz adres swojego DS18B20 to możesz go użyć od ręki.
Gregor1
(Grzegorz)
5 Listopad 2024 19:36
16
Przekopałem dużo stron i nie znalazłem odpowiedzi. Czy jest możliwe podłączenie włącznika bistabilnego do ESP32, aby np. sterował przekaźnikiem? Chciałem wykorzystać styki w termostacie pokojowym, aby reszta rodziny mogła sterować w prosty sposób temperaturą w domu.
Wszędzie są opisy włączników monostabilnych (np. dzwonkowych)
angler
(Cezary.K)
5 Listopad 2024 19:48
17
Tak - dla GPIO nie ma znaczenia jakiego łącznika używasz i jak długo go “trzymasz”. Ważne jest jaki na tym GPIO jest sygnał, wysoki czy niski oraz jego poziom dostosowany do elektroniki wewnątrz ESP. Zapewne jest to tak oczywiste, że nikt nie opisał tego w dokumentacji. Natomiast użycie przycisków daje nowe możliwości programowego wykorzystania np. dwukliku itp. dlatego siłą rzeczy musi być dobrze opisane.
Gregor1
(Grzegorz)
6 Listopad 2024 11:02
18
Dziękuję za informację. Wkleję kod który po zwarciu 3,3V z pinem D15 załącza przekaźnik pompy. Teraz muszę się nauczyć dostosować pracę pompy w zależności od temperatury kotła.
name: sterownik-kotla
friendly_name: sterownik-kotla
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "XTCMCg455/h8JU2K6x9YwiAzIpnQUr8aGXS3z9IwWYc="
ota:
- platform: esphome
password: "a6da52861469afb9d584d124254d4723"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Sterownik-Kotla Fallback Hotspot"
password: "488Awp9vjt8Y"
# przekaźnik pompy CO
switch:
- platform: gpio
pin: GPIO14
restore_mode : ALWAYS_OFF
inverted: true
id: relay1
name: "pompa_CO"
# przekaźnik pompy CWU
- platform: gpio
pin: GPIO27
restore_mode : ALWAYS_OFF
inverted: true
id: relay2
name: "pompa_CWU"
# przekaźnik pompy podłogowej w kuchni
- platform: gpio
pin: GPIO26
restore_mode : ALWAYS_OFF
inverted: true
id: relay3
name: "pompa_podloga_kuchnia"
# styk bistabilny termostatu pokojowego
binary_sensor:
- platform: gpio
pin: GPIO15
name: "styk_termostatu"
on_press:
then:
- switch.turn_on: relay1
on_release:
then:
- switch.turn_off: relay1
# czujnik temperatury w kotle CO
one_wire:
- platform: gpio
pin: GPIO13
id: temperatura_kotla
sensor:
- platform: dallas_temp
address: 0xab00000084f90128
name: "temperatura_kotla"
update_interval: 3s
# czujnik temperatury w kuchni
id: temperatura_podloga
- platform: dallas_temp
address: 0
name: "temperatura_podloga"
update_interval: 120s
# czujnik temperatury zasobnika CWU
id: temperatura_zasobnik_CWU
- platform: dallas_temp
address: 0
name: "temperatura_zasobnik_CWU"
update_interval: 30s
captive_portal:
```
angler
(Cezary.K)
6 Listopad 2024 13:09
19
Po pierwsze, należy trzymać się jednego nazewnictwa, bo często D15 będzie czymś innym niż GPIO15. Płytki z ESP są często opisywane w/g własnej logiki i nie odpowiada to numeracji GPIO.
Po drugie sugeruję użycie pullup i zwieranie do masy GND.
W ogóle to sugeruję zwieranie do masy, a nie do zasilania (wtedy GPIO muisi mieć włączony pullup lub fizyczny zewnętrzny rezystor). Oczywiście w specyfikacji MCU trzeba sprawdzić co może dany pin.
Zakomentuj lub wywal to
dashboard_import:
package_import_url: github://esphome/example-configs/esphome-web/esp32.yaml@main
import_full_config: true
Gregor1
(Grzegorz)
6 Listopad 2024 16:26
20
Dziękuję za odpowiedź.
Podłączyłem rezystor 10k między 3,3V i GPIO15. Po zwarciu GPIO15 z masą, przekaźnik załącza się poprawnie. Po rozwarciu GPIO15 od masy niestety przekaźnik dalej “trzyma”. Gdzie jest problem?