Trafiłem na wszystkim znanym chińskim portalu aukcyjnym na płytkę z 8 przekaźnikami opartą na esp, kosztowała ok 75zł, daje się na nią wgrać esphome, przekaźniki działają błyskawicznie - praktycznie bez zwłoki sterowane z HA, to pomyślałem aby wykonać na tym system nawadniania, który obecnie działa u mnie na sterowniku Rainbird, niestety niezintegrowanym z HA ze względu na koszty (moduł wifi do niego kosztuje 500zł)
Płytka wygląda tak:
Ma może ktoś system nawadniania wykonany na esphome? Nie wiem jak się do tego zabrać tzn. czy próbować wykonać system “autonomiczny”, który działa pomimo utraty połączenia z HA, a z HA zadawać mu jedynie parametry, o której dana sekcja ma startować i jak długo, czy zostawić w esphome jedynie przekaźniki jako switch, które są sterowane w pełni automatyzacją z HA?
Widziałem na HACS GitHub - jeroenterheerdt/HAsmartirrigation: Smart Irrigation custom component for Home Assistant co wydaje się bardzo fajnym rozwiązaniem, oszczędzającym wodę (wprawdzie mam swoją studnię ale po co lać jak nie jest to potrzebne), próbował ktoś tej integracji jak to się sprawdza?
PS: Znalazł ktoś sensowny czujnik ciśnienia wody działający z esphome (z dobrym stosunkiem cena/jakość)?
Przypomniałeś mi o temacie i wszystkie pasujące wątki, które pamiętam wrzuciłem pod taga nawadnianie jeśli jakiś nieotagowany znajdziesz na forum to wrzuć tu linki to je potaguję.
Wydaje się, że działa, chociaż nie do końca rozumiem sekcję związaną z akcjami: Sprinkler Controller — ESPHome
Wiem, że da się np. wywołać akcje przez wejście GPIO tak aby “ręcznie” odpalić kolejkę ale nie do końca wiem jak tą sekcję dodać do kodu niby jest przykład ale jak go chce wkleić to mam błąd - pewnie wklejam w złe miejsce. Mógłbyś podzielić się swoim kodem?
A to trochę nowość bo z Twoich postów zapamiętałem, że dużo własnych modułów masz na Tasmota a tu ESPHome i w dodatku z timerami, chyba, że tym sterownikiem steruje HA.
Przyszła wiosna więc zabawy z podlewaniem nadszedł czas
Dzięki @isom1266 udało mi się to zrobić, a z efektu finalnego jestem zadowolony, jedynie zasięg wifi jest strasznie słaby z tego ESP na płytce - mimo, że mam na dworze Ubiquiti UAP-AC-M co super pokrywa całe podwórko - a nawet i pół osiedla, to zasięg wifi z esp jest słaby - chyba przelutuje to esp32 na płytce na wersję z gniazdem do anteny zewnętrznej - między płytką, a AP jest ok 20m w linii prostej i jedyną przeszkodą po drodze jest drewniany domek w którym ta płytka jest,a zrywa połączenie, wg. esp sygnał wifi jest na poziomie -63dBi +/-5, a wg. unifi -88dBm ale TX Retries 42%.
substitutions:
### Modify only the following 6 lines.
zone_1_name: 1.Trawnik 1
zone_2_name: 2.Trawnik 2
zone_3_name: 3.Trawnik 3
zone_4_name: 4.Trawnik 4
zone_5_name: 5.Trawnik 5
zone_6_name: 6.Trawnik 6
zone_7_name: 7.Kroplownica
software_version: V1
sensor_update_frequency: 1s
log_level: none # Enable levels logging https://esphome.io/components/logger.html
# none, error, warn, info, debug (default), verbose, very_verbose
##############################################
# DO NOT CHANGE ANYTHING BELOW THIS LINE ###
##############################################
zone_1_valve_id: valve_0
zone_2_valve_id: valve_1
zone_3_valve_id: valve_2
zone_4_valve_id: valve_3
zone_5_value_id: value_4
zone_6_value_id: value_5
zone_7_value_id: value_6
esphome_name: podlewanie
esphome_platform: ESP32
esphome_board: esp32dev
esphome_comment: Irrigation Control
esphome_project_name: dar3k.Irrigation Control
esphome_project_version: Irrigation Controller, $software_version
devicename: irrigation_controller
upper_devicename: "Irrigation Controller"
uom: Min # this overrides the uom in sprinkler -> run_duration
#Define Project Deatils and ESP Board Type
esphome:
name: $esphome_name
platform: $esphome_platform
board: $esphome_board
comment: $esphome_comment
project:
name: $esphome_project_name
version: $esphome_project_version
on_boot:
priority: -100
then:
# Set default state for Valve Status
- text_sensor.template.publish:
id: valve_status
state: "Idle"
# Set multiplier to 60, convert seconds to minutes
- sprinkler.set_multiplier:
id: $devicename
multiplier: 60
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
logger:
# Enable Web server.
web_server:
port: 80
# Sync time with Home Assistant.
time:
- platform: homeassistant
id: homeassistant_time
api:
encryption:
key: "LjHIyJtf6N8iHqE6ev8j6XmUlzsvKt8AGdnyeguckLE="
ota:
password: "cfaa0c792a4c710253d485add7d61c37"
###############################################
# Text sensors with general information.
###############################################
text_sensor:
- platform: wifi_info
ip_address:
name: "$upper_devicename IP"
# Expose Time Remaining as a sensor.
- platform: template
id: time_remaining
name: $upper_devicename Time Remaining
update_interval: $sensor_update_frequency
icon: "mdi:timer-sand"
lambda: |-
int seconds = round(id($devicename).time_remaining_active_valve().value_or(0));
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 ? String(days) + "d " : "") +
(hours ? String(hours) + "h " : "") +
(minutes ? String(minutes) + "m " : "") +
(String(seconds) + "s")).c_str()};
# Expose Progress Percent as a sensor.
- platform: template
id: progress_percent
name: $upper_devicename Progress %
update_interval: $sensor_update_frequency
icon: "mdi:progress-clock"
lambda: |-
int progress_percent = round(((id($devicename).valve_run_duration_adjusted(id($devicename).active_valve().value_or(0)) - id($devicename).time_remaining_active_valve().value_or(0)) * 100 / id($devicename).valve_run_duration_adjusted(id($devicename).active_valve().value_or(0))));
std::string progress_percent_as_string = std::to_string(progress_percent);
return progress_percent_as_string +"%";
# Expose Valve Status as a sensor.
- platform: template
id: valve_status
name: $upper_devicename Status
update_interval: never
icon: "mdi:information-variant"
sensor:
# Uptime sensor.
- platform: uptime
name: $upper_devicename Uptime
# WiFi Signal sensor.
- platform: wifi_signal
name: $upper_devicename WiFi Signal
update_interval: 120s
- platform: dht
pin: 4
temperature:
name: "Temperatura"
id: temperature_sensor
humidity:
name: "Wilgotnosc"
id: humidity_sensor
update_interval: 90s
- platform: adc
pin: A6
attenuation: 11db
name: "Water pressure"
unit_of_measurement: "bar"
update_interval: 1s
filters:
- multiply: 3.0303
number:
- platform: template
id: zone_1_valve_id
name: $zone_1_name
min_value: 1
max_value: 15
step: 1
unit_of_measurement: $uom
icon: "mdi:timer-outline"
mode: box # Defines how the number should be displayed in the UI
lambda: "return id($devicename).valve_run_duration(0);"
set_action:
- sprinkler.set_valve_run_duration:
id: $devicename
valve_number: 0
run_duration: !lambda 'return x;'
- platform: template
id: zone_2_valve_id
name: $zone_2_name
min_value: 1
max_value: 15
step: 1
unit_of_measurement: $uom
icon: "mdi:timer-outline"
mode: box # Defines how the number should be displayed in the UI
lambda: "return id($devicename).valve_run_duration(1);"
set_action:
- sprinkler.set_valve_run_duration:
id: $devicename
valve_number: 1
run_duration: !lambda 'return x;'
- platform: template
id: zone_3_valve_id
name: $zone_3_name
min_value: 1
max_value: 15
step: 1
unit_of_measurement: $uom
icon: "mdi:timer-outline"
mode: box # Defines how the number should be displayed in the UI
lambda: "return id($devicename).valve_run_duration(2);"
set_action:
- sprinkler.set_valve_run_duration:
id: $devicename
valve_number: 2
run_duration: !lambda 'return x;'
- platform: template
id: zone_4_valve_id
name: $zone_4_name
min_value: 1
max_value: 15
step: 1
unit_of_measurement: $uom
icon: "mdi:timer-outline"
mode: box # Defines how the number should be displayed in the UI
lambda: "return id($devicename).valve_run_duration(3);"
set_action:
- sprinkler.set_valve_run_duration:
id: $devicename
valve_number: 3
run_duration: !lambda 'return x;'
- platform: template
id: zone_5_valve_id
name: $zone_5_name
min_value: 1
max_value: 15
step: 1
unit_of_measurement: $uom
icon: "mdi:timer-outline"
mode: box # Defines how the number should be displayed in the UI
lambda: "return id($devicename).valve_run_duration(4);"
set_action:
- sprinkler.set_valve_run_duration:
id: $devicename
valve_number: 4
run_duration: !lambda 'return x;'
- platform: template
id: zone_6_valve_id
name: $zone_6_name
min_value: 1
max_value: 15
step: 1
unit_of_measurement: $uom
icon: "mdi:timer-outline"
mode: box # Defines how the number should be displayed in the UI
lambda: "return id($devicename).valve_run_duration(5);"
set_action:
- sprinkler.set_valve_run_duration:
id: $devicename
valve_number: 5
run_duration: !lambda 'return x;'
- platform: template
id: zone_7_valve_id
name: $zone_7_name
min_value: 1
max_value: 30
step: 1
unit_of_measurement: $uom
icon: "mdi:timer-outline"
mode: box # Defines how the number should be displayed in the UI
lambda: "return id($devicename).valve_run_duration(6);"
set_action:
- sprinkler.set_valve_run_duration:
id: $devicename
valve_number: 6
run_duration: !lambda 'return x;'
###############################################
# Main Sprinkler Controller
###############################################
sprinkler:
- id: $devicename
main_switch:
name: "Start/Stop/Resume"
id: main_switch
auto_advance_switch: "Auto Advance"
valve_open_delay: 4s
valves:
- valve_switch: $zone_1_name
enable_switch: Enable $zone_1_name
run_duration: 5s
valve_switch_id: ${devicename}_1
- valve_switch: $zone_2_name
enable_switch: Enable $zone_2_name
run_duration: 5s
valve_switch_id: ${devicename}_2
- valve_switch: $zone_3_name
enable_switch: Enable $zone_3_name
run_duration: 6s
valve_switch_id: ${devicename}_3
- valve_switch: $zone_4_name
enable_switch: Enable $zone_4_name
run_duration: 6s
valve_switch_id: ${devicename}_4
- valve_switch: $zone_5_name
enable_switch: Enable $zone_5_name
run_duration: 6s
valve_switch_id: ${devicename}_5
- valve_switch: $zone_6_name
enable_switch: Enable $zone_6_name
run_duration: 6s
valve_switch_id: ${devicename}_6
- valve_switch: $zone_7_name
enable_switch: Enable $zone_7_name
run_duration: 12s
valve_switch_id: ${devicename}_7
button:
- platform: template
id: sprinkler_pause
name: "Pauza"
icon: "mdi:pause"
on_press:
then:
- text_sensor.template.publish:
id: valve_status
state: "Paused"
- sprinkler.pause: $devicename
####################################################
# Switch Control to restart the irrigation system.
####################################################
switch:
- platform: restart
name: "Restart $devicename"
####################################################
# Hidden I/O Switches to control irrigation valve relays
####################################################
- platform: gpio
name: Relay Board Pin IN1
restore_mode: RESTORE_DEFAULT_OFF # Prevents GPIO pin from going high during boot
internal: true # Prevents GPIO switch NAME from showing up in Home Assistant
id: ${devicename}_1
on_turn_on:
- text_sensor.template.publish:
id: valve_status
state: "$zone_1_name Active"
on_turn_off:
- text_sensor.template.publish:
id: valve_status
state: "Idle"
pin: GPIO32
inverted: false
- platform: gpio
name: Relay Board Pin IN2
restore_mode: RESTORE_DEFAULT_OFF # Prevents GPIO pin from going high during boot
internal: true # Prevents GPIO switch NAME from showing up in Home Assistant
id: ${devicename}_2
on_turn_on:
- text_sensor.template.publish:
id: valve_status
state: "$zone_2_name Active"
on_turn_off:
- text_sensor.template.publish:
id: valve_status
state: "Idle"
pin: GPIO33
inverted: false
- platform: gpio
name: Relay Board Pin IN3
restore_mode: RESTORE_DEFAULT_OFF # Prevents GPIO pin from going high during boot
internal: true # Prevents GPIO switch NAME from showing up in Home Assistant
id: ${devicename}_3
on_turn_on:
- text_sensor.template.publish:
id: valve_status
state: "$zone_3_name Active"
on_turn_off:
- text_sensor.template.publish:
id: valve_status
state: "Idle"
pin: GPIO25
inverted: false
- platform: gpio
name: Relay Board Pin IN4
restore_mode: RESTORE_DEFAULT_OFF # Prevents GPIO pin from going high during boot
internal: true # Prevents GPIO switch NAME from showing up in Home Assistant
id: ${devicename}_4
on_turn_on:
- text_sensor.template.publish:
id: valve_status
state: "$zone_4_name Active"
on_turn_off:
- text_sensor.template.publish:
id: valve_status
state: "Idle"
pin: GPIO26
inverted: false
- platform: gpio
name: Relay Board Pin IN5
restore_mode: RESTORE_DEFAULT_OFF # Prevents GPIO pin from going high during boot
internal: true # Prevents GPIO switch NAME from showing up in Home Assistant
id: ${devicename}_5
on_turn_on:
- text_sensor.template.publish:
id: valve_status
state: "$zone_5_name Active"
on_turn_off:
- text_sensor.template.publish:
id: valve_status
state: "Idle"
pin: GPIO27
inverted: false
- platform: gpio
name: Relay Board Pin IN6
restore_mode: RESTORE_DEFAULT_OFF # Prevents GPIO pin from going high during boot
internal: true # Prevents GPIO switch NAME from showing up in Home Assistant
id: ${devicename}_6
on_turn_on:
- text_sensor.template.publish:
id: valve_status
state: "$zone_6_name Active"
on_turn_off:
- text_sensor.template.publish:
id: valve_status
state: "Idle"
pin: GPIO14
inverted: false
- platform: gpio
name: Relay Board Pin IN7
restore_mode: RESTORE_DEFAULT_OFF # Prevents GPIO pin from going high during boot
internal: true # Prevents GPIO switch NAME from showing up in Home Assistant
id: ${devicename}_7
on_turn_on:
- text_sensor.template.publish:
id: valve_status
state: "$zone_7_name Active"
on_turn_off:
- text_sensor.template.publish:
id: valve_status
state: "Idle"
pin: GPIO12
inverted: false
- platform: gpio
pin: GPIO13
name: Przekaznik
id: Przekaznik
binary_sensor:
- platform: gpio
pin:
number: GPIO0
inverted: true
name: "Przycisk"
on_press:
then:
- switch.toggle: main_switch
- platform: gpio
pin:
number: GPIO15
mode:
input: true
name: "Czujnik deszczu"
filters:
- delayed_on: 50ms
- delayed_off: 50ms
Zrobione
Pozostało do zrobienia - podłączyć czujnik deszczu - musi on być podłączony jako bezpotencjałowy - tak aby dawał zwarcie / rozwarcie. Dorobię przy czasie - bo tam chyba też trzeba z rezystorami coś kombinować aby poprawnie wykrywało.
Możliwe, że pomoże zajrzenie w konfigurację ustawień Twojego AP. Miałem podobne objawy ponieważ domyślne ustawienie dla radia opcji “Minimum RSSI” jest włączone. Wycina urządzenia, które mają słabsze sygnały. Nie pamiętam ale być może jeszcze coś należało w tej kwestii poprawić.
Na jakiej zasadzie działa ten czujnik deszczu? Mierzy przewodność? Jak patrzę na jego ilustracje, to nie wizę żadnej miseczki zbierającej krople wody. To w ogóle ma prawo działać?
@angler miałem to w ręku, tam jest taki “pływak”, więc po deszczu też musi upłynąć jakiś czas aby mogło się ponownie włączyć podlewania. Na moje oko to nie jest zwykły czujnik opadów - uwzględnia to że po deszczy nie ma sensu podlewać
Tego rodzaju czujnik ma wewnątrz pochłaniające wodę tarcze higroskopijne, dzięki temu nie wymaga specjalnej automatyzacji, ponieważ czas “wysychania” jest proporcjonalny do nasiąkania. Mam taki od kilku lat, wstępnie przerywał masę zasilania elektrozaworów, ale to w pewnym stopniu mnie ograniczało, więc podłączyłem pod GPIO jako switch, nad którym mam jakąś kontrolę
Zastanawia mnie tylko jak dochodzi do kontaktu z wodą? Myślałem, że krople muszą trafiać w mały otwór u góry czujnika i wydaje mi się to nielogiczne ale może wystarcza sama wilgoć z powietrza? To by miało sens.