Rest API JSON Formatierung/Filter

Moin,
ich bin aktuell dabei die RestAPI eines SolarWatt Battery Managers auszulesen.

“Leider” bringt der State im Text die Einheit “Wh” mit, wie kann ich diese Einheit ausklammern um sauber mit einem “unit_of_measurement” zu arbeiten?

Aussehen soll es nachher wie bei dem Batterie Ladestatus.

- platform: rest
  resource: http://192.168.178.149/rest/items/solarwattBattery_batteryflex_BatteryFlex_0C50DD_batteryChannelGroup_batteryEnergyOut
  method: GET
  name: SolarWatt Batterie Energy Out
  unique_id: SolarWatt_Batterie_Energy_Out
  value_template: "{{ value_json.state }}"

Vielleicht hat jemand eine Idee und kann mir helfen. (-:

Moin,
bist du hier weitergekommen? Ich würde auch gerne den SolarWatt Battery Manager auslesen. Komme aber auch nicht weiter.
Viele Grüße
Jörn

Moin Jörn,

ein paar Sensoren habe ich mittlerweile eingebunden, aber aufgrund von Zeitmangel ist das Thema eingeschlafen… :frowning:

Ich hoffe, die sensors.yaml hilft Dir weiter.
sensors.yml (3,2 KB)

Die Datenpfade habe ich mit der Software Postman ausgelesen:

Viele Grüße
Take

Moin moin,
ich habe auch einen Solarwatt Energymanager (aber nicht den flex sondern einen im Anschlußkasten auf der Hutschiene)
image

und habe mich mit dem auslesen beschäftigt. Meiner bringt alle Daten als REST/json über:

http://energymanager.local/rest/kiwigrid/wizard/devices

Ich nutze (bisher) eine REST sensor (RESTful Sensor - Home Assistant) und lese alle nötigen endpoints in nur einem REST call. (Was für das value_json etwas “code gefrickel” ist da die Werte nicht immer auf dem gleichen Platz in der items Liste stehen und über den Namen gefunden werden müssen.)

- resource: http://192.168.1.13/rest/kiwigrid/wizard/devices
 scan_interval: 60
 sensor:
   - name: "energymanager_erzeugung_pv"
     icon: mdi:solar-power-variant
     state_class: measurement
     unit_of_measurement: "W"
     device_class: power
     value_template: >
       {{ (value_json['result']['items']
           |selectattr('tagValues.PowerProduced','defined')
           |list|first)
          ['tagValues']['PowerProduced']['value'] }}
   - name: "energymanager_verbrauch"
     icon: mdi:home-lightning-bolt-outline
     state_class: measurement
     unit_of_measurement: "W"
     device_class: power
     value_template: >
       {{ (value_json['result']['items']
           |selectattr('tagValues.PowerConsumed','defined')
           |list|first)
          ['tagValues']['PowerConsumed']['value'] }}
   - name: "energymanager_einspeisung"
     icon: mdi:transmission-tower-import
     state_class: measurement
     unit_of_measurement: "W"
     device_class: power
     value_template: >
       {{ (value_json['result']['items']
           |selectattr('tagValues.PowerOut','defined')
           |list|first)
          ['tagValues']['PowerOut']['value'] }}
   - name: "energymanager_bezug"
     icon: mdi:transmission-tower-export
     state_class: measurement
     unit_of_measurement: "W"
     device_class: power
     value_template: >
       {{ (value_json['result']['items']
           |selectattr('tagValues.PowerConsumedFromGrid','defined')
           |list|first)
          ['tagValues']['PowerConsumedFromGrid']['value'] }}
   - name: "energymanager_gespeichert"
     icon: mdi:battery-charging-outline
     state_class: measurement
     unit_of_measurement: "W"
     device_class: power
     value_template: >
       {{ (value_json['result']['items']
           |selectattr('tagValues.PowerBuffered','defined')
           |list|first)
          ['tagValues']['PowerBuffered']['value'] }}
   - name: "energymanager_vom_speicher"
     icon: mdi:home-battery-outline
     state_class: measurement
     unit_of_measurement: "W"
     device_class: power
     value_template: >
       {{ (value_json['result']['items']
           |selectattr('tagValues.PowerConsumedFromStorage','defined')
           |list|first)
          ['tagValues']['PowerConsumedFromStorage']['value'] }}
   - name: "energymanager_batteriestand"
     state_class: measurement
     unit_of_measurement: "%"
     device_class: battery
     value_template: >
       {{ (value_json['result']['items']
           |selectattr('tagValues.StateOfCharge','defined')
           |list|first)
          ['tagValues']['StateOfCharge']['value'] }}
   - name: "energymanager_speicher_temp"
     state_class: measurement
     unit_of_measurement: "°C"
     device_class: temperature
     value_template: >
       {{ (value_json['result']['items']
           |selectattr('tagValues.TemperatureBattery','defined')
           |list|first)
          ['tagValues']['TemperatureBattery']['value'] }}
   - name: "energymanager_ladezustand"
     value_template: >
       {{ (value_json['result']['items']
           |selectattr('tagValues.ModeConverter','defined')
           |list|first)
          ['tagValues']['ModeConverter']['value'] }}

Das geht auch ganz gut:

Neu nutze ich jetzt aber eine Custom-integration die ich gefunden habe:
https://github.com/Mas2112/solarwatt-energymanager-homeassistant

die klappt bei mir auch sehr gut:



Leider klappt diese wohl nur mit dem “alten” Modell. @joern welche Parameter fehlen dir denn ? eigentlich reichen ja die 9 (falls man einen Speicher hat) die ich nutze.

Hallo,

ich habe auch den SolarWatt-Energymanager (EM) für die Hutschiene und lese die Werte per REST-Call aus. Dabei nutze ich z.B. untenstehenden YAML-Code, habe aber ein Problem, daß der Name “PowerOut” nicht eindeutig ist. Es gibt ihn dreimal (z.B. einmal noch vom S0-Zähler). Aus der “PowerOut”-Liste wäre die Einspeiseleistung des EM der zweite Eintrag (von dreien). Daher kriege ich mit dem |first-Filter immer einen falschen Wert. Kann ich irgendwie den zweiten Eintrag der Liste selektieren? Oder vielleicht die ‘guid’ des EM mit einschliessen (damit wäre es eindeutig)?

- name: "energymanager_einspeisung"
     icon: mdi:transmission-tower-import
     state_class: measurement
     unit_of_measurement: "W"
     device_class: power
     value_template: >
       {{ (value_json['result']['items']
           |selectattr('tagValues.PowerOut','defined')
           |list|first)
          ['tagValues']['PowerOut']['value'] }}

Ich weiß, daß ich auch die o.g. Integration nutzen kann (mache ich auch schon, damit wird der richtige Wert ausgelesen), würde aber trotzdem gerne den REST-Call korrekt formulieren lernen…

Anlass ist übrigens folgende Eigenheit des EM, daß hin und wieder der Momentanverbrauch (‘PowerConsumed’) für kurze Zeit auf Null geht. Und zwar passiert das immer dann, wenn für kurze Zeit der Wert für die Netzeinspeisung (‘PowerOut’) größer als die PV-Momentanleistung (‘PowerProduced’) ist. Natürlich ist das theoretisch (ohne Speicher) gar nicht möglich, könnte aber daran liegen, daß die aktuellen Werte von zwei verschiedenen Zählern kommen (für die PV-Leistung wird ein S0-Energiezähler verwendet, für die Einspeisung/Verbrauch ein über Modbus eingebundener Zweirichtungszähler, Schneider Power Meter). Der Momentanverbrauch des Hauses (‘PowerConsumed’) wird bei PV-Produktion offensichtlich über

PV-Leistung - Einspeisung

berechnet und würde in diesem Fall negativ werden. Der EM setzt den Wert sicher daher auf Null.

Bisher werden die Werte übrigens alle 10 s ausgelesen. Vielleicht sollte ich das Intervall einfach hochsetzen? Oder kann man den zeitlichen Versatz von Einspeisung- und PV-Leistungs-Entitäten nachträglich in HA korrigieren?

Vielen Dank für evtl. Tips!

Bin spät, ich habe es so gemacht:

value_template: "{{ float(value_json['state'].split('|')[1].split(' ')[0]) }}"
bei den Werten wie z.B.
state: "1729607460000|0.0 W"