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. Frage zum Script

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.6k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.8k

Frage zum Script

Geplant Angeheftet Gesperrt Verschoben JavaScript
14 Beiträge 2 Kommentatoren 3.8k Aufrufe
  • Ä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.
  • B Offline
    B Offline
    bku
    schrieb am zuletzt editiert von
    #1

    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 Antwort Letzte Antwort
    0
    • BluefoxB Offline
      BluefoxB Offline
      Bluefox
      schrieb am zuletzt editiert von
      #2

      @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 Antwort Letzte Antwort
      0
      • B Offline
        B Offline
        bku
        schrieb am zuletzt editiert von
        #3

        @ 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 Antwort Letzte Antwort
        0
        • BluefoxB Offline
          BluefoxB Offline
          Bluefox
          schrieb am zuletzt editiert von
          #4

          @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 Antwort Letzte Antwort
          0
          • B Offline
            B Offline
            bku
            schrieb am zuletzt editiert von
            #5

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

            1 Antwort Letzte Antwort
            0
            • B Offline
              B Offline
              bku
              schrieb am zuletzt editiert von
              #6

              @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 Antwort Letzte Antwort
              0
              • BluefoxB Offline
                BluefoxB Offline
                Bluefox
                schrieb am zuletzt editiert von
                #7

                @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 Antwort Letzte Antwort
                0
                • B Offline
                  B Offline
                  bku
                  schrieb am zuletzt editiert von
                  #8

                  @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 Antwort Letzte Antwort
                  0
                  • BluefoxB Offline
                    BluefoxB Offline
                    Bluefox
                    schrieb am zuletzt editiert von
                    #9

                    @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 Antwort Letzte Antwort
                    0
                    • B Offline
                      B Offline
                      bku
                      schrieb am zuletzt editiert von
                      #10

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

                      1 Antwort Letzte Antwort
                      0
                      • BluefoxB Offline
                        BluefoxB Offline
                        Bluefox
                        schrieb am zuletzt editiert von
                        #11

                        @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 Antwort Letzte Antwort
                        0
                        • B Offline
                          B Offline
                          bku
                          schrieb am zuletzt editiert von
                          #12

                          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 Antwort Letzte Antwort
                          0
                          • BluefoxB Offline
                            BluefoxB Offline
                            Bluefox
                            schrieb am zuletzt editiert von
                            #13

                            @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 Antwort Letzte Antwort
                            0
                            • B Offline
                              B Offline
                              bku
                              schrieb am zuletzt editiert von
                              #14

                              Danke - irgendwann hab ichs raus … ;)

                              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

                              345

                              Online

                              32.4k

                              Benutzer

                              81.5k

                              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