ESPHome - Sterownik...
 
Powiadomienia
Wyczyść wszystko

ESPHome - Sterownik nawodnienia

3 Wpisów
2 Użytkownicy
2 Reactions
3,323 Wyświetleń
(@mig41)
Wpisów: 630
Ekspert
Autor tematu
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 
[#5550]

Zbliża się czas uruchomienia zraszaczy.

Ponieważ mam ich w sumie 12szt (zawory sterowane napięciem AC 24V ) ,nie było takiego gotowego sterownika , który by tyle obsłużył.

Postanowiłem złożyć coś na ESP8266 z ekspanderem GPIO na MCP23017 i płytką z 16 przekaźnikami. 

Ostatni przekaźnik służy do załączania pompy w studni , i jest sterowany pozostałymi zaworami/przekaźnikami. Czyli jeśli jakiś zawór jest włączony to również pompa , a jak wszystkie są zamknięte ,to pompa również ma się wyłączyć.

Dodatkowo każdy włączany zawór ma swój czas wyłączenia ( żeby przy jakimś zaniku połączenia z HA/Nodered nie wypompował całej wody ze studni).

Harmonogram ( a w zasadzie załączanie poszczególnych zaworów  , by wyłączą się same po określonym czasie) realizowany w Nodered.

Dodatkowo w HA da się załączyć poszczególne zawory z palca ( pompa startuje sama wraz z zaworem , jak wyżej).

Poniżej kod dla ESPHome:

 

esphome:
  name: zraszacze
  platform: ESP8266
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
  password: "esphome"

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

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Zraszacze Fallback Hotspot"
    password: "hidden"

captive_portal:


i2c:
  sda: GPIO0
  scl: GPIO2
  scan: True
  id: bus_a


#status_led:
#  pin: GPIO2
  
mcp23017:
  - id: 'mcp23017_hub'
    address: 0x20

sensor:
  - platform: wifi_signal
    name: "Sprinkler Wifi Signal"
    update_interval: 60s
    icon: mdi:wifi


switch:

# Z1 Nie używać ! Pod wiatą z panelami
  - platform: gpio
    name: "Sprinkler Z1 Switch"
    pin:
      mcp23xxx: mcp23017_hub
      number: 0
      mode: OUTPUT
      inverted: True
    id: z1
    on_turn_on:
      - switch.turn_off: z1
    
#Z2 Gardena wychylne
  - platform: gpio
    name: "Sprinkler Z2 Switch"
    pin:
      mcp23xxx: mcp23017_hub
      number: 8
      mode: OUTPUT
      inverted: True
    id: z2
    on_turn_on:
      - logger.log: "Turning on Z2 for 8 min"
      - switch.turn_on: z16
      - delay: 8min
      - logger.log: "Turning off Z2 after 8 min"
      - switch.turn_off: z2
    on_turn_off:
      if:
        condition:
          or:
            - lambda: 'return id(z3).state;'
            - lambda: 'return id(z4).state;'
            - lambda: 'return id(z6).state;'
            - lambda: 'return id(z7).state;'
            - lambda: 'return id(z8).state;'
            - lambda: 'return id(z9).state;'
            - lambda: 'return id(z10).state;'
            - lambda: 'return id(z11).state;'
          
        then:
          - logger.log: "Others then Z2 are on , leaving Z16"
        else:
          - logger.log: "Others then Z2 are off ,Switching off Z16"
          - switch.turn_off: z16
          

# Z3 Pod domem
  - platform: gpio
    name: "Sprinkler Z3 Switch"
    pin:
      mcp23xxx: mcp23017_hub
      number: 1
      mode: OUTPUT
      inverted: True
    id: z3
    on_turn_on:
      - logger.log: "Turning on Z3 for 10 min"
      - switch.turn_on: z16
      - delay: 10min
      - logger.log: "Turning off Z3 after 10 min"
      - switch.turn_off: z3
    on_turn_off:
      if:
        condition:
          or:
            - lambda: 'return id(z2).state;'
            - lambda: 'return id(z4).state;'
            - lambda: 'return id(z6).state;'
            - lambda: 'return id(z7).state;'
            - lambda: 'return id(z8).state;'
            - lambda: 'return id(z9).state;'
            - lambda: 'return id(z10).state;'
            - lambda: 'return id(z11).state;'
          
        then:
          - logger.log: "Others then Z3 are on , leaving Z16"
        else:
          - logger.log: "Others then Z3 are off ,Switching off Z16"
          - switch.turn_off: z16


#Z4 Linia kroplujaca
  - platform: gpio
    name: "Sprinkler Z4 Switch"
    pin:
      mcp23xxx: mcp23017_hub
      number: 9
      mode: OUTPUT
      inverted: True
    id: z4
    on_turn_on:
      - logger.log: "Turning on Z4 for 25 min"
      - switch.turn_on: z16
      - delay: 25min
      - logger.log: "Turning off Z4 after 25 min"
      - switch.turn_off: z4
    on_turn_off:
      if:
        condition:
          or:
            - lambda: 'return id(z2).state;'
            - lambda: 'return id(z3).state;'
            - lambda: 'return id(z6).state;'
            - lambda: 'return id(z7).state;'
            - lambda: 'return id(z8).state;'
            - lambda: 'return id(z9).state;'
            - lambda: 'return id(z10).state;'
            - lambda: 'return id(z11).state;'
          
        then:
          - logger.log: "Others then Z4 are on , leaving Z16"
        else:
          - logger.log: "Others then Z4 are off ,Switching off Z16"
          - switch.turn_off: z16

#Z5 Nie używać ! Nibieska rura rabatka. 
  - platform: gpio
    name: "Sprinkler Z5 Switch"
    pin:
      mcp23xxx: mcp23017_hub
      number: 2
      mode: OUTPUT
      inverted: True
    id: z5
    on_turn_on:
      - switch.turn_off: z5

#Z6 Pod płotem małe
  - platform: gpio
    name: "Sprinkler Z6 Switch"
    pin:
      mcp23xxx: mcp23017_hub
      number: 10
      mode: OUTPUT
      inverted: True
    id: z6
    on_turn_on:
      - logger.log: "Turning on Z6 for 7 min"
      - switch.turn_on: z16
      - delay: 7min
      - logger.log: "Turning off Z6 after 7 min"
      - switch.turn_off: z6
    on_turn_off:
      if:
        condition:
          or:
            - lambda: 'return id(z2).state;'
            - lambda: 'return id(z3).state;'
            - lambda: 'return id(z4).state;'
            - lambda: 'return id(z7).state;'
            - lambda: 'return id(z8).state;'
            - lambda: 'return id(z9).state;'
            - lambda: 'return id(z10).state;'
            - lambda: 'return id(z11).state;'
          
        then:
          - logger.log: "Others then Z6 are on , leaving Z16"
        else:
          - logger.log: "Others then Z6 are off ,Switching off Z16"
          - switch.turn_off: z16

#Z7 Za trasem małe
  - platform: gpio
    name: "Sprinkler Z7 Switch"
    pin:
      mcp23xxx: mcp23017_hub
      number: 3
      mode: OUTPUT
      inverted: True
    id: z7
    on_turn_on:
      - logger.log: "Turning on Z7 for 7 min"
      - switch.turn_on: z16
      - delay: 7min
      - logger.log: "Turning off Z7 after 7 min"
      - switch.turn_off: z7
    on_turn_off:
      if:
        condition:
          or:
            - lambda: 'return id(z2).state;'
            - lambda: 'return id(z3).state;'
            - lambda: 'return id(z4).state;'
            - lambda: 'return id(z6).state;'
            - lambda: 'return id(z8).state;'
            - lambda: 'return id(z9).state;'
            - lambda: 'return id(z10).state;'
            - lambda: 'return id(z11).state;'
          
        then:
          - logger.log: "Others then Z7 are on , leaving Z16"
        else:
          - logger.log: "Others then Z7 are off ,Switching off Z16"
          - switch.turn_off: z16

#Z8 Za garażem
  - platform: gpio
    name: "Sprinkler Z8 Switch"
    pin:
      mcp23xxx: mcp23017_hub
      number: 11
      mode: OUTPUT
      inverted: True
    id: z8
    on_turn_on:
      - logger.log: "Turning on Z8 for 7 min"
      - switch.turn_on: z16
      - delay: 7min
      - logger.log: "Turning off Z8 after 7 min"
      - switch.turn_off: z8
    on_turn_off:
      if:
        condition:
          or:
            - lambda: 'return id(z2).state;'
            - lambda: 'return id(z3).state;'
            - lambda: 'return id(z4).state;'
            - lambda: 'return id(z6).state;'
            - lambda: 'return id(z7).state;'
            - lambda: 'return id(z9).state;'
            - lambda: 'return id(z10).state;'
            - lambda: 'return id(z11).state;'
          
        then:
          - logger.log: "Others then Z8 are on , leaving Z16"
        else:
          - logger.log: "Others then Z8 are off ,Switching off Z16"
          - switch.turn_off: z16

#Z9 Na zachodzie obrotowe
  - platform: gpio
    name: "Sprinkler Z9 Switch"
    pin:
      mcp23xxx: mcp23017_hub
      number: 4
      mode: OUTPUT
      inverted: True
    id: z9
    on_turn_on:
      - logger.log: "Turning on Z9 for 10 min"
      - switch.turn_on: z16
      - delay: 10min
      - logger.log: "Turning off Z9 after 10 min"
      - switch.turn_off: z9
    on_turn_off:
      if:
        condition:
          or:
            - lambda: 'return id(z2).state;'
            - lambda: 'return id(z3).state;'
            - lambda: 'return id(z4).state;'
            - lambda: 'return id(z6).state;'
            - lambda: 'return id(z7).state;'
            - lambda: 'return id(z8).state;'
            - lambda: 'return id(z10).state;'
            - lambda: 'return id(z11).state;'
          
        then:
          - logger.log: "Others then Z9 are on , leaving Z16"
        else:
          - logger.log: "Others then Z9 are off ,Switching off Z16"
          - switch.turn_off: z16

#Z10 Na zachodzie małe
  - platform: gpio
    name: "Sprinkler Z10 Switch"
    pin:
      mcp23xxx: mcp23017_hub
      number: 12
      mode: OUTPUT
      inverted: True
    id: z10
    on_turn_on:
      - logger.log: "Turning on Z10 for 8 min"
      - switch.turn_on: z16
      - delay: 8min
      - logger.log: "Turning off Z10 after 8 min"
      - switch.turn_off: z10
    on_turn_off:
      if:
        condition:
          or:
            - lambda: 'return id(z2).state;'
            - lambda: 'return id(z3).state;'
            - lambda: 'return id(z4).state;'
            - lambda: 'return id(z6).state;'
            - lambda: 'return id(z7).state;'
            - lambda: 'return id(z8).state;'
            - lambda: 'return id(z9).state;'
            - lambda: 'return id(z11).state;'
          
        then:
          - logger.log: "Others then Z10 are on , leaving Z16"
        else:
          - logger.log: "Others then Z10 are off ,Switching off Z16"
          - switch.turn_off: z16


#Z11 Pod płotem obrotowe
  - platform: gpio
    name: "Sprinkler Z11 Switch"
    pin:
      mcp23xxx: mcp23017_hub
      number: 5
      mode: OUTPUT
      inverted: True
    id: z11
    on_turn_on:
      - logger.log: "Turning on Z11 for 20 min"
      - switch.turn_on: z16
      - delay: 20min
      - logger.log: "Turning off Z2 after 20 min"
      - switch.turn_off: z11
    on_turn_off:
      if:
        condition:
          or:
            - lambda: 'return id(z2).state;'
            - lambda: 'return id(z3).state;'
            - lambda: 'return id(z4).state;'
            - lambda: 'return id(z6).state;'
            - lambda: 'return id(z7).state;'
            - lambda: 'return id(z8).state;'
            - lambda: 'return id(z9).state;'
            - lambda: 'return id(z10).state;'
          
        then:
          - logger.log: "Others then Z11 are on , leaving Z16"
        else:
          - logger.log: "Others then Z11 are off ,Switching off Z16"
          - switch.turn_off: z16

      
#Z12 Nie podłączone
  - platform: gpio
    name: "Sprinkler Z12 Switch"
    pin:
      mcp23xxx: mcp23017_hub
      number: 13
      mode: OUTPUT
      inverted: True
    id: z12
    on_turn_on:
      - switch.turn_off: z12

#Z13 Nie podłączone
  - platform: gpio
    name: "Sprinkler Z13 Switch"
    pin:
      mcp23xxx: mcp23017_hub
      number: 6
      mode: OUTPUT
      inverted: True
    id: z13
    on_turn_on:
      - switch.turn_off: z13
      
#Z14 Nie podłączone
  - platform: gpio
    name: "Sprinkler Z14 Switch"
    pin:
      mcp23xxx: mcp23017_hub
      number: 14
      mode: OUTPUT
      inverted: True
    id: z14
    on_turn_on:
      - switch.turn_off: z14

#Z15 Nie podłączone
  - platform: gpio
    name: "Sprinkler Z15 Switch"
    pin:
      mcp23xxx: mcp23017_hub
      number: 7
      mode: OUTPUT
      inverted: True
    id: z15
    on_turn_on:
      - switch.turn_off: z15

#Z16 Pompa
  - platform: gpio
    name: "Sprinkler Z16 Switch"
    pin:
      mcp23xxx: mcp23017_hub
      number: 15
      mode: OUTPUT
      inverted: True
    id: z16


     

 

 

A tak to wygląda w HA:

image

 
Dodane : 19/04/2023 8:11 pm
isom i pawell32 zareagowali
isom
 isom
(@isom)
Wpisów: 5319
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

Szkoda że na sztywno ustawiasz czasy załaczenia, ja w podobnym rozwiazaniu tyle że z tasmotą dla każdej sekcji ustalam czas przy użyciu zmiennej, którą mogę modyfikować za pomocą input_number. Pozwala to ustawić dłuższe lub krótsze cykle w zależności od aktualnej pogody. Na dłuższe okresy upałów warto wydłużyć cykle, natomiast chcąc oszczędzać wodę warto je skracać gdy jest taka możliwość.


 
Dodane : 20/04/2023 8:35 am
(@mig41)
Wpisów: 630
Ekspert
Autor tematu
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

@isom Możesz to traktować jako maksymalny/absolutny czas  po którym sekcja musi się wyłączyć ( bo prąd , bo woda ) i traktować ten czas jako kolejny/ostateczny bezpiecznik ( bo w miedzyczasie nastąpi brak komunikacji , sygnału na wyłącz z harmonogramu nie będzie bo np Nodered się wykrzaczył ,i akurat nie wyłączył )   , natomiast w Harmonogramie /Nodered wyłączać sekcję odpowiednio wcześnie i tam zmieniać/skracać/wydłużać czasy.

 

Nic nie stoi na przeszkodzie ,żeby sekcję wyłączyć wcześniej z palca  , czy z harmonogramu.

 

EDIT: Natomiast jest jeden haczyk, jeśli wyłaczenie nastąpiło wcześniej , to ten czas i tak jest odliczany dalej , i wtedy i tak po tym czasie wyłączy nam sekcję jeszcze raz ( gdyby wcześniej coś ją drugi raz włączyło). Wszystko przez użycie prostego delay...


 
Dodane : 20/04/2023 8:56 am
Udostępnij: