Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Frage zum Script

    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

    Frage zum Script

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

      Sorry, bin kein Programmierer …

      Das Script läuft an bei Bewegungsmeldermeldung (danke BlueFox!). Nun möchte ich noch eine zweite Zeile ausgeben:

      Zeile 1 = aktuelle Meldung

      Zeile 2 = vorige Meldung

      Leider klappt das mit meiner gedachten Var "statealt" nicht. Fehler kommt beim "getState" (Syntax wohl falsch).

      Wie kann ich den Wert von "Bewegungsmeldung" wieder ins Script einlesen?

      on("hm-rpc.0.HEQ0364640.1.STATE", function(obj) {
          if (obj.newState.val === true) {
              var jetzt = new Date();
              var Std = jetzt.getHours();
              var Min = jetzt.getMinutes();
              var StdAusgabe = ((Std < 10) ? "0" + Std : Std);
              var MinAusgabe = ((Min < 10) ? "0" + Min : Min);
              var zeit = ( + StdAusgabe + "." + MinAusgabe + "h");
      //        var statealt = getState("javascript.0.Bewegungsmeldung");
      //        log("---> statealt: " + statealt,"info");
              setState("javascript.0.Bewegungsmeldung","Bewegung erkannt-test " + zeit); 
      		log("---> Bewegungsmeldung: Test","info");
      //    } else {
      //        setState("hm-rpc.0.HEQ0364640.1.STATE","kein text"); 
          }
      });
      

      536_custom10.png

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

        @bku:

        Sorry, bin kein Programmierer …

        Das Script läuft an bei Bewegungsmeldermeldung (danke BlueFox!). Nun möchte ich noch eine zweite Zeile ausgeben:

        Zeile 1 = aktuelle Meldung

        Zeile 2 = vorige Meldung

        Leider klappt das mit meiner gedachten Var "statealt" nicht. Fehler kommt beim "getState" (Syntax wohl falsch).

        Wie kann ich den Wert von "Bewegungsmeldung" wieder ins Script einlesen?

        on("hm-rpc.0.HEQ0364640.1.STATE", function(obj) {
            if (obj.newState.val === true) {
                var jetzt = new Date();
                var Std = jetzt.getHours();
                var Min = jetzt.getMinutes();
                var StdAusgabe = ((Std < 10) ? "0" + Std : Std);
                var MinAusgabe = ((Min < 10) ? "0" + Min : Min);
                var zeit = ( + StdAusgabe + "." + MinAusgabe + "h");
        //        var statealt = getState("javascript.0.Bewegungsmeldung");
        //        log("---> statealt: " + statealt,"info");
                setState("javascript.0.Bewegungsmeldung","Bewegung erkannt-test " + zeit); 
        		log("---> Bewegungsmeldung: Test","info");
        //    } else {
        //        setState("hm-rpc.0.HEQ0364640.1.STATE","kein text"); 
            }
        });
        ```` `  
        

        Man muss nicht "javascrtipt.0" schreiben. Einfach getState("Bewegungsmeldung"). Auch bei setState("Bewegungsmeldung", xxx)

        Ab nächster Version von ioBroker.vis wird es möglich sein beliebiges Widget abhängig von einem anderem Zustand anzeigen oder verbergen.

        Dann sollte so was möglich sein:

        `createState('BewegungsmeldungAck', false);
        createState('EreignisListe', '');
        var events = [];
        
        // Liste aus maximal 5 Ereignissen
        function getEventsList() {
            var text = '';
            for (var i = 0; i < events.length; i++) {
                 text += (text ? '
        \n' : '') + events[i];
            }
            return text;
        } 
        
        on('hm-rpc.0.HEQ0364640.1.STATE', function(obj) {
            if (obj.newState.val === true) {
                events.unshift(formatDate(new Date(), 'hh.mmh') + ' Bewegung erkannt');
                if (events.length > 5) events.pop();
                setState('EreignisListe', getEventsList());
                setState('BewegungsmeldungAck', false);
            }
        });`
        
        Und dann:
         ![48_hide.png](/assets/uploads/files/48_hide.png) [/i]
        
        1 Reply Last reply Reply Quote 0
        • B
          bku last edited by

          @ bluefox:

          Danke - funktioniert super. Hab sogar von "events.push" auf "events.unshift" (gefunden!) umgestellt. Nun ist die neueste Meldung oben.

          @Bluefox:

          beliebiges Widget abhängig von einem anderem Zustand anzeigen oder verbergen `
          Das klingt super!

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

            @bku:

            @ bluefox:

            Danke - funktioniert super. Hab sogar von "events.push" auf "events.unshift" (gefunden!) umgestellt. Nun ist die neueste Meldung oben.

            @Bluefox:

            beliebiges Widget abhängig von einem anderem Zustand anzeigen oder verbergen Das klingt super!

            Muss es dann statt "shift"````
            if (events.length > 5) events.shift();

            nicht "pop" sein?
            

            if (events.length > 5) events.pop();

            
            Ich hoffe es ist klar, dass man beliebig viele Events so darstellen kann und nicht nur 5? ;)
            1 Reply Last reply Reply Quote 0
            • B
              bku last edited by

              Ja ist klar. "pop" habe ich auch schon gefunden…. Danke!

              1 Reply Last reply Reply Quote 0
              • B
                bku last edited by

                @Bluefox:

                Dann sollte so was möglich sein:

                CODE:

                createState('BewegungsmeldungAck', false);

                createState('EreignisListe', '');

                var events = [];

                // Liste aus maximal 5 Ereignissen

                function getEventsList() {

                var text = '';

                for (var i = 0; i < events.length; i++) {

                text += (text ? <u>'
                \n'</u>
                : '') + events__;

                }

                return text;

                …__ __@bluefox:

                Läuft soweit gut, nur die "
                " sind noch in der Ereignisliste. Bekomme ich die weg, oder kannst Du da noch was machen?

                –------------------------------------------

                Dann noch eine zweite Geschichte, möchte einen Wert (Temperatur) in ein Script einlesen und dann prüfen. Klappt nicht (weil ich die Syntax/Parameter nicht kenne...... )

                Wie bekomme ich die Temperatur eingelesen?_

                log("===> Start TempTruhe","info");
                createState('TruheZuWarm', 'false');
                
                on("hm-rpc.0.GEQ0020381.1.TEMPERATURE"/*Gefriertruhentemperatur.TEMPERATURE*/, function(obj) {
                    if (obj.newState.val > "-20") {
                        setState('TruheZuWarm', 'true'); 
                		log("---> Truhe zu warm: ", +obj.newState.val,"info");
                    } else { 
                        setState('TruheZuWarm', 'false');
                		log("---> Truhe i.O.: ", +obj.newState.val,"info");        
                    }    
                });
                
                

                Danke und Gruß

                Bernd_ `

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

                  @bku:

                  @bluefox:

                  Läuft soweit gut, nur die "
                  " sind noch in der Ereignisliste. Bekomme ich die weg, oder kannst Du da noch was machen? `
                  Dafür gibt es zwei Möglichkeiten:
                  einfach löschen, oder "Basic - String (unescaped)" nutzen.

                  @bku:

                  Dann noch eine zweite Geschichte, möchte einen Wert (Temperatur) in ein Script einlesen und dann prüfen. Klappt nicht (weil ich die Syntax/Parameter nicht kenne…... )

                  Wie bekomme ich die Temperatur eingelesen?

                  log("===> Start TempTruhe","info");
                  createState('TruheZuWarm', 'false');
                  
                  on("hm-rpc.0.GEQ0020381.1.TEMPERATURE"/*Gefriertruhentemperatur.TEMPERATURE*/, function(obj) {
                      if (obj.newState.val > "-20") {
                          setState('TruheZuWarm', 'true'); 
                  		log("---> Truhe zu warm: ", +obj.newState.val,"info");
                      } else { 
                          setState('TruheZuWarm', 'false');
                  		log("---> Truhe i.O.: ", +obj.newState.val,"info");        
                      }    
                  });
                  
                  

                  Danke und Gruß

                  Bernd `

                  log("===> Start TempTruhe","info");
                  createState('TruheZuWarm', 'false');
                  
                  on("hm-rpc.0.GEQ0020381.1.TEMPERATURE"/*Gefriertruhentemperatur.TEMPERATURE*/, function(obj) {
                      var temp = parseFloat(obj.newState.val);
                      if (temp > -20) {
                          setState('TruheZuWarm', 'true'); 
                  		log("---> Truhe zu warm: ", +obj.newState.val,"info");
                      } else { 
                          setState('TruheZuWarm', 'false');
                  		log("---> Truhe i.O.: ", +obj.newState.val,"info");        
                      }    
                  });
                  
                  
                  1 Reply Last reply Reply Quote 0
                  • B
                    bku last edited by

                    @Bluefox:

                    log("===> Start TempTruhe","info");

                    createState('TruheZuWarm', 'false');

                    on("hm-rpc.0.GEQ0020381.1.TEMPERATURE"/Gefriertruhentemperatur.TEMPERATURE/, function(obj) {

                    var temp = parseFloat(obj.newState.val);

                    if (temp > -20) {

                    setState('TruheZuWarm', 'true');

                    log("–-> Truhe zu warm: ", +obj.newState.val,"info");

                    } else {

                    setState('TruheZuWarm', 'false');

                    log("---> Truhe i.O.: ", +obj.newState.val,"info");

                    }

                    }); `
                    @bluefox:

                    Klappt leider noch nicht, bekomme Fehler "….object is not a function"
                    304_sc-fehler.png
                    147_getting_started_3_de.png

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

                      @bku:

                      @Bluefox:

                      log("===> Start TempTruhe","info");

                      createState('TruheZuWarm', 'false');

                      on("hm-rpc.0.GEQ0020381.1.TEMPERATURE"/Gefriertruhentemperatur.TEMPERATURE/, function(obj) {

                      var temp = parseFloat(obj.newState.val);

                      if (temp > -20) {

                      setState('TruheZuWarm', 'true');

                      log("–-> Truhe zu warm: ", +obj.newState.val,"info");

                      } else {

                      setState('TruheZuWarm', 'false');

                      log("---> Truhe i.O.: ", +obj.newState.val,"info");

                      }

                      }); `
                      @bluefox:

                      Klappt leider noch nicht, bekomme Fehler "….object is not a function" `
                      Der stützt bei````
                      log("---> Truhe zu warm: ", +obj.newState.val,"info");

                      
                      Muss so sein:
                      

                      log("---> Truhe zu warm: " + obj.newState.val);

                      log("---> Truhe zu warm: " + obj.newState.val, "info");

                      
                      EDIT: Und danke. Du hast Fehler gefunden. :)
                      1 Reply Last reply Reply Quote 0
                      • B
                        bku last edited by

                        noch nicht ganz richtig?
                        304_sc2.png
                        304_sc1.png

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

                          @bku:

                          noch nicht ganz richtig? `
                          Komma zu viel:

                          log("–-> Truhe zu warm: ", + temp, "info");

                          if (temp > '-10')
                          

                          Schlecht:

                          Es muss sein:

                          if (temp > -10)
                          
                          1 Reply Last reply Reply Quote 0
                          • B
                            bku last edited by

                            Danke, läuft jetzt aber warum ist zwischen "Truhe 1" und "Truhe 2" immer eine Differenz ??

                            Der richtige Wert steht in "Truhe 1"
                            304_t2.png
                            304_t1.png

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

                              @bku:

                              Danke, läuft jetzt aber warum ist zwischen "Truhe 1" und "Truhe 2" immer eine Differenz ??

                              Der richtige Wert steht in "Truhe 1" `
                              Weil du

                              var temp = parseFloat(obj.oldState.val);

                              oldState nimmst. Und oldState das ist genau Zustand vor newState.

                              Richtig währe immer newState zu verwenden.

                              1 Reply Last reply Reply Quote 0
                              • B
                                bku last edited by

                                Danke - irgendwann hab ichs raus … 😉

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

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                517
                                Online

                                31.8k
                                Users

                                80.0k
                                Topics

                                1.3m
                                Posts

                                2
                                14
                                3621
                                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