Informacje z http / scrape

Hejka. Mój falownik przesyła dane przez http - bez logowania i po wpisaniu adresu:
http://192.168.0.118:8484/getdevdata.cgi?device=2&sn=ST600060xxxxxxx4
wyrzuca wartości, któe chciałbym mieć wyświetlane w HA:

{“flg”:1,“tim”:“20220327071256”,“tmp”:145,“fac”:4999,“pac”:587,“sac”:587,“qac”:0,“eto”:4744,“etd”:3,“hto”:150,“pf”:85,“wan”:0,“err”:0,“vac”:[2376,2332,2352],“iac”:[9,9,9],“vpv”:[4546,4884],“ipv”:[62,61],“str”:[]}

Poprosiłbym o podpowiedź jak wyciągnąć np: temperature - “pac”

Utworzyłem coś takiego:

  - platform: scrape
    resource: http://192.168.0.118:8484/getdevdata.cgi?device=2&sn=ST600060xxxxxxx4
    name: Solarmanxxx
    select: "pac"
    index: 1
    value_template: '{{ value_json.pac }}'
    scan_interval: 300
    unit_of_measurement: "kWh"

ale nie daje wyniku.

Sprawdz integrację RESTful Sensor - Home Assistant :

sensor:
  - platform: rest
    resource: http://192.168.0.118:8484/getdevdata.cgi?device=2&sn=ST600060xxxxxxx4
    name: falownik_json
    json_attributes:
      - flg
      - tim
      - pac
    value_template: "{{ value_json.flg}}"
 - platform: template
    sensors:
      falownik_pac:
        friendly_name: "falownik temperatura"
        value_template: "{{ state_attr('sensor.falownik_json', 'pac') }}"

Najpierw pobierasz wszystko co chcesz z falownika do sensora typu “json” a dopiero potem z tego tworzysz dedykowane sensory.

Maćku, dziękuje Ci serdecznie, działa super!!!
Jeżeli mógłbyś podpowiedzieć jeszcze co wpisać w state_attr, aby np. wynik 5455 pokazywał się jako 5,455

Mam nadzieję, że zadziała z dodatkowym zaokragleniem jakby było potrzebne:

      value_template: "{{ (state_attr('sensor.falownik_json', 'pac') | float(0) / 1000) | round(3) }}"

Dziękuje, działa. Jeżeli byłbyś tak miły to mam ostatnią prośbę. W parametrze vac”:[2376,2332,2352] są napięcia na 3 fazach. Chciałbym mieć je wszystkie na wykresie z osobna.

prawdopodobnie tu musi być jakaś zmiana, która będzie wskazywać na poszczególny szereg liczb:
falownik_vac:
friendly_name: “falownik_AC_3F”
value_template: “{{ state_attr(‘sensor.falownik_json’, ‘vac’) }}”
unit_of_measurement: V

Sprawdź tak, to odczyt pierwszej wartości z tablicy [2376,2332,2352] i dzielenie przez 10:

value_template: "{{ state_attr('sensor.falownik_json', 'vac')[0] | float(0) / 10 }}"

Dla kolejnych wartości używasz [1] i [2].

Działa jak należy, ale jest zgrzyt w odniesieniu do duplikacji tego samego atrybutu “vac”

dodając 3 linijki kodu:
falownik_vac:
friendly_name: “falownik_AC_1F”
value_template: “{{ state_attr(‘sensor.falownik_json’, ‘vac’)[0] | float(0) / 10 }}”

falownik_vac:
friendly_name: “falownik_AC_2F”
value_template: “{{ state_attr(‘sensor.falownik_json’, ‘vac’)[1] | float(0) / 10 }}”

… [3]

jest komunikat o duplikacie “falownik_vac:”

Bo nazwa encji musi być oczywiście unikatowa, zmień nazwę sensora analogicznie jak w opcji friendly_name:

falownik_ac_1f:
friendly_name: “falownik_AC_1F”

falownik_ac_2f:
friendly_name: “falownik_AC_2F”

falownik_ac_3f:
friendly_name: “falownik_AC_3F”

P.S. Użycie przez Ciebie tylko skrótu “AC” (ang. alternating current - prąd zmienny) w przypadku tego sensora (falownik_AC_1F) jest trochę nietrafione bo to jest napięcie przemienne. Zauważ, że producent falownika oznacza to jako “vac” (ang. VAC – skrót oznaczający napięcie przemienne, V (ang. volt) – wolt, AC (ang. alternating current) – prąd przemienny). proponuję trzymac się konwencji producenta, np:

falownik_vac_1f:
friendly_name: “falownik_V_AC_1F”

co w mojej opinii jest bardziej logiczne. Masz także pomiar częstotliwości napięcia w sieci - parametr “fac”:4999 (f ac: 49,99 Hz).

Mam już wszystko i działa pięknie. Tobie również pięknie dziekuje :slight_smile:

Edit:

VAC - zgadza się, prąd przemienny, często w parametrach sprzętu znajdujemy opisc 220-240VAC / lub 230V AC, nieco sobie zmieniłem ten opis pisząc AC_1F.

Drodzy Panowie,
w końcu - trafiając tutaj - udało mi się pobrać dane z Solplaneta. Ale nie jestem w stanie rozszyfrować tych wszystkich skrótów do parametrów. Jesteście w stanie pomóc?
Z tej całej listy udało mi się tylko:
{“flg”:0,
“tim”:“20221222215403”, data czas
“tmp”:250, temperatura falownika /10
“fac”:5002,
“pac”:21, aktualna moc Watt
“sac”:175,
“qac”:0,
“eto”:3400, wyprodukowane całość/10
“etd”:63, Wyprodukowane dzisiaj /10
“hto”:105, czas pracy?
“pf”:0,
“wan”:0,
“err”:0,
“vac”:[2417,2406,2404]
“iac”:[2,2,2],
“vpv”:[659,549],
“ipv”:[10,0],
“str”:[]}

{“flg”:0,
“tim”:“20221222215403”, data czas
“tmp”:250, temperatura falownika /10
“fac”:5002, częstotliwość /100 (50,02 Hz)
“pac”:21, aktualna moc Watt
“sac”:175, moc pozorna
“qac”:0, moc bierna
“eto”:3400, wyprodukowane całość/10
“etd”:63, Wyprodukowane dzisiaj /10
“hto”:105, czas pracy?
“pf”:0, cos (cosinus) fi
“wan”:0,
“err”:0,
“vac”:[2417,2406,2404] napięcie L1 L2 L3
“iac”:[2,2,2], prąd L1 L2 L3
“vpv”:[659,549], napięcię strigów
“ipv”:[10,0], prąd stringów
“str”:[]}

Witam
a ja mam takie zapytanie:
chciałbym z danych publicznych IMGW pobierać co godzinę aktualny SYNOP ze stacji 12120 z adresu https://danepubliczne.imgw.pl/api/data/synop/id/12105/format/xml
Pobrane dane chciałbym mieć widoczne jako poszczególne encje.
walczę z tym ale mój poziom wiedzy jeszcze nie jest na tak wysokim poziomie, dlatego bardzo proszę o pomoc.

@glubiak z może tak (RESTful Sensor - Home Assistant):

rest:
  - resource: https://danepubliczne.imgw.pl/api/data/synop/id/12105/format/xml
    scan_interval: 10  # time in seconds
    sensor:
      - name: id stacji
        value_template: "{{ value_json.xml.id_stacji }}"
      - name: stacja
        value_template: "{{ value_json.xml.stacja }}"

Nie sprawdzałem tego u siebie.

  1. Nie ma sensu rzeźbić, skoro te dane są dostępne też bezpośrednio jako json (który jest idealnym wsadem dla rest)
    https://danepubliczne.imgw.pl/api/data/synop/id/12105/

  2. Jeśli ktoś chce sobie porzeźbić to integracja rest potrafi sobie skonwertować metadane XML do formatu JSON w taki sposób
    Converting Between XML and JSON
    (a wtedy wynik opracowujemy i tak jako nowopowstały JSON)

Co pokazuje mój przykład (jest z dokumentacji) ale jakość rzeźbić nie musiałem :wink: .

P.S. Nie chcę dyskusji wyższości jednego formatu nad drugim :grin:.