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

@_wesley
Musisz to sam sprawdzić jak (czy?) działa. Nie mam takiego sprzętu więc są to pobożne życzenia.
Nie będę poprawiał całego flow i załączę tylko istotne rzeczy.


flows (25).json (6,5 KB)

Założenia:

  1. Falownik odpytywany jest co 1min - więc musisz zmienić w timestamp z 40sek na 1min
  2. Założono moc falownika na 10kW - jeśli jest inna trzeba proporcjonalnie zmienić wartości warunków w filtrach.
  3. W związku z powyższym falownik nie jest w stanie wyprodukować więcej niż 170Wh/min.
    Ten warunek obowiązuje również dla energi oddanej do sieci oraz do aku.
    To są warunki graniczne i jeśli pomiar jest inny to ze względów technicznych jest niemożliwy.
  4. Zakładam, że moc zainstalowa to 20kW i z sieci oraz aku nie można pobrać więcej niż 340Wh/min
  5. Pomiary kolejnych wartości muszą być rosnące i niezerowe.

Widzę, że @paku2020 wprowadził już wstępną filtrację na zakres ( na rys. oznaczone (1)) więc nowe filtry możesz włączy za nimi.
Najważniejsze jest aby sprawdzić przed zmianami, kiedy falownik zeruje dzienne pomiary i w nodzie Zerowanie wartości ustawić czas wyzwalanie na chwilę po np. 2min po… (na rys (2))
Efekty działania powinny być widoczne zaraz po zmianach ( do 2-3 min).
Jest jeden słaby punkt - po restarcie lub deploy pierwszy pomiar MUSI być prawidłowy.
Na początku nie ma podstaw do jego oceny i trzeba go przyjąć jako prawidłowy.
Filtry:
F_Energy_Out - dla energii wysłanej do sieci
F_Energy_In - dla energii pobranej z sieci sieci
F_Solar_Out - dla energii wyprodukowanej

Poskładaj do kupy, potestuj i posprzątaj ten bałagan :wink: , powiadom o efektach.

… możesz jeszcze w delay 500ms zmienić na 1sek… mam podejrzenia, że problemy wynikają z tego, że z jednoczesną obsługą chmury i NR (mogą być takie momenty) moduł sobie nie radzi.

@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