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.
  • 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

                            840

                            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