ESPHome - falownik / inwerter Anenji

Tak QFN32 nie pasuje do ESP32 - dopiero bodajże C3 jest w takiej obudowie a jest za nowy by był w urządzeniu, które jest już na rynku od dawna. Tu jeszcze taki hint - niemal każda rodzina modeli MCU ESP ma inny układ wyprowadzeń i inne obudowy.
ESP8266 swoją drogą wymaga zewnętrznego flasha, więc moim zdaniem to jest ESP8285. (ewentualnie chyba mógłby być C2 ale nie chce mi się kopać po dokumentacji czy podpasuje, edit: sprawdziłem - ESP8684 znany jako C2 nie pasuje do tego ze zdjęcia, bo ma inną obudowę - QFN24)

Nie wydaje mi się aby ESP82xx miały opcje zabezpieczenia flasha, ale nie ryłem po dokumentacji, ewentualnie to może być MCU nie od Espressif.


hmm specyfikacja ESP8266 jest pod tym względem taka sama, jak dla ESP8285

nie mam wprawdzie zwyczaju ściągania ekranów (za dużo roboty, choć ciekawski też jestem), a w sieci trudno znaleźć czytelne zdjęcia (a w sumie flaki na wierzchu są raczej tylko w ESP01/01s), ale znalazłem swoje zdjęcie ESP01s sprzed lat i kwarc jest 26MHz

przy okazji widać kostkę flasha obowiązkową dla ESP8266
jakieś płytki w tym guście mam jeszcze skitrane w szufladach, więc mógłbym sprawdzić, ale jestem przekonany, że wszędzie jest 26MHz a takie poszukiwania to jednak czas zajmują…


natomiast to wyklucza całkowicie by to był ESP8266 lub ESP8285, bo obsługuje BLE

więc może jednak należy się przyjrzeć C3, swoją drogą dokumenty FCC są z 2023, więc to jest nowość na rynku.

Jeśli masz zdjęcie w wyższej rozdzielczości to wrzuć, ale wstępnie stawiam, że to w ogóle nie jest Espressif.

I dobrze że się nie upierasz, na 99% masz tam na pokładzie ECR6600 czyli
https://www.elektroda.pl/news/news4111822.html

2 polubienia

Cześć, jestem tutaj świeżak na forum, ale zaciekawiony tematem dołączę do dyskusji. Mam zakupiony nowe Anenji 6.2, urządzenie działa, ale wbudowany moduł wifi nie potrafi gadać z falownikiem. Zamówiłem drugi, i ta sama sytuacja. Sam moduł wygląda na sprawny bo komunikacja wifi jest, po RS485 też gada z magazynem energii, ale nie potrafi dostać niczego z RS232 (nie mam wyprowadzeń).
Jeden z modułów postanowiłem poświęcić i zrobić przeróbkę na ESP8266 D1 mini, wykorzystując omysł kolegi @Janusz_Kosciej , czyli hotairem wylutować firmowe wifi i wrzucić ESP na pająka w jego miejsce.
Niestety dalej to nie rozwiązuje problemu komunikacji z falownikiem bo jest cisza na informacji z falownika. Samo ESP gada z HA, jak wrzuciłem kod do debugu:

logger:
  level: DEBUG
  # Don't write log messages to UART0 (GPIO1/GPIO3) if the inverter is connected to GPIO1/GPIO3
  baud_rate: 0

uart:
  id: uart_0
  baud_rate: 2400
  tx_pin: GPIO1
  rx_pin: GPIO3
  debug:
    direction: BOTH
    dummy_receiver: false
    after:
      delimiter: "\r"
    sequence:
      - lambda: UARTDebug::log_string(direction, bytes);

wówczas w logach są wpisy że ESP coś próbuje wysłać, ale wygląda że nie ma odpowiedzi.

Chińczyk nabiera jak narazie wody w usta i dał cztero słowną odpowiedź, którą mogę porównać do rozmowy z żoną podczas cichych dni, czyli nic te słowa nie wnoszą, byle by podtrzymać rozmowę i nie przekroczyć 48h bez odpowiedzi na aliku.

Zanim rozkręcę falownik mam pytanie, czy spotkaliście się z taką sytuacją, żeby nie było komunikacji z falownikiem po tym RS232?
Aha i próbowałem zamieniać TX z RX miejscami, ale zakładam, że podłączając się w miejsce starego modułu wifi, robię 1:1 czyli RX:RX, TX:TX.

///cały kod raczej nic nie wniesie do tego problemu, ale też jest z któregoś z powyższych:

esphome:
  name: anenji
  friendly_name: anenji

esp8266:
  board: esp01_1m

# Enable logging
#logger:

# Enable Home Assistant API
api:
  encryption:
    key: "XDXDXD"

ota:
  - platform: esphome
    password: "XDXDXD"

wifi:
  ssid: "XDXDXD"
  password: "XDXDXD"

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

captive_portal:

logger:
  level: DEBUG
  # Don't write log messages to UART0 (GPIO1/GPIO3) if the inverter is connected to GPIO1/GPIO3
  baud_rate: 0

uart:
  id: uart_0
  baud_rate: 2400
  tx_pin: GPIO1
  rx_pin: GPIO3
  debug:
    direction: BOTH
    dummy_receiver: false
    after:
      delimiter: "\r"
    sequence:
      - lambda: UARTDebug::log_string(direction, bytes);

#logger:
#  level: INFO

#uart:
#  - id: uart_0
#    tx_pin: GPIO1
#    rx_pin: GPIO3
#    baud_rate: 2400

pipsolar:
  uart_id: uart_0
  id: inverter0
  
sensor:
  - platform: pipsolar
    pipsolar_id: inverter0
    # QPIRI
#    grid_rating_voltage:
#      name: "${name} grid_rating_voltage"
#    grid_rating_current:
#      name: "${name} grid_rating_current"
#    ac_output_rating_voltage:
#      name: "${name} ac_output_rating_voltage"
#    ac_output_rating_frequency:
#      name: "${name} ac_output_rating_frequency"
#    ac_output_rating_current:
#      name: "${name} ac_output_rating_current"
#    ac_output_rating_apparent_power:
#      name: "${name} ac_output_rating_apparent_power"
#    ac_output_rating_active_power:
#      name: "${name} ac_output_rating_active_power"
#    battery_rating_voltage:
#      name: "${name} battery_rating_voltage"
#    battery_recharge_voltage:
#      name: "${name} battery_recharge_voltage"
#    battery_under_voltage:
#      name: "${name} battery_under_voltage"
#    battery_bulk_voltage:
#      name: "${name} battery_bulk_voltage"
#    battery_float_voltage:
#      name: "${name} battery_float_voltage"
#    battery_type:
#      name: "${name} battery_type"
#    current_max_ac_charging_current:
#      name: "${name} current_max_ac_charging_current"
#    current_max_charging_current:
#      name: "${name} current_max_charging_current"
#    input_voltage_range:
#      name: "${name} input_voltage_range"
#    output_source_priority:
#      name: "${name} output_source_priority"
#    charger_source_priority:
#      name: "${name} charger_source_priority"
#    parallel_max_num:
#      name: "${name} parallel_max_num"
#    machine_type:
#      name: "${name} machine_type"
#    topology:
#      name: "${name} topology"
#    output_mode:
#      name: "${name} output_mode"
#    battery_redischarge_voltage:
#      name: "${name} battery_redischarge_voltage"
#    pv_ok_condition_for_parallel:
#      name: "${name} pv_ok_condition_for_parallel"
#    pv_power_balance:
#      name: "${name} pv_power_balance"

    # QPIGS
    grid_voltage:
      name: "${name} grid_voltage"
    grid_frequency:
      name: "${name} grid_frequency"
    ac_output_voltage:
      name: "${name} ac_output_voltage"
    ac_output_frequency:
      name: "${name} ac_output_frequency"
    ac_output_apparent_power:
      name: "${name} ac_output_apparent_power"
    ac_output_active_power:
      name: "${name} ac_output_active_power"
    output_load_percent:
      name: "${name} output_load_percent"
    bus_voltage:
      name: "${name} bus_voltage"
    battery_voltage:
      name: "${name} battery_voltage"
    battery_charging_current:
      name: "${name} battery_charging_current"
    battery_capacity_percent:
      name: "${name} battery_capacity_percent"
    inverter_heat_sink_temperature:
      name: "${name} inverter_heat_sink_temperature"
    pv_input_current_for_battery:
      name: "${name} pv_input_current_for_battery"
    pv_input_voltage:
      name: "${name} pv_input_voltage"
    battery_voltage_scc:
      name: "${name} battery_voltage_scc"
    battery_discharge_current:
      name: "${name} battery_discharge_current"
    battery_voltage_offset_for_fans_on:
      name: "${name} battery_voltage_offset_for_fans_on"
#    eeprom_version:
#      name: "${name} eeprom_version"
    pv_charging_power:
      name: "${name} pv_charging_power"

text_sensor:
  - platform: pipsolar
    pipsolar_id: inverter0
    device_mode:
      name: "${name} device_mode"
#    last_qpigs:
#      name: "${name} last_qpigs"
#    last_qpiri:
#      name: "${name} last_qpiri"
#    last_qmod:
#      name: "${name} last_qmod"
#    last_qflag:
#      name: "${name} last_qflag"

binary_sensor:
  - platform: pipsolar
    pipsolar_id: inverter0
    add_sbu_priority_version:
      name: "${name} add_sbu_priority_version"
    configuration_status:
      name: "${name} configuration_status"
#    scc_firmware_version:
#      name: "${name} scc_firmware_version"
    load_status:
      name: "${name} load_status"
    battery_voltage_to_steady_while_charging:
      name: "${name} battery_voltage_to_steady_while_charging"
    charging_status:
      name: "${name} charging_status"
    scc_charging_status:
      name: "${name} scc_charging_status"
    ac_charging_status:
      name: "${name} ac_charging_status"
    charging_to_floating_mode:
      name: "${name} charging_to_floating_mode"
    switch_on:
      name: "${name} switch_on"
#    dustproof_installed:
#      name: "${name} dustproof_installed"
    silence_buzzer_open_buzzer:
      name: "${name} silence_buzzer_open_buzzer"
    overload_bypass_function:
      name: "${name} overload_bypass_function"
    lcd_escape_to_default:
      name: "${name} lcd_escape_to_default"
    overload_restart_function:
      name: "${name} overload_restart_function"
    over_temperature_restart_function:
      name: "${name} over_temperature_restart_function"
#    backlight_on:
#      name: "${name} backlight_on"

switch:
  - platform: pipsolar
    pipsolar_id: inverter0
    output_source_priority_utility:
      name: "${name} output_source_priority_utility"
    output_source_priority_solar:
      name: "${name} output_source_priority_solar"
    output_source_priority_battery:
      name: "${name} output_source_priority_battery"
    input_voltage_range:
      name: "${name} input_voltage_range"
    pv_ok_condition_for_parallel:
      name: "${name} pv_ok_condition_for_parallel"
    pv_power_balance:
      name: "${name} pv_power_balance"

output:
  - platform: pipsolar
    pipsolar_id: inverter0
    battery_recharge_voltage:
      id: inverter0_battery_recharge_voltage_out

tu piszesz, że masz konwerter na RS485 który nie ma fizycznego portu RS232?

nie rozumiem sytuacji - nie masz żadnego sprzętu z fizycznym interfejsem RS232 i chcesz się łączyć przez RS232??

Przecież te 3 interfejsy, które wspominasz - RS485, RS232 i UART LVTTL (którego nawet nie wspominałeś, ale skoro to jest D1 mini, to on ma UART LVTTL) są niekompatybilne elektrycznie.

Być może pominąłeś tylko jakieś bardzo istotne informacje, ale z posta wyżej osoba postronna nie jest w stanie zbudować sobie obrazu faktycznej sytuacji.

Nie do końca. Płytkę mam taką:

więc ona ma fizycznie wyprowadzony RS485, a RS232 jest do niej doprowadzony osobną taśmą, ale ma wlutowane chińskie wifi/bt , którego skrzętnie się pozbyłem.
Więc zgodnie z powyższym opisem sądziłem, że mogę bezpośrednio wlutować się D1mini pod pady VCC, GND, TX, RX i będzie lalka, bez konwertera TTL.
Poprawcie mnie jak się mylę, ale konwerter TTL byłby potrzebny tylko gdybym wpinał się bezpośrednio pod taśmę RS232, która dochodzi do całej płytki komunikacyjnej.
Ale teraz mnie trochę zbiłeś z tropu, bo może powinienem wpiąć się bezpośrednio do styków modułu a nie do pinów na płytce z tego ESP?


1 polubienie

@ canavay Jakim cudem chcesz żeby to zadziałało skoro używasz nieprawidłowego kodu?
Tutaj masz prawidłowy GitHub - syssi/esphome-smg-ii: ESPHome configuration to monitor and control a ISolar/EASUN SMG II inverter via RS232

3 polubienia

Tu też byłem :smiley:

Wieczorem spróbuję go rozkręcić mimo wszsytko, bo podejrzane jest to że nie było komunikacji nawet z ich oprogramowaniem, to znaczy wifi się łączyło, pokazywał że jest połączony z internetem, ale połączenie z urządzeniem nie było dostępne. Może nie ma styku między gniazdem na płycie a taśmą.

Taki efekt jak na obrazku jest skutkiem zbyt częstego odpytywania (częstszego niż timeout).

1 polubienie

Witam, od jakiegoś czasu śledzę ten wątek. Mam anenji 4kW i fabryczny (zewnętrzny) moduł wifi. Znaczy miałem bo działało to dwa razy i przestało działać. Próbowałem się podłączyć falownikiem do komputera przez dongla usb-uart + max3232 i nie ma komunikacji, sprawdzałem też esp8266 i esp32 (z konfiguracją udostępnioną we wcześniejszym poście) bez sukcesu. Więc problem podobny co ma kolega @canavay. Chyba będzie się trzeba podpiąć bezpośrednio do uarta sterownika falownika, tak jak to jest wspomniane tutaj: Different approach to connection · syssi/esphome-smg-ii · Discussion #90 · GitHub

@kredz jak dobrze zrozumiałem że gościu narzekał na za mały prąd na 5V żeby osobno zasilić ESP - sprawdziłem, i oto rezultaty.
Pojawiło się masę komunikatów o CRC:

Ale coś zaczęło się pojawiać w HA!

Czasami pokazuje jakieś dane wyssane z powietrza jak na przykład to spadając do -32kW, ale to pewnie przez te błędy CRC które jakoś musiałbym odfiltrować

aktualizacja 20.09.2025:
błędy CRC dalej się pokazują w logach, ale duże prawdopodobieństwo że stałem się “ofiarą” jakiejś błędnej, może niekompatybilnej aktualizacji. Sporo postów o ESP znalazłem i ludzie wskazywali oprócz zakłóceń natury, kiepskie przewody, problemy z uziemieniem układu, aż po problematyczne bilbioteki używane w różnych releaseach. Więc to co zmieniłem, to w kodzie zakomentowałem sekcję framework, co spowodowało przejście na domyślny framework arduino:

esp32:
  board: esp32-s3-devkitc-1
#  flash_size: 16MB
#  framework:
#    type: esp-idf

Spodowowało to, że z wykresów wypadły do kompletnego ZERA wszelkie wcześniej obserwowane artefakty!

Więc temat jeszcze do rozgryzienia, ale jest niewątpliwy progres!

Mam, albo miałem 2 anerny, przymierzam sie do zakupu anenji 11kw. Pytanie jest czy mamy już opanowana komunikację? Ja przez solar assistant miałem w pełni to co chciałem na aku kwasowym. Pytanie czy w anenji będę miał to samo?

edit

Wiem, że nie w temacie, ale może komuś się przyda, finalnie znowu anern 10,2kW z wifi po porcie rs232, dotego Solar assistant i wszystkie odczyty jak należy.



Aktualizacja: ESP działa stabilnie, odczyty nie mają szumu tylko do czasu jak odpalam doładowanie z gniazdka :smiley: , wówczas szlag trafia wszystkie wartości. I nie pomaga RS232-TTL na którym zrobiłem chyba wszelkie możliwe permutacje połączeń z zasilaniami, uziemieniem, TX/RX.
Może musiałbym jeszcze jakieś dodatkowe filtrowania założyć, nie wiem, raczej nie przeszkadza mi to za bardzo.
Tak więc takie połowiczne zwycięstwo, gdyż naturalnie staram się nie ładować z gniazdka, więc przez większość czasu działa poprawnie. A jak to przetrwa zimię to w przyszłym roku zamienię niebieskiego przyjaciela na coś innego, bardziej przewidywalnego.
Może nie potrafię tego połączyć poprawnie, albo mam po prostu pecha :smiley: . Tak czy siak dzięki za pomoc, na moje potrzeby to co udaje się odczytywać przez ESP wystarcza!
Pozdrawiam.

Cześć
Obserwuję ten wątek od jakiegoś czasu, bo sam mam Anenji 4.2kW w moim warsztaciku i irytował mnie ten cały Dessmonitor. W międzyczasie popełniłem taki dataloger. Poniżej działający prototyp.

No i finalna wersja pierwsza:
Zasilanie bezpośredni z Invertera, dochodzi LDO, a reszta tak jak według schematów od Was. Użyłem ESP32 C3 Super Mini, z wbudowaną anteną. Ze względu na programowanie przez USB postanowiłem usytuować antenę blisko złącza, póki co nie miałem problemów z komunikacją, ale można użyć też modułu z anteną zewnętrzną więc to nie powinno mieć znaczenia.

W planach mam jeszcze projekt z wyświetlaczem 1.47", co by można było podejrzeć szybko podstawowe parametry pracy. No i widzę że jak mi się router zawiesi to urządzenie nie pracuje, tak jak by brak komunikacji z HA go zatrzymywał, a przydało by się żeby dane były logowane w pamięci i wysyłana przy wznowieniu komunikacji.


[Żeby nie tworzyć osobnej odpowiedzi to edytuję swój post.]
Jeżeli jest ktoś chętny to mogę odsprzedać gotowe DataLoggery wykonane według poniższego schematu.


Dodatkowo zaprojektowałem i wydrukowałem obudowę w wersji z anteną zewnętrzną i zintegrowaną, jak na zdjęciu.

Urządzenie musi być zaprogramowane w ESPHome kodem który tu został zamieszczony.

Wyceniłem to uczciwie na 50zł wersja z anteną na płytce i 60zł wersja z zewnętrzną anteną(+wysyłka), tak żeby mi na jakieś piwko zostało. Oczywiście nie chcę żeby ktoś pomyślał że robię tu jakąś prywatę, dlatego udostępniam schemat i jak ktoś chce to może sam sobie zamówić płytki i przygotować urządzenie. Jeżeli ta oferta jest jakoś niezgodna z regulaminem to proszę o informację i ją usunę. Chcę być uczciwy wobec ludzi którzy tworzą ten wątek.

Oczywiście pomogę zdalnie z konfiguracją.

2 polubienia

Nie wrzucałeś zdjęcia jak to u Ciebie wygląda, ale wnioskuję z tego co opisujesz że problemem może być za długi przewód danych. O ile standard RS232 czy RS485 są w miarę odporne na zakłócenia to już TTL taki jaki obsługuje bezpośrednia mikrokontroler nie koniecznie. To jest standard do komunikacji między układami w obwodzie drukowanym i w związku z tym może być podatny na zakłócenia jeżeli puścisz kabelek luzem, szczególnie na większe odległości, więc linie sygnałowe powinny być jak najkrótsze.

Sprawa się sama wyczyściła! Im prościej tym lepiej.
Okazało się że do tego mojego 6.2 Anenji bez parallel-a, muszę po prostu wpiąć się bezpośrednio pod wtyczkę wypiętą z modułu! Bez żadnych konwerterów TTL, po prostu TX, RX, GND, nic więcej. Wykresy są stabilne, juz nie skaczą między minus milion a plus milion.
Czy są te Warningi CRC? Nie wiem, zmieniłem poziom logowania w logger na ESP na ERROR, bo jak było bardziej gadatliwe to ESP potrafił się przywiesić podczas doładowywania z sieci (pisałem że traciła się komunikacja). Więc metodą prób i błędów mniejszych lub większych wszystko działa stabilnie już od dłuższego czasu.
Dziękuję wszysktim za pomoc. W tym projekcie do SMG z githuba zmieniłem mapowania dla Output Priority i Charging Priority, bo były zamienione miejscami, jak ktoś będzie chętny to wkleję jak je zamieniłem. I teraz mogę w pełni sterować falownikiem z HA w miarę potrzeb, i super to działa.
A moduł wpięty tak:

zasilanie z zewnętrzengo zasilacza do portu USBC oznaczonego jako USB w tym moim devkicie.

1 polubienie

witaj chce zrobić tak jak ty czy możesz podesłać wsad do ESP32

witam podłączenie bezpośrednio działa ale czasem sypie błędami miałem podpięte przez konwerter poziomów logicznych a teraz jak kolega Marcin zakupiłem na ali ADUM1201 i zasilanie esp tez jest z falownika



Biała wtyczka jest to złącze do wentylatora pc idealnie pasuje do przewodu wypiętego z falownika tylko nie pomylić się przy podłaczaniu

Na opisach z ALI to się nawet AI wywali. 𓀐