Sterowanie grzałkami z PV (EspHome)

Cześć
Wymyśliłem sobie sterowanie grzałkami zamontowanymi w bojlerze i buforze kiedy mam nadmiar produkcji PV.
Instalacja Off-Grid
Włączanie grzałek ma być zrealizowane na podstawie odczytu z czujnika światła (BH1750) i temperatury w zbiornikach czyli żadnego grzania kiedy nie ma słońca lub temperatury są osiągnięte.
To jest pierwsza część gdyż dojdzie jeszcze opcja że grzanie ma być włączone tylko przy nadmiarze produkcji z PV czyli w sytuacji kiedy akumulator jest naładowany i odbiór jest niewielki.
Podpowiedzcie czy idę słuszną drogą:

  1. Template switch żeby w ogóle włączyć grzanie
  2. Załączenie i wyłączenie przekaźników przy dostatecznym nasłonecznieniu
  3. Priorytet grzania CWU a po osiągnięciu zadanej temperatury grzanie bufora.
  4. Automatyzacja ma być w samym esphome w razie awarii HA

Czujniki temperatur są na innym urządzeniu, dlatego odczyt wartości musi się odbyć z HA
Poniżej fragment kodu jeszcze nie sprawdzony w rzeczywistości:

sensor:
  - platform: bh1750
    name: "Nasłonecznienie"
    id: slonce
    address: 0x23
    update_interval: 1s
    on_value_range:
        - above: 50000.0
          then:
            - if:
                condition:
                  switch.is_on: grzalki
                then:
                  - if:
                      condition:
                        lambda: |-
                          return id(temp_cwu).state < 62;
                      then:
                        - switch.turn_on: grzalka_cwu_1
                      else:
                        - switch.turn_on: grzalka_bufor_1  
        - below: 40000
          then:
            - switch.turn_off: grzalka_bufor_1
            - delay: 2s
            - switch.turn_off: grzalka_cwu_1

  - platform: homeassistant
    id: temp_cwu
    entity_id: sensor.kotlownia_cwu_hi

switch:
  - platform: template
    name: Grzałki
    id: grzalki
    optimistic: true
  - platform: gpio
    name: "Grzałka CWU 1"
    id: grzalka_cwu_1
    pin:
      pcf8574: pcf_1
      number: 0
      mode:
        output: true
      inverted: true
  - platform: gpio
    name: "Grzałka Bufora 1"
    id: grzalka_bufor_1
    pin:
      pcf8574: pcf_1
      number: 2
      mode:
        output: true
      inverted: true

W kodzie nie ma jeszcze czujnika w buforze ale chodzi mi bardziej o ogólny sens takiego rozwiązania.

Sens ma ale nie wiem czy dobrze kombinujesz z tym że chcesz pominąć HA. W kodzie masz odwołanie do temp_cwu który ma być odczytywany z HA czy źle zrozumiałem? Ja bym wolał odczytywać faktyczna produkcję z licznika żeby odpalić grzałki bo nie ufał bym czujnikowi natężenia światła. Chyba żeby do ESP połączyć płytkę modbus RS485 żeby odczyt zamykał się w obrębie samego ESP.
Taka integracja dopiero przede mną więc mogę się mylić :wink:

Możesz dorzucić dodatkowe czujniki DS18B20 do ESP i będziesz miał pominięty sensor temp_cwu

Tak właśnie jest (Rs232) ale z falownika można odczytać tylko aktualnie pobieraną moc a nie moc jaką może jeszcze dostarczyć i dlatego pomysł z czujnikiem światła.
Ogólnie ma to wyglądać tak że skoro natężenie światła ok 90tys luxów może dać moc z falownika 3200W bez wspomagania akumulatorem a aktualne obciążenie wynosi 600W to pozostaje mi do dyspozycji ok 2600W i wtedy ma się włączyć grzałka

Oczywiście że mogę tylko po co skoro już są tylko na innym ESP. Próbowałem bezpośredniego odczytu po HTTP ale wyrzuca mi błąd niewystarczającej ilości pamięci (kod samego falownika sporo zabiera).

Jak dla mnie dziwne bo request http z ESPHome do ESPHome nie zajmuje “więcej” niż to samo zapytanie ESPHome do HA o ten czujnik, coś mi tu nie pasuje :thinking:.

1 polubienie

Miałem jakiś błąd w stylu za mało pamięci JSON czy coś takiego.
Tym problemem zajmę się później
Dzisiaj uruchomiłem instalację z poniższym kodem i nawet całkiem fajnie to działa ale są problemy.

  1. Automatyka nie rusza natychmiast po włączeniu switcha “Grzałki” nawet jeśli jest wystarczające nasłonecznienie. Jeśli spadnie poniżej progu załączenia i dalej rośnie to wszystko jest ok.
  2. W momencie kiedy zostanie temperatura na CWU osiągnie wartość zadaną to grzałki nie przełączają się na bufor. Pewnie ma to związek z tym, że w kodzie jest znak > a w rzeczywistości jest =
  3. Zmiana w locie temperatury zadanej daje identyczny efekt.

Może kod automatyki powinienem umieścić gdzieś indziej? Pod template switchem? Tylko jak wtedy ustawić progi?


i2c:
  sda: 23
  scl: 22
  scan: true
  id: bus_a   

pcf8574:
  - id: 'pcf_1'
    address: 0x20
    pcf8575: false

button:
  - platform: restart
    name: "Restart"

number:
  - platform: template
    name: Nastawa CWU
    icon: mdi:thermometer-lines
    unit_of_measurement: °C
    optimistic: true
    restore_value: true
    min_value: 40
    max_value: 70
    initial_value: 62
    step: 1
    id: t_cwu
  - platform: template
    name: Sun start
    optimistic: true
    restore_value: true
    min_value: 20000
    max_value: 100000
    initial_value: 30000
    step: 2000
    id: sstart
  - platform: template
    name: Sun stop
    optimistic: true
    restore_value: true
    min_value: 10000
    max_value: 50000
    initial_value: 28000
    step: 2000
    id: sstop

sensor:
  - platform: bh1750
    name: "Nasłonecznienie"
    id: slonce
    address: 0x23
    update_interval: 10s
    on_value_range:
        - above: !lambda return id(sstart).state;
          then:
            - if:
                condition:
                  switch.is_on: grzalki
                then:
                  - if:
                      condition: 
                        lambda: |-
                          return id(temp_cwu).state < id(t_cwu).state;
                      then:
                        - switch.turn_on: grzalka_cwu_1
                        - switch.turn_off: grzalka_bufor_1
                  - if:
                      condition:
                        lambda: |-
                          return id(temp_cwu).state > id(t_cwu).state;
                      then:
                        - switch.turn_off: grzalka_cwu_1
                        - switch.turn_on: grzalka_bufor_1
        - above: !lambda return (id(sstart).state + 40000);
          then:
            - if:
                condition:
                  switch.is_on: grzalki
                then:
                  - if:
                      condition:
                        lambda: |-
                          return id(temp_cwu).state < id(t_cwu).state;
                      then:
                        - switch.turn_on: grzalka_cwu_2
                        - switch.turn_off: grzalka_bufor_2
                  - if:
                      condition:
                        lambda: |-
                          return id(temp_cwu).state > id(t_cwu).state;
                      then:
                        - switch.turn_off: grzalka_cwu_2
                        - switch.turn_on: grzalka_bufor_2
        - below: !lambda return (id(sstop).state + 40000);
          then:
            - switch.turn_off: grzalka_bufor_2
            - switch.turn_off: grzalka_cwu_2
                        
        - below: !lambda return id(sstop).state;
          then:
            - switch.turn_off: grzalka_bufor_1
            - switch.turn_off: grzalka_cwu_1

  - platform: homeassistant
    id: temp_cwu
    entity_id: sensor.kotlownia_cwu_hi
 
switch:
  - platform: template
    name: Grzałki
    id: grzalki
    optimistic: true
    on_turn_off:
        then:
          - switch.turn_off: grzalka_cwu_1
          - switch.turn_off: grzalka_cwu_2
          - switch.turn_off: grzalka_bufor_1
          - switch.turn_off: grzalka_bufor_2
 
  - platform: gpio
    name: "Grzałka CWU 1"
    id: grzalka_cwu_1
    pin:
      pcf8574: pcf_1
      number: 0
      mode:
        output: true
      inverted: true
  - platform: gpio
    name: "Grzałka CWU 2"
    id: grzalka_cwu_2
    pin:
      pcf8574: pcf_1
      number: 1
      mode:
        output: true
      inverted: true

  - platform: gpio
    name: "Grzałka Bufora 1"
    id: grzalka_bufor_1
    pin:
      pcf8574: pcf_1
      number: 2
      mode:
        output: true
      inverted: true
  - platform: gpio
    name: "Grzałka Bufora 2"
    id: grzalka_bufor_2
    pin:
      pcf8574: pcf_1
      number: 3
      mode:
        output: true
      inverted: true

output:
  - platform: ac_dimmer
    id: pwm1
    min_power: 0.01
    gate_pin: GPIO26
    zero_cross_pin:
      number: GPIO25
      mode:
        input: true
      inverted: yes
fan:
  - platform: speed
    output: pwm1
    name: Sterownik grzałek