NEWS
TCP Node -> Werte ermitteln -> iOBroker für vis übergeben
-
Hallo zusammen,
ich hoffe Ihr könnt mir bei meiner Problemstellung helfen. Aktuell habe ich mich die gesamten letzten Tage mit ioBroker auseinandergesetzt aber leider bisher nicht das passende Ergebnis erreicht. Ich habe mit dem Adapter Node-red einen TCP Node auf einen bestimmten Port connected. Das abhören dieses Streams funktioniert auch ohne Probleme. Nun möchte ich die empfangenen Informationen aber gerne aufbereiten und einzeln per ioBroker für vis zur Verfügung stellen. Nur leider bekomme ich dies nicht hin.
Der empfangene [msg.payload] : string ist wie folgt aufgebaut:
XXX:1432468601:0:12345678:3:1:0:0
Nun meine Fragen/Wünsche:
-
Je nach Wert für XXX möchte ich die darauf folgenden Informationen, welche mit ":" getrennt sind einzeln an ioBroker übermitteln. XXX kann aktuell nur zwei unterschiedliche Werte annehmen die für mich interessant sind. Alle anderen Werte können ignoriert werden. Leider schaffe ich es schon nicht die ersten 3 Zeichen aus dem String auszulesen umd hiermit weiterzuarbeiten bzw. zu unterscheiden ob der String für mich interessant sein könnte. Ich habe hier mit einer Function und Substring versucht zu arbeiten aber ich erhalte immer (undefinied) als msg.
-
Weiterhin würde ich gerne die Informationen aus den Strings archivieren und diese in VIS grafisch anzeigen lassen. Pro String eine Zeile und pro Information eine Spalte in dieser Zeile, die Informationen sind ja mit ":" getrennt.
Zeile1: XXX Spalte1: 1432468601 …
Zeile2: XXX Spalte1: 5684331466 ...
der aktuellste String sollte immer oben angeordnet sein
- Spalte 1 bzw die erste Information nach XXX beinhaltet einen Timestamp. Diesen würde ich natürlich gerne entsprechend ausgegeben werden.
Ich hoffe Ihr könnt mir Eure Ansätze mitteilen denn ich sehe vor lauter Bäumen aktuell den Wald nicht mehr, und ich denke das ich nur einen Denkfehler habe. Ich hoffe Ihr könnt mir helfen. Euch noch einen schönen Sonntag.
Gruß
Steffen
-
-
Hallo zusammen,
ich hoffe Ihr könnt mir bei meiner Problemstellung helfen. Aktuell habe ich mich die gesamten letzten Tage mit ioBroker auseinandergesetzt aber leider bisher nicht das passende Ergebnis erreicht. Ich habe mit dem Adapter Node-red einen TCP Node auf einen bestimmten Port connected. Das abhören dieses Streams funktioniert auch ohne Probleme. Nun möchte ich die empfangenen Informationen aber gerne aufbereiten und einzeln per ioBroker für vis zur Verfügung stellen. Nur leider bekomme ich dies nicht hin.
Der empfangene [msg.payload] : string ist wie folgt aufgebaut:
XXX:1432468601:0:12345678:3:1:0:0
Nun meine Fragen/Wünsche:
-
Je nach Wert für XXX möchte ich die darauf folgenden Informationen, welche mit ":" getrennt sind einzeln an ioBroker übermitteln. XXX kann aktuell nur zwei unterschiedliche Werte annehmen die für mich interessant sind. Alle anderen Werte können ignoriert werden. Leider schaffe ich es schon nicht die ersten 3 Zeichen aus dem String auszulesen umd hiermit weiterzuarbeiten bzw. zu unterscheiden ob der String für mich interessant sein könnte. Ich habe hier mit einer Function und Substring versucht zu arbeiten aber ich erhalte immer (undefinied) als msg.
-
Weiterhin würde ich gerne die Informationen aus den Strings archivieren und diese in VIS grafisch anzeigen lassen. Pro String eine Zeile und pro Information eine Spalte in dieser Zeile, die Informationen sind ja mit ":" getrennt.
Zeile1: XXX Spalte1: 1432468601 …
Zeile2: XXX Spalte1: 5684331466 ...
der aktuellste String sollte immer oben angeordnet sein
- Spalte 1 bzw die erste Information nach XXX beinhaltet einen Timestamp. Diesen würde ich natürlich gerne entsprechend ausgegeben werden.
Ich hoffe Ihr könnt mir Eure Ansätze mitteilen denn ich sehe vor lauter Bäumen aktuell den Wald nicht mehr, und ich denke das ich nur einen Denkfehler habe. Ich hoffe Ihr könnt mir helfen. Euch noch einen schönen Sonntag.
Gruß
Steffen `
Was du machen willst, habe ich nicht ganz verstanden, aber versuche trotzdem zu helfen."XXX:1432468601:0:12345678:3:1:0:0" aufteilen ist sehr einfach:
Function node:
var str = msg.payload || "XXX:1432468601:0:12345678:3:1:0:0"; var parts = str.split(':'); if (str[0] == "XXX") { // Analyse it. }
> Spalte 1 bzw die erste Information nach XXX beinhaltet einen Timestamp
In welchem Format: sekunden nach 1970, millisekunden nach 1970?
` > var ts = 1432468601;var time = (new Date(ts * 1000)).toString(); `
Wie man die Tabellen aufbaut, kannst du bei fritzbox Flows abschauen.
721_alexa.jpg -
-
Hallo Bluefox,
vielen lieben Dank für Deine Anwort. Wie bekomme ich den nun den Code so erweitert das ich für jeden Part eine einzelne Ausgabe hinbekomme?
var str = msg.payload || "XXX:1432468601:0:12345678:3:1:0:0"; var parts = str.split(':'); if (str[0] == "XXX") { // Analyse it. }
Beim Timestamp muss ich schauen ob vor oder nach 1970 aber denke danach. Prüf ich aber mal. Danke Dir schon mal. Bastel gerade schon fleissig weiter.
Gruß
Stefnas
-
str[0] Part 1
str[1] Part 2
usw.
einzeln, per Schleife, …
Gesendet von iPhone mit Tapatalk
-
wie ich die einzelnen Parts bekomme ist mir klar aber wie ist der befehl zum ausgeben…ach irgendwie check ich das nicht...glaub ich muss mal nen paar Tage Pause machen und mich dann nochmals daran versuchen...hier mal mein Code (bitte nicht lachen ;-))
var outputMsgs = []; var str = msg.payload || "300:1234567890:0:12345:0:756E6B6C617265204175736C6F6573756E67"; var parts = str.split(':'); if (str[0] == "300") { // Analyse it. } for (var p in parts) { outputMsgs.({payload:str[p]}); } return [ outputMsgs ];
Quasi soll pro Output ein Part ausgegeben werden…Danke für Eure Geduld
LG
Stefnas
-
Sieh mal da,
http://forum.iobroker.org/viewtopic.php?p=4294#p4294
Da ist im function node drin, wie man etwas auf mehrere outputs verteilt
Gruß
Rainer
Gesendet von meinem LIFETAB_S785X mit Tapatalk
-
ah cool danke wird gerade probiert…
Gesendet von iPad mit Tapatalk
-
Hallo zusammen,
nach einem Tag Abstand und den vielen netten Beiträgen habe ich es hinbekommen, und zwar genau so wie es soll. Ich danke Euch.
Gruß
Stefnas