Sofar Solar inwerter - odczyt danych bezpośrednio przez fabryczny DataLogger

@RobinI30 - szacun za wiedze i błyskawiczna pomoc :), timestamp przestawiony na 1minute, delay 1s, zerowanie statystyk mam 33sekundy po północy - ustawiłem na 00:02, filtry powklejane, za kilka godzin dam znać jaki efekt

Edit:

Kompletna paczka do falownika Sofar Solar HYD 5K~20KTL-3PH
Jest to przerobiony proces @RobinI30 i @paku2020 wraz z poprawkami @RobinI30
W configuration.yaml wpisać:

binary_sensor:
  - platform: ping
    host: 192.168.0.32 #adres ip falownika
    name: Falownik_Sofar
    count: 7
    scan_interval: 30

utility_meter:

  pv_produkcja_sloneczna:
    name: Produkcja z energii słonecznej
    source: sensor.sofarsolarmqtt_wygenerowane_kw_dzis
    cycle: yearly

  pv_uzycie_z_sieci:
    name: Użycie energii z sieci
    source: sensor.sofarsolarmqtt_dzienne_uzycie_energii_z_sieci
    cycle: yearly

  pv_produkcja_do_sieci:
    name: Produkcja do sieci
    source: sensor.sofarsolarmqtt_dzienna_produkcja_do_sieci
    cycle: yearly

  pv_energia_wychodzaca_aku:
    name: Energia wychodząca z akumulatora
    source: sensor.sofarsolarmqtt_dzienna_energia_wychodzaca_z_akumulatora
    cycle: yearly

  pv_energia_wchodzaca_aku:
    name: Energia wchodząca do akumulatora
    source: sensor.sofarsolarmqtt_dzienna_energia_wchodzaca_do_akumulatora
    cycle: yearly

sensor:

  ###### SofarSolarMQTT lokalnie ######
  - platform: mqtt
    state_topic: "SofarSolarMQTT/Frequency_Grid_Hz"
    name: "SofarSolarMQTT_Frequency_Grid"
    unit_of_measurement: "Hz"
    device_class: power

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Aktualna_generowana_moc_kW"
    name: "SofarSolarMQTT_Aktualna_generowana_moc_kW"
    unit_of_measurement: "kW"
    device_class: power

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Napiecie_V_faza_R"
    name: "SofarSolarMQTT_Napiecie_V_faza_R"
    unit_of_measurement: "V"
    device_class: voltage

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Natezenie_A_faza_R"
    name: "SofarSolarMQTT_Natezenie_A_faza_R"
    unit_of_measurement: "A"
    device_class: current

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Napiecie_V_faza_S"
    name: "SofarSolarMQTT_Napiecie_V_faza_S"
    unit_of_measurement: "V"
    device_class: voltage

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Natezenie_A_faza_S"
    name: "SofarSolarMQTT_Natezenie_A_faza_S"
    unit_of_measurement: "A"
    device_class: current

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Napiecie_V_faza_T"
    name: "SofarSolarMQTT_Napiecie_V_faza_T"
    unit_of_measurement: "V"
    device_class: voltage

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Natezenie_A_faza_T"
    name: "SofarSolarMQTT_Natezenie_A_faza_T"
    unit_of_measurement: "A"
    device_class: current

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Napięcie_V_string1"
    name: "SofarSolarMQTT_Napięcie_V_string1"
    unit_of_measurement: "V"
    device_class: voltage

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Natezenie_A_string1"
    name: "SofarSolarMQTT_Natezenie_A_string1"
    unit_of_measurement: "A"
    device_class: current

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Moc_kW_string1"
    name: "SofarSolarMQTT_Moc_kW_string1"
    unit_of_measurement: "kW"
    device_class: power

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Napięcie_V_string2"
    name: "SofarSolarMQTT_Napięcie_V_string2"
    unit_of_measurement: "V"
    device_class: voltage

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Natezenie_A_string2"
    name: "SofarSolarMQTT_Natezenie_A_string2"
    unit_of_measurement: "A"
    device_class: current

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Moc_kW_string2"
    name: "SofarSolarMQTT_Moc_kW_string2"
    unit_of_measurement: "kW"
    device_class: power

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Wygenerowane_kW_Dzis"
    name: "SofarSolarMQTT_Wygenerowane_kW_Dzis"
    unit_of_measurement: "kWh"
    device_class: energy
    icon: mdi:solar-power

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Suma_wygenerowanych_kW"
    name: "SofarSolarMQTT_Suma_wygenerowanych_kW"
    unit_of_measurement: "kWh"
    device_class: energy
    icon: mdi:solar-power

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Temperatura_Otoczenia"
    name: "SofarSolarMQTT_Temperatura_Otoczenia"
    unit_of_measurement: "°C"
    device_class: temperature

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Temperatura_Radiatora"
    name: "SofarSolarMQTT_Temperatura_Radiatora"
    unit_of_measurement: "°C"
    device_class: temperature

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Temperatura_Inwertera"
    name: "SofarSolarMQTT_Temperatura_Inwertera"
    unit_of_measurement: "°C"
    device_class: temperature

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Rezystancja_izolacji"
    name: "SofarSolarMQTT_Rezystancja_izolacji"
    unit_of_measurement: "ohm"

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Czas_generacji_dzis_minut"
    name: "SofarSolarMQTT_Czas_generacji_dzis_minut"
    unit_of_measurement: "min"

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Calkowity_czas_generowania_min"
    name: "SofarSolarMQTT_Calkowity_czas_generowania_min"
    unit_of_measurement: "min"

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Calkowity_czas_pracy_falownika_min"
    name: "SofarSolarMQTT_Calkowity_czas_pracy_falownika_min"
    unit_of_measurement: "min"
    
  - platform: mqtt
    state_topic: "SofarSolarMQTT/Calkowite_uzycie_energii_z_sieci"
    name: "SofarSolarMQTT_Calkowite_uzycie_energii_z_sieci"
    unit_of_measurement: "kWh"
    device_class: energy
    icon: mdi:transmission-tower-export

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Calkowita_produkcja_do_sieci"
    name: "SofarSolarMQTT_Calkowita_produkcja_do_sieci"
    unit_of_measurement: "kWh"
    device_class: energy
    icon: mdi:transmission-tower-import

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Calkowita_energia_wchodzaca_do_akumulatora"
    name: "SofarSolarMQTT_Calkowita_energia_wchodzaca_do_akumulatora"
    unit_of_measurement: "kWh"
    device_class: energy
    icon: mdi:battery-plus

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Calkowita_energia_wychodzaca_z_akumulatora"
    name: "SofarSolarMQTT_Calkowita_energia_wychodzaca_z_akumulatora"
    unit_of_measurement: "kWh"
    device_class: energy
    icon: mdi:battery-minus
    
  - platform: mqtt
    state_topic: "SofarSolarMQTT/Dzienne_uzycie_energii_z_sieci"
    name: "SofarSolarMQTT_Dzienne_uzycie_energii_z_sieci"
    unit_of_measurement: "kWh"
    device_class: energy
    icon: mdi:transmission-tower-export

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Dzienna_produkcja_do_sieci"
    name: "SofarSolarMQTT_Dzienna_produkcja_do_sieci"
    unit_of_measurement: "kWh"
    device_class: energy
    icon: mdi:transmission-tower-import

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Dzienna_energia_wchodzaca_do_akumulatora"
    name: "SofarSolarMQTT_Dzienna_energia_wchodzaca_do_akumulatora"
    unit_of_measurement: "kWh"
    device_class: energy
    icon: mdi:battery-plus

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Dzienna_energia_wychodzaca_z_akumulatora"
    name: "SofarSolarMQTT_Dzienna_energia_wychodzaca_z_akumulatora"
    unit_of_measurement: "kWh"
    device_class: energy
    icon: mdi:battery-minus

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Akumulator_napiecie"
    name: "SofarSolarMQTT_Akumulator_napiecie"
    unit_of_measurement: "V"
    device_class: energy
    icon: mdi:battery

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Akumulator_prad"
    name: "SofarSolarMQTT_Akumulator_prad"
    unit_of_measurement: "A"
    device_class: energy
    icon: mdi:battery

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Akumulator_moc"
    name: "SofarSolarMQTT_Akumulator_moc"
    unit_of_measurement: "W"
    device_class: energy
    icon: mdi:battery

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Akumulator_temperatura"
    name: "SofarSolarMQTT_Akumulator_temperatura"
    unit_of_measurement: "°C"
    device_class: energy
    icon: mdi:battery-check

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Akumulator_stan_naladowania_SOC"
    name: "SofarSolarMQTT_Akumulator_stan_naladowania_SOC"
    unit_of_measurement: "%"
    device_class: energy
    icon: mdi:battery-high

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Akumulator_stan_zdrowia_SOH"
    name: "SofarSolarMQTT_Akumulator_stan_zdrowia_SOH"
    unit_of_measurement: "%"
    device_class: energy
    icon: mdi:battery-heart-variant

  - platform: mqtt
    state_topic: "SofarSolarMQTT/Akumulator_cykle"
    name: "SofarSolarMQTT_Akumulator_cykle"
    unit_of_measurement: "cykli"
    device_class: energy
    icon: mdi:battery

Nody switch dopasować do swojego falownika.

Flow do node-RED:

HYD 5-20KTL-3PHv2.json (37,9 KB)

doinstalować w Node-RED buffer-parser:

Manage palette-Install-search modules (wyszukać buffer-parser) i zainstalować

W panelu energia ustawić:

wykres z Solarman Integration StephanJoubert z HACS

1

3

i z tego flow
HYD 5-20KTL-3PHv2.json (37,9 KB)

2

4

Witam wszystkich.

Czy próbował ktoś z sukcesem poprzez LSW3 nie tylko czytać dane ale również odpalać funkcje inwertera Sofar, mnie interesuje dokładnie ograniczenie mocy do zadanego procenta jak niżej.

Active power &Over/Under voltage Power Derate  Paramter(0x0900-0x093F)												

0901	ActiveOutputLimit	U16	0,1	%	0	1000	RW	有功输出百分比	The percentage of active power output	Installer

Mala uwaga - trzeba niedlugo bedzie poprawic config - MQTT Sensor - Home Assistant (home-assistant.io)
Czyli zamiast:

sensor:
  - platform: mqtt
    state_topic: "home/bedroom/temperature"

Zmieniamy na:

mqtt:
  sensor:
    - state_topic: "home/bedroom/temperature"

Proszę o podpowiedź jak przebudować sensor mqtt ze starego formatu na nowy
mam: sensor mqtt: !include mqtt.yaml
i jak w nim wpiszę według wzoru

mqtt:
  sensor:
    - state_topic: "home/bedroom/temperature"

to wywala mi błąd.
Jeżeli wpiszę to samo prosto do configuration.yaml to jest ok

Mam tak:

  • w configuraton.yaml
mqtt: !include mqtt_include.yaml
  • w mqtt_include.yaml z podziałem na rodzaje urządzeń
  sensor: !include /config/mqtt_sensors.yaml
  switch: !include /config/mqtt_switch.yaml
  climate: !include /config/mqtt_climate.yaml
  fan: !include /config/mqtt_fan.yaml
  • dla np. sensorów
####################sofar-solar###############
    - name: "Pordukcja dzienna"
      state_topic: "Sofar/DayEnergy"
      unit_of_measurement: 'kWh'
      device_class: energy
      icon: mdi:counter

    - name: "Pordukcja total"
      state_topic: "Sofar/TotalEnergy"
      unit_of_measurement: 'kWh'
      device_class: energy
      icon: mdi:counter

    - name: "Moc inw."
      state_topic: "Sofar/Power_P"
      unit_of_measurement: 'Watt'
      device_class: power
#    icon: mdi:counter


    - name: "Napięcie PV1"
      state_topic: "Sofar/V1"
      unit_of_measurement: 'V'
      device_class: voltage
  #    icon: mdi:counter


... i reszta sensorów
1 polubienie

Wielkie dzięki już działa :slight_smile:

Edit:

Mam jeszcze jedno pytanie, korzystam z twojej pracy “odczyt danych z sofar”
Działa bardzo fajnie, ale chciałbym aby z wysyłać sensory do HA z pominięciem MQTT.
Chcę wyeliminować MQTT,
W NR umiem już :slight_smile: :+1: wykonać sensor z MQTT do HA, natomiast nie radzę sobie bezpośrednio, wiem jakie dane wysyłane są do brokera


Dzięki za pomoc i przepraszam że zawracam Głowę :slight_smile:

Każdy Msg, który wychodzi do węzła mqtt ma taką strukturę:


Więc możesz za pomocą switcha rozdzielać wiadomości do poszczególnych sensorów HA, kluczem może być msg.topic lub msg.parts.index.
Indeksy rejestrów zamieniane są na topic wewnątrz subflow Sofar to MQTT w/g tabeli:

var idMap = {
'0': topic+'/Status',
'1': topic+'/Err1',
'2': topic+'/Err2',
'3': topic+'/Err3',
'4': topic+'/Err4',
'5': topic+'/Err5',
'6': topic+'/V1',
'7': topic+'/A1',
'8': topic+'/V2',
'9': topic+'/A2',
'10': topic+'/P1',
'11': topic+'/P2',
'12': topic+'/Power_P',
'13': topic+'/Power_Q',
'14': topic+'/Freq',
'15': topic+'/V_L1',
'16': topic+'/A_L1',
'17': topic+'/V_L2',
'18': topic+'/A_L2',
'19': topic+'/V_L3',
'20': topic+'/A_L3',
'21': topic+'/TotalEnergy',
'23': topic+'/TotalTime',
'25': topic+'/DayEnergy',
'26': topic+'/DayTime',
'27': topic+'/TempMod',
'28': topic+'/TempInner',
'29': topic+'/V_Bus'
};

…różnice są tylko od rej’21’ i jest drobne przesunięcie, które można zweryfikować podłączając debug na wiadomości wysyłane do mqtt.
Na temat sposobu użycia noda entity wiem niewiele.

Od której wersji się zmienia coś w mqtt?

Próbuję zintegrować się za pomocą tego schematu Node-Red z moim falownikiem Afore BNT005KTL, ale nie umiem uzyskać żadnych informacji. Podejrzewam, że adresy rejestrów nie są poprawne.

Od supportu polskiego Afore dostałem PDF z rozpiską adresów dla mojego falownika:

Na modbus nie znam się kompletnie i szczerze mówiąc próbując wpisywać te adresy czy to w formie decimal czy przekształcając na adresy szesnastkowe nic konkretnego nie dostaję oc mogłoby się w jakikolwiek sposób pokryć z danymi z falownika lub aplikacji solarman.

Byłby mi ktoś w stanie z tym pomóc?

Problem tkwi nie są samym falowniku, bo na pierwszy rzut oka adresu są zgodne… nawet gdyby to coś by odczytał. Pośrednikiem w transmisji jest datalogger, który z falownikiem komunikuje się przez modbus. To czy uda Ci się odczytać zależy od softu w loggerze. Jeśli jesteś pewien, że SN (loggera nie falownika) wpisałeś poprawnie nie pozostaje Ci łączyć się przez “czysty” modbus złączem RS485.

W falowniku jest jedynie złącze pod data logger. Żadnych innych złącz tam nie ma.
SN podaję w konfiguracji z data loggera, nie z samego falownika. Zastanawia mnie jednak fakt, że skoro jest problem z odczytem przez datalogger to jak dane przesyłane są do aplikacji w chmurze (Solarman)?

Bo solarman wie jak się dogadać a ja nie :frowning:

Dobitnie powiedziane :wink:
Rozumiem, że szansy na zmiane firmware data logger’a nie ma?

Prszyszło mi jeszcze na myśl: skoro data logger łączy się z jakimś serwerem i jest pod to jeszcze opcja w konfiguracji to może udało by się postawić podobny serwer w sieci lokalnej? Pytanie tylko jak sprawdzić na jakiej architekturze to siedzi?

Gdzieś na początku tego tasiemca były robione próby przechwycenia pakietów do serwera, miało to sens ale wymagało specjalnych środków.

Nie znam sposobu, ale mam jeden działający Wifi nieużywany :wink:

W necie coś tam faktycznie próbowali robić :wink:

Znalazłem jeszcze info o ukrytej konfiguracji:
http:///config_hide.html

Być może jest to jeszcze kwestia konfiguracji ustawień komunikacji z inwerterem?

Ludzie to jakoś aktualizują i zaczyna działać.
Nigdzie nie widziałem procedury aktualizacji ani softu.

Czesc,

Mam taki problem, że część rejestrów działa poprawnie z na części mam “error parsing data”
Co moż


e być tego powodem ?

Powodem może być to, że falownik odpowiedział innym komunikatem niż oczekiwane. Dla buffer parser są to tylko bajty, które traktuje jak dane i próbuje odczytywać z poza zakresu długości bufora.
Sprawdź nodem debug co otrzymujesz z falownika.

Screenshot - 24.10.2022 , 00_46_57
out of range >= 0 i 26 odebrane 48

Nie jestem autorem tego procesu, powstał na kolanie jako proteza pierotnego.
Taki fikśny jest dlatego, że zastosowany parser obsługuje tylko rozmiar do 26 indeksów oraz z konstrukcji mapy rejestrów, która nie jest ciągla.
Dlatego wystąpil podzial na mniejsze paczki.
Założenie bylo takie aby rozmiar tych paczek byl obslugiwany przez parser. Jesli nie zostalo nic zmieniane w ustawieniach nodów KTL to powinno byc dobrze. Pytanie wiec dlaczego tak nie jest.
@artpc … to co pokazujesz to już jest skutek a nie przyczyna. Dlatego pisałem o debugu danych wychodziących z KTL.
Spekuluje …byc moze występuje jakas kumulacja z powodu złej jakości połaczenia i należy pokombinowac cos z czasami opóźnień.
Lub to jest taka uroda wersji softu (niektórym w ogóle ten proces nie działa).