Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. Laufschrift in einem NodeRed Flow erzeugen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Laufschrift in einem NodeRed Flow erzeugen

    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      capuccino @mickym last edited by

      @mickym ezgif-5-205085e86b.gif

      Danke klappt wunderbar.

      mickym 1 Reply Last reply Reply Quote 2
      • mickym
        mickym Most Active @capuccino last edited by

        @capuccino sagte in Laufschrift in einem NodeRed Flow erzeugen:

        @mickym ezgif-5-205085e86b.gif

        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. 👍

        1 Reply Last reply Reply Quote 0
        • mickym
          mickym Most Active last edited by

          So hier eine neue Version: v0.3 - ist die eingegebene Textlänge < der config.textwindow wird der Text normal - also nur einmal ausgegeben.

          [
             {
                 "id": "9bf7625128ecafdc",
                 "type": "function",
                 "z": "5289f6ad4bf32e52",
                 "name": "Laufschrift v0.3",
                 "func": "/**\n* Zweck:      Erzeugt eine Laufschrift als payload\n* Datum:      02.02.2023\n* Autor:      @mickym\n*/\n\n\nvar config = context.get(\"config\") || {\n    \"offset\": 1,        // scrollen um x Zeichen\n    \"textwindow\": 14,   // Fenster wie groß der Text sein darf\n    \"interval\": 1000,   // ms mit der sich der Text bewegt bzw. ausgegeben wird\n    \"mode\": 0,          // 0 = Zirkulierend; 1 = Anfang - Ende; 2 = Hin und Her\n    \"separator\": \" * \"  // Trennungsstring am Ende des Textes\n}\n\n\nif (msg.config) config = msg.config;\ncontext.set(\"config\", config);\n\nvar bActive = context.get(\"active\") || false; //hole aktuellen Status\nbActive = !bActive; //ändere Status\nbActive = bActive && msg.payload ? true : false; //ohne payload deaktiviere immer\n\nnode.status(\n    { \n        fill: \"blue\", \n        shape: bActive ? \"dot\" : \"ring\", \n        text: bActive ? \"aktiv\" : \"inaktiv\" \n    }\n);\n\n\ncontext.set(\"active\",bActive);\n\ncontext.timer; /* undokumentiert - setze Variable im Node Kontext um \n                    auf Timerinstanz zu zugreifen */\n\nif (bActive) {\n    context.timer = setInterval(laufschrift, config.interval);\n}\nelse {\n    clearInterval(context.timer);\n}\n\nvar text = msg.payload + config.separator;\nvar i = 0; //Positionszähler\nvar d; // für mode 2\n\nif (msg.payload.length <= config.textwindow && msg.payload) {\n    node.send(msg);\n    clearInterval(context.timer);\n}\n\n\nfunction laufschrift(){\n   // var len = text.length;\n    var output; \n\n\n\n    switch (config.mode) {\n        case 0:\n            // code block\n            output = text.substr(i, config.textwindow);\n            text = text.substr(config.offset) + text.substr(0, config.offset);\n            break;\n        case 1:\n            // code block\n            output = text.slice(i, config.textwindow + i).padEnd(config.textwindow,\" \");\n            i < text.length ? i+=config.offset : i=0;\n            break;\n        case 2:\n            // code block\n            output = text.slice(i, config.textwindow + i).padEnd(config.textwindow, \" \");\n\n            if (i <= 0) d = true;\n            if (i >= text.length) d = false;\n            d ? i += config.offset : i -= config.offset;\n            if (i < 0) i = 0;\n            if (i > text.length) i = text.length;\n            break;\n        default:\n        // code block\n        error(\"invalid mode in config\");\n    }\n\n    /* msg = {  //nur für debug Zwecke\n        \"config\": config,\n        \"payload\": output,\n        \"Textlänge\": output.length,\n        \"Zähler\": i\n    } */\n\n    msg.payload = output;\n    node.send(msg);\n\n    node.done;\n}\n\n/**\n* @param {string} text\n*/\nfunction error(text){\n    node.status(\n        {\n            fill: \"red\",\n            shape: \"dot\",\n            text: \"Error: \" + text\n        }\n    );\n    clearInterval(context.timer);\n    \n    node.error(text, msg);\n}\n\n",
                 "outputs": 1,
                 "noerr": 0,
                 "initialize": "",
                 "finalize": "",
                 "libs": [],
                 "x": 600,
                 "y": 260,
                 "wires": [
                     [
                         "69b97a0af5eb83ad",
                         "3b908b1849af30ba"
                     ]
                 ],
                 "info": "# Laufschrift erzeugen \r\n\r\nDiese Node erzeugt in konfigurierbaren Textteile, um so eine Laufschrift zu erzeugen.\r\n\r\nGrundsätzlich startet eine `msg.payload` automatisch die Node mit Standardvorgaben. \r\nEin erneutes Senden einer `msg.payload` stoppt bzw. inaktiviert die Node wieder. \r\n\r\n## Konfiguration\r\nEine Nachricht, die keine msg.payload enthält (z. Bsp. nur eine `msg.config`) oder eine leere msg.payload stoppt die Node.\r\nDie Konfigurationsparameter können über eine `msg.config` erstellt werden. Dabei muss das Konfigurations-Objekt vollständig übergeben werden. \r\n\r\nDas Konfiguationsobjekt ist direkt im Code wie folgt beschrieben: \r\n\r\n    \r\n    {\"offset\": 1,        // scrollen um x Zeichen\r\n    \"textwindow\": 14,   // Fenster wie groß der Text sein darf\r\n    \"interval\": 1000,   // ms mit der sich der Text bewegt bzw. ausgegeben wird\r\n    \"mode\": 0,          // 0 = Zirkulierend; 1 = Anfang - Ende; 2 = Hin und Her\r\n    \"separator\": \" * \"  // Trennungsstring am Ende des Textes}\r\n\r\nDie 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."
             }
          ]
          

          1 Reply Last reply Reply Quote 1
          • mickym
            mickym Most Active last edited by mickym

            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:

            [
                {
                    "id": "9bf7625128ecafdc",
                    "type": "function",
                    "z": "5289f6ad4bf32e52",
                    "name": "Laufschrift v0.4",
                    "func": "/**\n* Zweck:      Erzeugt eine Laufschrift als payload\n* Datum:      11.02.2023\n* Autor:      @mickym\n*/\n\nlet timer = context.get(\"timer\") || false;\n\nvar config = context.get(\"config\") || {\n    \"offset\": 1,        // scrollen um x Zeichen\n    \"textwindow\": 14,   // Fenster wie groß der Text sein darf\n    \"interval\": 1000,   // ms mit der sich der Text bewegt bzw. ausgegeben wird\n    \"mode\": 0,          // 0 = Zirkulierend; 1 = Anfang - Ende; 2 = Hin und Her\n    \"separator\": \" * \"  // Trennungsstring am Ende des Textes\n}\n\n\nif (msg.config) {\n    config = msg.config;\n    context.set(\"config\", config);\n    if (timer && !msg.paylaod) {\n        clearInterval(timer);\n        msg.payload = context.get(\"text\");\n        timer = setInterval(laufschrift, config.interval);\n    }\n}\n\nif (msg.payload) {\n    if (msg.payload.length <= config.textwindow) {\n        node.send(msg);\n        clearInterval(timer);\n        timer = false;\n    } else {\n        clearInterval(timer);\n        context.set(\"text\",msg.payload);\n        timer = setInterval(laufschrift, config.interval);\n    }\n} else if (msg.payload == \"\") \n{\n    clearInterval(timer);\n    timer = false;\n}\n\ncontext.set(\"timer\", timer);\n\nvar text = msg.payload + config.separator;\nvar i = 0; //Positionszähler\nvar d; // für mode 2\n\nnode.status(\n    {\n        fill: \"blue\",\n        shape: timer ? \"dot\" : \"ring\",\n        text: timer ? \"aktiv\" : \"inaktiv\"\n    }\n);\n\nfunction laufschrift(){\n   // var len = text.length;\n    var output; \n\n\n\n    switch (config.mode) {\n        case 0:\n            // code block\n            output = text.substr(i, config.textwindow);\n            text = text.substr(config.offset) + text.substr(0, config.offset);\n            break;\n        case 1:\n            // code block\n            output = text.slice(i, config.textwindow + i).padEnd(config.textwindow,\" \");\n            i < text.length ? i+=config.offset : i=0;\n            break;\n        case 2:\n            // code block\n            output = text.slice(i, config.textwindow + i).padEnd(config.textwindow, \" \");\n\n            if (i <= 0) d = true;\n            if (i >= text.length) d = false;\n            d ? i += config.offset : i -= config.offset;\n            if (i < 0) i = 0;\n            if (i > text.length) i = text.length;\n            break;\n        default:\n        // code block\n        error(\"invalid mode in config\");\n    }\n\n    /* msg = {  //nur für debug Zwecke\n        \"config\": config,\n        \"payload\": output,\n        \"Textlänge\": output.length,\n        \"Zähler\": i\n    } */\n\n    msg.payload = output;\n    node.send(msg);\n\n    node.done;\n}\n\n/**\n* @param {string} text\n*/\nfunction error(text){\n    node.status(\n        {\n            fill: \"red\",\n            shape: \"dot\",\n            text: \"Error: \" + text\n        }\n    );\n    clearInterval(context.timer);\n    \n    node.error(text, msg);\n}",
                    "outputs": 1,
                    "noerr": 0,
                    "initialize": "",
                    "finalize": "",
                    "libs": [],
                    "x": 600,
                    "y": 280,
                    "wires": [
                        [
                            "69b97a0af5eb83ad",
                            "3b908b1849af30ba"
                        ]
                    ],
                    "info": "# Laufschrift erzeugen \r\n\r\nDiese Node erzeugt in konfigurierbaren Textteile, um so eine Laufschrift zu erzeugen.\r\n\r\nGrundsätzlich startet eine `msg.payload` automatisch die Node mit Standardvorgaben. \r\nGestoppt wird er Lauftext durch eine leere oder eine `msg.payload` deren Text kürzer, als `textwindow`ist.\r\n\r\n## Konfiguration\r\nDie Konfigurationsparameter können über eine `msg.config` erstellt werden. Dabei muss das Konfigurations-Objekt vollständig übergeben werden. \r\nDie Konfiguration wird sofort auf den Lauftext angewandt. \r\nDas Konfiguationsobjekt ist direkt im Code wie folgt beschrieben: \r\n\r\n    \r\n    {\"offset\": 1,        // scrollen um x Zeichen\r\n    \"textwindow\": 14,   // Fenster wie groß der Text sein darf\r\n    \"interval\": 1000,   // ms mit der sich der Text bewegt bzw. ausgegeben wird\r\n    \"mode\": 0,          // 0 = Zirkulierend; 1 = Anfang - Ende; 2 = Hin und Her\r\n    \"separator\": \" * \"  // Trennungsstring am Ende des Textes}\r\n\r\nDie 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."
                }
            ]
            

            1 Reply Last reply Reply Quote 2
            • A
              alex58765 last edited by

              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

              mickym 2 Replies Last reply Reply Quote 0
              • mickym
                mickym Most Active @alex58765 last edited by mickym

                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:

                [
                   {
                       "id": "1cf74aa315093c4e",
                       "type": "function",
                       "z": "5289f6ad4bf32e52",
                       "name": "Laufschrift v0.5.1",
                       "func": "/**\n* Zweck:      Erzeugt eine Laufschrift als payload\n* Datum:      17.02.2023\n* Version:    v 0.5.1\n* Autor:      @mickym\n*/\n\n\ncontext.timer; /* undokumentiert - setze Variable im Node Kontext um \n                    auf Timerinstanz zu zugreifen */\nclearInterval(context.timer);\n\nvar active = context.get(\"active\") || false;\n\n\nvar config = context.get(\"config\") || {\n    \"offset\": 1,        // scrollen um x Zeichen\n    \"textwindow\": 14,   // Fenster wie groß der Text sein darf\n    \"interval\": 1000,   // ms mit der sich der Text bewegt bzw. ausgegeben wird\n    \"mode\": 0,          // 0 = Zirkulierend; 1 = Anfang - Ende; 2 = Hin und Her\n    \"separator\": \" * \"  // Trennungsstring am Ende des Textes\n}\n\n\nif (msg.config) {\n    config = msg.config;\n    context.set(\"config\", config);\n    if (!msg.payload) {\n        msg.payload = context.get(\"text\");\n    }\n}\n\nif (msg.payload) {\n    if (msg.payload.length <= config.textwindow) {\n        active = false;\n        node.send(msg);\n        node.done;\n    } else {\n        active = true;\n        context.set(\"text\",msg.payload);\n        context.timer = setInterval(laufschrift, config.interval);\n    }\n} else active = false;\n\n\nvar text = msg.payload + config.separator;\nvar i = 0; //Positionszähler\nvar d; // für mode 2\n\nnode.status(\n    {\n        fill: \"blue\",\n        shape: active ? \"dot\" : \"ring\",\n        text: active ? \"aktiv\" : \"inaktiv\"\n    }\n);\n\ncontext.set(\"active\",active);\n\nfunction laufschrift(){\n   // var len = text.length;\n    var output; \n\n\n\n    switch (config.mode) {\n        case 0:\n            // code block\n            output = text.substr(i, config.textwindow);\n            text = text.substr(config.offset) + text.substr(0, config.offset);\n            break;\n        case 1:\n            // code block\n            output = text.slice(i, config.textwindow + i).padEnd(config.textwindow,\" \");\n            i < text.length ? i+=config.offset : i=0;\n            break;\n        case 2:\n            // code block\n            output = text.slice(i, config.textwindow + i).padEnd(config.textwindow, \" \");\n\n            if (i <= 0) d = true;\n            if (i >= text.length) d = false;\n            d ? i += config.offset : i -= config.offset;\n            if (i < 0) i = 0;\n            if (i > text.length) i = text.length;\n            break;\n        default:\n        // code block\n        error(\"invalid mode in config\");\n    }\n\n    /* msg = {  //nur für debug Zwecke\n        \"config\": config,\n        \"payload\": output,\n        \"Textlänge\": output.length,\n        \"Zähler\": i\n    } */\n\n    msg.payload = output;\n    node.send(msg);\n    node.done;\n}\n\n/**\n* @param {string} text\n*/\nfunction error(text){\n    node.status(\n        {\n            fill: \"red\",\n            shape: \"dot\",\n            text: \"Error: \" + text\n        }\n    );\n    clearInterval(context.timer);\n    \n    node.error(text, msg);\n}",
                       "outputs": 1,
                       "noerr": 0,
                       "initialize": "",
                       "finalize": "",
                       "libs": [],
                       "x": 170,
                       "y": 1280,
                       "wires": [
                           []
                       ],
                       "info": "# Laufschrift erzeugen \r\n\r\nDiese Node erzeugt in konfigurierbaren Textteile, um so eine Laufschrift zu erzeugen.\r\n\r\nGrundsätzlich startet eine `msg.payload` automatisch die Node mit Standardvorgaben. \r\nGestoppt wird er Lauftext durch eine leere oder eine `msg.payload` deren Text kürzer, als `textwindow`ist.\r\n\r\n## Konfiguration\r\nDie Konfigurationsparameter können über eine `msg.config` erstellt werden. Dabei muss das Konfigurations-Objekt vollständig übergeben werden. \r\nDie Konfiguration wird sofort auf den Lauftext angewandt. \r\nDas Konfiguationsobjekt ist direkt im Code wie folgt beschrieben: \r\n\r\n    \r\n    {\"offset\": 1,        // scrollen um x Zeichen\r\n    \"textwindow\": 14,   // Fenster wie groß der Text sein darf\r\n    \"interval\": 1000,   // ms mit der sich der Text bewegt bzw. ausgegeben wird\r\n    \"mode\": 0,          // 0 = Zirkulierend; 1 = Anfang - Ende; 2 = Hin und Her\r\n    \"separator\": \" * \"  // Trennungsstring am Ende des Textes}\r\n\r\nDie 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."
                   }
                ]
                
                

                Der Timer wird nun nur noch an einer Stelle gesetzt! - Damit sollten in die irre laufenden Timer der Vergangenheit angehören.

                1 Reply Last reply Reply Quote 0
                • mickym
                  mickym Most Active @alex58765 last edited by mickym

                  @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.

                  A 2 Replies Last reply Reply Quote 1
                  • A
                    alex58765 @mickym last edited by

                    @mickym funktioniert bestens. Vielen herzlichen Dank!!!!

                    1 Reply Last reply Reply Quote 0
                    • A
                      alex58765 @mickym last edited by

                      @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?

                      mickym 1 Reply Last reply Reply Quote 0
                      • mickym
                        mickym Most Active @alex58765 last edited by mickym

                        @alex58765 Ok - ich habe eine Version 0.6 gemacht - die beinhaltet nun folgende Änderungen.

                        1. In dem Mode 1 und 2 - wird grundsätzlich nicht mehr mit Leerzeichen auf die Textwindowlänge aufgefüllt.
                        2. 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.
                        3. Im Status werden jetzt die aktuellen Parameter ausgeben.

                        27a1989e-fd74-41cb-8ee2-e01436484668-image.png

                        Ich werde die Version 0.6 nur noch als einzelne Node ausgeben.

                        [
                           {
                               "id": "5f2b32e2189a673e",
                               "type": "function",
                               "z": "5289f6ad4bf32e52",
                               "name": "Laufschrift v0.6",
                               "func": "/**\n* Zweck:      Erzeugt eine Laufschrift als payload\n* Datum:      21.02.2023\n* Version:    v 0.6\n* Autor:      @mickym\n*/\n\n\ncontext.timer; /* undokumentiert - setze Variable im Node Kontext um \n                    auf Timerinstanz zu zugreifen */\nclearInterval(context.timer);\n\nvar active = context.get(\"active\") || false;\n\n\nvar config = context.get(\"config\") || {\n    \"offset\": 1,        // scrollen um x Zeichen\n    \"textwindow\": 14,   // Fenster wie groß der Text sein darf\n    \"interval\": 1000,   // ms mit der sich der Text bewegt bzw. ausgegeben wird\n    \"mode\": 0,          // 0 = Zirkulierend; 1 = Anfang - Ende; 2 = Hin und Her\n    \"separator\": \" * \"  // Trennungsstring am Ende des Textes\n}\n\n\nif (msg.config) {\n    config = msg.config;\n    context.set(\"config\", config);\n    if (!msg.payload) {\n        msg.payload = context.get(\"text\");\n    }\n}\n\nvar description = config.mode ? (config.mode === 1) ? \"Anfang - Ende\" : \"Hin und Her\" : \"Zirkulierend\";\ndescription = \"Modus: \" + description + \"; Offset: \" + config.offset + \"; Intervall: \" + config.interval + \" ms; Textfenster: \" + config.textwindow;\n\n\nif (msg.payload) {\n    if (msg.payload.length <= config.textwindow) {\n        active = false;\n        node.send(msg);\n        node.done;\n    } else {\n        active = true;\n        context.set(\"text\",msg.payload);\n        context.timer = setInterval(laufschrift, config.interval);\n    }\n} else active = false;\n\n\nvar text = msg.payload + config.separator;\nvar i = 0; //Positionszähler\nvar d; // für mode 2  (true = vorwärts, false = rückwärts)\n\nnode.status(\n    {\n        fill: \"blue\",\n        shape: active ? \"dot\" : \"ring\",\n        text: active ? description : \"inaktiv\"\n    }\n);\n\ncontext.set(\"active\",active);\n\nfunction laufschrift(){\n   // var len = text.length;\n    var output; \n\n\n\n    switch (config.mode) {\n        case 0:\n            // code block\n            output = text.substr(i, config.textwindow);\n            text = text.substr(config.offset) + text.substr(0, config.offset);\n            break;\n        case 1:\n            // code block\n            // output = text.slice(i, config.textwindow + i).padEnd(config.textwindow,\" \");\n            output = text.slice(i, config.textwindow + i);\n            i < text.length ? i+=config.offset : i=0;\n            break;\n        case 2:\n            // code block\n            // output = text.slice(i, config.textwindow + i).padEnd(config.textwindow, \" \");\n            output = text.slice(i, config.textwindow + i);\n            if (i <= 0) d = true;\n            if (i >= text.length) d = false;\n            d ? i += config.offset : i -= config.offset;\n            if (i < 0) i = 0;\n            if (i > text.length) i = text.length;\n            break;\n        default:\n        // code block\n        error(\"invalid mode in config\");\n    }\n\n    /* msg = {  //nur für debug Zwecke\n        \"config\": config,\n        \"payload\": output,\n        \"Textlänge\": output.length,\n        \"Zähler\": i\n    } */\n\n    msg.payload = output;\n    if (msg.payload) node.send(msg);\n    node.done;\n}\n\n/**\n* @param {string} text\n*/\nfunction error(text){\n    node.status(\n        {\n            fill: \"red\",\n            shape: \"dot\",\n            text: \"Error: \" + text\n        }\n    );\n    clearInterval(context.timer);\n    \n    node.error(text, msg);\n}",
                               "outputs": 1,
                               "noerr": 0,
                               "initialize": "",
                               "finalize": "",
                               "libs": [],
                               "x": 500,
                               "y": 320,
                               "wires": [
                                   [
                                       "69b97a0af5eb83ad",
                                       "3b908b1849af30ba"
                                   ]
                               ],
                               "info": "# Laufschrift erzeugen \r\n\r\nDiese Node erzeugt in konfigurierbaren Textteile, um so eine Laufschrift zu erzeugen.\r\n\r\nGrundsätzlich startet eine `msg.payload` automatisch die Node mit Standardvorgaben. \r\nGestoppt wird er Lauftext durch eine leere oder eine `msg.payload` deren Text kürzer, als `textwindow`ist.\r\n\r\n## Konfiguration\r\nDie Konfigurationsparameter können über eine `msg.config` erstellt werden. Dabei muss das Konfigurations-Objekt vollständig übergeben werden. \r\nDie Konfiguration wird sofort auf den Lauftext angewandt. \r\nDas Konfiguationsobjekt ist direkt im Code wie folgt beschrieben: \r\n\r\n    \r\n    {\"offset\": 1,        // scrollen um x Zeichen\r\n    \"textwindow\": 14,   // Fenster wie groß der Text sein darf\r\n    \"interval\": 1000,   // ms mit der sich der Text bewegt bzw. ausgegeben wird\r\n    \"mode\": 0,          // 0 = Zirkulierend; 1 = Anfang - Ende; 2 = Hin und Her\r\n    \"separator\": \" * \"  // Trennungsstring am Ende des Textes}\r\n\r\nDie 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."
                           }
                        ]
                        

                        EDIT: Hab die Node nochmal geändert - deutsche Sprache - schwere Sprache. 😉

                        A 1 Reply Last reply Reply Quote 1
                        • A
                          alex58765 @mickym last edited by

                          @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!!!

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          1.1k
                          Online

                          31.7k
                          Users

                          79.7k
                          Topics

                          1.3m
                          Posts

                          3
                          12
                          1387
                          Loading More Posts
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes
                          Reply
                          • Reply as topic
                          Log in to reply
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          The ioBroker Community 2014-2023
                          logo