Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [GELÖST] state auslesen und state setzen

    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] state auslesen und state setzen

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      tomdeboom last edited by

      Hi,

      ich versuche mich gerade eine JS zu schreiben, ich möchte es irgendwann auch verstehen, die folgendes tun soll:

      1. Aus "dwd.0.warning.text" auslesen was da steht und mit z.B. obj.newState.val == "FROST" vergleichen.

      2. Wenn dies übereinstimmt, dann soll er einen Wert in ein neuen state schreiben.

      Mein Versuch:

      createState(idWarn, "", {type: 'string'});
      
      schedule('1 0 * * *', function()
      
      on('dwd.0.warning.text', function(obj) 
      { 
      if (obj.newState.val == "FROST") { setState("Warn","1"); } 
      if (obj.newState.val == "GLÄTTE") { setState("Warn","2"); } 
      if (obj.newState.val == "STURM") { setState("Warn","3"); } 
      }
      
      setState(idWarn, Warn);
      

      Gruß,

      Tom

      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        const idWarn = 'DWD.Warnung';
        
        createState(idWarn, "", {type: 'string'});
        
        on('dwd.0.warning.text', function(obj) { 
           var Warn = "0";
           if (obj.newState.val == "FROST") Warn = "1";
           if (obj.newState.val == "GLÄTTE") Warn = "2";
           if (obj.newState.val == "STURM") Warn = "3";
           setState(idWarn, Warn, true);
        });
        
        
        1 Reply Last reply Reply Quote 0
        • T
          tomdeboom last edited by

          Hi Paul,

          danke für das Script, aber es wird kein State geschrieben obwohl dwd.o.warning.text = FROST ist.

          Dann sollte doch unter Warn eine 1 stehen?

          Gruß,

          Tom

          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            @tomdeboom:

            aber es wird kein State geschrieben obwohl dwd.o.warning.text = FROST ist. `
            Der Trigger reagiert nur auf Änderung des Inhalts des Datenpunktes 'dwd.0.warning.text'. Solange der Inhalt auf konstant "FROST" bleibt, passiert nichts. Wenn bei Skriptstart der Datenpunkt "javascript.0.DWD.Warnung" auch gesetzt werden soll, dann muss das Script erweitert werden.

            const idWarn = 'DWD.Warnung';
            const idText = 'dwd.0.warning.text';
            
            function setWarn(obj) {
               var Warn = "0";
               if (obj.newState.val == "FROST") Warn = "1";
               if (obj.newState.val == "GLÄTTE") Warn = "2";
               if (obj.newState.val == "STURM") Warn = "3";
               setState(idWarn, Warn, true);
            }
            
            createState(idWarn, "", {type: 'string'}, function() {
               var dp = getObject(idText);
               dp.newState = getState(idText);
               setWarn(dp);
            });
            
            on(idText, setWarn); // Triggert bei Wertänderung
            
            
            1 Reply Last reply Reply Quote 0
            • paul53
              paul53 last edited by

              Anmerkung: Gibt es einen Grund, weshalb Du den Ziel-Datenpunkt vom Typ "string" deklariert hast ? Typ "number" wäre naheliegender.

              Du benutzt die "veraltete" Eigenschaft newState, die zwar (aus dem Grund der Kompatibilität) gültig ist, aber schon seit einiger Zeit durchdie Eigenschaft state ersetzt wurde. In meiner Schreibweise benutze ich den Variablenbezeichner dp für Datenpunkte, die sämtliche Eigenschaften wie common, native, type, state und oldState enthalten. Deshalb modifiziere ich das letzte Script in diese Richtung:

              const idWarn = 'DWD.Warnung';
              const idText = 'dwd.0.warning.text';
              
              function setWarn(dp) {
                 var Warn = 0;
                 if (dp.state.val == "FROST") Warn = 1;
                 if (dp.state.val == "GLÄTTE") Warn = 2;
                 if (dp.state.val == "STURM") Warn = 3;
                 setState(idWarn, Warn, true);
              }
              
              createState(idWarn, 0, {type: 'number'}, function() {
                 var obj = getObject(idText);
                 obj.state = getState(idText);
                 setWarn(obj);
              });
              
              on(idText, setWarn); // Triggert bei Wertänderung
              
              
              1 Reply Last reply Reply Quote 0
              • T
                tomdeboom last edited by

                Guten Morgen Paul,

                erstmal, Danke, Danke und nochmal Danke.

                Der Grund warum ich den Typ "String" gewählt habe ist Copy&Paste…

                Ich versuche gerade endlich Javascript zu verstehen und zu Lernen und deswegen versuche ich mich an kleinen Scripts um zu verstehen wie sieh funktionieren.

                Es ist für mich sehr Hilfreich das du mir auch bestimmte Zustände erklärt hast, wie z.B. das der Datenpunkt erst Aktuallisiert wird wenn er geändert wird und mir aber auch aufzeigst wie mann dies erzwingen kann.

                Vielen Dank, da habe ich wieder etwas gelernt! 😄

                Schöne Ostern und Gruß,

                Tom

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

                Support us

                ioBroker
                Community Adapters
                Donate

                713
                Online

                31.9k
                Users

                80.2k
                Topics

                1.3m
                Posts

                2
                6
                1838
                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