Solarwatt Manager FLEX (!) auslesen via Rest

Hi,
ich bin neu in Home Assistant (also falls die Frage(n) lang/komisch sind, dann daher) und möchte meine Verbrauchsdaten vom Haus/ Solar etc. anzeigen in so einer Energieverteilungskarte.

Da die Rest-Schnittstelle vom Solarwatt Manager Flex viele Dinge liefert bin ich mir nicht so ganz klar, was ich wie machen muss.

Ich habe schon:
Visual Studio Code installiert :slight_smile:
In der Configuration.yaml diverse Dinge aus der Rest-Rückmeldung eingetragen (habe mir die Rest-Antwort, weil das ein Array ist ohne Namen, umwandeln lassen in yaml).
In der configuration.yaml habe ich unter

rest:
  resource: http://192.168.1.176/rest/items/
  sensor:

Damit bekomme ich so Dinge zustande wie:

 # 27:  << das ist zumindest in meiner Antwort das richtige Arrayfeld
      # link: "http://[meineIP]/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BC333_batteryChannelGroup_batteryStateOfCharge"
    - name: "Solarwatt - State Of Charge"
      value_template: "{{ value_json[27]['state'] }}"
      device_class: battery
      state_class: measurement
      unit_of_measurement: "%"
      unique_id: "intern.solarwatt.batteryflex.batterychannelgroup.batterystateofcharge"

oder

    # 36: Bsp. state: "1729607460000|0.0 W"
      # link: "http://192.168.1.176/rest/items/solarwattBattery_batteryflex_BatteryFlex_0BC333_harmonized_bat_power_out"
    - name: "{{ 'Solarwatt - bat_power_out' }}"
      value_template: "{{ float(value_json[36]['state'].split('|')[1].split(' ')[0]) }}"
      unit_of_measurement: "W"
      unique_id: "intern.solarwatt.batteryflex.harmonized.bat.power.out"

Folgende Anfängerfragen hätte ich:
a) kann ich bzw. wie kann ich den Namen abhängig vom Label machen. In der Restantwort kommt auch ein label: “blah blah blah” zurück
Da würde ich als motivierter Laie

- name: "{{ value_json[36]['label'] }}"

versuchen, was aber nicht geht.

b) da die Rest-Rückgabe der Form

[
  {
    diverse dingse
  },
  {
   andere diverse dingse
  },
.....

usw. ist, kann ich die einzelnen Arrayobjekte auch anders ansteuern als über value_json[nr] ? Diese nr ist ja nur bei speziell mir so. In der Liste der Objekte sind auch kunterbunt mystrom-Dosen dazwischen, nehme ich eine raus, passt die Nummerierung ja nicht mehr ?!

c) hat schonmal einer bei den diversen Rückgabewerten von Solarwatt rausgefunden, was sie bedeuten (manche sind mir klar)? Aber zB. kriege ich aktuell gerade den Wert “Strom aus Speicher zum Verbrauch des Hauses” nicht zusammen mit “aktueller Hausverbrauch” die sind immer unterschiedlich. Während keine Erzeugung und kein Netzbezug ist. Es scheint da noch eine Rechnung hinterzustecken?!
Und ja, ich habe bei Solarwatt angefragt … keine Antwort.

Kompliziert es ist!

So, nun habe ich die Felder soweit rausgesucht und es läuft …zumindest in der PowerFlowCardPlus … der Home Assistant Energy bringt mich aber zur Verzweiflung …

In deiner Sensor Definition fehlt noch:
device_class: energy

Ja, da hast Du recht… Habs korrigiert. Und nur nochmal das ich das richtig verstehe (ich fange mal klein an “Strom-rein-Strom-raus”): so habe ich das nu gebaut

	# link: "http://192.168.1.176/rest/items/kiwigrid_location_standard_f3383059f84f_harmonized_power_out"
    #   state: "1729607445000|8.333333333333334 W"
    - name: "{{ 'Kiwi- net power out' }}"
      value_template: "{{ float(value_json[65]['state'].split('|')[1].split(' ')[0]) }}"
      unit_of_measurement: "W"
      device_class: power
      state_class: measurement
      unique_id: "intern.solarwatt.kiwigrid.harmonized.net.power.out"

      #   link: "http://192.168.1.176/rest/items/kiwigrid_location_standard_f3383059f84f_harmonized_power_in"  
      #   state: "1729607445000|0.0 W"
    - name: "Kiwi- net power in"
      value_template: "{{ float(value_json[164]['state'].split('|')[1].split(' ')[0]) }}"
      unit_of_measurement: "W"      
      device_class: power
      state_class: measurement      
      unique_id: "solarwatt.kiwigrid.location.harmonized.power.in"

Dann habe ich (weil Watt) je ein Riemannintegral gebaut. Mit jeweils dem Eingangssensor. Linke Summe ausgesucht, kW pro Stunde, Genauigkeit 2 und Max. Teilintervall 30 - weil ich die Sensoren alle 30 sec abfrage.

Und diese beiden neuen Integralsensoren habe ich dann in der Energieseite unter Stromnetz bei Verbrauch und Einspeisung eingetragen

Ist das so erstmal richtig? Morgen beobachte ich es :slight_smile:

Hallo,

wir besitzen seit kurzem eine Solarwatt PV-Anlage, die wir nun mit Homeassistent koppeln möchten. Leider sind die Bezeichnungen, die im REST API benutzt werden alles andere als intuitiv :slightly_frowning_face:
Deshalb folge Frage: stimmen die Annahmen …

  • Leistung bezogen aus dem Netz: http://<my_ip>/rest/items/solarwattBattery_batteryflex_BatteryFlex_0C3512_netChannelGroup_netPowerConsumption

  • Leistung Solaranlage: http://<my_ip>/rest/items/pvplant_standard_0dc3199788a7_harmonized_power_out

  • Aktueller Verbrauch: http://<my_ip>/rest/items/kiwigrid_location_standard_6ce51aeb70e1_harmonized_power_consumed

  • Lade Zustand Batterie (scheint das einzig eindeutige zu sein :wink:): http://<my_ip>/rest/items/solarwattBattery_batteryflex_BatteryFlex_0C3512_batteryChannelGroup_batteryStateOfCharge

  • Leistung von Batterie: http://<my_ip>/rest/items/solarwattBattery_batteryflex_BatteryFlex_0C3512_harmonized_bat_power_out

  • Leistung in Batterie: http://solar-energiemanager.fritz.box/rest/items/solarwattBattery_batteryflex_BatteryFlex_0C3512_harmonized_bat_power_in

Wäre sehr nett, wenn das jemand bestättigen könnte … was uns auch noch fehlt ist:

  1. Direkt verbrauchte Leistung der Solaranlage
  2. Eingespeiste Leistung der Solaranlage
  3. Verbrauch unserer Wallbox

Vielleicht hat das von euch ja schon jemand herausbekommen …

Vielen Dank für eure Unterstützung.

Update:
Hallo,

habe nun alle Felder nach bestem Wissen und Gewissen herausgesucht … hier das Ergebnis:

rest:
    # solar power produced
  - resource: http://solar-energiemanager.fritz.box/rest/items/pvplant_standard_0dc3199788a7_harmonized_power_out
    scan_interval: 60
    sensor:
      - name: "SolarWatt Leistung Erzeugung"
        unique_id: "solarwatt.powerplant.power.out"
        icon: mdi:solar-power-variant-outline
        state_class: measurement
        unit_of_measurement: "W"
        device_class: power
        value_template: '{{ value_json.state.split("|")[1]| trim(" W")| float | round(1) }}'
        
    # solar power self consumed
  - resource: http://solar-energiemanager.fritz.box/rest/items/kiwigrid_location_standard_6ce51aeb70e1_harmonized_power_self_consumed
    scan_interval: 60
    sensor:
      - name: "SolarWatt Leistung Eigenverbrauch"
        unique_id: "solarwatt.powerplant.power.selfconsumed"
        icon: mdi:home-lightning-bolt-outline
        state_class: measurement
        unit_of_measurement: "W"
        device_class: power
        value_template: '{{ value_json.state.split("|")[1]| trim(" W")| float | round(1) }}'        
        
    # solar power self supplied
  - resource: http://solar-energiemanager.fritz.box/rest/items/kiwigrid_location_standard_6ce51aeb70e1_harmonized_power_self_supplied
    scan_interval: 60
    sensor:
      - name: "SolarWatt Leistung Einspeisung"
        unique_id: "solarwatt.powerplant.power.selfsupplied"
        icon: mdi:transmission-tower-import
        state_class: measurement
        unit_of_measurement: "W"
        device_class: power
        value_template: '{{ value_json.state.split("|")[1]| trim(" W")| float | round(1) }}'        
        
    # power consumed
  - resource: http://solar-energiemanager.fritz.box/rest/items/kiwigrid_location_standard_6ce51aeb70e1_harmonized_power_consumed
    scan_interval: 60
    sensor:
      - name: "SolarWatt Leistung Gesamtverbrauch"
        unique_id: "solarwatt.power.consumed"
        icon: mdi:home-lightning-bolt-outline
        state_class: measurement
        unit_of_measurement: "W"
        device_class: power
        value_template: '{{ value_json.state.split("|")[1]| trim(" W")| float | round(1) }}'

    # power provided by power station
  - resource: http://solar-energiemanager.fritz.box/rest/items/solarwattBattery_batteryflex_BatteryFlex_0C3512_harmonized_net_power
    scan_interval: 60
    sensor:
      - name: "SolarWatt Verbrauch Netz"
        unique_id: "solarwatt.power.net.consumed"
        icon: mdi:transmission-tower-export
        state_class: measurement
        unit_of_measurement: "W"
        device_class: power
        value_template: '{{ value_json.state.split("|")[1]| trim(" W")| float | round(1) }}'
    
    # battery state of charge
  - resource: http://solar-energiemanager.fritz.box/rest/items/solarwattBattery_batteryflex_BatteryFlex_0C3512_batteryChannelGroup_batteryStateOfCharge
    scan_interval: 60
    sensor:
      - name: "SolarWatt Batterie Ladezustand"
        unique_id: "solarwatt.battery.state.charge"
        icon: mdi:home-battery-outline
        state_class: measurement
        unit_of_measurement: "%"
        device_class: battery
        value_template: '{{ value_json.state }}'
        
    # power consumed from battery
  - resource: http://solar-energiemanager.fritz.box/rest/items/solarwattBattery_batteryflex_BatteryFlex_0C3512_harmonized_bat_power_out
    scan_interval: 60
    sensor:
      - name: "SolarWatt Batterie Verbrauchsleistung"
        unique_id: "solarwatt.battery.power.provided"
        icon: mdi:battery-arrow-down-outline
        state_class: measurement
        unit_of_measurement: "W"
        device_class: power
        value_template: '{{ value_json.state.split("|")[1]| trim(" W")| float | round(1) }}'
        
    # power consumed from battery
  - resource: http://solar-energiemanager.fritz.box/rest/items/solarwattBattery_batteryflex_BatteryFlex_0C3512_harmonized_bat_power_in
    scan_interval: 60
    sensor:
      - name: "SolarWatt Batterie Ladeleistung"
        unique_id: "solarwatt.battery.power.loaded"
        icon: mdi:battery-arrow-up-outline
        state_class: measurement
        unit_of_measurement: "W"
        device_class: power
        value_template: '{{ value_json.state.split("|")[1]| trim(" W")| float | round(1) }}'

    # power consumed by wallbox        
  - resource: http://solar-energiemanager.fritz.box/rest/items/alfensingle_wallbox_7e3cafd5ab59_harmonized_power
    scan_interval: 60
    sensor:
      - name: "SolarWatt Wallbox Verbrauch"
        unique_id: "solarwatt.wallbox.power.consumed"
        icon: mdi:ev-station
        state_class: measurement
        unit_of_measurement: "W"
        device_class: power
        value_template: '{{ value_json.state.split("|")[1]| trim(" W")| float | round(1) }}'

Wäre absolut super wenn jemand von euch bestätigen könnte, dass die Felder korrekt interpreiert werden. Das Einzige eineindeutige ist der Batterieladezustand … der Rest :wink:

Vielen Dank für eure Unterstützung … noch eine Frage: Solarwatt Batterie Ladeleistung liefert OHNE(!) Solarstrom 1.5 Watt … kann das sein?

:crayon:by HarryP: Zusammenführung Doppelpost (bitte “bearbeiten” Funktion nutzen)

Hallo zusammen, bis heute Nachmittag konnte ich über Rest meine Daten aus dem SolarWatt Flex Manager 1.5 auslesen. Seit heute Nachmittag wurde wohl ein Update durch SolarWatt eingespielt, welches den Effekt hat, dass der direkte freie Zugriff auf die Daten nicht mehr möglich ist und durch ein davorgesetzt es Anmeldefenster geschützt wird. Das Passwort ist bekannt, weil es auf dem Manager steht.

Hat das Problem noch jemand?

Muss eventuell nur die Abfrage im Home Assistant geändert werden, damit er die Daten wieder auslesen kann?

Vielen Dank bereits im Voraus. Bin für jede Hilfe dankbar.

1 „Gefällt mir“

Ja, ist bei mir auch so … wenn ich die Rest-Url direkt aufrufe gehts, aber dann steht da im “Link” eine sehr komische URL drin … z.B. statt meiner 192.168.1.176 steht da {“link”:"http ://karaf/rest/items/kiwigrid_locatio … darüber findet er bei mir auch nix mehr :frowning:

WENN Solarwatt einen Support hätte… würde ich da nachfragen, so muss ich suchen, ob es da irgendwo eine Einstellung gibt …

2 „Gefällt mir“

Hier auch…

Habe gestern einiges versucht, aber ich kriege Home Assistent nicht dazu, sich mittels Passwort anzumelden.

Wenn man sich über einen normalen Browser einmal angemeldet hat, kann man die Daten über rest/items abrufen. Die Anmeldung wird dann irgendwie (im Browser?) gespeichert.

Aber es klappt zum Beispiel auch nicht über eine Webseitenkachel im Home Assistent.

:frowning:

Wäre Klasse, wenn jemand eine Lösung findet !

1 „Gefällt mir“

Das gleiche habe ich bei mir auch festgestellt.

Und leider gibt es keine einfache Lösung, die irgendwie vom HA unterstützt wird.

Habe heute fast einen halben Tag drauf verwendet eine Lösung zu finden. Vergeblich, oder fast vergeblich. Das Problem ist nämlich, dass man nur in dem Browser wo man sich mit dem Passwort eingeloggt hat, dann in einem anderen Fenster desselben Browsers noch die REST API Werte abgerufen werden können. Hier hat Solarwatt nun leider dem freien Zugang zu den (eigenen !!!) Daten einen massiven Riegel vorgeschoben. Manuell im Browser klappt es noch. Ist aber nahezu nicht automatisierbar. Mit Red-Node Versuchen heute habe ich es nicht hinbekommen. Es geht um den Session Cookie im Browser, und der versteckt sich in der Browser Seite, typischerweise unter dem Applications Tab als “kiwisessionid=…..” Leider nicht im Header.

Und die Absichten von Solarwatt sind mir recht klar: den kostenpflichtigen "Home Plus” Zugang verkaufen und alle Möglichkeiten sonst schließen :see_no_evil_monkey:

Ist das hier evtl. ein Ansatz:

?

Ich habe es gerade mal hiermit probiert und Werte zurück bekommen. Ob das abschliessend gut ist … kriege ich noch raus :slight_smile:

Ich habe mir Session-Cookie gemerkt. Den habe ich bekommen nach dem doofen Einloggen. Dann habe ich in der configuration.yaml den Cookie verwendet:

 # 1. Netzbezug

  - resource: http://192.168.1.176/rest/items/kiwigrid_location_standard_f3383059f84f_harmonized_power_in

headers: {cookie: kiwisessionid=GvC8S78-nCp3CGz10f9VtQ}  

scan_interval: 30

sensor:

      - name: "Kiwigrid.Netzbezug"

value_template: "{{ float(value_json['state'].split('|')[1].split(' ')[0]) }}"

unique_id: "kiwigrid.netzbezug"

device_class: power

unit_of_measurement: "W"

state_class: measurement


Alle Angaben ohne Gewähr :wink:

ja - mit der kiwisessionid aus dem Cookie geht es.

 - resource: http://IP/rest/items
   headers: 
     cookie: kiwisessionid={{ states("sensor.kiwisessionid") }}

ich habe mir einen command_line sensor (sensor.kiwisessionid) gebaut, der automatisch eine aktuelle sessionid mittels curl aus dem Cookie ausliest:

command_line:
  - sensor:
        name: kiwisessionid
        command: |-
          curl -H "Content-Type: application/x-www-form-urlencoded" -d "username=installer&url=%2F&password=xyz&submit=Login" -X POST http://IP/auth/login -c -
        value_template: "{{ value.split('kiwisessionid')[1] }}"
        scan_interval: 1800

natürlich müssen die IP und das Passwort xyz entsprechend befüllt werden

3 „Gefällt mir“

Hallo wolfchris, wäre es dir möglich einen Teil deiner yaml zu teilen, damit ich weiß wo ich die zwei Code-Schnipsel einfügen müsste? Das übersteigt dann doch meine Kenntnisse bei weiten. Ich war ja schon froh, dass ich nach Tagen die REST Abfragen hinbekommen habe.

Der erste Schnipsel kommt an die Stelle an der die Resource abgefragt wird.

Bei mir ist das eine ausgelagerte solarwatt.yaml, die ich in der configuration.yaml aufrufe mit

rest: !include solarwatt.yaml

Dort kommt der erste Schnipsel rein wo dann anschließend das json ausgewertet wird. Die Resource müsste ja schon da sein, es geht darum im header den cookie mitzugeben:

  - resource: http://IP/rest/items
    headers:
      cookie: kiwisessionid={{ states("sensor.kiwisessionid") }}

Der zweite Schnipsel für den command_line sensor steht bei mir direkt in der configuration.yaml

    
command_line:
  - sensor:
    name: kiwisessionid
    command: |-
      curl -H "Content-Type: application/x-www-form-urlencoded" -d "username=installer&url=%2F&password=xyz&submit=Login" -X POST http://IP/auth/login -c -
    value_template: "{{ value.split('kiwisessionid')[1] }}"
    scan_interval: 1800

natürlich müssen die IP und das Passwort xyz entsprechend befüllt werden

Ich habe es mal exemplarisch für einen Sensor ausprobiert. Die einzige Änderung, welche sich dadurch ergeben hat, war die Angabe von unavailable auf unkown gegangen ist.

command_line:
  - sensor:
      name: kiwisessionid
      command: |-
        curl -H "Content-Type: application/x-www-form-urlencoded" -d "username=installer&url=%2F&password=Test&submit=Login" -X POST http://192.168.178.129/auth/login -c -
      value_template: "{{ value.split('kiwisessionid')[1] }}"
      scan_interval: 1800


rest:
    ### SolarWatt Batteriespeicher Ladezustand ###
  - resource: http://192.168.178.129/rest/items/foxesshybrid_battery_2R5H462056KC022_battery_bms_soc
    headers:
      cookie: kiwisessionid={{ states("sensor.kiwisessionid") }}
    scan_interval: 300
    sensor:
      - name: "SolarWatt Batterie Ladezustand"
        unique_id: "solarwatt.battery.state.charge"
        icon: "mdi:home-battery-outline"
        state_class: "measurement"
        unit_of_measurement: "%"
        device_class: "battery"
        value_template: '{{ value_json.state[:-1]| float | round }}'

Was mir dazu noch einfällt:

  1. Das password ist das, mit dem Du Dich auch am Energy Manager anmeldest? (Test ist vermutlich auch nur ein Platzhalter…)
  2. Erreichst Du die URL des items über einen normalen Browser? (Evtl. Hat sich auch dessen Name geändert)
  3. Manchmal ändert sich auch auch das state Format eines Wertes (hatte ich auch mal bei einem der letzten Updates)
  4. Etwas warten / Home Assistent neu starten

Passwort habe ich nur für hier geändert. Im Code habe ich das genommen, welches auf dem Flex steht.

Die Url erreiche ich über einen normalen Browser. Wenn ich http://192.168.178.129/rest/items aufrufe, werde ich automatisch auf http://192.168.178.129/logon.html geleitet. Dann loge ich mich ein und wenn ich dann noch einmal http://192.168.178.129/rest/items aufrufe, dann komme ich auf die Datenseite. Dort ist alles wie gehabt. Einzige Änderung ist, dass bei den Url statt die IP das karaf steht. Muss das dann auch im Yaml so geändert werden oder bleibt da die IP?

Wahrscheinlich lag es wirklich daran, dass das HA einmal neu gestartet werden musste. Momentan kommen alle Werte wieder rein. Ich hoffe natürlich, dass das erst einmal so bleibt. Alleine wäre ich aufgeschmissen gewesen, aber durch die super Hilfe von eurer Seite passt es erst einmal. Vielen Dank also erst einmal. Jetzt kann ich noch ein wenig College Football schauen. :wink:

:crayon:by HarryP: Zusammenführung Doppelpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen)