NEWS
Rasp2 serial überwachen, per mqtt an iobroker übertragen.
-
@beliar_666 sagte in Rasp2 serial überwachen, per mqtt an iobroker übertragen.:
Und wenn ich das jetzt richtig interpretiere dann ist dein Flow für die Node Red Instanz in IOBroker, oder?
JA - war es! - aber hab ihn nun geändert, sodass er auch auf einem Standalone Node-Red laufen müsste.
So habe den NodeRed Flow etwas abgeändert und die iob Pfade in mqtt Pfade gewandelt:
Damit musst Du nur noch statt der Debug Node eine mqtt Node dran hängen. Die Ordnerstruktur gibst Du in der msg.top ein - bevor der Subflow gestartet wird.
Falls Du nicht alle Objekte brauchst - kannst Du ja auch nach der JOIN Node direkt auf die Werte zugreifen. Nach der JOIN NOde hast Du fertige JAVA-Objekte über die zum Beispiel payload.fo auf den einzelnen Wert zugreifst.
-
@mickym Ok, im Großen und Ganzen schaut das plausibel aus, aber wie teile ich nun meine Abfrage auf einem seriellen Port, der mir beide Strings liefert auf, das ich 2 getrennte Zweige habe?
-
@beliar_666 Du brauchst ja vielleicht keine 2 Zweige ich habe keine Ahnung was Du mit Datensatz 1 oder 2 meinst und wie sich die Unterscheiden. Ich weiß doch auch nicht was aus Deinen seriellen Nodes rauskommt und wie Du die Datensätze auseinanderhälst. Du hast das doch geschrieben. Geht ja auch ein Datensatz bzw. Ast. Wenn Du nur 1 Ast nimmst, dann siehtst Du ja, dass damit immer wenn alle 9 Parameter voll sind - eine Nachricht generiert wird.
Ich habe Dir im Prinzip eine Vorgehensweise gezeigt, wie man diese Strings über ein Objekt handhabbar machst. Die Details musst Du halt implementieren.
-
@mickym 1 Serieller Node der einmal den Datensatz 1
1 v=2968&c=26&t=2052&h=4400&f=1&sy=1&rssi=-890&fo=1647&be=0
und einmal Datensatz 2
2 v=3186&c=11&t=3584&h=1850&f=1&sy=0&rssi=-1015&fo=3601&be=2raus gibt. Je nach dem von welchem Sensor dann das Signal kommt steht wie dort abgebildet vorne dran eine 1 oder eine 2, das sind die Kennungen der Funksensoren. Alles was danach steht sind die Werte wie Akku, Temp, Feuchtigkeit etc...
Dachte das hatte ich oben schon klar genug formuliert. Also 1 Serieller Empfänger, der 2 Signale liefert, die ich getrennt haben möchte.
Der Ansatz mit den 2 Zweigen ist somit eigentlich gar nicht verkehrt, nur wie bekomme ich aus eben diesem einen Node 2 getrennte Zweige... -
@beliar_666 Nun ich dachte Du hast das Prinzip des Flows verstanden .
Dann hängst Du einfach diese Change mit der Switch Node vorne dran.
Hier die beiden Nodes mit der switch Node:
Du kannst das auch in einer anderen Eigenschaft mitschleppen und dann die Zahl in msg.top unterbringen - dann langt auch ein Ast. Dann braucht man nicht für jeden Sensor einen Ast machen.
-
Nein ao komme ich nicht weiter. Bei mir kommen hinter Switch keine Daten an. Davor aber schon.
-
@beliar_666 OK - ich kann den Flow nicht mehr zurück importieren - weil die Importfunktion ein Problem mit den regulären Ausdrücken hat. In Zukunft bitte den Export in </> Code Tags.
Aber ich habe trotzdem gesehen, wo das Problem ist. In der Switch Node steht msg.top da muss aber stehen msg.topic.
Wenn die Strings so sind, wie Du sie unten gepostet hast - dann die Change und Switch Node wie folgt konfigurieren - hierdie Screenshots - erstmal gesamt - ich habe natürlich wieder die Inject Nodes anstelle der seriellen Node hingehängt um den Input zu simulieren:
So die erste Change Node - da wird der Input scheitern schaut so aus. Die musst Du halt aus dem Screenshot nun selbst abbilden.
Achte darauf dass Du am Anfang beim Ändern auf reguläre Ausdrücke gestellt hast .* und dann kannst Du sowohl beim topic oder payload den gleichen regulären Ausdruck verwenden:
(\d)\s(.*)
Das msg.topic ist dann $1 und msg.payload ist $2.
Die switch Node muss so aussehen:
Achte auf Typ und das nach msg.topic unterschieden wird - wie in der Change Node zuvor definiert:
-
@mickym sagte in Rasp2 serial überwachen, per mqtt an iobroker übertragen.:
Also nach Change teilt er mir die 2 auf, siehe Screenshot. Aber der Switch blockt wieder. Nachg dem Switch bleibt die Ausgabe wieder leer.
-
@beliar_666 Ja passt doch - der switch teilt das dann auf die beiden Äste. ggf. muss man am Schluss noch die Zeilenschaltung entfernen. - Du könntest den regulären Ausdruck nochmals wie folgt ändern
(\d)\s(.*)\s
Mach halt mal einen Screenshot des switch hast du msg.top gegen msg.topic geändert wie gesagt?
-
-
@beliar_666 Nun vielleicht ist da irgendein Steuerzeichen drin, dass ich nicht sehe.
Dann mach mal in dem Switch statt == 1 ==> enthält 1 bzw. enthält 2
-
@beliar_666 Andernfalls zeig mal den Screenshot dieser Debug-Nodes mit dem vollständigen Nachrichtenobjekt und klappe bitte alle Daten aus (Pfeil nach unten)
-
@mickym Genau das war es so wie es ausschaut kommen jetzt Daten hinterm Switch an.
Aber nun kam mir grad noch etwas in den Sinn, wenn jetzt weitere Sender hinzu kommen, die dann als Kennung 0, 3, 4, 5, etc. haben, wie binde ich die dann in den change ein? Oder geht das dann gar nicht?
-
@beliar_666
Geht alles - aber wenn das variable ist - dann muss man halt den topic erst später aufteilen. Dann machen wir nur einen Ast. Ich überlege mir mal eine Alternative. -
@mickym Ich habe jetzt grad mal den Flow zu ende gebracht. Ich glaube in einem Zweig ist ein Fehler. Denn beim Datensatz 1 kommt nur der Wert be an.
nun vermute ich den Fehler im change im Zweig 1 oder 2, denn die sind identisch und lauten beide auf $1. Oder ist das hier richtig weil es nach dem switch getrennte Zweige sind?
-
@beliar_666
So nun mal eine weitere Version - Sorgen macht mir zwar dieses komische Steuerzeichen - aber schaun wir mal.Nachdem der Import mit den regulären Ausdrücken Probleme macht - hier erst mal der Flow die regulären Ausdrücken nacharbeiten.
In die 1. Change Node folgenden regulären Ausdruck:
(\d)\s(.*)
In die 2. Change Node folgenden regulären Ausdruck:
(.*)=(.*)
Das ist das Ergebnis - aber mit dem Steuerzeichen, weiß ich nicht 100%ig obs klappt.
-
@mickym sagte in Rasp2 serial überwachen, per mqtt an iobroker übertragen.:
Das klappt soweit, bis auf kleine Schönheitsfehler. 1 Werdt kommt Doppelt und die Sensorkennung wird auch mit aufgenommen. Das ist aber jetzt eher zu vernachlässigen.
Und hier erkennt der dann automatisch wenn eine andere Kennung als 1 oder 2 kommt?
Ah, die Werte kamen nicht doppelt. die kamen vorher al be_ und kommen jetzt als be__ und v kommt jetzt als __v aber das ist nicht weiter tragisch.
Die einzelnen Werte müssen eh noch umgerechnet werden und bekommen dann lesbare Datenpunkte
-
@beliar_666 Die Sensorkennung wird mitgenommen - das sehe ich aber nicht als Problem - das die Werte doppelt kommen, kann ich leider nicht nachvollziehen:
Momentan bekommt er alle Sensoren mit einer einstelligen Zahl mit - falls es 2stellige Sensorenbezeihnungen gibt - musst den regulären Ausdruck in der 1. Change Node wie folgt ändern:
(\d+)\s(.*)
Der Topic der Sensoren wird nun aus dem Sensor Datenpunkt selbst gebildet:
In der change NOde setze msg.top siehst Du das der Topic unter dem die Datenpunkte erstellt werden nun
über den Sensorwert gebildet wird:
Wenn Dich der Sensorwert stört kannst ja in der Change Node wo die msg.top gesetzt wird noch den Wert löschen:
-
@mickym
Ah, die Werte kamen nicht doppelt. die kamen vorher al be_ und kommen jetzt als be__ und v kommt jetzt als __v aber das ist nicht weiter tragisch.Warum der bei mir be__ und __v macht und bei Dir nicht? Aber das ist wirklich nicht tragisch.
Die einzelnen Werte müssen eh noch umgerechnet werden und bekommen dann lesbare Datenpunkte
-
@beliar_666 Ich hab Dir das ja zum Löschen noch des Sensorwertes noch mitgeschickt. Das Problem ist das man die Steuerzeichen nicht sieht.
Im Prinzip musst Du auch nicht alles so als Datenpunkte abspeichern. Wie gesagt kannst Du nach der JOIN - Node nur auf die benötigten Eigenschaften zugreifen.
Du kannst ja mal den regulären Ausdruck in der 2. Change Node versuchen - ob der die Unterstriche wegmacht.
.?(\w+).?=(.*)
Du musst halt die Datenpunkte in dem mqtt Adapter löschen. Ich hoffe Du hast kein retain gesetzt - ansonsten musst halt die gesamte Datenbank im mqtt Adapter nochmal löschen.