Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Laufschrift in DP (String)

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Laufschrift in DP (String)

    This topic has been deleted. Only users with topic management privileges can see it.
    • Mr. Burns
      Mr. Burns @paul53 last edited by

      @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 Reply Last reply Reply Quote 0
      • Mr. Burns
        Mr. Burns @paul53 last edited by

        @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);
        });
        
        Codierknecht paul53 3 Replies Last reply Reply Quote 0
        • Codierknecht
          Codierknecht Developer Most Active @Mr. Burns last edited by

          @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. Burns 1 Reply Last reply Reply Quote 1
          • Mr. Burns
            Mr. Burns @Codierknecht last edited by

            @codierknecht Funktioniert. Vielen Dank!

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

            1 Reply Last reply Reply Quote 0
            • Codierknecht
              Codierknecht Developer Most Active @Mr. Burns last edited by

              @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. Burns 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @Mr. Burns last edited by paul53

                @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);
                
                1 Reply Last reply Reply Quote 0
                • Mr. Burns
                  Mr. Burns @Codierknecht last edited by

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

                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @Mr. Burns last edited by

                    @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. Burns 1 Reply Last reply Reply Quote 0
                    • Mr. Burns
                      Mr. Burns @paul53 last edited by 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);
                      });
                      
                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @Mr. Burns last edited by

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

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        876
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        4
                        21
                        806
                        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