NEWS
Eingangsmultiplexer?
-
mehrfach, gelöscht
-
@myiobroker sagte in Eingangsmultiplexer?:
Noch was weil ich Deine Frage sehe, dass Du verschiedene Flows verlinken willst. Das Objekt das ich im Flow Kontext gespeichert habe, lässt sich natürlich auch im globalen Kontext speichern und steht damit allen Flows zur Verfügung. Das mal nut zur Vorabinformation.1: Wie bekomme ich in NodeRed die einzelen Flow mit speziellen Punkten zusammen (also z.B. Ausgabe Ringzähler in Flow2 als Eingabe in Flow 4).
Da zu gibt es entsprechende Link-In und Link-Out Nodes.
Also Ausgabe Ringzähler an link-out und link-in Node in Flow 4.
2: Speicher ich mit Export alle Flowebenen ab oder nur die akuelle?
Das liegt bei Dir - es stehen Dir alle Möglichkeiten offen.
Entweder alle Flows, nur den aktuellen Flow oder nur markierte Nodes.
-
doppelt, gelöscht
-
@myiobroker ???
-
@mickym Hallo, die letzten Aktionen mit meinen mehrfachen Antworten habe ich nicht ganz verstanden? sind aber gelöscht
Habe mich mit den unterschiedlichen Variablen und deren Gültigkeit beschäftigt aber bei einer "Einfachen(?)" if Abfrage scheitert es wieder Der Ringzähler ist recht kompliziert geworden, also besser einfach, eine Taste erhöht den Wert von flow.switch und die andere bewirkt ein decremet. Soweit so gut aber if (x >5 ) {....} z.B. wird schon als Fehler deklariert. Das ganze soll sich ja in einem definierten Bereich abspielen. Kann mir nicht vorstellen, das es diese Abfrage so kompliziert ist? Syntax- oder Denkfehler? Inzwischen geht es aber auch ohne Funktion-Node -
@myiobroker Das mit den "link-Nodes" funktioniert auch, aber in Bezug auf die Anzeige gibt es da immer irgendwelche "(Laufzeit-?) Effekte" so das ich das ganze schon auf einen Flow begrenzen möchte. Auch mit diversen delay Anweisungen spinnt die Anzeige hin und wieder-
-
@myiobroker sagte in Eingangsmultiplexer?:
Habe mich mit den unterschiedlichen Variablen und deren Gültigkeit beschäftigt aber bei einer "Einfachen(?)" if Abfrage scheitert es wieder Der Ringzähler ist recht kompliziert geworden, also besser einfach, eine Taste erhöht den Wert von flow.switch und die andere bewirkt ein decremet. Soweit so gut aber if (x >5 ) {....} z.B. wird schon als Fehler deklariert. Das ganze soll sich ja in einem definierten Bereich abspielen. Kann mir nicht vorstellen, das es diese Abfrage so kompliziert ist? Syntax- oder Denkfehler? Inzwischen geht es aber auch ohne Funktion-Node
Das sehe ich nicht was Du machst - bitte Screenshot oder Flow - keine Ahnung - ansonsten If Abfragen - wenn Du nicht programmieren willst - dafür gibts switch Nodes.
-
@mickym Hallo konnte mich mit meinem Projekt nicht wirklich weiter beschäftigen, aber es sieht schon ganz gut aus. Nun scheiter ich an einem wahrscheinlich (?) trivialen Problem. Ich möchte in einem Change Node alle Payloadwerte der "Entertaste" >0 auf 0 setzen. Die negativen Werte (es sind bis jetzt nur Zwei) aber entsprechend ändern (z.B -1 auf -3 und -2 auf -4, das sind bei mir die "Steuerdialoge" für Reset und ShutDown). Klappt prima mit dem Change-Dialog im Change-Node und bei zwei bis drei "Werten" wohl auch so "sauber" machbar
Die positiven Werte stehen für jeweils eine "Seite" in einer 2 x 16 Matrix mit diversen Informationen (Spannung, Strom, Leistung etc.) Hier will ich mit der "Entertaste" erstmal einfach nur auf die Seite "0" zurückspringen. Da bietet sich offenbar die RegEx Funktion im Change-Dialog des ChangeNode an aber es funktioniert einfach nicht (z.B. /^([1-9][0-9]*)$/) oder
oder es gibt eine Fehlermeldung mit "$if(payload > 0, 0, payload)" im Set-Mode und jsonata"-Modus.
Für >10 positive Payloadwerte wäre es doch nicht Sinnvoll für jede Zahl die gleiche Abfrage mit "Set" zu machen
Ist es nur eine Syntaxfrage oder liege ich hier mal wieder in einer "Denkschleife"?
Die Codevorschläge habe ich übrigens aus Chat GPT, da sieht es meistens sehr plausibel aus -
@myiobroker In der Regel machst Du das nicht mit einer Change Node alleine, sondern mit einer Switch Node und mehreren Change Nodes. Das entlastet Dich auf jeden Fall und reduziert die Komplexität in den Change Nodes - da bereits Nachrichten im Vorfeld aussortiert wurden. Sprich Du setzt die payload aller Nachrichten deren payload >= 0 ist auf 0 und bei negativen payload verringerst Du diese um -2.
- Empfohlenes Vorgehen:
Durch das Setzen nach der ersten Regelübereinstimmung stoppen kann man das noch feiner granulieren und spezifische Fälle weiter vorne abarbeiten. So kannst Du in der Switch Node bei einer positiven Zahl eine andere Vorgehensweise wählen und trotzdem falls es eine andere positive Zahl ist noch auf 0 setzen.
Anhand des Screenshots siehst Du nun - dass alle positiven Werten an den Ausgang 1 gesendet werden, alle negativen Werte an den Ausgang 2. Nun können wir also mit 2 Change Nodes einfach die payload auf 0 bzw. auf payload - 2 setzen.
Ob Du das Ergebnis dann wieder zusammenfasst, wie in meinem Beispielflow - das ist eine andere Geschichte,
Ein weiterer Vorteil der Switch Node für Bedinungen sind auch dass man für Zahlen Bereiche definieren kann:
Also hier .- schicke alle Nachrichten zwischen 0 und 5 an den Ausgang 1 usw.
- RegEx - mit Change Node
Das ist schon vom Ansatz aus 2 Gründen falsch:
- RegEx funktioniert nur, wenn man das Ganze als Strings behandelt, man müsste also erst in Strings, dann wieder in Zahlen umwandeln.
- Ein RegEx matched oder matched nicht und dann kannst Du nur ein fixen Wert setzen, du willst aber bei negativen Werten 2 abziehen.
Wenn Du aber mit RegEx arbeiten willst (also in String umwandelst), weil Du dann zum Beispiel bestimmte Steuercodes anders behandelt willst, dann kannst Du das wieder in Kombination mit einer Switch Node machen. Der Vorteil hier ist, dass man die payload nur zur Analyse in einen String umwandelt.
- JSONATA funktioniert - weiß aber nicht woher Du diese Syntax hast - hier musst Du aber aufpassen, dass Du nicht wieder ins codieren kommst und bei mehrfachen Bedingungen wird das sehr unübersichtlich. Eine $if Funktion kenne ich in JSONATA nicht. Die einzige Möglichkeite Bedingungen zu formulieren ist den Bedingungsoperator ? zu nutzen.
Also:
payload >= 0 ? 0 : payload - 2
Hier mal alle Beispiele zum Probieren:
Ein letzte Möglichkeit mit JSONATA und fixen Werten kann man mit Übersetzungsobjekten erreichen.
In diesem Fall definiere ich also jede Zahl als Schlüssel eines Objektes (ich hab es hier mal translate genannt)- 1.Regel. Die payload wird nun über einen Konvertierung zum String und durchsucht das Objekt nachdem entsprechenden Key. -2.Regel
Die 3.Regel kann man verwenden, um einen Defaultwert zu setzen, wenn ein Wert nicht in der Tabelle enthalten ist. -
@mickym Hallo auch diesmal vielen Dank für die schnelle Antwort Das begrenzen der Payload auf Werte <=0 erscheint erst mal ein triviales "Problem" zu sein und ist es offenbar auch, wenn man den Lösungsweg weis Der Change-Node bietet ja einige Wege an, so dass ich das mit dem Switch-Node gar nicht erst in Erwägung gezogen habe und das man die Ausgänge dann auch wieder einfach vereinen kann sollte man natürlich auch nicht vergessen! Wieder was gelernt um es sich nicht unnötig schwer zu machen
Das mit den RegEx hat mich schon in anderen Anwendungen fasziniert, wie man mit scheinbar kryptischen Zeichenfolgen komplexe Abfragen machen kann, aber das es eben auch Strings sein müssen muss man halt berücksichtigen, nun weiß ich es erst mal wieder
Als Lösung ist aber erst mal die JSONATA Variante (payload >=0 ? 0 : payload-2) genau das geworden was ich gesucht habe Ein Change-Node mit nur einer Regel Es sind allerdings zwei, ich übernehme zuerst natürlich den aktuellen Stand aus dem Wert von flow.switch (Variable für jeweils aktuelle Seite) für msg.payload.
Solange ich bei den "positiven" Seiten keine "richtige" Anwendung für "Enter" habe (Es soll ja "nur" eine Anzeige der verschiedenen Messwerte sein) reicht es mir auf Seite 0 zu springen um ggf. einen definierten Anzeigezustand zu haben.
Bei den "negativen" Seiten will ich gezielt "Runterfahren" bzw. "Neustarten" da der RasbPi das ja nicht wirklich hardwaremäßig kann und die SD-Karte nicht unbedingt im falschen Moment "gestreßt" werden sollte, muss man ja nicht im Experimentierstadium noch forcieren!
Seite -1 und -2 fragen ab ob ich es wirklich möchte (?) und mit "Enter" springe ich zwei Seiten runter wo diese Funktionen an den Ausgängen eines Switch-Node entsprechend verankert sind. Denke das es eine nützliche Funktion ist so wie auch das "Rücksetzen" des Nodes "Pi-LCD" bei "jeder" (?) Gelegenheit (msg.payload => clr:). Es gibt offenbar "Probleme" mit der Anzeige wenn die Syntax bei der Ansteuerung nicht eingehalten wird, was beim "Experimentieren" ja allemal vorkommen kann!
Deine anderen Tipps werde ich mir noch mal anschauen und sicher auch in das Projekt einfließen lassen -
@mickym Um hier im Forum nicht unnötig Fragen zu stellen die vielleicht schon gestellt wurden habe ich mit Chat GPT versucht einiges einfach mal so zu erfragen ohne stundenlanges Studium der Unterlagen. Zum Teil bekommt man recht detailierte Antworten wenn man die Frage entsprechend konkret stellt aber eben auch Antworten die scheinbar nicht viel mit der Frage zu tun haben ???
Eine Anfrage zu den RegEx z.B. war auch schnell parat aber das es ein String sein sollte eben nicht und auch zu einigen anderen Codeschnipseln fehlte manchmal der Hintergrund, so dass ich im Grunde nicht wirklich weitergekommen bin
Man sollte also immer noch ein entsprechendes Grundwissen haben um die Ergebnisse zu interpretieren! Aber das war auch schon früher so, als manche meinten mit einem Taschenrechner alles lösen zu könne ohne die Grundregeln der Mathematik zu verstehen -
@myiobroker Wie gesagt wenn Du RegEx mal akzeptiert, dass hier Strings analysiert werden - kann ich Dir diese Seite empfehlen, mit der man testen kann und auch eine Erklärung findet.
Jedenfalls ist das unter meinen Lesezeichen: https://regex101.com/
-
@mickym Das ist ein guter Tipp aber ich befürchte das ähnlich ist wie seinerzeit beim Studium. Das "Taschenbuch der Mathematik" von Bronstein -Semendjajew war das Standardwerk für alle unsere "Probleme" mit Integralen usw. aber wenn man es nicht "täglich" benutzt findet man gar nichts (?) zumindest muss man lange suchen
Fürchte auch fast das dieses /mein Projekt (SmartPi als Energiezähler) auch in den Herbst verrschoben werden wird/muss, der Rasenmähroboter will auch wissen wo er gerade mäht, mähen soll und das mit dem GPS ist genauso spannend wie der aktuelle Stromverbrauch. Zum Glück scheint der Rasenmäher ja nicht zu den "Stromfressern" zu gehöhren... aber weiß man das??? Also doch erst mal das SmartPi-PowerProjekt verwirklichen? ein paar Wochen bis zur Saison bleiben ja noch