[vz-users] Daten auf MQTT Topics verteilen

Frank Richter frank.richter83 at gmail.com
Tue Oct 2 02:07:31 CEST 2018


Hi Christian,

wenn du noch Hilfe brauchst, schick mal deinen Flow, damit ich eine Basis
zum Rumprobieren habe. Vielleicht komme ich diese Woche dazu.

Grüße
Frank

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

> 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?!
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-users/attachments/20181002/85a0a6c9/attachment-0001.html>


More information about the volkszaehler-users mailing list