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"

Funktioniert diese Integration noch? Ich habe Probleme es zu installieren. Ich kann es als Benutzerdefinierte Repository hinzufügen, aber nach dem Neustart des HA ist wieder weg. Mache ich etwas falsch oder gab es Änderungen, so dass es nicht mehr funktioniert? Vielen Dank!

Ja die GitHub - Mas2112/solarwatt-energymanager-homeassistant: A SOLARWATT EnergyManager Home Assistant custom component. funktioniert noch sehr gut, ich habe sogar meine “eigne” (mit RestAPI disabled).

Hier ein paar screen shots:

Danke dir, ich habe es mitlerweile auch zum Laufen bekommen. Das Problem lag wie so oft vor dem Bildschirm. :slight_smile:

Was meinst du mit “ich habe sogar meine “eigne” (mit RestAPI disabled)”?

Ich werde meine Daten wohl mit einem Rest call ergänzen müssen, da mir ein Wert von Heizstab fehlt. Dieser ist in der Integration scheinbar nicht mit eingebunden.

Naja, dieser Thread hier geht ja eigentlich um die Nutzung der RestAPIr. Das ist für den EnergieManager etwas kompliziert. Wie ich oben geschrieben habe muss man da ja die Properties über die Namen finden. Da die Integration von Mas2112 so gut geworden ist, habe ich meine eigenen Restful Sensor Code „abgeschaltet“.

Liebe Grüße Michael

PS: Heizstab - klingt jetzt für mich nicht nach etwas das im solarwatt energymanager gemessen wird. Hast du den den Wert mit z.b. PostMan gefunden?