NEWS
Node-Red Modbus mehrere Slave ID´s abfragen
-
@malaus Nein das sieht nicht andersrum aus. Du musst das Lesen wie es geschrieben ist.
Setze msg.topic auf msg.payload.name. Du willst das topic doch setzen - das vorher gar nicht da war.
Bei mir kommt wenn du die Change Node entsprechend änderst, der Name aus dem ursprünglichen Objekt als payload an:
-
@mickym achso habe das anders herum verstanden.
Aber jetzt geht es! und mit dem Switch funktioniert auch.Danke!
-
Wie sieht der switch aus? ggf. kannst dann auch eine filter Node nehmen.
-
-
@malaus Na ja - ich verstehe, weil Du sagst das ist das letzte Element in Deinem array. Dann finde ich es intuitiver und besser - wirklich die id als topic zu nehmen und hab mal eine filter Node verwendet. Ich weiss nicht, ob aus dem unteren Teil einfach die Eingangsobjekte durchgereicht werden. Aber dann spart man sich das topic einfach.
Falls also am unteren Ausgang der GETTER Node einfach das Eingangsobjekt durchkommt:
Für mich wäre dann das am saubersten:Dann kann man nämlich auch mal eine andere Reihenfolge beim createArray erstellen verwenden ohne das es Folgen haben würde.
-
Bei debug 19 erhalte ich keine Werte. Der Durchlauf wird nur mit einer ID gemacht.
Den Filter verstehe ich nicht so ganz:
Bei Read Modbus hast du das Topic rausgenommen, ist das so gewollt? Ändert aber auch nichts, wenn ich es wieder einsetze.
-
@malaus Ja ich weiss - ich war der Meinung . dass unten einfach die Eingangsobjekte rauskommen - deswegen habe ich das topic auch wieder raus genommen. Kannst Du mal die Nachrichten, die aus debug 18 rauskommen posten und ist da die ID drin? Ich kann halt immer nur Vermutungen anstellen, was die GETTER Node ausspukt.
Am Besten das ganze Nachrichtenobjekt in debug 18 ausgeben lassen und hier in CodeTags einbetten.
-
Die Getter Node spuckt mir jeden Wert einzeln aus.
-
Nein ok - ich habe gerade einen Denkfehler gemacht - es wird ja nun bei jedem 1. Element geändert - sorry mein Fehler. Ich werde was einbauen, dass man das letzte Element automatisch erkennt. Sorry - einen Augenblick!!!
Noch eine Frage ich sehe gerade die GETTER node - und deshalb auch der Fehler die queued je ID.Kannst Du mal schauen, ob das letzte Element aus debug 18 queuelength 0 hat?
-
@mickym das letzte hat die 20
-
Ok danke.
- Das heißt die queuelänge baut sich auf und wird nur intern abgearbeitet
Die msg.parts Eigenschaft scheint nicht durch zu kommen, sondern nur das topic - dann müssen wir ggf. doch das topic nutzen aber nicht anhand des Namens sondern dann würde ich wirklich nach der msg.parts Eigenschaft das topic setzen.
das heißt wir wissen ja wieviele Elemente kommen und setzten da topic entsprechend.
-
@mickym
das erste:
das letzte:
-
@malaus Ok wenn das topic das Einzige war was durchkommt (das msg.parts Objekt wird leider durch die GETTER Node nicht durchgereicht oder ist das enthalten?) , dann nehmen wir im Prinzip deine Lösung, setzen das topic aber nicht einen bestimmten Namen in dem array, sondern lassen einfach runterzählen.
Das sollte dann aber auch tun.
Ist also im Prinzip dein Flow mit dem switch als trigger nur das ich im topic nun die Anzahl der noch zu erwartenden Elemente durchreiche:
Hier konntest Du ja auch nach dem topic filtern: https://forum.iobroker.net/post/947167 - also sollte es jetzt auch gehen.
Wie gesagt Deine Lösung https://forum.iobroker.net/post/947177 funktioniert ja auch - aber mich würde halt stören, dass ich als Marker für das array Ende einen festen Namen im Array verwenden muss.
-
@mickym ich musste die zahlen um eins erhöhen, weil der die null nicht wollte aber jetzt funktioniert es.
Die letzte Zahl ist also die 1.Ich habe den Trigger ID´s nochmal angepasst, damit am Ende es automatisch wieder von vorne anfängt.
Ansonsten funktioniert es jetzt.
Danke! -
@malaus Ich habs zwar nicht verstanden, warum die 0 nicht funktioniert - aber wenn es jetzt funktioniert bin ich erst mal raus. Ich denke Du hast das Prinzip ja verstanden. Vielleicht setzt die GETTER Node ein eigenes topic wenn keines gesetzt war und interpretiert deshalb die 0 als falsch. Das kann natürlich sein und Du hast Dir ja dann geholfen. Wie gesagt, ich habe halt keine getter Nodes und tapse deshalb bissi im Dunkeln.
-
@mickym mir ist aufgefallen, wenn das ganze mal z.B. durch einen Neustart oä gestoppt wird, nicht von alleine weiter macht. Gibt es bei NodeRed sowas, dass bestimmte Sachen gestartet werden, wenn die Instanz startet?
Ebenfalls habe ich das Gefühl, dass das ganze durch Backitup unterbrochen wird und danach nicht wieder anläuft.Oder ist sinnvoller eine Art Überwachung, wenn nach x Minuten keine neue Variable eingelesen wird, mache Neustart.
Hast du Erfahrung mit sowas? Bzw. hattest du so einen ähnlichen Fall schon mal?
-
@malaus
Also einfach Deine Inject Node aufmachen - mehrere IDs.Anhaken, dass einmal nach x Sekunden getriggert wird. Dieses X Sekunden beziehen sich auf den Start von Node-Red oder in dem Fall auf die Adapterinstanz.
Anasonsten kann natürlich alles andere auch triggern. Aber von irgendwas muss ein Flow ja angestossen werden, Hardware, Zeit,manuell oder eben einmal nach dem Start.
-
@malaus sagte in Node-Red Modbus mehrere Slave ID´s abfragen:
Ebenfalls habe ich das Gefühl, dass das ganze durch Backitup unterbrochen wird und danach nicht wieder anläuft.
Kann ich mir höchstens vorstellen wenn Dein Hardware durch das Backup überfordert wird und zuviel CPU verschlingt. Dann bleiben halt für die anderen Adapter nicht mehr soviel über. Ich bin ja auch grundsätzlich kein Freund - von solchen Pollmechanismen - also zyklisch die Hardware abzufragen - aber das ist eine andere Geschichte. Ich finde es besser immer die Hardware triggern zu lassen.
Das sind aber prinzipielle Fragen - wie man solche Flows aufbaut. Ich hätte wesentlich eher die modbus reads genommen und die Hardware triggern lassen - also zyklisch abzufragen. In der Beschreibung zu der Node sieht man auch http trigger - die also auch nicht zyklisch, sondern von der Hardware initiiert das Auslesen der Getter-Nodes initiiieren.
Lange Rede kurzer Sinn - Du musst halt schauen, ob Deine Hardware durch das Backup nicht in die Knie gezwingen wird.
-
@mickym danke für die schnelle Rückmeldung.
Ich habe das mal so wie oben umgesetzt.
Zusätzlich habe ich das hier mal von 128 auf 512 erhöht: -
@malaus sagte in Node-Red Modbus mehrere Slave ID´s abfragen:
@mickym danke für die schnelle Rückmeldung.
Ich habe das mal so wie oben umgesetzt.
Zusätzlich habe ich das hier mal von 128 auf 512 erhöht:Ja das macht einiges aus - wenn man NodeRed zuwenig Speicher zur Verfügung stellt. Ich hab 2 MB genommen - das heißt ja nicht, dass die sofort aufgebraucht werden.