Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [gelöst] Laufschrift in DP (String)

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    864

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

[gelöst] Laufschrift in DP (String)

Geplant Angeheftet Gesperrt Verschoben JavaScript
21 Beiträge 4 Kommentatoren 2.0k Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • paul53P paul53

    @mr-burns sagte: Laufschrift in eine 10 Zeichen lange variable zu verschieben?

    Versuche mal

    const idText = 'abc';
    const idT10  = 'xyz';
    const idFreq = '0_userdata.0.def'; // Frequenz (Hz)
    
    var timer = null;
    
    on(idText, function(dp) {
        clearInterval(timer);
        if(dp.state.val.length > 10) {
            let cycle = 1000 / getState(idFreq).val;
            let start = 0;
            timer = setInterval(function() {
                setState(idT10, dp.state.val.slice(start, start + 10));
                start++;
                if(start > dp.state.val.length -10) start = 0;
            }, cycle);
        } else setState(idT10, dp.state.val);
    });
    

    EDIT: Geändert: setState() ohne Ack = true.

    Mr. BurnsM Offline
    Mr. BurnsM Offline
    Mr. Burns
    schrieb am zuletzt editiert von
    #12

    @paul53 danke für deine Hilfe. Hab das gerade mal schnell getestet hat aber nicht funktioniert. Guck mir das morgen noch mal in Ruhe an und berichte.
    Schönen Abend noch.

    1 Antwort Letzte Antwort
    0
    • paul53P paul53

      @mr-burns sagte: Laufschrift in eine 10 Zeichen lange variable zu verschieben?

      Versuche mal

      const idText = 'abc';
      const idT10  = 'xyz';
      const idFreq = '0_userdata.0.def'; // Frequenz (Hz)
      
      var timer = null;
      
      on(idText, function(dp) {
          clearInterval(timer);
          if(dp.state.val.length > 10) {
              let cycle = 1000 / getState(idFreq).val;
              let start = 0;
              timer = setInterval(function() {
                  setState(idT10, dp.state.val.slice(start, start + 10));
                  start++;
                  if(start > dp.state.val.length -10) start = 0;
              }, cycle);
          } else setState(idT10, dp.state.val);
      });
      

      EDIT: Geändert: setState() ohne Ack = true.

      Mr. BurnsM Offline
      Mr. BurnsM Offline
      Mr. Burns
      schrieb am zuletzt editiert von
      #13

      @paul53 dein Script funktioniert grundsätzlich!

      Die Laufschrift wird in die variable geschrieben. Aber sie wird nicht an die Anzeige gesendet.
      Man kann sehen, das sich der Datenpunkt unter Objekten verändert, aber er wird nicht geschrieben.
      (Weder vom Adapter an das Display, noch kann ich die variable in einem script weiterverarbeiten. Wert und Änderungszeit wird aber verändert)

      Wenn ich in einen internen DP unter Userdata schreibe und mit einem 2. Script in die ext. variable schreibe funktioniert es.

      Lässt sich da noch eine Haltezeit zwischen der nächsten Wiederholung einbauen?

      //var idText = '0_userdata.0.Text'/*Text*/;
      var idText = 'sonos.0.root.192_168_178_56.current_title'/*Current title*/;
      const idT10  = '0_userdata.0.Strg10'/*Strg10*/;
      //var idT10  = 'openknx.0.E5_Küche.Multimedia.EG_Küche_Statuszeile_1'/*EG Küche Statuszeile 2*/;
      var idFreq = '0_userdata.0.def'/*def*/;
       
      var timer = null;
       
      on(idText, function(dp) {
          clearInterval(timer);
          if(dp.state.val.length > 14) {
              let cycle = 2000 / getState(idFreq).val;
              let start = 0;
              timer = setInterval(function() {
                  setState(idT10, dp.state.val.slice(start, start + 14), true);
                  start++;
                  if(start > dp.state.val.length -14) start = 0;
              }, cycle);
          } else setState(idT10, dp.state.val, true);
      });
      
      on({id: '0_userdata.0.Strg10', change: "ne"}, function (dp) {
        setState('openknx.0.E5_Küche.Multimedia.EG_Küche_Statuszeile_2', getState('0_userdata.0.Strg10').val);
      });
      
      CodierknechtC paul53P 3 Antworten Letzte Antwort
      0
      • Mr. BurnsM Mr. Burns

        @paul53 dein Script funktioniert grundsätzlich!

        Die Laufschrift wird in die variable geschrieben. Aber sie wird nicht an die Anzeige gesendet.
        Man kann sehen, das sich der Datenpunkt unter Objekten verändert, aber er wird nicht geschrieben.
        (Weder vom Adapter an das Display, noch kann ich die variable in einem script weiterverarbeiten. Wert und Änderungszeit wird aber verändert)

        Wenn ich in einen internen DP unter Userdata schreibe und mit einem 2. Script in die ext. variable schreibe funktioniert es.

        Lässt sich da noch eine Haltezeit zwischen der nächsten Wiederholung einbauen?

        //var idText = '0_userdata.0.Text'/*Text*/;
        var idText = 'sonos.0.root.192_168_178_56.current_title'/*Current title*/;
        const idT10  = '0_userdata.0.Strg10'/*Strg10*/;
        //var idT10  = 'openknx.0.E5_Küche.Multimedia.EG_Küche_Statuszeile_1'/*EG Küche Statuszeile 2*/;
        var idFreq = '0_userdata.0.def'/*def*/;
         
        var timer = null;
         
        on(idText, function(dp) {
            clearInterval(timer);
            if(dp.state.val.length > 14) {
                let cycle = 2000 / getState(idFreq).val;
                let start = 0;
                timer = setInterval(function() {
                    setState(idT10, dp.state.val.slice(start, start + 14), true);
                    start++;
                    if(start > dp.state.val.length -14) start = 0;
                }, cycle);
            } else setState(idT10, dp.state.val, true);
        });
        
        on({id: '0_userdata.0.Strg10', change: "ne"}, function (dp) {
          setState('openknx.0.E5_Küche.Multimedia.EG_Küche_Statuszeile_2', getState('0_userdata.0.Strg10').val);
        });
        
        CodierknechtC Offline
        CodierknechtC Offline
        Codierknecht
        Developer Most Active
        schrieb am zuletzt editiert von
        #14

        @mr-burns sagte in Laufschrift in DP (String):

        Wenn ich in einen internen DP unter Userdata schreibe und mit einem 2. Script in die ext. variable schreibe funktioniert es.

        Ich vermute mal, dass Du mit setState(..., true) durchaus den DP openknx beschreiben kannst.
        Du müsstest lediglich den letzten Parameter von true auf false setzen - also ohne ack schreiben.

        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

        Proxmox 9.1.1 LXC|8 GB|Core i7-6700
        HmIP|ZigBee|Tasmota|Unifi
        Zabbix Certified Specialist
        Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

        Mr. BurnsM 1 Antwort Letzte Antwort
        1
        • CodierknechtC Codierknecht

          @mr-burns sagte in Laufschrift in DP (String):

          Wenn ich in einen internen DP unter Userdata schreibe und mit einem 2. Script in die ext. variable schreibe funktioniert es.

          Ich vermute mal, dass Du mit setState(..., true) durchaus den DP openknx beschreiben kannst.
          Du müsstest lediglich den letzten Parameter von true auf false setzen - also ohne ack schreiben.

          Mr. BurnsM Offline
          Mr. BurnsM Offline
          Mr. Burns
          schrieb am zuletzt editiert von
          #15

          @codierknecht Funktioniert. Vielen Dank!

          Könnte man da noch eine zusätzlichen Timer einbauen?

          1 Antwort Letzte Antwort
          0
          • Mr. BurnsM Mr. Burns

            @paul53 dein Script funktioniert grundsätzlich!

            Die Laufschrift wird in die variable geschrieben. Aber sie wird nicht an die Anzeige gesendet.
            Man kann sehen, das sich der Datenpunkt unter Objekten verändert, aber er wird nicht geschrieben.
            (Weder vom Adapter an das Display, noch kann ich die variable in einem script weiterverarbeiten. Wert und Änderungszeit wird aber verändert)

            Wenn ich in einen internen DP unter Userdata schreibe und mit einem 2. Script in die ext. variable schreibe funktioniert es.

            Lässt sich da noch eine Haltezeit zwischen der nächsten Wiederholung einbauen?

            //var idText = '0_userdata.0.Text'/*Text*/;
            var idText = 'sonos.0.root.192_168_178_56.current_title'/*Current title*/;
            const idT10  = '0_userdata.0.Strg10'/*Strg10*/;
            //var idT10  = 'openknx.0.E5_Küche.Multimedia.EG_Küche_Statuszeile_1'/*EG Küche Statuszeile 2*/;
            var idFreq = '0_userdata.0.def'/*def*/;
             
            var timer = null;
             
            on(idText, function(dp) {
                clearInterval(timer);
                if(dp.state.val.length > 14) {
                    let cycle = 2000 / getState(idFreq).val;
                    let start = 0;
                    timer = setInterval(function() {
                        setState(idT10, dp.state.val.slice(start, start + 14), true);
                        start++;
                        if(start > dp.state.val.length -14) start = 0;
                    }, cycle);
                } else setState(idT10, dp.state.val, true);
            });
            
            on({id: '0_userdata.0.Strg10', change: "ne"}, function (dp) {
              setState('openknx.0.E5_Küche.Multimedia.EG_Küche_Statuszeile_2', getState('0_userdata.0.Strg10').val);
            });
            
            CodierknechtC Offline
            CodierknechtC Offline
            Codierknecht
            Developer Most Active
            schrieb am zuletzt editiert von
            #16

            @mr-burns sagte in Laufschrift in DP (String):

            Lässt sich da noch eine Haltezeit zwischen der nächsten Wiederholung einbauen?

            Hinter Zeile 18 eine neue einfügen:

            await wait(1000);
            

            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

            Proxmox 9.1.1 LXC|8 GB|Core i7-6700
            HmIP|ZigBee|Tasmota|Unifi
            Zabbix Certified Specialist
            Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

            Mr. BurnsM 1 Antwort Letzte Antwort
            0
            • Mr. BurnsM Mr. Burns

              @paul53 dein Script funktioniert grundsätzlich!

              Die Laufschrift wird in die variable geschrieben. Aber sie wird nicht an die Anzeige gesendet.
              Man kann sehen, das sich der Datenpunkt unter Objekten verändert, aber er wird nicht geschrieben.
              (Weder vom Adapter an das Display, noch kann ich die variable in einem script weiterverarbeiten. Wert und Änderungszeit wird aber verändert)

              Wenn ich in einen internen DP unter Userdata schreibe und mit einem 2. Script in die ext. variable schreibe funktioniert es.

              Lässt sich da noch eine Haltezeit zwischen der nächsten Wiederholung einbauen?

              //var idText = '0_userdata.0.Text'/*Text*/;
              var idText = 'sonos.0.root.192_168_178_56.current_title'/*Current title*/;
              const idT10  = '0_userdata.0.Strg10'/*Strg10*/;
              //var idT10  = 'openknx.0.E5_Küche.Multimedia.EG_Küche_Statuszeile_1'/*EG Küche Statuszeile 2*/;
              var idFreq = '0_userdata.0.def'/*def*/;
               
              var timer = null;
               
              on(idText, function(dp) {
                  clearInterval(timer);
                  if(dp.state.val.length > 14) {
                      let cycle = 2000 / getState(idFreq).val;
                      let start = 0;
                      timer = setInterval(function() {
                          setState(idT10, dp.state.val.slice(start, start + 14), true);
                          start++;
                          if(start > dp.state.val.length -14) start = 0;
                      }, cycle);
                  } else setState(idT10, dp.state.val, true);
              });
              
              on({id: '0_userdata.0.Strg10', change: "ne"}, function (dp) {
                setState('openknx.0.E5_Küche.Multimedia.EG_Küche_Statuszeile_2', getState('0_userdata.0.Strg10').val);
              });
              
              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von paul53
              #17

              @mr-burns sagte: Lässt sich da noch eine Haltezeit zwischen der nächsten Wiederholung einbauen?

              Ich würde es so machen:

                      timer = setInterval(function() {
                          if(start >= 0) setState(idT10, dp.state.val.slice(start, start + 14));
                          start++;
                          if(start > dp.state.val.length - 14) start = -2;
                      }, cycle);
              

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              1 Antwort Letzte Antwort
              0
              • CodierknechtC Codierknecht

                @mr-burns sagte in Laufschrift in DP (String):

                Lässt sich da noch eine Haltezeit zwischen der nächsten Wiederholung einbauen?

                Hinter Zeile 18 eine neue einfügen:

                await wait(1000);
                
                Mr. BurnsM Offline
                Mr. BurnsM Offline
                Mr. Burns
                schrieb am zuletzt editiert von
                #18

                @codierknecht Die Funktion await lässt er nicht zu.

                @paul53 Funktioniert! Er wartet aber am Ende des Textes. Ginge das auch am Anfang?
                Also der Anfang des Titels für 5s oder 10s stehen bleiben und dan mit der Laufschrift starten?

                paul53P 1 Antwort Letzte Antwort
                0
                • Mr. BurnsM Mr. Burns

                  @codierknecht Die Funktion await lässt er nicht zu.

                  @paul53 Funktioniert! Er wartet aber am Ende des Textes. Ginge das auch am Anfang?
                  Also der Anfang des Titels für 5s oder 10s stehen bleiben und dan mit der Laufschrift starten?

                  paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #19

                  @mr-burns sagte: Ginge das auch am Anfang?

                  Versuche es mal so:

                          timer = setInterval(function() {
                              setState(idT10, dp.state.val.slice(Math.max(start, 0), Math.max(start + 14, 14)));
                              start++;
                              if(start > dp.state.val.length - 14) start = -2;
                          }, cycle);
                  

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  Mr. BurnsM 1 Antwort Letzte Antwort
                  0
                  • paul53P paul53

                    @mr-burns sagte: Ginge das auch am Anfang?

                    Versuche es mal so:

                            timer = setInterval(function() {
                                setState(idT10, dp.state.val.slice(Math.max(start, 0), Math.max(start + 14, 14)));
                                start++;
                                if(start > dp.state.val.length - 14) start = -2;
                            }, cycle);
                    
                    Mr. BurnsM Offline
                    Mr. BurnsM Offline
                    Mr. Burns
                    schrieb am zuletzt editiert von Mr. Burns
                    #20

                    @paul53 Es funktioniert. Vielen Dank für deine Unterstützung!

                    Das ganze Script sieht jetzt so aus:

                    var idText = 'sonos.0.root.192_168_178_56.current_title'/*Current title*/;
                    var idT14  = 'openknx.0.E5_Küche.Multimedia.EG_Küche_Statuszeile_2'/*EG Küche Statuszeile 2*/;
                     
                    var timer = null;
                     
                    on(idText, function(dp) {
                        clearInterval(timer);
                        if(dp.state.val.length > 14) {
                            let cycle = 1000; // Geschwindigkeit in ms
                            let start = 0;
                            timer = setInterval(function() {
                                setState(idT14, dp.state.val.slice(Math.max(start, 0), Math.max(start + 14, 14)));
                                start++;
                                if(start > dp.state.val.length - 14) start = -8; // Haltezeit am Anfang (Geschwindigkeit * Cycle)
                            }, cycle);
                        } else setState(idT14, dp.state.val);
                    });
                    
                    paul53P 1 Antwort Letzte Antwort
                    0
                    • Mr. BurnsM Mr. Burns

                      @paul53 Es funktioniert. Vielen Dank für deine Unterstützung!

                      Das ganze Script sieht jetzt so aus:

                      var idText = 'sonos.0.root.192_168_178_56.current_title'/*Current title*/;
                      var idT14  = 'openknx.0.E5_Küche.Multimedia.EG_Küche_Statuszeile_2'/*EG Küche Statuszeile 2*/;
                       
                      var timer = null;
                       
                      on(idText, function(dp) {
                          clearInterval(timer);
                          if(dp.state.val.length > 14) {
                              let cycle = 1000; // Geschwindigkeit in ms
                              let start = 0;
                              timer = setInterval(function() {
                                  setState(idT14, dp.state.val.slice(Math.max(start, 0), Math.max(start + 14, 14)));
                                  start++;
                                  if(start > dp.state.val.length - 14) start = -8; // Haltezeit am Anfang (Geschwindigkeit * Cycle)
                              }, cycle);
                          } else setState(idT14, dp.state.val);
                      });
                      
                      paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von
                      #21

                      @mr-burns sagte: Es funktioniert.

                      Ändere noch Zeile 16

                          } else setState(idT14, dp.state.val);
                      

                      uns setze das Thema in der Überschrift des ersten Beitrags auf [gelöst].

                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      826

                      Online

                      32.6k

                      Benutzer

                      82.1k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe