NEWS
Laufschrift in einem NodeRed Flow erzeugen
-
Da ich von einem User hier an Board gefragt worden bin, ob man in NodeRed eine Laufschrift erzeugen kann und ich vergeblich nach einer bereits fertigen Node gesucht habe, habe ich dieses Mal selbst ein function Node geschrieben.
Hintergrund ist wohl, dass man bei den KNX-Tastern auf 14 Zeichen zur Anzeige von Text. Gibt auch bereits einen Flow zu dem Thema: https://knx-user-forum.de/forum/supportforen/proserv/1470641-14-byte-text-von-node-red-auf-den-bus
Das kam mir aber sehr komplex vor.Für die Möglichkeiten des Scroll-Textes habe ich mich wie in diesem Video beschrieben an diese Gira Blöcke angelehnt.
Hier dann als Demo im NodeRed Dashboard da ich ja keinen KNX Taster habe:
Mode Zirkulierend:
Dabei konnte ich mal wieder meine Javascript Skills testen - aber die sind natürlich laienhaft im Vergleich zu den Profis hier.
Interessant ist, wie man in function Nodes (ich fand das nicht dokumentiert) einen Timer erstellen kann, der auch bei erneutem Aufruf der Node ansprechbar bleibt. Das geht anscheinend in dem man die Variable nicht normal im Kontext abspeichert sondern quasi als Eigenschaft des Kontextes. Das wusste ich noch nicht. Man erstellt deshalb auch keine Variable sondern erstellt es quasi implizit im Kontext:
context.timer; /* undokumentiert - setze Variable im Node Kontext um auf Timerinstanz zu zugreifen */
Hier nun die Funktionsweise dieser Node:
Laufschrift erzeugen
Diese Node erzeugt in konfigurierbaren Textteile, um so eine Laufschrift zu erzeugen.
Grundsätzlich startet eine
msg.payload
automatisch die Node mit Standardvorgaben.
Ein erneutes Senden einermsg.payload
stoppt bzw. inaktiviert die Node wieder.Konfiguration
Eine Nachricht, die keine msg.payload enthält (z. Bsp. nur eine
msg.config
) oder eine leere msg.payload stoppt die Node.
Die Konfigurationsparameter können über einemsg.config
erstellt werden. Dabei muss das Konfigurations-Objekt vollständig übergeben werden.Das Konfiguationsobjekt ist direkt im Code wie folgt beschrieben:
{"offset": 1, // scrollen um x Zeichen "textwindow": 14, // Fenster wie groß der Text sein darf "interval": 1000, // ms mit der sich der Text bewegt bzw. ausgegeben wird "mode": 0, // 0 = Zirkulierend; 1 = Anfang - Ende; 2 = Hin und Her "separator": " * " // Trennungsstring am Ende des Textes}
Die passenden Scrollparameter muss man halt selbst herausfinden. Ausserdem belasten natürlich zu kurze Intervalle das System. Voreingestellt sind 1000 ms - was ein Laufschrift sehr ruckelig macht, aber dafür kann man die payload besser debuggen, falls erforderlich.
Den gleichen Text findet man auch in der Beschreibung zu der function Node:
Ansonsten habe ich alles in den Hilfetext der function Node geschrieben mit einem Beispielflow:
Demo:
Und natürlich zum Schluss der Beispielflow mit der function Node für den Lauftext:
EDIT: 5.2.2023
Enthält nun Version 0.3 - wenn die Textlänge der payload unter oder gleich dem textwindow ist, wird der Text unverändert als einfacher String weitergegeben.EDIT 11.2.2023
Enthält nun Version 0.4 - Lauftext wird nur noch gestoppt mit leerer payload oder Länge kleiner textwindow. Ansonsten kann nun Text und Konfiguration dynamisch geändert werden.EDIT 17.2.2023
Timer nicht mehr direkt im Kontext gespeichert und leere msg.config ohne payload startet keinen neuen Timer mehr. Version 0.5.1EDIT 21.2.2023
Neue Version: 0.6.
Ab hier wird nur noch der Code der einzelnen Node gepostet:Die Beschreibung zu Version 0.6 ist hier: https://forum.iobroker.net/post/951154
-
Danke klappt wunderbar.
-
@capuccino sagte in Laufschrift in einem NodeRed Flow erzeugen:
Danke klappt wunderbar.
Na das freut mich. - Ist doch schön, dass man so eine Anwendung auch in der Praxis sehen kann. Danke für die Rückmeldung.
-
So hier eine neue Version: v0.3 - ist die eingegebene Textlänge < der config.textwindow wird der Text normal - also nur einmal ausgegeben.
-
So hier nochmal eine verbesserte Version v0.4:
Lauftext wurd nur noch durch einen leere payload oder ein Text kleiner config.textwindow gestoppt. Alles andere kann nun dynamisch geändert werden, sowohl der Lauftext als auch die Konfiguration.
Nur die function Node:
-
Hallo myckym,
vielen Dank für diesen mega Lauftext.
Ein Hinweis. Ab Version 0.4 ändert sich die Ausgabe nicht mehr automatisch, wenn sich der Payload Text am Eingang ändert.
Beispiel bei mir. Titeltext am Eingang wechselt, dann wird weiterhin der Text des vorangehenden Titels angezeigt.
Gruß Alex
-
Ok - vielleicht habe ich noch einen Fehler entdeckt - ich hab nun die Version 0.3 mit 0.4 in Version 0.5 kombiniert. damit ist der Code noch etwas einfacher und übersichtlicher.
Der Fehler ist wahrscheinlich bei Einspeisen einer neuen Konfig aufgetreten, ohne neue Nachricht.
Also mal Version 0.5.1 versuchen - hoffe damit ist der Fehler weg:
Der Timer wird nun nur noch an einer Stelle gesetzt! - Damit sollten in die irre laufenden Timer der Vergangenheit angehören.
-
@alex58765 sagte in Laufschrift in einem NodeRed Flow erzeugen:
Hallo myckym,
vielen Dank für diesen mega Lauftext.
Ein Hinweis. Ab Version 0.4 ändert sich die Ausgabe nicht mehr automatisch, wenn sich der Payload Text am Eingang ändert.
Beispiel bei mir. Titeltext am Eingang wechselt, dann wird weiterhin der Text des vorangehenden Titels angezeigt.
Gruß Alex
Bitte neue Version 0.5 überprüfen, dass Datum und Version zu Beginn des Codes 0.5 vom 17.2.2023 ist und Rückmeldung, ob es nun funktioniert. Danke!So nochmal testen, war noch ein Buchstabendreher drin und nochmal Vereinfachung der Bedingung für neue Konfigurationsübernahmen.
-
@mickym funktioniert bestens. Vielen herzlichen Dank!!!!
-
@mickym eine Frage noch. Ich habe es teilweise so in Verwendung, dass ich den Text Blockweise anzeigen lasse. Das heißt der ich nutze Mode 1 und Offset mit Wert 14. Hast du eine Idee, was man anpassen muss, dass am Ende nicht 14 Leerzeichen angezeigt werden bevor es von vorne wieder losgeht?
-
@alex58765 Ok - ich habe eine Version 0.6 gemacht - die beinhaltet nun folgende Änderungen.
- In dem Mode 1 und 2 - wird grundsätzlich nicht mehr mit Leerzeichen auf die Textwindowlänge aufgefüllt.
- In dem Mode 1 und 2 - gibts am Textende einen Zyklus Pause. Das ist auf die Schnelle nicht anders machbar, ich finde das persönlich aber einen ganz sinnvollen Effekt.
- Im Status werden jetzt die aktuellen Parameter ausgeben.
Ich werde die Version 0.6 nur noch als einzelne Node ausgeben.
EDIT: Hab die Node nochmal geändert - deutsche Sprache - schwere Sprache.
-
@mickym Vielen Dank für deine Mühe.
Ich hatte noch das PRoblem, dass er immer beim Holen der Titelinformation den Text neugetriggert hat auch wenn sich inhaltlich nichts geändert hat. Das habe ich aber mit einem filter node wegbekommen, dass er bis Wertänderung blockiert.
Super Ding!!!