NEWS
Parser Wert auslesen aber wie?
-
Hallo
Ich habe einen Verbrauchszähler an meinem Stromzähler angebaut.
Ich habe eine URL die ich in meinem Browser eingeben kann, das Ergebnis sieht dann so aus:{"meterId":"1KFM00000754396","deviceId":"EBSD14250567526","msgType":"EMETER_OBIS_V2","measurements":[{"timestamp":"2022-12-03T13:25:53Z","values":{"1-0:96.90.21":"7E2005D2","1-0:0.2.00":"312E3033","1-0:14.7.0255":50,"1-0:81.7.26255":359,"1-0:81.7.15255":330,"1-0:81.7.4255":337,"1-0:81.7.2255":238,"1-0:81.7.1255":118,"1-0:71.7.0255":10.119999885559082,"1-0:51.7.0255":1.7100000381469727,"1-0:31.7.0255":0.89999997615814209,"1-0:72.7.0255":235.89999389648438,"1-0:52.7.0255":234.69999694824219,"1-0:32.7.0255":237,"1-0:16.7.0255":2818,"1-0:2.8.0255":0,"1-0:1.8.0255":9071.03125,"1-0:96.1.0255":"0A014B464D0000006E24","1-0:96.50.1*1":"4B464D"}}]}
Den Wert hinter "1-0:16.7.0*255" den hätte ich gern in einem Datenpunkt.
Aber wie soll das gehen mit request komme ich nicht weiter im Blockly das gibt nur Fehler.
Besteht die Möglichkeit, das mit dem Parser Adapter zu lösen?
Ich versuche das jetzt schon seit Tagen, jede Idee ist willkommen.
-
@martin-0 das sieht aber ganz anders aus als im anderen Thread.
-
@homoran
Was meinst du damit?
In dem anderen habe ich die Fehlermeldung von Javascript gepostet.Das hier ist das Ergebnis wenn ich die URL in den Browser eingebe.
-
@martin-0 sagte in Parser Wert auslesen aber wie?:
@homoran
Was meinst du damit?das was da steht!
in deinem parallelen Thread bekommst du ein anderes json zurück, ohne Bezeichner
-
@homoran
Sorry aber ich verstehe leider nicht was du meinst. -
@martin-0 sagte in Parser Wert auslesen aber wie?:
@homoran
Sorry aber ich verstehe leider nicht was du meinst.sieh dir die Antwort des Zählers in deinem anderen Thread und duesen hier an.
die sind unterschiedlich.Bitte im anderen Thread weitermachen mit allen notwendigen Informationen.
https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge/1 -
@martin-0 ich mach hier mal wieder auf!
Mal sehen, ob der Fehler vom Blockly auch im Parser Adapter kommt.gib mal den URL ein, dann das Regex
255":([\d\.]+)
Typ Nummer und als NUM die Zahl für welches Auftreten der 255 du den Wert haben willst.
Dann bitte Screenshot vom Parser Editor -
Juhu ich bekomme einen Wert, nur was genau muss bei Intervall rein und wie hängt das mit den oberen Werten der Abfrage zusammen?
Wo kann ich denn lernen wie man den RegEX schreibt?
-
@martin-0 sagte in Parser Wert auslesen aber wie?:
Juhu ich bekomme einen Wert,
bitte
@homoran sagte in Parser Wert auslesen aber wie?:
Screenshot vom Parser Editor
vom ganzen!
-
-
@martin-0 da steht jetzt kein Ergenis und die gewünschte Stelle ist nicht markiert!
klick mal play -
@homoran
Das ändert nichts, aber in dem Datenpunkt unter Objekte steht der aktuelle Verbrauchswert -
@martin-0 sagte in Parser Wert auslesen aber wie?:
{"meterId":"1KFM00000754396","deviceId":"EBSD14250567526","msgType":"EMETER_OBIS_V2","measurements":[{"timestamp":"2022-12-03T13:25:53Z","values":{"1-0:96.90.21":"7E2005D2","1-0:0.2.00":"312E3033","1-0:14.7.0255":50,"1-0:81.7.26255":359,"1-0:81.7.15255":330,"1-0:81.7.4255":337,"1-0:81.7.2255":238,"1-0:81.7.1255":118,"1-0:71.7.0255":10.119999885559082,"1-0:51.7.0255":1.7100000381469727,"1-0:31.7.0255":0.89999997615814209,"1-0:72.7.0255":235.89999389648438,"1-0:52.7.0255":234.69999694824219,"1-0:32.7.0255":237,"1-0:16.7.0255":2818,"1-0:2.8.0255":0,"1-0:1.8.0255":9071.03125,"1-0:96.1.0255":"0A014B464D0000006E24","1-0:96.50.1*1":"4B464D"}}]}
Also - eine JSON parsed man nicht - das wertet man direkt in Blockly oder Node-Red aus.
Wenn Du das mal richtig formatierst, dann kommt folgendes raus:
{ "meterId": "1KFM00000754396", "deviceId": "EBSD14250567526", "msgType": "EMETER_OBIS_V2", "measurements": [ { "timestamp": "2022-12-03T13:25:53Z", "values": { "1-0:96.90.21": "7E2005D2", "1-0:0.2.00": "312E3033", "1-0:14.7.0255": 50, "1-0:81.7.26255": 359, "1-0:81.7.15255": 330, "1-0:81.7.4255": 337, "1-0:81.7.2255": 238, "1-0:81.7.1255": 118, "1-0:71.7.0255": 10.119999885559082, "1-0:51.7.0255": 1.7100000381469727, "1-0:31.7.0255": 0.8999999761581421, "1-0:72.7.0255": 235.89999389648438, "1-0:52.7.0255": 234.6999969482422, "1-0:32.7.0255": 237, "1-0:16.7.0255": 2818, "1-0:2.8.0255": 0, "1-0:1.8.0255": 9071.03125, "1-0:96.1.0255": "0A014B464D0000006E24", "1-0:96.50.1*1": "4B464D" } } ] }
Diesen Wert: 1-0:16.7.0*255" gibt es somit gar nicht. Wenn ich mal als Beispiel 1-0:96.50.1*1 nehme, dann ist der Pfad:
-
@mickym sagte in Parser Wert auslesen aber wie?:
- das wertet man direkt in Blockly oder Node-Red aus.
geht nicht!
such mal nachHPE_INVALID_HEADER_TOKEN
Den Fehler soll es auch bei node-red werfen, wenn ich google trauen darf -
@homoran Nun aber wenn der JSON im Browser rauskommt? Das Problem scheint aber dann zu sein, dass die request Bibliothek egal welche URL ich eingebe, den Fehler schmeisst - egal ob es Blockly, der Parser Adapter oder NodeRed ist.
Hier scheint es eine Lösung zu geben: https://stackoverflow.com/questions/36628420/nodejs-request-hpe-invalid-header-token
Dann sollte man mit dem Code ja und mit node-libcurl Bibliothek vielleicht Glück haben. Aber da sollen sich die JS-Profis hier an Board melden.
Das Problem ist ja - dass ich keine URL habe, um diesen Fehler nachstellen zu können.
-
@mickym sagte in Parser Wert auslesen aber wie?:
Hier scheint es eine Lösung zu geben: https://stackoverflow.
das meinte ich!
der HTTP-Parser in js und node-red ist seit node 12 betroffen. Im Parser Adapter kann man das oer Checkbox erledigen (unsicheren http-Parser verwenden)
-
@homoran Ok - dann sollte es ja mit dem RegEx und dem Parser Adapter gehen und ich nehme alles zurück. Den Fehler wusste ich nicht.
In NodeRed geht es vielleicht doch
mit der Option - aber keine Ahnung - müsste man ausprobieren.
-
-
Hallo
Ich habe noch ein kleines Problem mit dem Parser.
Es hat alles super funktioniert, bis ich eine Solaranlage angeschlossen habe. Wenn ich einspeise und die Werte des aktuellen Verbrauches in den Minus Bereich gehen, dann funktioniert der RegEx Befehl nicht mehr, da alles um eine Stelle verschoben ist.Das ist der URL Aufruf:
{"meterId":"1KFM0000055657656","deviceId":"EBSD142505775756","msgType":"EMETER_OBIS_V2","measurements":[{"timestamp":"2023-04-02T08:40:28Z","values":{"1-0:96.90.2*1":"7E2005D2","1-0:0.2.0*0":"312E3033","1-0:14.7.0*255":49.900001525878906,"1-0:81.7.26*255":335,"1-0:81.7.15*255":299,"1-0:81.7.4*255":188,"1-0:81.7.2*255":238,"1-0:81.7.1*255":118,"1-0:71.7.0*255":0.43000000715255737,"1-0:51.7.0*255":0.37999999523162842,"1-0:31.7.0*255":1.9700000286102295,"1-0:72.7.0*255":235,"1-0:52.7.0*255":232.69999694824219,"1-0:32.7.0*255":234.19999694824219,"1-0:16.7.0*255":-333,"1-0:2.8.0*255":0.30339998006820679,"1-0:1.8.0*255":10473.0244140625,"1-0:96.1.0*255":"0A014B464D0000006E24","1-0:96.50.1*1":"4B464D"}}]}
Der RegEx lautet: 255":([\d.]+)
Der funktioniert aber nur, wenn der Aktuelle Verbrauch im positiven Bereich ist.Meine Frage:
Kann ich mit einem RegEx Befehl folgendes finden und den Wert dahinter auslesen:
"1-0:16.7.0*255":
in diesem Fall wäre mein Ergebnis:
-333
Wäre super wenn mir jemand helfen könnte, meine ganzen Berechnungen basieren auf diesen Werten die der Parser Adapter mir zur Verfügung stellt.
Vielleicht gibt es ja eine Internetseite, der mir den korrekten RegEx Befehl anzeigen kann oder ähnliches.
Gruß
-
@g-hawk So was liest man nicht mit einem Parser - das ist ein JSON und Du kannst Du ganz bequem direkt auf die Eigenschaften dieses Objektes zugreifen. Ich dachte ich hätte es unten beschrieben.
Was nutzt Du für eine Logikmaschine oder einen Alias?
Wenn Du Node-Red benutzt einfach den Pfad rauskopieren und die payload setzen:
Du greifst also auf diesen Wert einfach über den Pfad:
obj.measurements[0].values["1-0:16.7.0*255"]
zu. Im Blockly heisst es dann halt Attribut: