NEWS
Eingangsmultiplexer?
-
gelöscht - halte nichts davon
-
@myiobroker sagte in Eingangsmultiplexer?:
Im Moment zählt mein Ringzähler z.B. immer nur von 2 bis 5 lt. Anzeige obwohl der Debug-Node 1 bis 4 vorgibt Da spielen wohl Laufzeiteffekte eine Rolle (?) aber konstante Fehler kann man ja relativ leicht korrigieren
Das mit dem Ringzähler kannst Du ggf. einfach mit einer function Node selbst beheben - dafür brauchst Du den Zähler nicht.
Falls Du diese Nodes: https://flows.nodered.org/node/node-red-node-pi-gpiod/in/czQplxxBMPR5 verwendest dann schreib mal im NodeRed Forum. Die beiden die diese Node pflegen sind quasi auch die Urväter, die das ganze System weiter pflegen. Du musst halt schauen, ob es sich noch lohnt.
Wenn Du ein uraltes OS auf Deinem SmartPIV1 hast - dann würde ich es lassen - ansonsten musst wahrscheinlich auch das OS updaten, was mit Risiken verbunden ist.
-
@mickym said in Eingangsmultiplexer?:
@myiobroker Du kannst meinen Flow ja mal importieren und dann einfach mal bisschen rumprobieren - und wenn Du Fragen hast, melde Dich einfach.
Wow, was für mich erst mal nur wie ein Beispiel ausgesehen hat , funktionierte tatsächlich Ich konnte deinen Flow nicht direkt importieren, dazu sind die Versionen vom SmartPi V1 und dem aktuellen Stand von NodeRed wohl zu verschieden aber mit NodeRed vom ioBroker klappte es und ich konnte die einzelnen Nodes mit gewissen Anpassungen und Ergänzungen somit auch auf dem SmartPi V1 zum laufen bringen Im Grunde das was ich wollte aber es scheitert wahrscheinlich daran, das mir einige Syntax-Vorgaben nicht geläufig sind In der ersten Versionen entsprechen die Taster die ich habe (es sind 3) den Phasen aber es gelingt mir bisher nicht, die Phase als solches im Zusammenhang mit Strom und Spannung auch zur Anzeige zu bringen. Setze da wahrscheinlich falsche Klammern oder so, entweder es kommt nur ein "Leerzeichen" raus oder aber die Anzeige vom "LCD-Node" bekommt falsche oder zu viele "Zeichen" und das ganze entwickelt ein "Eigenleben", welches man kaum Stoppen kann
Grundsätzlich habe ich die Nodes "Restart" und "Shutdown" zusammen mit CLS (Anzeige Löschen und in gewisser Weise auch zu reseten) in den NodeRed-Flow mit eingebunden um den SmartPi nicht bei jeder "Fehlfunktion" abrupt vom Strom trennen zu müssen. Hilft womöglich nicht viel, schadet aber wahrscheinlich auch wenig
Werde mich wohl erst mal mit den Syntaxvorgaben beschäftigen müssen. Der "Beispielcode" aus deinem Flow (endlich versteht mich mal jemand ) ist jedenfalls sehr nützlich um das Prinzip des Flow und dem Extrahieren der gewünschen msg: zu verstehen Wenn man aber den ganzen Abend nach den richtigen "Klammern" sucht um einen Wert (wie ermittel ich die Phase?) zu bekommen kann das schon entmutigen, wenn man das Gefühl hat irgendwas nicht zu verstehen
Auf jeden Fall Danke für die "Vorlesung" zu diesem Thema, ich bleibe drann@wal said in Eingangsmultiplexer?:
@myiobroker,
falls du dich wie oben beschrieben mit Tasmota auskennst, dann stelle über Node-Red die Daten vom SmartPi ioBroker zu Verfügung und mache den Rest z.B. über Blockly. Das würde den SmartPi entlasten und es gäbe eine Videoserie von einem User für die Ansteuerung eines LCD zum lernen.Die LCD-Anzeige habe ich bewusst nicht an I²C angeschlossen, auch wenn es erst mal naheliegend ist. Zum einen sind genug Pins auf dem GPIO frei und zum anderen weiß ich nicht wirklich was auf dem "Bus" passiert, wenn die ersten 16 Pins eben "belegt" sind. Hinzu kommt, dass hier auch Pegelwandler erforderlich sind. Die Problematik 3,3V und 5V wird in manchen "Beispielen" gern ignoriert weil es ja meist doch nicht gleich kaputt geht und man sollte schon darauf achten sich an die Spezifikationen zu halten!!!
Die Auswertung oder gar Steuerung der Anzeige auf ein zweites System zu verlagern halte ich nicht für sinnvoll. Natürlich möchte ich die Daten im ioBroker haben um damit weiter zu arbeiten aber der SmartPi mit seiner jetzigen Konfiguration soll einafch nur die Daten ermitteln, anzeigen und weiterleiten. Die Anzeige ist nur mal so für mich, wenn ich vor dem Schaltschrank stehe und nach dem rechten sehen möchte. Allenfalls für die Diskussion mit dem "Fachmann" von der Heizungsfirma um zu fragen warum die Anlage mal so und mal soviel Energie benötigt, mal taktet und mal eben nicht?Das Thema Datenübertargung von NodeRed auf den SmartPi (teilweise ja schon gelöst ) und dem ioBroker (direkt oder eben auch über Nodered wird dies offenbar die nächste "Baustelle" sein (?) Ich habe das bisher nur über den SONOff-Adaper geschafft, wenn ich spezielle Topic's benutze. Im Moment sieht es so für mich aus, daß ich den gasamten Datenstrom zusammenfassen muss um ihn anschließend zu analysieren aber auch auf plausiebiletät zu testen
-
@myiobroker ah Mist - ja habe nicht daran gedacht, dass die junctions erst ab Version 3 verfügbar sind, aber sonst müsste es eigentlich gehen. Alles andere sind eigentlich Standardnodes, die es auch in den NodeRed Versionen davor gab.
Ja kann das ja auch direkt miteinander verbinden. Nun musst halt ggf. Zeigen was für Daten rauskommen und wie die Zielausgabe aussehen soll. Bis auf die Raspberry Nodeskann ich den Flow ja wieder importieren. Ich muss halt mit inject nodes Deinen Dateninput nachvollziehen. Wie gesagt für weitere Hilfe müsstest du halt sagen, wie die Daten aussehen, die rein kommen und wie die Ausgabe aussehen muss.. ggf. muss man halt auch bestimmte Daten wegfilternDie Daten in den iobroker zu bringen ist nicht schwer. Entweder du machst es über mqtt, wobei ich aber wenn nichts vom Sonoff Adapter halte, aber du könntest die beiden Node-Red Instanzen auch direkt miteinander über http sprechen lassen.
-
@mickym Hallo, bin ein gutes Stück weitergekommen Das mit den "junctions" und das mit den "Gruppenrand?" war das kleinste Problem. Im NodeRed vom ioBroker ließ es sich ja einlesen und somit relativ leicht auf die Node vom SmartPi übertragen, da die Grundfunktionen ja gleichgeblieben sind. Im Grunde funktionierte es auch so wie ich es mir vorgestellt habe. Das mit der Phase konnte ich auch lösen, es bietet sich zwar an, dass man Phase 1 mit Schalterstellung 1 (etc.) verbindet aber muss ja auch funktionieren wenn man mehr als 3 Schalterstellungen hat. Hinzu kommt, dass man nicht nur Spannung(x), Strom(x) und Power(x) anzeigen möchte sondern z.B. auch Power_Total (gibt der SmartPi auch als "Injektnode" aus) und dann kommt noch eine weitere wichtige Funktion hinzu:
Da ich noch keinen SmartZähler habe will ich die Gesamtleistung aus der Umdrehung der Stromzählerscheibe ermitteln. Kein Hexenwerk mittels Reflexlichtschranke und der Angabe das bei (mir) 75 Umdrehungen eine 1KWh "verbraucht" ist, somit lässt sich über die Zeit zwischen dem Markierungsdurchlauf der Scheibe die mehr oder weniger momentane "Power" ableiten. Mit dem angedeuteten Problem, dass bei einem "plötzlichen" Leistungsrückgang durch abschalten massiver "Verbraucher" der letzte Wert nicht wirklich angeben werden kann, was in der "Langzeitstatistik" aber keine Rolle spielt, wäre halt nur ein nur eine falsche Anzeige für den "Moment" danach Aber das kann man relativ leicht lösen wenn man die "Anzeige" entsprechend flagt und ggf. approximiert.
Diese "Power-Anzeige-Werte" haben dann wenig mit einzelnen Phasen zu tun, es muss also auch eine neue Anzeigemaske her und somit ergibt sich, dass die "Displayausgabe" auch für die fixen Elemente (Masseinheiten [V, A, W etc.], Beschreibung [Spannung.Phase, Power_Total etc.] variabel sein sollte, da wenig Platz ( 2 x 16 Zeichen) für feste Positionen ist.
Denke ich kann das mit einer "fixen" Matrix lösen, die ich am Anfang ebenfalls initialsiere und je nach Schalterstellung abrufe und in die Display Ausgabe einfüge. Auf der anderen Seite werden ja nur die Werte angezeigt, die sich aus der Schalterstellung ergeben. Das Überschreiben der Anzeige mit neuen Werten aus einem anderen Zusammenhang lässt die Anzeige wahrscheinlich nicht ständig springen wenn man es richtig macht und letztendlich sind es ja auch nicht sooo viele verschiedene Anzeigeebenen sinnvoll (Es ist eine Anzeige im Schaltschrank, die man nicht täglich betrachtet(?) )
Die Verwendung von "mustache templates" sollte das relativ einfach ermöglichen(?) Die Idee dahinter ist mir schon klar aber den Begriff als solchen kannte ich bisher nicht, also wieder was gelernt
Das Übetragen der Daten an den ioBroker war bis jetzt noch nicht wirklich mein erstes Thema auch wenn es letztendlich natürlich grundlegend ist und ich genau das will! Der Sonoff-Adapter bot sich an, weil da mit den entsprechenden Topics auch was zu sehen war, aber eine andere "saubere" Lösung wäre mir natürlich lieber. Der SmartPi bietet ja auch mehrere Varianten an und diese funktionieren offenbar auch nach einen Update auf einen aktuellen Stand (?) Es gibt ja auch die Version V2 und V3 die aktuell sind und wahrscheinlich immer noch den gleichen Chip auf dem Analyseboard haben(???) also das, worauf die Datenerfassung beruht (?) Wenn dann auf meinem Board (V1) die "SmartPi-Injektnodes" nicht mer funktionieren, die Datenübertragung über andere Kanäle aber schon könnte man das ganze soweit treiben, dass man die Daten zurück auf den SmartPi zurück überträgt um eine Anzeige mit NodeRed anzusteuern die keiner anschaut weil sie ja im Schaltschrank ist aber ganau das macht ja den Reiz eines Hobbies aus
Nicht zuletzt könnte ich mir natürlich auch vorstellen im Schaltscharnk einen preiswerten 7" Monitor mit Tochfunktion zu instalieren / anzuschließen. Dann könnte man auch auf den ioBroker zugreifen und dem Heizungstechniker vor Ort zeigen was er auf seinem Laptop vielleicht sogar nicht so einfach sieht Der Raspi hat ja auch ein "Betriebssystem" mit Internetbrowser und all seinen Möglichkeiten
Erinnere mich noch gerne an die verdutzten Blicke eines Ausbilders bei einer Techniker-Schulung für ein medizinisches Messgerät das noch unter DOS lief und ich da auf dem Bildschirm plötzlich DonkeyKong gespielt habe -
@myiobroker Nochmal Dreh und Angel-punkt wo Du alle Werte sammelst ist das Objekt, das im Kontext steht. Bislang ist es so
{ "Strom" : [0,0,0], "Power" : [0,0,0], "Spannung" : [0,0,0] }
Das mit der Phase konnte ich auch lösen, es bietet sich zwar an, dass man Phase 1 mit Schalterstellung 1 (etc.) verbindet aber muss ja auch funktionieren wenn man mehr als 3 Schalterstellungen hat.
Nun wenn das mehr Schalterstellungen und Werte sind, dann werden halt einfach die Arrays erweitert. Wenn Du also 5 eingehende Tripels (Spannung, Strom und Power) hast - dann erweiterst Du einfach das Array:
{ "Strom" : [0,0,0,0,0], "Power" : [0,0,0,0,0], "Spannung" : [0,0,0,0,0] }
für andere Werte die unhängig von Schalterstellungen sind, dann erweiterst Du das Objekt halt entspreched und schreibst dort entweder direkt die Werte rein oder berechnet. Also Power_Total ist halt dann eine eigene Eigenschaft die Du beschreibst und diese werden entweder mit der Schalterstellung oder unabhängig abgefragt.
{ "Strom" : [0,0,0,0,0], "Power" : [0,0,0,0,0], "Spannung" : [0,0,0,0,0], "Power_Total": 0 }
Der Vorteil dieser Vorgehensweise ist , dass Du auch die anderen Daten mit ausgeben kannst oder eigens triggern kann. Der Flow über die Speicherung im Kontext entkoppelt die Zeitpunkte des Eingangs und des Ausgangs vollständig. Ich hab es zwar hier kombiniert, damit du immer sofort die aktualisierten Werte hast, das ist aber kein MUSS:
Generell sollte man halt solche Berechnungen mit Power etc nicht im Flow berechnen, sondern über Daten über Datenbanken speichern und dann Auswerten. Hier käme dann schon die iobroker Instanz in Frage und die Datenübertragung funktioniert ja grundsätzlich in beide Richtung.
Diese "Power-Anzeige-Werte" haben dann wenig mit einzelnen Phasen zu tun, es muss also auch eine neue Anzeigemaske her und somit ergibt sich, dass die "Displayausgabe" auch für die fixen Elemente (Masseinheiten [V, A, W etc.], Beschreibung [Spannung.Phase, Power_Total etc.] variabel sein sollte, da wenig Platz ( 2 x 16 Zeichen) für feste Positionen ist.
Vielleicht hilft Dir meine kleine Funktion Node - die ggf. Dein Begrenzung auf 2 x 16 Zeichen etwas entschärfen könnte. Funktioniert aber nur - wenn Du die Zeilen getrennt ansteuern kannst. Mit Zeilenumbrüchen kann die Node nicht umgehen.
https://forum.iobroker.net/topic/62610/laufschrift-in-einem-nodered-flow-erzeugenDer Sonoff-Adapter bot sich an, weil da mit den entsprechenden Topics auch was zu sehen war, aber eine andere "saubere" Lösung wäre mir natürlich lieber. Der SmartPi bietet ja auch mehrere Varianten an und diese funktionieren offenbar auch
Wie gesagt der Adapter wird - warum auch immer als Mqtt- Broker missbraucht - da würde ich dann lieber entweder den mqtt-Adapter verwenden oder besser ganz vom iobroker unabhängig über einen mosquitto Broker arbeiten. Wenn die Datenspeicherung eh doch die Node-Red Instanz im iobroker aufbereitet wird, kannst Du einfach in einer 1:1 kommunikation die Daten über Http vom SmartPi NodeRed zum iobroker NodeRed schicken. NodeRed ist quasi ein verfügbarer Webserver an den Du einfach Daten schicken kannst. Sprich Du schickst die an die iobroker NOde-Red instanz - machst mit den Daten was Du willst und schreibst es in iobroker-Datenpunkte, um diese anzuzeigen oder über einen der Datenbank-Adapter loggen zu lassen, um dann Summen oder sonstige Auswertungen zu machen. Auf diese kann man auch direkt wieder von der SmartPi Seite zugreifen.
Beispielsweise Du schickst die Daten via Node-Red Smart-Pi über HTTP an Node-Red iobroker. Du kannst Du ggf. die Daten noch modifizieren und speicherst sie dann in einem Datenpunkt. Via SQL oder Influx-DB Adapter lässt Du die Werte in eine Datenbank schreiben. Dann kann man versuchen diese Datenbank-Nodes direkt auf der SmartPI nehmen und die Datenbank direkt zur Anzeige anzuzapfen - ansonsten halt über die iobroker Instanz.
-
@mickym Mit unseren Vorstellungen zur Erweiterung liegen wir ja gar nicht so weit auseinader Da die Anzeigeparameter für diesen Fall ja wahrscheinlich recht beschränkt sind, macht es Sinn diese in einer "Matrix" gewissermaßen "Vorzubereiten" Soviel habe ich aus deinen Erklärungen schon gelernt
Den Parameter Power-Total kann man auch aus dem speziellen SmartPi Inject-Node ermitteln, die anderen Werte die offenbar noch zur Verfügung stehen sind (Netz-) Frequenz(x) und Phasenwinkel(x), allerdings eben nicht aus einem Inject-Node. Denke aber das diese Parameter für meine Anwendung im "(ersten-) Schaltschtank (Überblick)" auch nicht notwendig sind.
Power-Total kann man natürlich auch berechnen aber das würde ich dann auch eher aus einer "Datenbank" für weitere Auswertungen benutzen, für den "(ersten-) Schaltschtank (Überblick)" aber so übernehmen, wenn er schon da ist und vorher natürlich auch prüfen wie plausiebel das ganze ist, wenn man mehrere Ergebnise hat!
Ich denke ich komme so erst mal auf etwa 12 bis 16 "Anzeigen(Seiten)") (3 x Spannung, Strom, Power je Phase, 3 x Spannung(x), 3x Strom(x), 3x Power(x), Power Total Heizung, Power-Total Zähler und Berechnung daraus, sowie ggf., auch noch Power-BalkonSolar (exteren Quelle) und ggf. noch ein paar stastische Werte zur Info die ich zyklisch aus einen "Touchup" und "Toch down" Sensorswitch ermitteln kann.
Ein "Drehgeber/switch" mit Taster wäre hier naheliegend (gibt auch einen Node dazu!) aber ich habe bewußt auf "kontaktlose"Touchsensoren gesetzt. Diese funktionieren auch hinter "dünnen" Plastikabdeckungen und gerade wenn es um hohe Spannungen im Schaltschrank geht möchte man ein gewisses "Sicherheitsgefühl" haben wenn man so was bedient. Natürlich setzt das auch vorraus, dass das ganze Modul "Sicher" ist aber denke schon, dass ich Schaltungstechnisch alles getan habe (z.B. Mindestabstand zwischen den Leitern, immerhin >400V!) um diese Anforderungen zu erfüllen. Beim SmartPi muss ich mich allerdings darauf verlassen das es dort auch so ist, aber nach meiner Ansicht sind auch hier die diversen Vorgaben erfüllt (Abstand zwischen den Leitern und natürlich spannungsfeste Bauelemente, das ganze in SMD macht natürlich erst mal wenig Vertrauen aber ich habe auf jeden Fall in einem ExtraModul wie empfohlen Sicherungen vorgesehen)
Deine Lauftextanzeige hat mich natürlich neugierig gemacht! Sie funktioniert auch aber ich denke für mein Projekt bring es nichts. Spannung, Strom und Power mit mehr als drei Ziffern (Komma oder nicht) anzugeben ist eigentlich sinnfrei weil das unter 1% Messgenauigkeit läge die ich ohnmehin anzweifel, die restlichen Stellen hinter dem Komma könnte man auch würfeln und das sollte in eine Zeile mit 16 Stellen incl. Maßeinheit für drei Parameter passen. Könnte mir aber Vorstellen gewisse Statusmeldungen in meinem Smarthome damit zu posten ("Keine Internetverbindung", "eine Netz-Phase ausgefallen", "Sensor xyz meldet sich nicht seit drei Stunden" etc.) Alles Dinge die die Welt nicht verändert oder gar besser macht, aber man wissen sollte und wer schaut schon ständig auf sein Smartphone wenn man eine Anzeige im Schaltschrank hat (meiner ist nicht im Keller!)
Wenn wir schon so schön im Dialog sind;
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).
2: Speicher ich mit Export alle Flowebenen ab oder nur die akuelle?
Das Thema Sonoff-Adapter passt vielleicht nicht hierher bzw. gibt es schon(?) aber im Moment scheint es für mich der beste Adaper zu sein um all die "Tasmotafähigen" Sensoren relativ problemlos einzubinden und somit (denke ich) ca. 80% aller Sernsorprobleme im "Smarthome" abzudecken(?)
Fazit: Werde erst mal "alle!" interresanten Messwerte vom SmartPi auf die einzelen Anzeigeebenen bringen (bis jetzt funktioniert dein Konzept so wie ich es mir vorstelle ) Werde dann prüfen wie ich die Daten in den ioBroker bringe (NodeRed MQTT) und dann lass uns weiterdiskutieren
Es war für mich auf jeden Fall eine große Hilfe und hat ich habe viel dazu gelernt , Danke! -
doppelt, gelöscht
-
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/