Monitoring farmy solarnej SofarSolar

Szukam narzędzia do monitoringu inwertera SofaSolar przez Wi-Fi.
Na razie znalazłem SofarSolarMQTT niestety mimo pojawienia się encji dane nie są przesyłane do MQTT.

Dodatek jest niezbyt skomplikowany w konfiguracji a ustawienia AP inwertera również zmieniłem tak jak opisano w pomocy.

Czy zna ktoś inny dodatek do monitorowania inwertera Sofar lub udało mu się uruchomić ten dodatek?

Używałem tego dodatku przez chwilę jednak zauważyłem dziwne zachowanie po restarcie systemu.
Nie drążyłem tematu i przesiadłem się na pobieranie danych z portalu solarman.pv oraz ginlong.com .
(falownik domyślnie wysyła dane do portalu ginlong.com)
Do tego celu używam Node-Red-a . Jeżeli jesteś zainteresowany takim rozwiązaniem to mogę wrzucić flow.

1 polubienie

Jestem zainteresowany takim rozwiązaniem. Będę bardzo wdzięczny za instrukcje.

  1. Zakładamy konto na portalu : https://m.ginlong.com/ i dodajemy urządzenie. (data loger)
  2. Importujemy flow do NR i w pierwszej nodzie funkcyjnej zmieniamy dane logowania na swoje:
    (userName , password)

image

  1. Po pobraniu info z portalu ostatnia noda funkcyjna wyciąga interesujące nas dane
    (można je dowolnie modyfikować )
    image

  2. Noda MQTT OUT wymaga podmiany pola „Server” + ewentualnie Username i Password.
    ( zależy od ustawień naszego brokera)

  3. Następnie w HA dodajemy sensory wg. schematu (config.yaml)

  • platform: mqtt
    name: PV-Power
    state_topic: “pv/values”
    unit_of_measurement: ‘kW’
    value_template: “{{ value_json.Current_power }}”
    device_class: power
  1. Dodajemy do UI :
    image

Dane pobierane są co 5 min.

ginlong.json (5,7 KB)

Żródło: https://flows.nodered.org/flow/1a1e2bac1ecfe8f40527ad930fe788f0

2 polubienia

Dziękuję bardzo.
Zobaczę czy mi zwykłemu Januszowi uda się to uruchomić.

W razie pytań można pisać. Musi się udać.

Udało mi się skonfigurować flow w Node-RED i nawet pobiera dane.

Dodałem do pliku configuration.yaml sekcję (sensor: !include sensor.yaml) i w pliku o tej nazwie dodałem sensory.

Niestety encje które się pojawiły po restarcie nie wyświetlają pobranych danych.

Wpisałem adres użytkownika i hasło oraz IP serwera z brokerem MQTT, czyli mojego HA i jak widać na pierwszym obrazie jest połączony.

Gdzie popełniłem błąd, że encje nie pobierają wartości z brokera.

Posiadasz inne sensory na MQTT żeby potwierdzić że ta komunikacja działa?
W HA należy dodać użytkownika , Konfiguracja->użytkownicy. (nazwę oraz hasło należy wpklepać do nody MQTT out w NR)
Zakładam że integracja MQTT jest zainstalowana.

Miałem znak specjalny w haśle, usunąłem go ale pomimo zmiany nie działa i mam takie logi z Mosquitto broker.

Nie mam innych sensorów MQTT.
Nasłuch tematu wygląda tak.


Zakładam więc, że broker działa.

Znalazłem błąd.

  • platform: mqtt
    name: Total_production
    state_topic: ‘pv/values’
    unit_of_measurement: ‘kWh’
    value_template: “{{ value_json.Total_production }}”
    device_class:

A było tak.
state_topic: “pv/values”

Inne ciapki też trzeba ręcznie wpisać wklejone jakoś nie zadziałały.

Dzięki za skrypt, udało się to uruchomić w HA z inwerterem Sofar Solar SF4ES004 chociaż należało trochę zmienić konfigurację czujnika np.

  • platform: mqtt
    name: ‘PV-Power’
    state_topic: ‘pv/values’
    unit_of_measurement: ‘W’
    value_template: ‘{{ value_json.Current_power }}’
    device_class: power

Please let me know how I can do it at home

Ja pobieram dane z falownika po sieci lokalnej, działa to fajnie i bez większego problemu.
W tej metodzie otrzymujemy tylko trzy przydatne odczyty
aktualna moc
dzienna produkcja
całość produkcji
poniżej ściąga z konfiguracji

podmień user i pass oraz lokalne IP i powinno działać :slight_smile:

Sensory bezpośrednie pobierające dane z falownika SolarSofar 8.8KTX

  • platform: scrape
    resource: http://10.0.0.250/status.html
    name: Produkcja_ogolem_sofar
    authentication: basic
    username: ****
    password: ***
    select: “script”
    index: 1
    value_template: ‘{{ (( value.split(’’;’’)[7] ) | replace (’‘var webdata_total_e = ‘’,’’’’) |replace(’’"’’, ‘’’’)|float ) }}’
    scan_interval: 300
    unit_of_measurement: “kWh”
  • platform: scrape
    resource: http://10.0.0.250/status.html
    name: Produkcja_aktualna_sofar
    authentication: basic
    username: ****
    password: ****
    select: “script”
    index: 1
    value_template: ‘{{ (( value.split(’’;’’)[5] ) | replace (’‘var webdata_now_p =’’,’’’’ ) |replace(’’"’’, ‘’’’) |float) }}’
    scan_interval: 30
    unit_of_measurement: “W”
  • platform: scrape
    resource: http://10.0.0.250/status.html
    name: Produkcja_dzisiaj_sofar
    authentication: basic
    username: ******
    password: *****
    select: “script”
    index: 1
    value_template: ‘{{ (( value.split(’’;’’)[6] ) | replace (’‘var webdata_today_e = ‘’,’’’’)|replace(’’"’’, ‘’’’)|float )}}’
    scan_interval: 90
    unit_of_measurement: “kWh”

co dotyczy danych zassane poprzez MQTT z ginlong, jest ich dużo więcej
ginlong

1 polubienie

Witam. Czy ten kod mam wkleić do pliku configuration.yaml ?

tak tylko podmień na swoje dane :))

Tak zrobiłem tylko wywala mi błąd przy sprawdzaniu konfiguracji:


Component error: password - Integration ‘password’ not found.
Component error: authentication - Integration ‘authentication’ not found.
Component error: platform - Integration ‘platform’ not found.
Component error: index - Integration ‘index’ not found.
Component error: name - Integration ‘name’ not found.
Invalid config for [select]: expected a dictionary. Got OrderedDict([(‘default_config’, {}), (‘platform’, ‘scrape’), (‘resource’, ‘http://192.168.0.160/status.html’), (‘name’, ‘Produkcja_ogolem_sofar’), (‘authentication’, ‘basic’), (‘username’, ‘admin’), (‘password’, ‘admin’), (‘select’, ‘“script”’), (‘index’, 1), (‘value_template’, ‘‘{{ (( value.split(’’;’’)[7] ) | replace (’‘var webdata_total_e = ‘’,’’’’) |replace(’’"’’, ‘’’’)|float ) }}’’), (‘scan_interval’, 300), (‘unit_of_measurement’, ‘“kWh”’)]). (See ?, line ?).
Component error: value_template - Integration ‘value_template’ not found.
Component error: resource - Integration ‘resource’ not found.
Component error: scan_interval - Integration ‘scan_interval’ not found.
Component error: unit_of_measurement - Integration ‘unit_of_measurement’ not found.
Component error: username - Integration ‘username’ not found.

wpisz w przeglądarkę
view-source:http://192.168.0.160/status.html
powinieneś zobaczyć

Jest tam więcej informacji ale przydatne są tylko te 3
można pobierać jeszcze informacje o alarmach
Czy masz ustawione jakieś hasło w sofarze?,
jeżeli nie usuń linie password: lub utwórz hasło w sofarze

  - platform: scrape
    resource: http://192.168.0.160/status.html
    name: Produkcja_ogolem_sofar
    authentication: basic
    username: admin
    password: ***********
    select: "script"
    index: 1
    value_template: '{{ (( value.split('';'')[7] ) | replace (''var webdata_total_e = '','''') |replace(''"'', '''')|float  ) }}'
    scan_interval: 300
    unit_of_measurement: "kWh"
  - platform: scrape
    resource: http://10.0.0.160/status.html
    name: Produkcja_aktualna_sofar
    username: admin
    password: ***********
    select: "script"
    index: 1
    value_template: '{{ (( value.split('';'')[5] ) | replace (''var webdata_now_p ='','''' ) |replace(''"'', '''') |float) }}'
    scan_interval: 30
    unit_of_measurement: "W"
  - platform: scrape
    resource: http://10.0.0.160/status.html
    name: Produkcja_dzisiaj_sofar
    authentication: basic
    username: admin
    password: **************
    select: "script"
    index: 1
    value_template: '{{ (( value.split('';'')[6] ) | replace (''var webdata_today_e = '','''')|replace(''"'', '''')|float )}}'
    scan_interval: 90
    unit_of_measurement: "kWh"
'

Pozdrawiam

Po wpisaniu w przeglądarkę:
view-source:http://192.168.0.160/status.html

widzę informacje jak pokazałeś wyżej. Natomiast po wklejeniu kodu do configu:



# Configure a default setup of Home Assistant (frontend, api, etc)
default_config:
      
#SOFARSOLAR
platform: scrape
resource: http://192.168.0.160/status.html
name: Produkcja_ogolem_sofar
authentication: basic
username: admin
password: admin
select: "script"
index: 1
value_template: '{{ (( value.split('';'')[7] ) | replace (''var webdata_total_e = '','''') |replace(''"'', '''')|float  ) }}'
scan_interval: 300
unit_of_measurement: "kWh"

wyrzuca mi znowu takie błędy przy sprawdzaniu konfiguracji:

Component error: password - Integration ‘password’ not found.
Component error: authentication - Integration ‘authentication’ not found.
Component error: platform - Integration ‘platform’ not found.
Component error: index - Integration ‘index’ not found.
Component error: name - Integration ‘name’ not found.
Invalid config for [select]: expected a dictionary. Got OrderedDict([(‘default_config’, {}), (‘platform’, ‘scrape’), (‘resource’, ‘http://192.168.0.160/status.html’), (‘name’, ‘Produkcja_ogolem_sofar’), (‘authentication’, ‘basic’), (‘username’, ‘admin’), (‘password’, ‘admin’), (‘select’, ‘script’), (‘index’, 1), (‘value_template’, ‘{{ (( value.split(’;’)[7] ) | replace (‘var webdata_total_e = ‘,’’) |replace(’"’, ‘’)|float ) }}’), (‘scan_interval’, 300), (‘unit_of_measurement’, ‘kWh’)]). (See ?, line ?).
Component error: value_template - Integration ‘value_template’ not found.
Component error: resource - Integration ‘resource’ not found.
Component error: scan_interval - Integration ‘scan_interval’ not found.
Component error: unit_of_measurement - Integration ‘unit_of_measurement’ not found.
Component error: username - Integration ‘username’ not found