Wallbox który pozwala sterować mocą ładowania przez HA

Na forum mało w tym temacie, szukam ładowarki AC do auta elektrycznego tzw. wallbox która będzie się dobrze integrowała z home assistant nie będzie kosztować milionów, a pozwoli na takie sterowanie z HA aby móc w miarę płynnie ograniczać moc ładowania uwzględniając produkcję PV (bilansowanie godzinowe - to już mam zrobione) i zużywać jak najwięcej produkcji PV na ładowanie auta gdy jestem w domu a świeci słońce.
W przypadku tesli problemu nie ma bo ma API do tego dostępne. Inne auta potrzebują czegoś z zewnątrz aby wysłało komendy do samochodu aby ograniczać moc.

Znalazłem kilka, które się nadają:

  1. Wallbox Pulsar Plus + Power Boost - natywnie po LAN przez integrację z HA - cena od 3000zł
  2. go-e Charger Gemini - MQTT / lub API - cena od ok 2200zł
  3. Fronius Wattpilot - przez integrację fronius - cena od 3300zł
  4. Feyree typ 2 11kW - przez tuya - cena od 1200zł

Zastanawiam się nad feyree z racji na przystępną cene - feyree to tuya więc integracja po tuya local chyba najlepiej i najprościej.
Może ktoś przerabiał już ten temat i może coś doradzić?

Post został podzielony na nowy temat: Wallbox który pozwala sterować mocą ładowania przez NR

Ja właśnie przerabiam ten temat a z tuya mam złe doświadczenia. Możesz zerknąć sobie w mój wątek, sądzę, że w przeciągu tygodnia będzie wszystko skończone

Czy już coś wybrałeś ? Masz rozwiazanie ? Mam ten sam dylemat - czy go-e Gemini + go-e koordynator , czy ładowarka Tesla Wall Connector - ale ona nie ma pełnej intergracji aby do niej wysyłac komendy - albo jest to skomplikowane.

Zastanawiam się nad go-e - mam w domy licznik Zamel MEW-01 i nie wiem czy nie da rady tego spiąć ze sobą automatyzacją , albo gotowiec z apką od go-e i po sprawie ale poza HA

Pisałeś w czerwcu to pewnie już coś ogarnąłeś. Ja jestem na etapie oczekiwania za autem - ma być za 3 tyg więc mam jeszcze czas na wybór czym ładować

Idę w go-e gemini ale bez tego ich licznika automatyzację zrobię sobie sam po stronie HA z tego co czytałem ten go-e gemini integruje się bardzo dobrze z HA.

Jaki masz licznik z którego zaciągniesz dane o mocy chwilowej do sterowania ładowarką? Ja kombinuje zakupić go-e Gemini, jeszcze nie mam jej , chce ją spiąć z MEW-01 ale nigdzie nikt tego nie próbował, a Evaston dystrybutor gemini na razie milczy. Ich koordynator robi dokladnie to samo co Zamel MEW-01 i nie widzę sensu dodawania drugiego miernika w szafce.

I na razie jestem na etapie szukania i doktoryzowania się. Łeb mi już pęka.

Dlaczego tak proste rzeczy sa tak skomplikowane. Przecież to normalne że ładowanie auta mocą do 11kw i posiadanie innych urządzeń w sieci które ją obciazają - pompa ciepła, indukcja itd będzie powodowało wywalanie bezpieczników. Że żaden producent o tym nie myśli ? Dziwne

Zobaczcie co likowałem w tym poście:

Wydaje się, że właśnie ten projekt to ułatwia i jest open surce:

Ja właśnie postawiłem na EVCC. Próbuje wczytywać się w dokumentację i bawię się w konfigurowanie, choć nie wygląda to jakoś zbyt skomplikowanie.
Będę testował.

1 polubienie

Ja mam falownik froniusa i zwykły licznik po S0 do froniusa I czytam z niego, wyliczam bilansowanie godzinowe i chce po prostu sterować aby w bilansowaniu godzinowym wyjść na “0” w danej godzinie. Ja mam falownik 6kW więc za dużo nie mam pola do manewru.

Wczoraj przyszedł go-e gemini, naprawdę bardzo dobra jest ta ładowarka! Płynna zmiana prądu ładowania 6-32A w skoku co 1A (wersja 22kW, wersja 11kW ma 6-16A), dla jednej fazy bez zatrzymania ładowania, albo zmiana 1faza → 3fazy z zatrzymaniem i również sterowanie 6-32A dla 3 faz bez zatrzymania - zmiana 1faza na 3 fazy symuluje odłączenie kabla od auta - to jest już limit po stronie auta dlatego wiąże się z zatrzymaniem i startem ładowania na nowo.

Integruje się z HA przez mqtt, albo modbus tcp albo przez http (gotowe integrację dla http API i mqtt w HACS).
Aplikacja również bardzo przyjazna (jedyny minus dla osób nieznających angielskiego bo aplikacja nie ma polskiego ale myślę że to już nie jest problemem w dzisiejszych czasach).

Zastanawiałem się nad sterowaniem, w taki sposób aby było to najefektywniej wymyśliłem aby zrobić tak:
Sprawdzić bilansowanie w danej godzinie i jeżeli jest dodatnie i powyżej 0,3kWh
Zrobić obliczenie max prądu co można nastawić produkcja_pv / napiecie_ac + 0,9 (0,9 aby zaokrąglone było w górę) i nastawić taki prąd aby zużywać całość produkcji pv, a jeżeli jest poniżej 0,3kWh w danej godzinie to zmieniać prąd w skoku o 1A góra, dół aby nie zejść na bilansowaniu poniżej 0, gdy spadnie poniżej 0 to zmienić prąd na 6A (minimalna wartość).
Myślę aby to zrobić co 2-5 minut aby nie zmieniać prądu zbyt często.
A więc biorę się za pisanie tej dość skomplikowanej automatyzacji i zobaczymy co z tego wyjdzie, podzielę się efektem jak już będę miał jakiś dzień ze słońcem aby sprawdzić czy to działa.

Z racji pogody zrobiłem automatyzację ale nie było okazji do testów, lecz myślę, że zadziała jak ktoś zainteresowany analizą, testami to YAML automatyzacji poniżej - w moim przypadku przyłącze energetyczne z zabezpieczeniem 25A, więc limit ładowania 1fazowego założyłem 22A aby mieć mały zapas na jakieś zużycie w domu, a ładowanie 3 fazowe 16A bo i tak mam w aucie tylko ładowarkę 11kW czyli 16A, w automatyzacji dążę do uzyskania bilansu godzinowego jak najbliższego “0”, dlatego, że rozliczenie z energetyką opiera się na bilansowaniu godzinowym to nie ma sensu dążyć do zerowego eksportu, a jedynie do zerowego bilansu w godzinie.

alias: Dynamiczne ładowanie EV
description: >
  Automatyczna regulacja prądu ładowania go-e Gemini na podstawie bilansu energii i produkcji PV.
mode: restart

trigger:
  - platform: time_pattern
    minutes: "/2"  # aktualizacja co 2 minuty (można zmienić np na 5 minut, myślę że mniej nie ma sensu aby nie regulować za często prądu bo to niezdrowe dla baterii)

condition:
  # Działa tylko w dzień (1h po wschodzie, 1h przed zachodem) - tutaj chce jeszcze dodać jeden warunek - aby działało tylko gdy podłączone auto do ładowarki, ale zobaczymy czy nie lepiej bez niego aby po podłączeniu gdy bilans na eksport od razu nie ładować większym prądem)
  - condition: sun
    after: sunrise
    after_offset: "01:00:00"
  - condition: sun
    before: sunset
    before_offset: "-01:00:00"

variables:
  # Dane wejściowe
  bilans_kwh: "{{ states('sensor.bilansowanie_godzina') | float(0) }}"
  bilans: "{{ bilans_kwh * 1000 }}"  # przeliczenie na W bo moja zmienna bilansowania międzyfazowego jest w kWh a tu prościej operować na W, więc dostosować należy pod siebie
  moc_pv: "{{ states('sensor.fronius_ac_power') | float(0) }}"
  moc_dom: "{{ states('sensor.pobierana_moc') | float(0) }}"
  aktualny_prad: "{{ states('number.go_echarger_xxxxxxx_amp') | int(6) }}"
  napiecie_l1: "{{ state_attr('sensor.go_echarger_xxxxxxx_nrg') | float(230) }}"
  napiecie_l2: "{{ state_attr('sensor.go_echarger_xxxxxxx_nrg_2') | float(230) }}"
  napiecie_l3: "{{ state_attr('sensor.go_echarger_xxxxxxx_nrg_3') | float(230) }}"
  napiecie_srednie: "{{ (napiecie_l1 + napiecie_l2 + napiecie_l3) / 3 }}"

  # Ograniczenia
  limit_1f: 22
  limit_3f: 16
  min_prad: 6
  max_delta: 3  # maksymalna zmiana prądu w jednym cyklu, zapobiega dużym zmianą prądu w każdym cyklu co mogłoby szkodzić baterii.

action:

  # Log diagnostyczny – aby móc debugować automatyzację, jak już zadziała to można wyłączyć. (Do oglądania w dzienniku).
  - service: logbook.log
    data:
      name: "EV Debug"
      message: >
        Bilans={{ bilans|round(0) }} W | Prąd={{ aktualny_prad }} A |
        Napięcia: L1={{ napiecie_l1 }} V, L2={{ napiecie_l2 }} V, L3={{ napiecie_l3 }} V

  - choose:

      # ========================== TRYB 1-FAZOWY ==========================
      - conditions:
          - condition: template
            value_template: >-
              {{ states('select.go_echarger_xxxxxx_psm') == 'Force single phase'
              }}
        sequence:
          - choose:

              # --- Duży bilans: dynamiczna korekta ---
              - conditions: "{{ bilans > 300 or bilans < -300 }}"
                sequence:
                  - variables:
                      # Korekta prądu I = P / U
                      delta_i: >-
                        {% set val = (bilans / napiecie_l1) | int %}
                        {% if val > max_delta %} {{ max_delta }}
                        {% elif val < (0 - max_delta) %} {{ 0 - max_delta }}
                        {% else %} {{ val }}
                        {% endif %}
                      tmp: "{{ aktualny_prad + delta_i }}"
                      docelowy_prad: >-
                        {% if tmp > limit_1f %} {{ limit_1f }}
                        {% elif tmp < min_prad %} {{ min_prad }}
                        {% else %} {{ tmp }}
                        {% endif %}
                  - service: number.set_value
                    target:
                      entity_id: number.go_echarger_xxxxxxx_amp
                    data:
                      value: "{{ docelowy_prad }}"

              # --- Bilans bliski zera: delikatna korekta ±1A ---
              - conditions: "{{ -300 <= bilans <= 300 }}"
                sequence:
                  - choose:
                      # Eksport (PV nadwyżka)
                      - conditions: "{{ bilans > 100 }}"
                        sequence:
                          - service: number.set_value
                            target:
                              entity_id: number.go_echarger_xxxxxxx_amp
                            data:
                              value: "{{ [aktualny_prad + 1, limit_1f] | min }}"
                      # Import (brak PV)
                      - conditions: "{{ bilans < -100 }}"
                        sequence:
                          - service: number.set_value
                            target:
                              entity_id: number.go_echarger_xxxxxxx_amp
                            data:
                              value: "{{ [aktualny_prad - 1, min_prad] | max }}"

      # ========================== TRYB 3-FAZOWY ==========================
      - conditions:
          - condition: template
            value_template: >-
              {{ states('select.go_echarger_xxxxxx_psm') == 'Force three phases'
              }}
        sequence:
          - choose:

              # --- Duży bilans: dynamiczna korekta ---
              - conditions: "{{ bilans > 300 or bilans < -300 }}"
                sequence:
                  - variables:
                      # Korekta prądu I ≈ P / (1.732 * U) - 1,732 to pierwiastek z 3 (dla tych co nie wiedza skąd to się wzięło)
                      delta_i: >-
                        {% set val = (bilans / (1.732 * napiecie_srednie)) | int %}
                        {% if val > max_delta %} {{ max_delta }}
                        {% elif val < (0 - max_delta) %} {{ 0 - max_delta }}
                        {% else %} {{ val }}
                        {% endif %}
                      tmp: "{{ aktualny_prad + delta_i }}"
                      docelowy_prad: >-
                        {% if tmp > limit_3f %} {{ limit_3f }}
                        {% elif tmp < min_prad %} {{ min_prad }}
                        {% else %} {{ tmp }}
                        {% endif %}
                  - service: number.set_value
                    target:
                      entity_id: number.go_echarger_xxxxxxx_amp
                    data:
                      value: "{{ docelowy_prad }}"

              # --- Bilans bliski zera: delikatna korekta ±1A ---
              - conditions: "{{ -300 <= bilans <= 300 }}"
                sequence:
                  - choose:
                      # Eksport (nadwyżka PV)
                      - conditions: "{{ bilans > 100 }}"
                        sequence:
                          - service: number.set_value
                            target:
                              entity_id: number.go_echarger_xxxxxxx_amp
                            data:
                              value: "{{ [aktualny_prad + 1, limit_3f] | min }}"
                      # Import (niedobór PV)
                      - conditions: "{{ bilans < -100 }}"
                        sequence:
                          - service: number.set_value
                            target:
                              entity_id: number.go_echarger_xxxxxxx_amp
                            data:
                              value: "{{ [aktualny_prad - 1, min_prad] | max }}"

Do tej pory (4 lata) używałem EVSE NRGKick (v.1) z funkcją zarządzania ładowaniem przez nadwyżki. Niestety API tej wersji jest ograniczone i już nie rozwijane. Urządzenie nie ma też możliwości przałączania faz. Próbowałem jego implementacji w EVCC, ale poza odczytem stanu nie dało się sterować prądem ładowania.

Temat dla mnie na czasie, bo właśnie czekam na dostawę go-e. Mam dokładnie taką samą konfigurację falownika, tj Fronius + s0. Jak tylko dostanę urządzenie zabieram się za testy Twojego rozwiązania.

Pozdrawiam.

Super ja kupowałem od oficjalnego dystrybutora na polskę bo dobra cena była, ładowarka w 1 dzień u mnie - kupiłem wersję v1, a dostałem v2 (różnica, że v2 ma kartę SIM).
Ja integrowałem po MQTT GitHub - syssi/homeassistant-goecharger-mqtt: go-eCharger integration for Home Assistant using the MQTT API (chyba najwięcej danych odczytywał z ładowarki)
Do tego używam GitHub - MiguelAngelLV/ha-balance-neto: Componente para Home Assistant que calcula el Balance Neto Horario para instalaciones fotovoltáicas. do bilansowania godzinowego (tak jak rozlicza energetyka) i automatyzacja bazuje na tym właśnie bilansowaniu (stara się utrzymać bilansowanie “0”), słabo ze słońcem ostatnio aby to potestować ale wydaje mi się, że muszę nieco zwiększyć obniżanie aby nie obniżało 1A / 2minuty a po 2-3A, bo jak spada poniżej 100Wh bilansowanie to aby zminimalizować import - potestuje w bardziej słoneczne dni.
Ale automatyzacja generalnie działa - trochę jest do dopieszczenia, ale to czeka na bardziej słoneczne dni. Nie steruje automatycznie zmianą 1f / 3f - i tak mam falownik 6kW więc z ładowania 1f przy 22A mam 5kW (zabezpieczenia mam 25A bo przyłącze 16kW dlatego max daję 22A aby był zapas jakby coś jeszcze na tej fazie zużycie miało) i w sumie to wystarczy, a jak będę chciał to ręcznie mogę przełączyć na 3f.

Jaki masz samochód? Pisałeś, że ma ładowarkę pokładową 11kW 3 fazy.
Na jednej fazie nie uzyskasz więc prądu ładowania > 16A, niezależnie od poziomu zabezpieczenia domu.

Dla mnie przełączanie faz jest z tego powodu istotne. Mam PV 7,6 kWp. Do tej pory sterowałem tym ręcznie zmieniając kabel na przyłączu do ładowarki - wrzesień, kwiecień 1 faza - maj, sierpień 3 fazy.

Ładowarkę auto (BYD) ma 1f 7,2kW (32A) lub 3f 11kW (16A) więc spokojnie wszystko będzie działać - ale aby móc ładować >16A 1f trzeba mieć go-e w wersji 22kW!

Tak, idzie do mnie wersja 22kW, z resztą z tego samego źródła :slight_smile:

1f 7,2kW zdaje się ma grupa VW? Ja mam KIA eSoul.
Na >16A nie puszcza mnie instalacja i zabezpieczenia w rozdzielni.

Edit: W KIA zdaje się też jest możliwość ładowania 7,2kW z jednej fazy przez łączenie w samochodzie 2 faz ładowarki pokładowej.

Trochę dziwna ta KIA według tych danych Kia e-Soul 64 kWh - Milivolt wynika, że mocniejsza ładowarka to wyposażenie dodatkowe, a domyślnie ma tylko 7,2kW i tylko 1 fazowe ładowanie…

Tak, były dwie wersje ładowarek. Mam 11kW, 3 fazy.
Rozkminiałem to łączenie faz kiedyś, jak byłem zainteresowany ładowarką Froniusa. Niestety nikt nie umiał powiedzieć czy działa z licznikiem s0.
KIA miała wadę fabryczną i problem z przełączaniem się z 3 na 1 fazę podczas ładowania. Stycznik nie puszczał i napięcie międzyfazowe paliło ładowarkę. Była akcja serwisowa i porawili to w sofcie.

Ładowarka fronius robiona jest przez go-e to w sumie ta samą ładowarka ale robiona dla froniusa ze zmodyfikowanym oprogramowaniem.
Go-e również nie działa w ładowaniu 2 fazowym bez tego go-e controller jedynie 1 faza / 3 fazy.

Zainteresował mnie ten komponent do bilansowania godzinowego. Których encji używasz do wprowadzenia danych do tego dodatku?

Generalnie tam podajesz ilość energii produkowanej, ilość energii zużywanej i on wylicza bilans czy jest eksportem czy importem z sieci (fronius nie podaje energii zużywanej a jedynie moc więc należy wyliczyć energię na podstawie mocy przez utility meter).

  - platform: rest
    resource: http://LAN_IP_Falownika/solar_api/v1/GetPowerFlowRealtimeData.fcgi
    name: "fronius house load"
    value_template: '{{ value_json.Body.Data.Site.P_Load | int }}'
    unit_of_measurement: "W"
    scan_interval: 3
  - platform: rest
    resource: http://LAN_IP_Falownika/solar_api/v1/GetPowerFlowRealtimeData.fcgi
    name: "fronius year energy"
    value_template: '{{ (value_json.Body.Data.Inverters["1"].E_Year / 1000) | round(2) }}'
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    scan_interval: 60
    - name: "Pobierana Moc"
      unique_id: "sensor.pobierana_moc"
      icon: "mdi:flash"
      unit_of_measurement: "W"
      state: >
        {% set P = states('sensor.fronius_house_load') | float(0) | abs  | round(3) %}
        {{ P }}
  - platform: integration
    source: sensor.pobierana_moc
    name: energia_pobrana
    unit_prefix: k
    round: 3
utility_meter:
  zuzycie_rok:
    source: sensor.energia_pobrana
    cycle: yearly

PS: mój sposób odczytu może być już nieco przestarzały bo robiłem to jak HA było w pieluszkach, nie było dobrej integracji z froniusem, a większość wpisywało się w yaml, a nie z GUI - ale według zasady nie tykać działającego tak jak zrobione 6 lat temu tak do teraz działa.