NEWS
ESPresence - MQTT - JSON? auswerten in Blockly
-
Moin,
ich versuche nun seit geraumer Zeit etwas mit den Werten anzufangen die mir ESPresence via MQTT an IOBroker schickt. Ich habe die Lösungen und Videos zu der Möglichkeit gelesen den Zeitstempel auszulesen, aber ich hätte es gerne etwas eleganter und würde dabei noch was lernen.
Wenn ich das bisher richtig verstanden habe ist das Format der Daten die ESPresence mir schickt JSON?!
Sieht bei mir so aus:{ "id": "7c2f80xxxxxx", "idType": 55, "rssi@1m": -71, "rssi": -50, "raw": 0.25, "distance": 0.35, "speed": -0.01, "mac": "7c2f80xxxxxx", "interval": 1205 }
Also könnte ich ja den Wert distance auswerten, der sich häufig ändert.
Ich habe dann versucht die lösungen hier im Forum die JSON werte von einer URL abrufen für mich umzusetzen aber das klappt garnicht.
Zuletzt habe ich mit einer Ausgabe im debug log geschaut ob und was überhaupt passiert
Aber da passiert nichts, also habe ich da ein Gundletgendes Problem das ich nicht sehe
Warum passiert da nichts, der wert ändert sich nahezu sekündlich aber anscheinend triggert das nicht?!?
Frage wäre also warum nichts passiert und wie ich die Werte so auseinaander genommen bekomme das ich die distance dann in Blockly nutzen kann? -
@panik sagte: Gundletgendes Problem das ich nicht sehe
An den Trigger muss die Datenpunkt-ID übergeben werden - nicht der Wert.
-
@panik Moin Versuch es mal so:
-
@paul53 Danke das hat mir schon mal bei dem grundlegendem Problem geholfen.
Ich habe nun auch den Wert den ich brauche aus dem Datenstrom (keine ahnung ob das json ist oder nicht) extrahieren können.
Habe ein paar sachen die ich hier gelesen hatte probiert, wenn ich den Json objekt konverter nutze werden aus den " zeichen, einfache ' mehr ist mir da nicht aufgefallen.
Ich denke so kann ich weiter arbeiten, aber es interessiert mich ob ich die werte auch "eleganter" extrahieren und nutzen kann, irgendwie ist meine lösung in meinen augen ein Provisoriumaber ich kann halt mit RegEx oder javascrit direkt nichts anfangen
@ciddi89
Deine Lösung habe ich, glaube ich, zuvor etwas angepasst ausprobiert aber da funktionierte das mit den Triggern nicht, aber vieleicht bekomme ich das damit noch eleganter hin... -
@panik auf welchen Datenpunkt triggerst du denn?
-
@ciddi89 Ich hatte zu beginn mit dem Wert versucht zu triggern aber da passierte nichts, jetzt triggert die Datenpunkt-ID.
Habe das Jetzt mal mit deiner lösung umgesetzt, auch das klappt nun wunderbar
-
@panik
Etwas einfacher: -
@paul53
Hallo, ich hoffe es ist ok mich hier dranzuhängen
Ich hole mir im einem Blockly mit exec per curl ein JSON (denke mal das ist eins). Das funktioniert auch:
Das ist der vollständige curl den ich verwende:
curl --digest -u [USER]:[PASSWORD] -H 'accept: application/json' -H 'content-type: application/json' --compressed '[URL]'Zurück bekomme ich folgendes:
{"U19639862":[{"yr":2022,"mon":11,"dom":17,"imp":1346040,"exp":60,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":1,"imp":4306560,"exp":180,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":2,"imp":2824320,"exp":300,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":3,"imp":2531580,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":4,"imp":2265540,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":5,"imp":5135640,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":6,"imp":6107100,"gep":11640,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":7,"imp":1843860,"exp":1700280,"gep":3014640,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":8,"imp":4287180,"exp":385369,"gep":1468327,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":9,"imp":1484160,"exp":290160,"gep":2062320,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":10,"imp":223440,"exp":2646660,"gep":4492560,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":11,"imp":478620,"exp":7434720,"gep":11400120,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":12,"imp":969780,"exp":4711920,"gep":8420280,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":13,"imp":4778700,"exp":403560,"gep":7861260,"gen":1680,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":14,"imp":854040,"exp":367080,"gep":2401500,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":15,"imp":5258700,"exp":60,"gep":138600,"gen":600,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":16,"imp":2661059,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":17,"imp":7027140,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":18,"imp":3920580,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":19,"imp":6025500,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":20,"imp":2147220,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":21,"imp":7385220,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":22,"imp":12272700,"h1b":4451100,"h2b":4522740,"h3b":5760,"dow":"Thu"},{"yr":2022,"mon":11,"dom":17,"hr":23,"imp":31262640,"h1b":12451800,"h2b":12618180,"h3b":14460,"dow":"Thu"}]}Hier möchte ich nun alle h1b, h2b und h3b Werte aufaddieren und durch 3600000 teilen (hier nur in den Stunden 22 und 23 vorhanden). Aber ich schaffe es nicht die Felder anzusprechen. Hat mir jemand einen Tipp?
-
@mp_trixi sagte: Zurück bekomme ich folgendes:
-
@paul53 Hammer - Danke! Und wie fix.
Habs jetzt so:
Das will ich täglich in einen Datenpunkt mit history schreiben. Dazu noch zwei Fragen:- ich habe damit die Möglichkeit Werte der Vergangenheit zu ermitteln. Bekomme ich die auch in den Datenpunkt zu dem entsprechenden Datum?
- die Daten werden rückwirkend für den Tag zuvor ermittelt. Wie bekomme ich es hin, dass der Wert dann in den Datenpunk mit Datum-1 Tag geschrieben wird (ähnlich wie erste Frage)?