Solarwatt MyReserve per JSON auslesen - Readings

Begonnen von topa_LE, 25 Juni 2019, 21:47:09

Vorheriges Thema - Nächstes Thema

topa_LE

Photovoltaik erweitert mit Stromspeicher von Solarwatt (My Reserve)

Fronius Sym 6.03 habe ich nun erweitert mit den  Stromspeichern MyReserve von Solarwatt. Da nun der Batteriespeicher von den WR geschaltet wird, werden meine bisherigen Daten gerade bei der PV-Produktion verfälscht.

Möchte das ganze nun aus dem EnergyManager auslesen. Zusätzlich ist noch ein PDG (Raspi) per Bluetooth verbunden. Diese JSON Daten sind aber nicht ganz so aussagekräftig. Per IP-RASPI:8080 kann man diese auch abrufen.

Möchte allerdings von AC  Sensor und dem EnergyManager diese Daten in FHEM per Readings bereitstellen.

Dazu dient die URL:

http://192.168.178.160/rest/kiwigrid/wizard/devices (IP vom EnergyManager)

Diese JSON Daten möchte ich nun gerne per Readings haben.

Hab das mal so probiert:
attr httpmod_MR_Solarwatt_Stromspeicher reading01Name MR_Batteriestand
attr httpmod_MR_Solarwatt_Stromspeicher reading01OMap null:0
attr httpmod_MR_Solarwatt_Stromspeicher reading01Regex "VoltageBatteryCellMean.value"[ : \t]+([-+]?[a-z\d\.]+)

Funktioniert nicht, habe gerade eine Blockade im Ansatz, kann mir da einer helfen?

Die JSON fängt immer mit "results" items an ...

Weiß daher nicht wie ich das umbauen kann.

{"result":{"items":[{"guid":"urn:solarwatt:myreserve:bcxxx","deviceModel":[{"deviceClass":"com.kiwigrid.lib.device.Device"},{"deviceClass":"com.kiwigrid.devices.inverter.Inverter"},{"deviceClass":"com.kiwigrid.devices.batteryconverter.BatteryConverter"},{"deviceClass":"com.kiwigrid.devices.solarwatt.MyReserve"}],"tagValues":{"IdFingerPrint":{"value":"urn:solarwatt:myreserve:bc:xxx","guid":"urn:solarwatt:myreserve:bc:xxx","tagName":"IdFingerPrint"},"CountBatteryContactor":{"value":2,"guid":"urn:solarwatt:myreserve:bc:xxx","tagName":"CountBatteryContactor"},"StateOfChargeReactivateDischarging":{"value":null,"guid":"urn:solarwatt:myreserve:bc:xxx","tagName":"StateOfChargeReactivateDischarging"},"StateVisibleIsSet":{"value":true,"guid":"urn:solarwatt:myreserve:bc:xxx","tagName":"StateVisibleIsSet"},"VoltageBatteryCellMean":{"value":3.503,"guid":"urn:solarwatt:myreserve:bc:xxx","tagName":"VoltageBatteryCellMean"},"IdFirmwareGRM":{"value":null,"guid":"urn:solarwatt:myreserve:bc:xxx","tagName":"IdFirmwareGRM"},"WorkCapacity":{"value":null,"guid":"urn:solarwatt:myreserve:bc:xxx","tagName":"WorkCapacity"},"StateOfChargeMinimum"::
Wie müsste die Definition zusammengesetzt werden?


amenomade

Setze einmal extractAllJSON, und Du wirst sehen, was Du als readingXXJSON dann definieren kannst
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

topa_LE

Zitat von: amenomade am 25 Juni 2019, 22:38:48
Setze einmal extractAllJSON, und Du wirst sehen, was Du als readingXXJSON dann definieren kannst

Ok danke. Jetzt habe ich ne Liste ...

z.B.

setstate httpmod_MR_Solarwatt_Stromspeicher 2019-06-26 07:59:41 result_items_01_tagValues_WorkACOut_value 3840.20497881806

Wie würde ich das nun zusammensetzen?


reading01Name
MR_Batteriestand

reading01OMap
null:0

reading01Regex
"result_items_01_tagValues_WorkACOut_value":[ \t]+"([\d\.]+)"


So in etwa?

topa_LE

So hab selbst gelöst!

Es gibt da leider wenige Dokumentationen zu den JSON Url's. Aber es gibt noch diese hier:

http://IP-EnergyManager/rest/kiwigrid/eps/powerValues

Darüber lassen sich die wichtigsten Readings erzeugen.

Wer es gebrauchen kann hier die Defines:

defmod httpmod_MR_Solarwatt_Stromspeicher HTTPMOD http://192.168.178.160/rest/kiwigrid/eps/powerValues 10
attr httpmod_MR_Solarwatt_Stromspeicher userattr reading01Name reading01OMap reading01Regex reading02Name reading02OMap reading02Regex reading03Name reading03OMap reading03Regex reading04Name reading04OMap reading04Regex reading05Name reading05OMap reading05Regex
attr httpmod_MR_Solarwatt_Stromspeicher DbLogExclude .*
attr httpmod_MR_Solarwatt_Stromspeicher alias My Reserve - Solarwatt 4.8 kW
attr httpmod_MR_Solarwatt_Stromspeicher enableControlSet 1
attr httpmod_MR_Solarwatt_Stromspeicher enableCookies 1
attr httpmod_MR_Solarwatt_Stromspeicher event-on-change-reading .*
attr httpmod_MR_Solarwatt_Stromspeicher group PV Solaranlage FRONIUS
attr httpmod_MR_Solarwatt_Stromspeicher icon message_light_intensity
attr httpmod_MR_Solarwatt_Stromspeicher reading01Name PV_Produktion_Gesamt
attr httpmod_MR_Solarwatt_Stromspeicher reading01OMap null:0
attr httpmod_MR_Solarwatt_Stromspeicher reading01Regex "powerProduced"[ : \t]+([-+]?[a-z\d\.]+)
attr httpmod_MR_Solarwatt_Stromspeicher reading02Name Eigenverbrauch_Aktuell
attr httpmod_MR_Solarwatt_Stromspeicher reading02OMap null:0
attr httpmod_MR_Solarwatt_Stromspeicher reading02Regex "powerConsumed"[ : \t]+([-+]?[a-z\d\.]+)
attr httpmod_MR_Solarwatt_Stromspeicher reading03Name Netzeinspeisung_Aktuell
attr httpmod_MR_Solarwatt_Stromspeicher reading03OMap null:0
attr httpmod_MR_Solarwatt_Stromspeicher reading03Regex "powerOut"[ : \t]+([-+]?[a-z\d\.]+)
attr httpmod_MR_Solarwatt_Stromspeicher reading04Name Netzbezug_Aktuell
attr httpmod_MR_Solarwatt_Stromspeicher reading04OMap null:0
attr httpmod_MR_Solarwatt_Stromspeicher reading04Regex "powerIn"[ : \t]+([-+]?[a-z\d\.]+)
attr httpmod_MR_Solarwatt_Stromspeicher room 16-HW-Raum
attr httpmod_MR_Solarwatt_Stromspeicher userReadings Solar_Produktion { round( ReadingsVal($name,"PV_Produktion_Gesamt",0),0) }

amenomade

Zitat von: topa_LE am 26 Juni 2019, 08:06:06
setstate httpmod_MR_Solarwatt_Stromspeicher 2019-06-26 07:59:41 result_items_01_tagValues_WorkACOut_value 3840.20497881806


Etwas wie

attr httpmod_MR_Solarwatt_Stromspeicher  reading10Name WorkACOut
attr httpmod_MR_Solarwatt_Stromspeicher  reading10JSON result_items_.*_tagValues_WorkACOut_value
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

topa_LE

@amenomade

Ja es gibt zwei URL's

http://192.168.178.160/rest/kiwigrid/eps/powerValues
Diese hier funktioniert wie oben erklärt, nur fehlen da sämtliche Dinge was den Batteriespeicher betrifft. (Ladung, Entladung etc.)


http://192.168.178.160/rest/kiwigrid/wizard/devices
Hier sind sehr viele andere Daten abgreifbar, nur die items aber immer wieder andere Nummer, Daher kann ich die allEXTRACTJason nicht nutzen.

Das wäre hier die Batterieladung

result_items_08_tagValues_PowerBufferedFromProducers_tagName PowerBufferedFromProducers
result_items_08_tagValues_PowerBufferedFromProducers_value 377.21


PowerBufferedFromProducers -> Tag


{"value":9.044,"guid":"urn:solarwatt:myreserve:bc:a30b000b2137","tagName":"CurrentBatteryIn"},"TemperatureBatteryMin":{"value":27,"guid":"urn:solarwatt:myreserve:bc:a30b000b2137","tagName":"TemperatureBatteryMin"},"TemperatureBatteryCellMin":

Wie kann man nun ohne JSONExtract aus den oben zwei Zeilen userreadings bauen , um den "value" als Reading zu lesen?

topa_LE

Zitat von: amenomade am 29 Juni 2019, 13:41:48
Etwas wie

attr httpmod_MR_Solarwatt_Stromspeicher  reading10Name WorkACOut
attr httpmod_MR_Solarwatt_Stromspeicher  reading10JSON result_items_.*_tagValues_WorkACOut_value


Ok, perfekt, ich teste das mal!  ;)

amenomade

Um eine andere URL abzurufen, machst Du ein zusätzliches get:
attr httpmod_MR_Solarwatt_Stromspeicher  get50Name Block2
attr httpmod_MR_Solarwatt_Stromspeicher  get50URL http://die-andere-URL
attr httpmod_MR_Solarwatt_Stromspeicher  get50Poll 1
Das letzte, damit dieses get beim jedem Aufruf der HauptURL mit aufgerufen wird.

extractAllJSON ist i.d.R. nur am Anfang da, damit man die Struktur der benötigten readingXXJSON einfach sehen kann. Danach kann es weg.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

topa_LE

Hab das jetzt erstmal zum Testen in ein separates Define gepackt.

defmod httpmod_MR_Stromspeicher_Devices HTTPMOD http://192.168.178.160/rest/kiwigrid/wizard/devices 15
attr httpmod_MR_Stromspeicher_Devices userattr reading10JSON reading10Name
attr httpmod_MR_Stromspeicher_Devices DbLogExclude .*
attr httpmod_MR_Stromspeicher_Devices enableControlSet 1
attr httpmod_MR_Stromspeicher_Devices enableCookies 1
attr httpmod_MR_Stromspeicher_Devices enforceGoodReadingNames 1
attr httpmod_MR_Stromspeicher_Devices handleRedirects 1
attr httpmod_MR_Stromspeicher_Devices reading10JSON result_items_.*_tagValues_WorkACOut_value
attr httpmod_MR_Stromspeicher_Devices reading10Name WorkACOut


So kommt das eine Reading für WorkACOUT auch nicht rein. Fehlt da noch irgendein Attribut?

amenomade

Also.... zu welcher URL gehört WorkACOut?
Am besten poste immer ein "list" vom HTTPMOD statt eine Raw Definition, und setze verbose 5 auf dem httpmod und poste auch die Log
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

topa_LE

Gehört zu der URL, die eben nicht geht.
http://192.168.178.160/rest/kiwigrid/wizard/devices

Internals:
   .getList   
   .setList   interval reread:noArg stop:noArg start:noArg clearCookies:noArg upgradeAttributes:noArg storeKeyValue
   .updateReadingList 1
   .updateRequestHash 1
   BUSY       0
   CFGFN     
   CHANGED   
   DEF        http://192.168.178.160/rest/kiwigrid/wizard/devices 15
   FUUID      5d174469-f33f-252b-8c98-858e80e8c22a8298
   Interval   15
   JSONEnabled 1
   LASTSEND   1561809747.63541
   MainURL    http://192.168.178.160/rest/kiwigrid/wizard/devices
   ModuleVersion 3.5.9 - 13.2.2019
   NAME       httpmod_MR_Stromspeicher_Devices
   NOTIFYDEV  global
   NR         8059
   NTFY_ORDER 50-MR
   STATE      ???
   TRIGGERTIME 1561809762.63343
   TRIGGERTIME_FMT 2019-06-29 14:02:42
   TYPE       HTTPMOD
   addr       http://192.168.178.160:80
   auth       0
   buf       
   code       200
   compress   1
   conn       
   data       
   displayurl http://192.168.178.160/rest/kiwigrid/wizard/devices
   header     Cookie: emsid="70e672e6-7614-4038-9177-aea67cf9af3d"
   host       192.168.178.160
   httpheader HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Type: application/json; charset=UTF-8
Content-Length: 95864
   httpversion 1.0
   hu_blocking 0
   hu_filecount 188
   hu_port    80
   hu_portSfx
   ignoreredirects 1
   loglevel   4
   path       /rest/kiwigrid/wizard/devices
   protocol   http
   redirects  0
   timeout    2
   url        http://192.168.178.160/rest/kiwigrid/wizard/devices
   value      0
   .attreocr:
     .*
   .readingParseList:
   QUEUE:
   READINGS:
   REQUEST:
     data       
     header     
     ignoreredirects 0
     retryCount 0
     type       update
     url        http://192.168.178.160/rest/kiwigrid/wizard/devices
     value      0
   sslargs:
Attributes:
   DbLogExclude .*
   enableControlSet 1
   event-on-change-reading .*
   reading10JSON result_items_.*_tagValues_WorkACOut_value
   reading10Name WorkACOut
   reading20JSON result_items_.*_tagValues_CurrentBatteryIn_value
   reading20Name CurrentBatteryIn
   reading30JSON result_items_.*_tagValues_PowerBufferedFromProducers_value
   reading30Name Batterieladung
   userattr   reading10JSON reading10Name reading20JSON reading20Name reading30JSON reading30Name
   verbose    5

topa_LE

#11
Dies wäre hier der komplette Block, der zu WorkACOut gehört:


setstate httpmod_MR_Solarwatt_Stromspeicher 2019-06-26 07:59:41 result_items_01_tagValues_WorkACOut_guid urn:solarwatt:myreserve:bc:xxxxxxxxxx137
setstate httpmod_MR_Solarwatt_Stromspeicher 2019-06-26 07:59:41 result_items_01_tagValues_WorkACOut_tagName WorkACOut
setstate httpmod_MR_Solarwatt_Stromspeicher 2019-06-26 07:59:41 result_items_01_tagValues_WorkACOut_value 3840.20497881806


Vielleicht muss auch noch die guid übergeben werden?

topa_LE

Aus einem fremden Post (HowTo) bei OpenHab habe ich das hier gefunden:

//Rules-Datei für Energie

rule "Get Power Usage"
    when
        Time cron "0/15 * * * * ?"
    then       
        var String json = sendHttpGetRequest("http://192.XXX.XXX.XXX/rest/kiwigrid/wizard/devices")

        //Batteriestand
        var String value = transform("JSONPATH", "$.result.items[?(@.guid == 'urn:solarwatt:myreserve:bc:xxxxxxxxxxx')].tagValues.StateOfCharge.value", json)
        value = value.stripStart("[")
        value = value.stripEnd("]")
        var Number value2 = DecimalType.valueOf(value)
        postUpdate(energieLadestand, value2) 

        //Einspeisung
        value = transform("JSONPATH", "$.result.items[?(@.guid == 'urn:kiwigrid:location:XXXXX-XXXXXXXX:0')].tagValues.PowerOut.value", json)
        value = value.stripStart("[")
        value = value.stripEnd("]")
        value2 = DecimalType.valueOf(value)
        postUpdate(energieEinspeisung, value2)
       
        //Batterieladung
        value = transform("JSONPATH", "$.result.items[?(@.guid == 'urn:kiwigrid:location:XXXXX-XXXXXXXX:0')].tagValues.PowerBufferedFromProducers.value", json)
        value = value.stripStart("[")
        value = value.stripEnd("]")
        value2 = DecimalType.valueOf(value)
        postUpdate(energieBatterieladung, value2)
       
        //Gesamterzeugung
        value = transform("JSONPATH", "$.result.items[?(@.guid == 'urn:kiwigrid:location:XXXXX-XXXXXXXX:0')].tagValues.PowerProduced.value", json)
        value = value.stripStart("[")
        value = value.stripEnd("]")
        value2 = DecimalType.valueOf(value)
        postUpdate(energieGesamterzeugung, value2)

        //Bezug
        value = transform("JSONPATH", "$.result.items[?(@.guid == 'urn:kiwigrid:location:XXXXX-XXXXXXXX:0')].tagValues.PowerConsumedFromGrid.value", json)
        value = value.stripStart("[")
        value = value.stripEnd("]")
        value2 = DecimalType.valueOf(value)
        postUpdate(energieBezug, value2)

        //Batterieentladung
        value = transform("JSONPATH", "$.result.items[?(@.guid == 'urn:kiwigrid:location:XXXXX-XXXXXXXX:0')].tagValues.PowerConsumedFromStorage.value", json)
        value = value.stripStart("[")
        value = value.stripEnd("]")
        value2 = DecimalType.valueOf(value)
        postUpdate(energieBatterieentladung, value2)

        //Gesamtverbrauch
        value = transform("JSONPATH", "$.result.items[?(@.guid == 'urn:kiwigrid:location:XXXXX-XXXXXXXX:0')].tagValues.PowerConsumed.value", json)
        value = value.stripStart("[")
        value = value.stripEnd("]")
        value2 = DecimalType.valueOf(value)
        postUpdate(energieGesamtverbrauch, value2)           
end


Dort wird ja auch GUID übergeben/ausgelesen.

Wie man das nun in FHEM umsetzt, ist mir bisher leider nicht klar.

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

topa_LE

#14
Welche meinst Du? Im normalen LOG steht nix drin, trotz verbose 5.

Nach set start im Define kommt nur das im Log:
2019.06.29 15:50:00 5: httpmod_MR_Stromspeicher_Devices: set called with start
2019.06.29 15:50:00 4: httpmod_MR_Stromspeicher_Devices: update timer modified: will call GetUpdate in 15.0 seconds at 2019-06-29 15:50:15



topa_LE

#15
So habe mal auf Attribute Updates gemacht, nun kommt was und auch die Readings ...


amenomade

Zitat von: topa_LE am 29 Juni 2019, 15:48:22
Im normalen LOG steht nix drin, trotz verbose 5.

Das kann nicht sein. Siehe alle Threads über HTTPMOD hier im Forum. Die Log ist nw. sogar seeehr verbose.

Zitat von: topa_LE am 29 Juni 2019, 15:48:22
Nach set start im Define kommt nur das im Log:
2019.06.29 15:50:00 5: httpmod_MR_Stromspeicher_Devices: set called with start
2019.06.29 15:50:00 4: httpmod_MR_Stromspeicher_Devices: update timer modified: will call GetUpdate in 15.0 seconds at 2019-06-29 15:50:15

Und was passiert nach dem GetUpdate ? Und nach einem set httpmod_MR_Stromspeicher_Devices reread ?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

#17
Ahja... Du nutzt DbLog, richtig?

Mit Attributes:
   DbLogExclude .*
kommt natürlich gar nix in DbLog

Ich weiss nicht, wie DbLog funktioniert, aber ich meine die Log wo tatsächlich die Log3 Befehle zu sehen sind.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

topa_LE

Genau, die Readings die ich später loggen möchte, setze ich dann mit DBLogInclude separat.

topa_LE

#19
Der log sich zu .... ;-)

Kann den Code leider nicht hier setzen: Sorry, irgendwie packt er das nicht hier in den CODE-BLOCK!

Code entfernt, da nicht im Block.

topa_LE

Habe nun die Readings, nur aktualisiert er nicht nach 15 Sekunden, sondern immer nur wenn ich set DEFINE reread mache.


setstate httpmod_MR_Stromspeicher_Devices 2019-06-29 16:04:58 Batterieladung 891.7074
setstate httpmod_MR_Stromspeicher_Devices 2019-06-29 16:04:58 CurrentBatteryIn 9.38
setstate httpmod_MR_Stromspeicher_Devices 2019-06-29 16:04:58 WorkACOut-1 19539.5206977367
setstate httpmod_MR_Stromspeicher_Devices 2019-06-29 16:04:58 WorkACOut-2 135137.757768876
setstate httpmod_MR_Stromspeicher_Devices 2019-06-29 16:04:58 WorkACOut-3 32805402
setstate httpmod_MR_Stromspeicher_Devices 2019-06-29 16:04:58 WorkACOut-4 135177.488441605

amenomade

Ohne die Log werde ich nicht viel weiter helfen können.
Mit dem "list" wie Du oben kopiert hast, sollte er doch jede 15. Sek lesen. Hast Du irgendwas anderes gesetzt, oder set stop gemacht, o.ä ?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

topa_LE

Ja hatte set stop gemacht, weil das log nicht mehr geladen wurde.

Leider passt das Log hier nicht in den Codeblock, sieht sehr komisch aus, sende dir es per PM.

Funktioniert jetzt, habe interval nochmal neu gesetzt.

Alles bestens. Werde das nun alles korrekt definieren, melde mich dann nochmal wenn es was gibt.

Vorerst großes Dankeschön an Dich!!!!

topa_LE

Hier noch abschließend das List: (Thread kann als gelöst gesetzt werden)


Internals:
   .getList   
   .setList   interval reread:noArg stop:noArg start:noArg clearCookies:noArg upgradeAttributes:noArg storeKeyValue
   .updateRequestHash 1
   BUSY       0
   CFGFN     
   DEF        http://192.168.178.160/rest/kiwigrid/wizard/devices 15
   FUUID      5d174469-f33f-252b-8c98-858e80e8c22a8298
   Interval   15
   JSONEnabled 1
   LASTSEND   1561833435.51347
   MainURL    http://192.168.178.160/rest/kiwigrid/wizard/devices
   ModuleVersion 3.5.9 - 13.2.2019
   NAME       httpmod_MR_Stromspeicher_Devices
   NOTIFYDEV  global
   NR         8059
   NTFY_ORDER 50-MR
   STATE      | Batterieentladung: <span style='color:#eba15d;'>1333.0 W</span> | Batteriestatus: <span style='color:#eba15d;'>39 %</span> | Batterieladung: <span style='color:#eba15d;'>0 kW</span> | Eigenverbrauch: <span style='color:#eba15d;'>0 kW</span>
   TRIGGERTIME 1561833450.51142
   TRIGGERTIME_FMT 2019-06-29 20:37:30
   TYPE       HTTPMOD
   addr       http://192.168.178.160:80
   auth       0
   buf       
   code       200
   compress   1
   conn       
   data       
   displayurl http://192.168.178.160/rest/kiwigrid/wizard/devices
   header     
   host       192.168.178.160
   httpheader HTTP/1.1 200 OK
Set-Cookie: emsid="c64d56f7-d92f-4441-989f-1803e15e03d0";$Path="/"
Cache-Control: no-cache
Content-Type: application/json; charset=UTF-8
Content-Length: 95875
   httpversion 1.0
   hu_blocking 0
   hu_filecount 264
   hu_port    80
   hu_portSfx
   ignoreredirects 0
   loglevel   4
   path       /rest/kiwigrid/wizard/devices
   protocol   http
   redirects  0
   timeout    2
   url        http://192.168.178.160/rest/kiwigrid/wizard/devices
   value      0
   .attraggr:
   .attreocr:
     .*
   .attreour:
     .*
   .attrminint:
   .readingParseList:
     10
     20
     30
     40
     50
     55
     60
     70
     80
     85
     86
     87
     88
     89
   .userReadings:
     HASH(0x7b63390)
     HASH(0x7f0fb18)
     HASH(0x70c9c10)
     HASH(0x7cbd510)
     HASH(0x7e4d650)
   OLDREADINGS:
   QUEUE:
   READINGS:
     2019-06-29 20:37:15   Aktuelle_Batterieaufladung 0
     2019-06-29 20:37:15   Batterieentladung 1333.024
     2019-06-29 20:37:15   Batterieentladung_Round 1333
     2019-06-29 20:37:15   Batterieladung  0
     2019-06-29 20:37:15   Batterieladung_Round 0
     2019-06-29 20:37:15   Batterielebenserwartung_in_Prozent 99.5
     2019-06-29 20:37:15   Batteriestatus_in_Prozent 39
     2019-06-29 20:37:15   CPU_Auslastung_Energymanager 0.024
     2019-06-29 20:37:15   Eigenverbrauch  0
     2019-06-29 20:37:15   Eigenverbrauch_Round 0
     2019-06-29 20:37:15   Einspeisung-1   0
     2019-06-29 20:37:15   Einspeisung-2   0
     2019-06-29 20:37:15   Einspeisung_Round 0
     2019-06-29 20:37:15   Energymanager_SW_Firmware-1 HW: 3 SW: 36 C: 24 PV: 33
     2019-06-29 20:37:15   Energymanager_SW_Firmware-2 6.6.8.0
     2019-06-29 20:37:15   Energymanager_SW_Firmware-3 0.3.23.0
     2019-06-29 20:37:15   Gesamtproduktion 0
     2019-06-29 20:37:15   Gesamtverbrauch 1608.024
     2019-06-29 20:37:15   Status_My_Reserve-1 OK
     2019-06-29 20:37:15   Status_My_Reserve-10 OK
     2019-06-29 20:37:15   Status_My_Reserve-2 OK
     2019-06-29 20:37:15   Status_My_Reserve-3 OK
     2019-06-29 20:37:15   Status_My_Reserve-4 OK
     2019-06-29 20:37:15   Status_My_Reserve-5 OK
     2019-06-29 20:37:15   Status_My_Reserve-6 OK
     2019-06-29 20:37:15   Status_My_Reserve-7 OK
     2019-06-29 20:37:15   Status_My_Reserve-8 OK
     2019-06-29 20:37:15   Status_My_Reserve-9 OK
     2019-06-29 20:37:15   Strombezug      275
     2019-06-29 20:37:15   Strombezug_Round 275
     2019-06-29 20:37:15   WorkACOut-1     22132.7831603784
     2019-06-29 20:37:15   WorkACOut-2     140363.231688473
     2019-06-29 20:37:15   WorkACOut-3     32813102
     2019-06-29 20:37:15   WorkACOut-4     140402.962361202
   REQUEST:
     data       
     header     
     ignoreredirects 0
     retryCount 0
     type       update
     url        http://192.168.178.160/rest/kiwigrid/wizard/devices
     value      0
   defptr:
     readingBase:
       Aktuelle_Batterieaufladung reading
       Batterieentladung reading
       Batterieladung reading
       Batterielebenserwartung reading
       Batterielebenserwartung_in_Prozent reading
       Batteriestatus reading
       Batteriestatus_in_Prozent reading
       CPU_Auslastung_Energymanager reading
       CurrentBatteryIn reading
       Eigenverbrauch reading
       Einspeisung-1 reading
       Einspeisung-2 reading
       Energymanager_SW_Firmware-1 reading
       Energymanager_SW_Firmware-2 reading
       Energymanager_SW_Firmware-3 reading
       Gesamtproduktion reading
       Gesamtverbrauch reading
       Status_My_Reserve-1 reading
       Status_My_Reserve-10 reading
       Status_My_Reserve-2 reading
       Status_My_Reserve-3 reading
       Status_My_Reserve-4 reading
       Status_My_Reserve-5 reading
       Status_My_Reserve-6 reading
       Status_My_Reserve-7 reading
       Status_My_Reserve-8 reading
       Status_My_Reserve-9 reading
       Strombezug reading
       WorkACOut-1 reading
       WorkACOut-2 reading
       WorkACOut-3 reading
       WorkACOut-4 reading
     readingNum:
       Aktuelle_Batterieaufladung 20
       Batterieentladung 40
       Batterieladung 30
       Batterielebenserwartung 86
       Batterielebenserwartung_in_Prozent 86
       Batteriestatus 85
       Batteriestatus_in_Prozent 85
       CPU_Auslastung_Energymanager 87
       CurrentBatteryIn 20
       Eigenverbrauch 55
       Einspeisung-1 80
       Einspeisung-2 80
       Energymanager_SW_Firmware-1 88
       Energymanager_SW_Firmware-2 88
       Energymanager_SW_Firmware-3 88
       Gesamtproduktion 70
       Gesamtverbrauch 50
       Status_My_Reserve-1 89
       Status_My_Reserve-10 89
       Status_My_Reserve-2 89
       Status_My_Reserve-3 89
       Status_My_Reserve-4 89
       Status_My_Reserve-5 89
       Status_My_Reserve-6 89
       Status_My_Reserve-7 89
       Status_My_Reserve-8 89
       Status_My_Reserve-9 89
       Strombezug 60
       WorkACOut-1 10
       WorkACOut-2 10
       WorkACOut-3 10
       WorkACOut-4 10
     readingOutdated:
     readingSubNum:
       Einspeisung-1 -1
       Einspeisung-2 -2
       Energymanager_SW_Firmware-1 -1
       Energymanager_SW_Firmware-2 -2
       Energymanager_SW_Firmware-3 -3
       Status_My_Reserve-1 -1
       Status_My_Reserve-10 -10
       Status_My_Reserve-2 -2
       Status_My_Reserve-3 -3
       Status_My_Reserve-4 -4
       Status_My_Reserve-5 -5
       Status_My_Reserve-6 -6
       Status_My_Reserve-7 -7
       Status_My_Reserve-8 -8
       Status_My_Reserve-9 -9
       WorkACOut-1 -1
       WorkACOut-2 -2
       WorkACOut-3 -3
       WorkACOut-4 -4
     requestReadings:
       update:
         Aktuelle_Batterieaufladung reading 20
         Batterieentladung reading 40
         Batterieladung reading 30
         Batterielebenserwartung reading 86
         Batterielebenserwartung_in_Prozent reading 86
         Batteriestatus reading 85
         Batteriestatus_in_Prozent reading 85
         CPU_Auslastung_Energymanager reading 87
         CurrentBatteryIn reading 20
         Eigenverbrauch reading 55
         Einspeisung-1 reading 80-1
         Einspeisung-2 reading 80-2
         Energymanager_SW_Firmware-1 reading 88-1
         Energymanager_SW_Firmware-2 reading 88-2
         Energymanager_SW_Firmware-3 reading 88-3
         Gesamtproduktion reading 70
         Gesamtverbrauch reading 50
         Status_My_Reserve-1 reading 89-1
         Status_My_Reserve-10 reading 89-10
         Status_My_Reserve-2 reading 89-2
         Status_My_Reserve-3 reading 89-3
         Status_My_Reserve-4 reading 89-4
         Status_My_Reserve-5 reading 89-5
         Status_My_Reserve-6 reading 89-6
         Status_My_Reserve-7 reading 89-7
         Status_My_Reserve-8 reading 89-8
         Status_My_Reserve-9 reading 89-9
         Strombezug reading 60
         WorkACOut-1 reading 10-1
         WorkACOut-2 reading 10-2
         WorkACOut-3 reading 10-3
         WorkACOut-4 reading 10-4
   sslargs:
Attributes:
   DbLogExclude .*
   alias      Stromspeicher MR - Statistik
   enableControlSet 1
   event-on-change-reading .*
   event-on-update-reading .*
   group      My Reserve Stromspeicher - SOLARWATT
   icon       measure_battery_75
   reading10JSON result_items_.*_tagValues_WorkACOut_value
   reading10Name WorkACOut
   reading20JSON result_items_.*_tagValues_CurrentBatteryIn_value
   reading20Name Aktuelle_Batterieaufladung
   reading30JSON result_items_.*_tagValues_PowerBufferedFromProducers_value
   reading30Name Batterieladung
   reading40JSON result_items_.*_tagValues_PowerConsumedFromStorage_value
   reading40Name Batterieentladung
   reading50JSON result_items_.*_tagValues_PowerConsumed_value
   reading50Name Gesamtverbrauch
   reading55JSON result_items_.*_tagValues_PowerConsumedFromProducers_value
   reading55Name Eigenverbrauch
   reading60JSON result_items_.*_tagValues_PowerConsumedFromGrid_value
   reading60Name Strombezug
   reading70JSON result_items_.*_tagValues_PowerProduced_value
   reading70Name Gesamtproduktion
   reading80JSON result_items_.*_tagValues_PowerOut_value
   reading80Name Einspeisung
   reading85JSON result_items_.*_tagValues_StateOfCharge_value
   reading85Name Batteriestatus_in_Prozent
   reading86JSON result_items_.*_tagValues_StateOfHealth_value
   reading86Name Batterielebenserwartung_in_Prozent
   reading87JSON result_items_.*_tagValues_FractionCPULoadKernel_value
   reading87Name CPU_Auslastung_Energymanager
   reading88JSON result_items_.*_tagValues_IdFirmware_value
   reading88Name Energymanager_SW_Firmware
   reading89JSON result_items_.*_tagValues_StateDevice_value
   reading89Name Status_My_Reserve
   room       16-HW-Raum
   stateFormat {return "| Batterieentladung: <span style='color:#eba15d;'>".sprintf("%.1f",ReadingsVal($name,"Batterieentladung_Round",0))." W</span> | Batteriestatus: <span style='color:#eba15d;'>".sprintf("%.0f",ReadingsVal($name,"Batteriestatus_in_Prozent",0))." %</span> | Batterieladung: <span style='color:#eba15d;'>".sprintf("%.0f",ReadingsVal($name,"Batterieladung_Round",0))." kW</span> | Eigenverbrauch: <span style='color:#eba15d;'>".sprintf("%.0f",ReadingsVal($name,"Eigenverbrauch_Round",0))." kW</span> ";}
   userReadings Batterieentladung_Round { round( ReadingsVal($name,"Batterieentladung",0),0) }, Batterieladung_Round { round( ReadingsVal($name,"Batterieladung",0),0) }, Eigenverbrauch_Round { round( ReadingsVal($name,"Eigenverbrauch",0),0) }, Einspeisung_Round { round( ReadingsVal($name,"Einspeisung-1",0),0) }, Strombezug_Round { round( ReadingsVal($name,"Strombezug",0),0) }
   userattr   reading10JSON reading10Name reading20JSON reading20Name reading30JSON reading30Name reading40JSON reading40Name reading50JSON reading50Name reading55JSON reading55Name reading60JSON reading60Name reading70JSON reading70Name reading80JSON reading80Name reading85JSON reading85Name reading86JSON reading86Name reading87JSON reading87Name reading88JSON reading88Name reading89JSON reading89Name
   verbose    0

DO7RH

Hallo zusammen,
Solarwatt hat ein Update auf den Energie Manger ausgerollt und die http Adresse /rest/kiwigrid/eps/powerValues ist nicht mehr erreichbar. Offenbar läuft jetzt die Kommunikation über HTTPS. Weiter bin ich mit Wireshark an dieser Stelle noch nicht gekommen.
Ist euch die neue Adresse bekannt?

topa_LE

Zitat von: DO7RH am 14 November 2020, 13:04:25
Solarwatt hat ein Update auf den Energie Manger ausgerollt und die http Adresse /rest/kiwigrid/eps/powerValues ist nicht mehr erreichbar. Offenbar läuft jetzt die Kommunikation über HTTPS. Weiter bin ich mit Wireshark an dieser Stelle noch nicht gekommen.
Ist euch die neue Adresse bekannt?

Eher Kiwigrid, die für Solarwatt den EM softwaremäßig programmieren/verwalten. Ja ist bekannt, das die API-URL
http://ip-energiemanager/rest/kiwigrid/eps/powerValues

nicht mehr geht, bin aktuell mit Solarwatt/Kiwigrid in losem Kontakt um die neue URL in Erfahrung zu bringen. Ist gegenwärtig sehr zäh, da die ungern internas preisgeben wollen. Das Problem hatte ich damals schon!

Sehr merkwürdig der Laden! Sollten mal alle Endverbraucher von Speichermodulen den VPN Zugang auf ihren Energiemanager blocken, dann gibt es auch ihr Portal nicht mehr ...  ;D

Wüsste aktuell auch nicht, wie ich selbst an die neue Schnittstelle komme.

Kann auch sein, das die Haupt-URL http://ip-energiemanager/rest/kiwigrid/wizard/devices auch irgendwann nicht mehr geht. Den ist es anscheinend ein Dorn im Auge, wenn Nutzer andere Software zum Auslesen (FHEM) verwenden wollen. Anders kann ich es mir nicht erklären, weshalb es zur KiwiGrid API keinerlei Doku im Netz sich findet.

c2j2

Moin,

hast Du was Neueres zu irgendeiner einfacherern Abfrage erfahren können?

142 KB für eine Handvoll interessanter Werte...

mcbuh

Habe jetzt den Thread gelegenen und muss sagen, das ich zu blöd bin es zu verstehen. Könntet ihr vielleicht ein komplettes define reinpassten ? Wäre euch dankbar.

topa_LE

Moin,

muss meinen Thread leider nochmal aktivieren. Durch ständige Softwareupdates von KiwiGrid für den EM, ist es nun so, das teilweise Readings mehrere ITEMS haben.

Beispiel:
attr MR_Solar reading80JSON result_items_.*_tagValues_PowerOut_value
attr MR_Solar reading80Name Einspeisung

S0_1_Strom47_kWh { ReadingsNum($NAME,"WorkIn-3",0) / 1000 },\
S0_2_Strom48_kWh { ReadingsNum($NAME,"WorkIn-2",0) / 1000 },\

Nutze httpmod seit einigen Jahren. Definiere ich nun wie oben das Reading WorkIn-3 und logge es in die DBlog. Nach einiger Zeit ändert sich das Reading in WorkIn-1 oder 4 z.B. (Langzeit-Log ist dann nicht mehr zu gebrauchen)

Ich muss dann ständig die userReadings anpassen.


RAW
defmod MR_Solar HTTPMOD http://192.168.178.160/rest/kiwigrid/wizard/devices 10
attr MR_Solar DbLogExclude .*
attr MR_Solar DbLogInclude Pr_Round,EV_Round,Strombezug_Round,B_Entladung_Round,B_Ladung_Round,Einspeisung_Round,GV,BS,BS_kW
attr MR_Solar alias MR 9.6 kW - Solarwatt ( 160 )
attr MR_Solar enableControlSet 1
attr MR_Solar enableCookies 1
attr MR_Solar group My Reserve Stromspeicher - SOLARWATT
attr MR_Solar icon message_light_intensity
attr MR_Solar reading10JSON result_items_.*_tagValues_WorkACOut_value
attr MR_Solar reading10Name WorkACOut
attr MR_Solar reading11JSON result_items_.*_tagValues_WorkIn_value
attr MR_Solar reading11Name WorkIn
attr MR_Solar reading12JSON result_items_.*_tagValues_PowerIn_value
attr MR_Solar reading12Name PowerIn
attr MR_Solar reading13JSON result_items_.*_tagValues_PriceWorkIn_value
attr MR_Solar reading13Name PriceWorkIn
attr MR_Solar reading14JSON result_items_.*_tagValues_WorkBufferedFromProducers_value
attr MR_Solar reading14Name WorkBufferedFromProducers
attr MR_Solar reading15JSON result_items_.*_tagValues_SettingsNetworkMap_value
attr MR_Solar reading15Name Network
attr MR_Solar reading16JSON result_items_.*_tagValues_WorkConsumedFromProducers_value
attr MR_Solar reading16Name WorkConsumedFromProducers
attr MR_Solar reading17JSON result_items_.*_tagValues_WorkConsumedFromGrid_value
attr MR_Solar reading17Name WorkConsumedFromGrid
attr MR_Solar reading18JSON result_items_.*_tagValues_WorkSelfConsumed_value
attr MR_Solar reading18Name WorkSelfConsumed
attr MR_Solar reading19JSON result_items_.*_tagValues_WorkOutFromStorage_value
attr MR_Solar reading19Name WorkOutFromStorage
attr MR_Solar reading20JSON result_items_.*_tagValues_CurrentBatteryIn_value
attr MR_Solar reading20Name Aktuelle_Batterieaufladung
attr MR_Solar reading21JSON result_items_.*_tagValues_WorkConsumed_value
attr MR_Solar reading21Name WorkConsumed
attr MR_Solar reading22JSON result_items_.*_tagValues_WorkBufferedFromGrid_value
attr MR_Solar reading22Name WorkBufferedFromGrid
attr MR_Solar reading23JSON result_items_.*_tagValues_PowerReleased_value
attr MR_Solar reading23Name PowerReleased
attr MR_Solar reading24JSON result_items_.*_tagValues_PowerSelfSupplied_value
attr MR_Solar reading24Name PowerSelfSupplied
attr MR_Solar reading25JSON result_items_.*_tagValues_PowerOutFromStorage_value
attr MR_Solar reading25Name PowerOutFromStorage
attr MR_Solar reading26JSON result_items_.*_tagValues_WorkOutFromProducers_value
attr MR_Solar reading26Name WorkOutFromProducers
attr MR_Solar reading27JSON result_items_.*_tagValues_WorkConsumedFromStorage_value
attr MR_Solar reading27Name WorkConsumedFromStorage
attr MR_Solar reading28JSON result_items_.*_tagValues_WorkProduced_value
attr MR_Solar reading28Name WorkProduced
attr MR_Solar reading29JSON result_items_.*_tagValues_WorkACIn_value
attr MR_Solar reading29Name WorkACIn
attr MR_Solar reading30JSON result_items_.*_tagValues_PowerBufferedFromProducers_value
attr MR_Solar reading30Name Batterieladung
attr MR_Solar reading31JSON result_items_.*_tagValues_CountBatteryModules_value
attr MR_Solar reading31Name Anzahl_Batterie_Module
attr MR_Solar reading32JSON result_items_.*_tagValues_TemperatureBattery_value
attr MR_Solar reading32Name Batterie_Temperatur
attr MR_Solar reading33JSON result_items_.*_tagValues_VoltageBatteryCellMean_value
attr MR_Solar reading33Name Batterie_Stand_Aktuell
attr MR_Solar reading34JSON result_items_.*_tagValues_PowerInstalledPeak_value
attr MR_Solar reading34Name Peak_Power_Solarmodule_Watt
attr MR_Solar reading35JSON result_items_.*_tagValues_PriceProfitFeedin_value
attr MR_Solar reading35Name Einspeiseverguetung_Cent
attr MR_Solar reading36JSON result_items_05_tagValues_PowerOut_value
attr MR_Solar reading36Name PV_Einspeisung_Watt
attr MR_Solar reading40JSON result_items_.*_tagValues_PowerConsumedFromStorage_value
attr MR_Solar reading40Name Batterieentladung
attr MR_Solar reading50JSON result_items_.*_tagValues_PowerConsumed_value
attr MR_Solar reading50Name Gesamtverbrauch
attr MR_Solar reading55JSON result_items_.*_tagValues_PowerConsumedFromProducers_value
attr MR_Solar reading55Name Eigenverbrauch
attr MR_Solar reading60JSON result_items_.*_tagValues_PowerConsumedFromGrid_value
attr MR_Solar reading60Name Strombezug
attr MR_Solar reading70JSON result_items_.*_tagValues_PowerProduced_value
attr MR_Solar reading70Name Gesamtproduktion
attr MR_Solar reading80JSON result_items_.*_tagValues_PowerOut_value
attr MR_Solar reading80Name Einspeisung
attr MR_Solar reading85JSON result_items_.*_tagValues_StateOfCharge_value
attr MR_Solar reading85Name Batteriestatus_in_Prozent
attr MR_Solar reading86JSON result_items_.*_tagValues_StateOfHealth_value
attr MR_Solar reading86Name Batterielebenserwartung_in_Prozent
attr MR_Solar reading87JSON result_items_.*_tagValues_FractionCPULoadKernel_value
attr MR_Solar reading87Name CPU_Auslastung_Energymanager
attr MR_Solar reading88JSON result_items_.*_tagValues_IdFirmware_value
attr MR_Solar reading88Name Energymanager_SW_Firmware
attr MR_Solar reading89JSON result_items_.*_tagValues_StateDevice_value
attr MR_Solar reading89Name Status_My_Reserve
attr MR_Solar room 16-HW-Raum
attr MR_Solar stateFormat | PV: <span style='color:#eba15d;;'>Pr_Round W</span> \
| VK: <span style='color:#eba15d;;'>Einspeisung_Round W</span> \
| EV: <span style='color:#eba15d;;'>EV_Round W</span> \
| Entladung: <span style='color:#eba15d;;'>B_Entladung_Round W</span> \
| Status: <span style='color:#eba15d;;'>Batteriestatus_in_Prozent %</span> \
| Ladung: <span style='color:#eba15d;;'>B_Ladung_Round W</span> \
| Netz: <span style='color:#eba15d;;'>Strombezug_Round W</span> |
attr MR_Solar userReadings B_Entladung_Round { round( ReadingsVal($NAME,"Batterieentladung",0),0) },\
B_Ladung_Round { round( ReadingsVal($NAME,"Batterieladung",0),0) }, \
EV_Round { round( ReadingsVal($NAME,"Eigenverbrauch",0),0) }, \
Einspeisung_Round { round( ReadingsVal($NAME,"Einspeisung-2",0),0) }, \
Strombezug_Round { round( ReadingsVal($NAME,"Strombezug",0),0) }, \
Pr_Round { round( ReadingsVal($NAME,"Gesamtproduktion",0),0) }, \
GV { round( ReadingsVal($NAME,"Gesamtverbrauch",0),0) }, \
BS { round( ReadingsVal($NAME,"Batteriestatus_in_Prozent",0),1) }, \
Stromverbrauch_Garage_Blockhaus { round( ReadingsVal($NAME,"PowerIn-3",0),1) }, \
Stromverbrauch_Pool_Fitness { round( ReadingsVal($NAME,"PowerIn-2",0),1) }, \
S0_1_Strom47_kWh { ReadingsNum($NAME,"WorkIn-3",0) / 1000 },\
S0_2_Strom48_kWh { ReadingsNum($NAME,"WorkIn-2",0) / 1000 },\
BS_kW { round( ReadingsVal($NAME,"Batterie_Stand_Aktuell",0),2) },\
Netzeinspeisung_Wh { round( ReadingsVal($NAME,"WorkOutFromProducers",0),6) },\
PV_Produktion_Wh { round( ReadingsVal($NAME,"WorkProduced",0),6) },\
Netzeinspeisung_kWh { ReadingsNum($NAME,"Netzeinspeisung_Wh",0) / 1000 },\
PV_Produktion_kWh { ReadingsNum($NAME,"PV_Produktion_Wh",0) / 1000 },\
Netzeinspeisung_kWh_Round { round( ReadingsVal($NAME,"Netzeinspeisung_kWh",0),1) },\
PV_Produktion_kWh_Round { round( ReadingsVal($NAME,"PV_Produktion_kWh",0),1) },\
PV_Eigenstromnutzung { ReadingsNum($NAME,"WorkConsumedFromProducers",0)},\
Bat_Eigenstromnutzung { ReadingsNum($NAME,"WorkConsumedFromStorage",0)},\
Selbstversorgung { ReadingsNum($NAME,"PowerSelfSupplied",0)},\
B_Temp { ReadingsNum($NAME,"Batterie_Temperatur",0)},\
B_Live { ReadingsNum($NAME,"Batterielebenserwartung_in_Prozent",0)}
attr MR_Solar verbose 0

Suche ich mit extractAllJSON 1 den Json-String und nutze dann z.B.

attr MR_Solarwatt reading23JSON result_items_10_tagValues_PowerInstalledPeak_value
attr MR_Solarwatt reading23Name Peak_Power_Solarmodule_Watt

nützt das Logging dann irgendwann auch nix mehr, da sich result_items_10_ eben auch in eine andere Zahl ändert, als 10.

Eventuell kann man das einzigartig als Reading definieren.


Aus der API wäre das im PowerInstalledPeak , hier werden automatisch z.B. 4 Readings generiert.
(Diese ändern sich eben ständig zwischen 1 bis 4, als das man hieraus ein userReading definieren könnte, um es zu loggen)

"PowerInstalledPeak": {
            "tagName": "PowerInstalledPeak",
            "guid": "8c569b53-477e-4648-91aa-0f8524178949",
            "value": 5500
          },

Du darfst diesen Dateianhang nicht ansehen.

Ebenso bei PowerIn und WorkIn. Alle andere Readings aus der API sind korrekt. Warum dies so ist, weiß ich nicht.

StefanStrobel

Hallo Torsten,

wenn es immer nur ein Reading ist, sich aber der "Pfad" zum Reading in einer Zahl ändert, dann könntest Du eventuell statt per JSON mit einer Regex versuchen, den Wert zu bekommen und dabei die Zahl variabel lassen.
Poste doch mal einen Auszug aus den gelieferten Daten, dann sieht man besser, was es noch für Optionen geben könnte.

Gruss
   Stefan

topa_LE

Hallo Stefan,

danke für die Unterstützung.
Was meinst du genau damit "Auszug aus den gelieferten Daten" ?

Den JSON-String aus http://192.168.178.160/rest/kiwigrid/wizard/devices
oder ein List vom Device?


Korrekt ist deine Aussage, das es eigentlich immer nur ein Reading-Wert ist, sich aber dann der Pfad ändert von:

result_items_02_tagValues_PowerIn_value

zu zum Beispiel

result_items_06_tagValues_PowerIn_value

Somit dann in deinem Modul das Reading : PowerIn-2 zu PowerIn-3

Sagt mir bitte genau was du benötigst, vielen Dank

StefanStrobel

Ja, den JSON-String. Eventuell kann man den per Regex so parsen, dass die Position egal ist.

Gruß
   Stefan

topa_LE

Zitat von: StefanStrobel am 04 August 2023, 16:26:08Poste doch mal einen Auszug aus den gelieferten Daten, dann sieht man besser, was es noch für Optionen geben könnte.


JSON
"PowerIn": {
            "tagName": "PowerIn",
            "guid": "di://powermeter@ERCXX-XXXXXXXXXX?input=0",
            "value": 182.00202224469163
          },


HTTP 1.1
"PowerIn":{"tagName":"PowerIn","guid":"di:\/\/powermeter@ERCXX-XXXXXXXXX?input=0","value":182.00202224469163},"

topa_LE

Das sind die Reading die sich ständig ändern:

"PowerInstalledPeak": {
            "tagName": "PowerInstalledPeak",
            "guid": "8c569b53-477e-4648-91aa-0f8524178949",
            "value": 5500
          },

"PowerIn": {
            "tagName": "PowerIn",
            "guid": "di://powermeter@ERCXX-XXXXXXXX?input=0",
            "value": 152.2263097805404
          },
       
       
"PowerIn": {
            "tagName": "PowerIn",
            "guid": "di://powermeter@ERCXX-XXXXXXXX?input=1",
            "value": 474.934036939314
          },
      

Die Input 0 und 1 sind die beiden S0 Zähler die verbaut sind.       

"PowerIn": {
            "tagName": "PowerIn",
            "guid": "876fc3f7-f31e-4eb3-923c-5d43d3f72b26",
            "value": 0
          },

"PowerIn": {
            "tagName": "PowerIn",
            "guid": "49beb2c8-a79f-45c7-9e2e-001e03fb87df",
            "value": 0
          },
       
Die beiden hier sind immer gleich und bedeuten den aktuellen Netzbezug/Verbrauch.      

topa_LE

Beim JSON String fehlte scheinbar noch etwas:
Beispiel komplett

{
  "result": {
    "items": [
      {
        "tagValues": {
          "DegreeInclination": {
            "tagName": "DegreeInclination",
            "guid": "8c569b53-477e-4648-91aa-0f8524178949",
            "value": 38
          }
  }
}
    ]
  }
}
 

topa_LE

Gibt es hier keinen außer Stefan, der da unterstützen kann?

StefanStrobel

Mit einer Regex wie
input=0",\s*"value": ([\d. ]+)bekommst Du z.B. den Wert, der auf Input=0 folgt. Ähnlich könntest Du auf die GUIDs matchen.

Gruß
  Stefan

topa_LE

Danke Stefan,

So kommt aber kein Reading rein:

attr MR_Solarwatt reading24Name S0_garage_test
attr MR_Solarwatt reading24Regex input=0",\s*"value": ([\d.]+)

So auch nicht:

attr MR_Solarwatt reading24Name S0_garage_test
attr MR_Solarwatt reading24Regex input=0",\s*"value": ([\d. ]+)"

Irgendwas scheint noch nicht zu passen.

topa_LE

So habst gelöst  ;D

So wäre die richtig zu matchen:

attr MR_Solarwatt reading10Name S0_1_Stromverbrauch_Garage_Schuppen
attr MR_Solarwatt reading10Regex (?s)PowerIn?.*input=0",\s*"value":([0-9]+\.[0-9]+)

Besten Dank an Dich Stefan für den Weg zum Ziel ...

topa_LE

Hallo Stefan,

hättest Du noch die korrekte Definition für eine GUID ?

Danke

StefanStrobel

Die konkreten GUIDs kenne ich leider nicht. Ich hoffe, dass die eindeutige sind. Dann kannst Du sie einfach aus dem JSON übernehmen.

Gruß
    Stefan

topa_LE

Hallo Stefan,

Kenne mich mit regEx kaum aus und teste sehr viel bis es passt.

Bei WorkIn gibt es auch 4 verschiedene Werte und Möglichkeiten.
Daher komme ich mit nur "input 0 und 1" nicht eindeutig zum Ziel.

z.B. gibt mir das hier 4 verschiedene Readingwerte und nicht eindeutig, das was es soll.

WorkIn?.*?input=1","value":([\d.]+)
Also immer wieder andere der restlichen 3 Werte.

In diesem RegEx brauche ich eben zusätzlich noch die GUID mit drin:
"guid":"di:\/\/powermeter@ERC05-XXXX?input=0"
um das Reading 5691611 zu erhalten.

Komplett HTTP Response:
WorkIn":{"tagName":"WorkIn","guid":"di:\/\/powermeter@ERC05-XXXX?input=0","value":5691611}

Wie würde das denn jetzt komplett zusammengebaut auszusehen haben?

Wie gesagt bei PowerIn passt es , weil es hier eben nur input0 und 1 gibt.

Bei WorkIn reicht:
(?s)WorkIn?.*?input=0","value":([\d.]+)
nicht aus, da nicht eindeutig genug.

Die 4 GUID von WorkIn sind eben:

"guid":"di:\/\/powermeter@ERC05-XXXX?input=0"
"guid":"di:\/\/powermeter@ERC05-XXXX?input=1"
"guid": "876fc3f7-f31e-4eb3-923c-5d43d3f72b26"
"guid": "49beb2c8-a79f-45c7-9e2e-001e03fb87df"

Könnte man das so vollständig in RegEx definieren, hätte man die Eindeutigkeit erreicht und würde das exakte Reading erhalten. Voraussetzung ist natürlich, das im RegEx weiterhin WorkIn drin ist.

Danke, Stefan.

LG

StefanStrobel

Eigentlich musst du das nur zusammenbauen.
Z.B.
WorkIn","guid":"di:....powermeter@ERC05-XXXX.input=0","value":\s*([\d.]+)
Am besten mit https://regex101.com/ testen.

Mit .* wäre ich vorsichtig. Das macht eventuell zu viel und geht schon in den nächsten Abschnitt.

Gruß
   Stefan

topa_LE

Danke Stefan,

werde ich testen.

Ja .* , hatte ich gemerkt ist zu viel teilweise. War nur froh das ich überhaupt paar Werte hatte.

topa_LE

Perfekt Stefan, passt nun alles. Großes Dankeschön.

Werde das nun mal alles zusammenstellen und das Endergebnis hier posten.

Vielleicht gibt es den ein oder anderen der Solarwatt nutzt ...
(hatte zwar hier die letzten Wochen nicht den Anschein aber na gut  ;) )