[vz-users] Daten auf MQTT Topics verteilen

Frank Richter frank.richter83 at gmail.com
Tue Sep 25 20:30:11 CEST 2018


Hi Christian,

dafür fehlt mir gerade leider die Zeit. Kannst mich nächste Woche nochmal
dran erinnern, vielleicht hab ich dann etwas Luft.

Grüße
Frank

Christian Wulff <christianwulff at gmx.de> schrieb am Di., 25. Sep. 2018,
20:22:

> Moin Frank,
>
>
>
> Ich steck tief im Schlamm L
>
> Daran verzweifle ich leider, ich kann kein bisschen JavaScript.
>
> Ich habe forEach() gesucht, gefunden und mehrere Seiten darüber
> durchgelesen, aber wenn man keine einzige Zeile JavaScript schreiben kann,
> dann ist das wie Kiswahili und Chinesisch. Kann ich auch beides nicht.
>
> Könntest du mir dabei vielleicht weiter helfen?
>
>
>
> Danke und liebe Grüße,
>
> Chris
>
>
>
>
>
>
>
>
>
> *Von:* Frank Richter [mailto:frank.richter83 at gmail.com]
> *Gesendet:* Dienstag, 25. September 2018 01:57
> *An:* volkszaehler.org - users
> *Betreff:* Re: [vz-users] Daten auf MQTT Topics verteilen
>
>
>
> Hi,
>
>
>
> ok, kapiert. Das data-Array kannst du mit forEach() auseinander nehmen.
> Beim return musst du dann wieder ein Array aus Message-Objekten übergeben
> (siehe https://nodered.org/docs/writing-functions#multiple-messages).
>
> Den Rest dazwischen musst du selbst basteln ;-)
>
>
>
> Grüße
>
> Frank
>
>
>
> Christian Wulff <christianwulff at gmx.de> schrieb am Mo., 24. Sep. 2018,
> 23:52:
>
> Da hab ich mich wohl falsch ausgedrückt. Pro UUID ist immer nur ein
> timestamp und ein Wert drin.
>
> Ich hatte weiter unten drei Beispiele eingefügt.
>
> Hier nochmal:
>
> {
>
>     "data": [
>
>         {
>
>             "uuid": "xxxxxxxx-1111-xxxx-xxxx-xxxxxxxxxxxx",
>
>             "tuples": [
>
>                 [
>
>                     1537815350021,
>
>                     13875.6
>
>                 ]
>
>             ]
>
>         }
>
>     ]
>
> }
>
> Der läuft einwandfrei durch, weil es nur ein Kanal ist.
>
>
>
> Beim nächsten sind zwei UUIDs drin, davon kriege ich nur die erste
> erwischt:
>
> {
>
>     "data": [
>
>         {
>
>             "uuid": "xxxxxxxx-2222-xxxx-xxxx-xxxxxxxxxxxx",
>
>             "tuples": [
>
>                 [
>
>                     1537815406656,
>
>                     12309.5
>
>                 ]
>
>             ]
>
>         },
>
>         {
>
>             "uuid": "xxxxxxxx-3333-xxxx-xxxx-xxxxxxxxxxxx",
>
>             "tuples": [
>
>                 [
>
>                     1537815405848,
>
>                     13683.8
>
>                 ]
>
>             ]
>
>         }
>
>     ]
>
> }
>
>
>
> Und hier bei den Temperaturen kommt gleich ein ganzer Haufen zusammen, von
> dem ich auch nur den ersten rauskriege mit meinem Code ohne Schleife:
>
> {
>
>     "data": [
>
>         {
>
>             "uuid": "xxxxxxxx-6666-xxxx-xxxx-xxxxxxxxxxxx",
>
>             "tuples": [
>
>                 [
>
>                     1537815433104,
>
>                     21.562
>
>                 ]
>
>             ]
>
>         },
>
>         {
>
>             "uuid": "xxxxxxxx-7777-xxxx-xxxxx-xxxxxxxxxxxx",
>
>             "tuples": [
>
>                 [
>
>                     1537815433972,
>
>                     20.937
>
>                 ]
>
>             ]
>
>         },
>
>         {
>
>             "uuid": " xxxxxxxx-8888-xxxx-xxxxx-xxxxxxxxxxxx ",
>
>             "tuples": [
>
>                 [
>
>                     1537815420583,
>
>                     21.75
>
>                 ]
>
>             ]
>
>         },
>
>         {
>
>             "uuid": " xxxxxxxx-9999-xxxx-xxxxx-xxxxxxxxxxxx ",
>
>             "tuples": [
>
>                 [
>
>                     1537815427434,
>
>                     22.187
>
>                 ]
>
>             ]
>
>         },
>
>         {
>
>             "uuid": " xxxxxxxx-0000-xxxx-xxxxx-xxxxxxxxxxxx ",
>
>             "tuples": [
>
>                 [
>
>      ...
>
>
>
>
>
>
>
>
>
> *Von:* Frank Richter [mailto:frank.richter83 at gmail.com]
> *Gesendet:* Montag, 24. September 2018 23:27
> *An:* volkszaehler.org - users
> *Betreff:* Re: [vz-users] Daten auf MQTT Topics verteilen
>
>
>
> Für welchen Zählertyp liefert Push denn überhaupt mehr als 1 Tupel?
>
>
>
> Grüße
>
> Frank
>
>
>
> Christian Wulff <christianwulff at gmx.de> schrieb am Mo., 24. Sep. 2018,
> 23:19:
>
> Moin,
>
>
>
> also wenn ich behilflich sein kann beim Testen, dann immer gerne.
>
> Das Problem ist nur, dass ich kein JavaScript kann, von MQTT keine Ahnung
> habe, von Linux sicher keine Ahnung habe, usw.
>
> Dennoch habe ich hier einiges zum Laufen bekommen mit Eurer Hilfe und
> Hilfe von Foren, wenn ich denn mal Zeit habe.
>
> Und von der Zeit habe ich leider auch nicht so viel. Deswegen dauert es
> meistens eine Weile.
>
>
>
> Ich hatte es ja zuerst ohne JSON node. Da hab ich gar nichts hinbekommen.
> Fehlermeldung: "SyntaxError: Unexpected token o in JSON at position 1"
>
> Dann habe ich den JSON node eingefügt und schon ging es fast.
> Fehlermeldung: "TypeError: Cannot read property '0' of undefined"
>
> Ich habe mit meinem Displayprojekt ja schon JSONs mit der ArduinoJSON
> Library geparst.
>
> Zu der Library gibt’s einen JSON Assistent:
> https://arduinojson.org/v5/assistant/
>
> Da habe ich die JSONs vom Push Server und vom VZLOGGER reingehauen und
> habe dann erkannt, dass es beim VZLogger ein kleines bisschen anders
> aufgebaut ist.
>
>
>
> Anstatt:
>
> var myUuid = myJsonObj.data.uuid;
>
> var myTimestamp = myJsonObj.data.tuples[0][0];
>
> var myValue = myJsonObj.data.tuples[0][1];
>
>
>
> habe ich dann:
>
> var myUuid = myJsonObj.data[0].uuid;
>
> var myTimestamp = myJsonObj.data[0].tuples[0][0];
>
> var myValue = myJsonObj.data[0].tuples[0][1];
>
> In den Funktion node geschrieben. Und schon läuft es ohne Fehler durch.
>
>
>
> Wenn ich das jetzt richtig durchblicke, wird so allerdings immer nur der
> erste Tuple des JSONs eingelesen, alle anderen nicht.
>
> Die anderen würden wohl mit
>
> var myUuid = myJsonObj.data[1].uuid;
>
> var myTimestamp = myJsonObj.data[1].tuples[0][0];
>
> var myValue = myJsonObj.data[1].tuples[0][1];
>
> usw. eingelesen werden.
>
>
>
> Jetzt müsste man irgendwie eine Schleife programmieren, die immer alle
> Tuples aus einem JSON ausgibt.
>
> Aber da hab ich leider wieder keinen Plan wie das geht L
>
>
>
> Ich wollte ja auch nur meine drei Stromzähler über den VZLOGGER an MQTT
> pushen. Die Stromzählerwerte kommen einzeln raus, daher funktioniert das
> jetzt provisorisch bei mir.
>
> Schöner wäre es natürlich wenn ich alle Werte aus den JSON rauskriegen
> würde, und nicht nur den ersten Wert.
>
>
>
> Liebe Grüße,
>
> Chris
>
>
>
>
>
>
>
> *Von:* Frank Richter [mailto:frank.richter83 at gmail.com]
> *Gesendet:* Montag, 24. September 2018 21:30
> *An:* volkszaehler.org - users
> *Betreff:* Re: [vz-users] Daten auf MQTT Topics verteilen
>
>
>
> Hi Christian,
>
>
>
> der Vorschlag von Matthias macht durchaus Sinn, das wäre der direkte Weg.
> Ich hab allerdings noch keine eigene Erfahrung mit MQTT via vzlogger,
> deswegen kann ich da nicht helfen. Aber Matthias freut sich sicher über
> Tester :-)
>
> Den vzlogger kannst du wahrscheinlich auch auf dem alten Image neu
> compilieren. Aber irgendwann musst du halt auch mal upgraden, wenn du neue
> Features willst.
>
>
>
> Ansonsten: lass den JSON-Node weg, das ist kontraproduktiv. Der Function
> Node erwartet ein Objekt, keinen String.
>
>
>
> Grüße
>
> Frank
>
>
>
> Am 24.09.2018 9:07 nachm. schrieb "Christian Wulff" <christianwulff at gmx.de
> >:
>
> Hallo Matthias,
>
>
>
> ich habe mir deine verlinkte Seite mal angesehen.
>
> Verstanden habe ich davon aber nix, oder nur minimal rudimentär.
>
> Weitergebracht hat mich das jetzt leider nicht.
>
> Da die Posts vom August diesen Jahren kommen, vermute ich dass es mir auch
> nichts hilft.
>
> Meine VZ Installation ist aus ~Oktober 2016.
>
>
>
> @Frank:
>
>
>
> Ich habe jetzt mal testweise in Node-RED hinter den [post] /vzpush node
> einen json node drangehängt.
>
> Nun wird schon mal aus dem JavaScript Object ein JSON String (ich vermute
> das hilft)
>
> Dann habe ich einen Funktionsknoten mit dem gleichen Code dahintergehängt,
> der bei dem VZ Push Server funktioniert:
>
>
>
> var uuidMap = {
>
>
> 'xxxxxxxx-1111-xxxx-xxxx-xxxxxxxxxxxx':{topic:'Haus/Strom/Haus'},
>
>                 ' xxxxxxxx-2222-xxxx-xxxx-xxxxxxxxxxxx
> ':{topic:'Haus/Strom/WärmepumpeHaupttarif'},
>
>                 ' xxxxxxxx-3333-xxxx-xxxx-xxxxxxxxxxxx
> ':{topic:'Haus/Strom/WärmepumpeNebentarif'},
>
> ' xxxxxxxx-4444-xxxx-xxxx-xxxxxxxxxxxx
> ':{topic:'Haus/Temperatur/T01Aussen'},
>
>                 };
>
>
>
> // Parse JSON
>
> var myJsonObj = [];
>
> var myJsonObj = JSON.parse(msg.payload);
>
>
>
> // Get UUID, timestamp and value
>
> var myUuid = myJsonObj.data.uuid;
>
> var myTimestamp = myJsonObj.data.tuples[0][0];
>
> var myValue = myJsonObj.data.tuples[0][1];
>
>
>
> if (uuidMap[myUuid] !== undefined) {
>
>   // Create output payload
>
>   var myOutput = {};
>
>   myOutput.topic = uuidMap[myUuid]['topic'];
>
>   myOutput.payload = myValue;
>
>   return myOutput;
>
> }
>
>
>
> Dann bekomme ich allerdings die Fehlermeldung:
>
> "TypeError: Cannot read property '0' of undefined"
>
> Und nun verlassen sie mich, ich finde nicht heraus wo der Fehler liegt.
>
> Kann da jemand weiterhelfen?
>
>
>
> Danke und liebe Grüße,
>
> Chris
>
>
>
> P.S.: Die JSON Strings sehen z.B. so aus:
>
> {
>
>     "data": [
>
>         {
>
>             "uuid": "xxxxxxxx-1111-xxxx-xxxx-xxxxxxxxxxxx",
>
>             "tuples": [
>
>                 [
>
>                     1537815350021,
>
>                     13875.6
>
>                 ]
>
>             ]
>
>         }
>
>     ]
>
> }
>
>
>
> Oder so:
>
> {
>
>     "data": [
>
>         {
>
>             "uuid": "xxxxxxxx-2222-xxxx-xxxx-xxxxxxxxxxxx",
>
>             "tuples": [
>
>                 [
>
>                     1537815406656,
>
>                     12309.5
>
>                 ]
>
>             ]
>
>         },
>
>         {
>
>             "uuid": "xxxxxxxx-3333-xxxx-xxxx-xxxxxxxxxxxx",
>
>             "tuples": [
>
>                 [
>
>                     1537815405848,
>
>                     13683.8
>
>                 ]
>
>             ]
>
>         }
>
>     ]
>
> }
>
> Oder auch so:
>
> {
>
>     "data": [
>
>         {
>
>             "uuid": "xxxxxxxx-6666-xxxx-xxxx-xxxxxxxxxxxx",
>
>             "tuples": [
>
>                 [
>
>                     1537815433104,
>
>                     21.562
>
>                 ]
>
>             ]
>
>         },
>
>         {
>
>             "uuid": "xxxxxxxx-7777-xxxx-xxxxx-xxxxxxxxxxxx",
>
>             "tuples": [
>
>                 [
>
>                     1537815433972,
>
>                     20.937
>
>                 ]
>
>             ]
>
>         },
>
>         {
>
>             "uuid": " xxxxxxxx-8888-xxxx-xxxxx-xxxxxxxxxxxx ",
>
>             "tuples": [
>
>                 [
>
>                     1537815420583,
>
>                     21.75
>
>                 ]
>
>             ]
>
>         },
>
>         {
>
>             "uuid": " xxxxxxxx-9999-xxxx-xxxxx-xxxxxxxxxxxx ",
>
>             "tuples": [
>
>                 [
>
>                     1537815427434,
>
>                     22.187
>
>                 ]
>
>             ]
>
>         },
>
>         {
>
>             "uuid": " xxxxxxxx-0000-xxxx-xxxxx-xxxxxxxxxxxx ",
>
>             "tuples": [
>
>                 [
>
>      ...
>
>
>
> *Von:* Matthias Behr [mailto:mbehr at mcbehr.de]
> *Gesendet:* Sonntag, 23. September 2018 22:41
>
>
> *An:* volkszaehler.org - users
> *Betreff:* Re: [vz-users] Daten auf MQTT Topics verteilen
>
>
>
> Hallo,
>
>
>
> schon mal https://github.com/volkszaehler/vzlogger/pull/357 angeschaut?
>
>
>
> Gruß
>
> Matthias
>
>
>
> Am 23.09.2018 um 21:47 schrieb Frank Richter <frank.richter83 at gmail.com>:
>
>
>
> Hi Christian,
>
>
>
> was gibt's da groß zu "entschlüsseln", das ist doch auch nur JSON? Geht im
> Prinzip genauso wie bei den Websockets-Messages vom Push-Server.
>
>
>
> Gruß
>
> Frank
>
>
>
> Christian Wulff <christianwulff at gmx.de> schrieb am So., 23. Sep. 2018
> 20:11:
>
> Hallo Frank,
>
>
>
> also so?:
>
>
>
>   "push": [
>
>     {
>
>       "url": "http://127.0.0.1:5582"},
>
>     { "url": "http://127.0.0.1:1880/vzpush"
>
>     }
>
>   ],
>
>
>
> Das scheint zu funktionieren.
>
> Auf jeden Fall kommt dann msg: Objects im debug Fenster von Node-RED raus.
>
> Im debug Fenster habe ich diese Objects mal aufgeklappt und durchgesehen,
> und tatsächlich einen Zählerstand eines Stromzählers gefunden **happy**
>
>
>
> Jetzt müssen diese Objects „nur“ noch entschlüsselt und auf den MQTT
> Broker gepublished werden.
>
> Das sieht mir jetzt aber sehr komplex aus.
>
> Hat da jemand ein Beispiel, wie man das hinkriegt? Da blicke ich so
> erstmal gar nicht durch L
>
>
>
> Liebe Grüße,
>
> Chris
>
>
>
> *Von:* Frank Richter [mailto:frank.richter83 at gmail.com]
> *Gesendet:* Samstag, 22. September 2018 18:47
> *An:* volkszaehler.org - users
> *Betreff:* Re: [vz-users] Daten auf MQTT Topics verteilen
>
>
>
> Hi Christian,
>
>
>
> "push": [] ist doch ein Array, sollte also auch mit mehreren Zielen
> klarkommen.
>
>
>
> Grüße
>
> Frank
>
>
>
> Christian Wulff <christianwulff at gmx.de> schrieb am Sa., 22. Sep. 2018,
> 17:00:
>
> Hallo Frank,
>
>
>
> ich möchte also zusätzlich zu den Werten, die über den Push Server an MQTT
> gesendet werden, auch noch die Zählerstände vom vzlogger direkt an Node-RED
> pushen.
>
> Dazu steht im Wiki, dass man folgende Zeilen in /ect/vzlogger.conf
> editieren soll:
>
> "push": [
>
>   {
>
>     "url": "http://127.0.0.1:1880/vzpush"
>
>   }
>
> ],
>
>
>
>
>
> Nun habe ich in meiner /ect/vzlogger.conf allerdings schon drin stehen:
>
>   "push": [
>
>     {
>
>       "url": "http://127.0.0.1:5582"
>
>     }
>
>   ],
>
>
>
> Was ist denn richtig?
>
> Beides geht ja vermutlich nicht?!
>
>
>
> Lieben Gruß,
>
> Chris
>
>
>
> *Von:* Frank Richter [mailto:frank.richter83 at gmail.com]
> *Gesendet:* Donnerstag, 20. September 2018 18:29
> *An:* volkszaehler.org - users
> *Betreff:* Re: [vz-users] Daten auf MQTT Topics verteilen
>
>
>
> Hi Christian,
>
>
>
> richtig verstanden.
>
>
>
> Für MQTT ist die Payload einfach ein String, ob da nur der Wert, JSON oder
> sonstwas drin steht, ist dem Broker egal.
> <p class=MsoNormal
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-users/attachments/20180925/1d064654/attachment-0001.html>


More information about the volkszaehler-users mailing list