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. [gelöst] Manchmal geht es, manchmal nicht???

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    876

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

[gelöst] Manchmal geht es, manchmal nicht???

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
25 Beiträge 2 Kommentatoren 1.2k Aufrufe 1 Watching
  • Ä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.
  • paul53P paul53

    @skorpil
    Deklariere alle Funktionen außerhalb (vor) der Callback-Funktion von on().

    Übrigens:

    • formatDate() liefert auch Wochentage und Monatsnamen auf deutsch (außer aktuelle JS-Versionen ab 4.6.12).
    • Wenn man eine Zahl immer mit einen Nachkommastelle in einen String wandeln will, macht man das mit zahl.toFixed(1).
    S Offline
    S Offline
    skorpil
    schrieb am zuletzt editiert von
    #6

    @paul53 guten Morgen und frohen Vatertag

    Ich habe jetzt entsprechend Deiner Hinweise die Funktionen vor der on Anweisung deklariert. Das hat geklappt. Heute Morgen lief das angepasste Skript perfekt durch.

    Ich habe dennoch noch eine Frage: momentan gehe ich quasi mit meinem Skript einen Umweg über ein CCU Programm, da ich nicht weiß, wie ich das in Java lösen kann. Eigentlich soll das Skript NUR und EINMALIG im Zeitraum morgens in einem definierten Zeitraum ausgeführt werden, wenn der Bewegungsmelder anspricht. Das habe ich in folgendem CCU Programm abgebildet:

    Bl.jpg

    Eigentlich müßte sich doch diese Aufgabenstellung auch ohne CCU Prpgramm und ohne CCU Systemvariable direkt in Java Skript lösen lassen. Ich weiß nur nicht, wie das geht.

    Kannst Du mir helfen?

    paul53P 1 Antwort Letzte Antwort
    0
    • S skorpil

      @paul53 guten Morgen und frohen Vatertag

      Ich habe jetzt entsprechend Deiner Hinweise die Funktionen vor der on Anweisung deklariert. Das hat geklappt. Heute Morgen lief das angepasste Skript perfekt durch.

      Ich habe dennoch noch eine Frage: momentan gehe ich quasi mit meinem Skript einen Umweg über ein CCU Programm, da ich nicht weiß, wie ich das in Java lösen kann. Eigentlich soll das Skript NUR und EINMALIG im Zeitraum morgens in einem definierten Zeitraum ausgeführt werden, wenn der Bewegungsmelder anspricht. Das habe ich in folgendem CCU Programm abgebildet:

      Bl.jpg

      Eigentlich müßte sich doch diese Aufgabenstellung auch ohne CCU Prpgramm und ohne CCU Systemvariable direkt in Java Skript lösen lassen. Ich weiß nur nicht, wie das geht.

      Kannst Du mir helfen?

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #7

      @skorpil sagte:

      NUR und EINMALIG im Zeitraum morgens in einem definierten Zeitraum ausgeführt werden, wenn der Bewegungsmelder anspricht.

      var aufstehen = false;
      on(idBM, function(dp) {
         if(dp.state.val && compareTime('6:00', '10:00', 'between') && !aufstehen) {
            aufstehen = true;
            // Aktionen bei erster Bewegung morgens
         }
      });
      schedule('0 3 * * *', function() {
         aufstehen = false;
      });   
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      S 3 Antworten Letzte Antwort
      1
      • paul53P paul53

        @skorpil sagte:

        NUR und EINMALIG im Zeitraum morgens in einem definierten Zeitraum ausgeführt werden, wenn der Bewegungsmelder anspricht.

        var aufstehen = false;
        on(idBM, function(dp) {
           if(dp.state.val && compareTime('6:00', '10:00', 'between') && !aufstehen) {
              aufstehen = true;
              // Aktionen bei erster Bewegung morgens
           }
        });
        schedule('0 3 * * *', function() {
           aufstehen = false;
        });   
        
        S Offline
        S Offline
        skorpil
        schrieb am zuletzt editiert von
        #8

        @paul53

        ich bin Dir sehr dankbar. Es ist wirklich außergewöhnlich, wie Du Dich der Probleme anderer Nutzer stets aus Neue so uneigennützig annimmst.

        1 Antwort Letzte Antwort
        0
        • paul53P paul53

          @skorpil sagte:

          NUR und EINMALIG im Zeitraum morgens in einem definierten Zeitraum ausgeführt werden, wenn der Bewegungsmelder anspricht.

          var aufstehen = false;
          on(idBM, function(dp) {
             if(dp.state.val && compareTime('6:00', '10:00', 'between') && !aufstehen) {
                aufstehen = true;
                // Aktionen bei erster Bewegung morgens
             }
          });
          schedule('0 3 * * *', function() {
             aufstehen = false;
          });   
          
          S Offline
          S Offline
          skorpil
          schrieb am zuletzt editiert von
          #9

          @paul53

          nachdem Feedback ja bekanntlich breakfast for champions ist: heute morgen habe ich das Skript mit Deinen Hinweisen erstmals laufen lassen. Es hat super funktioniert. Danke!

          1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @skorpil sagte:

            NUR und EINMALIG im Zeitraum morgens in einem definierten Zeitraum ausgeführt werden, wenn der Bewegungsmelder anspricht.

            var aufstehen = false;
            on(idBM, function(dp) {
               if(dp.state.val && compareTime('6:00', '10:00', 'between') && !aufstehen) {
                  aufstehen = true;
                  // Aktionen bei erster Bewegung morgens
               }
            });
            schedule('0 3 * * *', function() {
               aufstehen = false;
            });   
            
            S Offline
            S Offline
            skorpil
            schrieb am zuletzt editiert von
            #10

            @paul53

            ich habe noch eine Verständnisinnige (für meine zukünftigen Programmierversuche)_

            Was ist der Unterschied zwischen

            on(idBM, function(dp) {
               if(dp.state.val
            

            und

            on({id: idBM, val: false}, function (data) {
            

            Also es geht mich nicht um die if Funktion. Das verstehe ich. Es geht mir um die Verwendung von "dp.state.val" im Vergleich zu "{id: idBM, val: false}". Was ist der Unterschied?

            paul53P 1 Antwort Letzte Antwort
            0
            • S skorpil

              @paul53

              ich habe noch eine Verständnisinnige (für meine zukünftigen Programmierversuche)_

              Was ist der Unterschied zwischen

              on(idBM, function(dp) {
                 if(dp.state.val
              

              und

              on({id: idBM, val: false}, function (data) {
              

              Also es geht mich nicht um die if Funktion. Das verstehe ich. Es geht mir um die Verwendung von "dp.state.val" im Vergleich zu "{id: idBM, val: false}". Was ist der Unterschied?

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #11

              @skorpil

              on(idBM, function(dp) {
              

              triggert nur bei Wertänderung.

              on({id: idBM, val: false}, function (data) {
              

              triggert bei jeder Zustandsänderung (Änderung Zeitstempel genügt), wenn der Wert false ist.

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              S 2 Antworten Letzte Antwort
              2
              • paul53P paul53

                @skorpil

                on(idBM, function(dp) {
                

                triggert nur bei Wertänderung.

                on({id: idBM, val: false}, function (data) {
                

                triggert bei jeder Zustandsänderung (Änderung Zeitstempel genügt), wenn der Wert false ist.

                S Offline
                S Offline
                skorpil
                schrieb am zuletzt editiert von
                #12

                @paul53 danke

                1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @skorpil

                  on(idBM, function(dp) {
                  

                  triggert nur bei Wertänderung.

                  on({id: idBM, val: false}, function (data) {
                  

                  triggert bei jeder Zustandsänderung (Änderung Zeitstempel genügt), wenn der Wert false ist.

                  S Offline
                  S Offline
                  skorpil
                  schrieb am zuletzt editiert von
                  #13

                  @paul53

                  Ich habe noch weitere Ereignisse/ Programmteile, die ich über den gleichen Trigger (Bewegungsmelder) im gleichen Zeitraum hintereinander auslösen möchte.

                  Ist es klug, diese ganzen Teile in ein Programm zu packen (unübersichtlich!) ? Oder ist es sinnvoller, neue Programme mit dem gleichen Trigger zu schreiben (funktioniert das) ?

                  paul53P 1 Antwort Letzte Antwort
                  0
                  • S skorpil

                    @paul53

                    Ich habe noch weitere Ereignisse/ Programmteile, die ich über den gleichen Trigger (Bewegungsmelder) im gleichen Zeitraum hintereinander auslösen möchte.

                    Ist es klug, diese ganzen Teile in ein Programm zu packen (unübersichtlich!) ? Oder ist es sinnvoller, neue Programme mit dem gleichen Trigger zu schreiben (funktioniert das) ?

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #14

                    @skorpil sagte:

                    Ist es klug, diese ganzen Teile in ein Programm zu packen

                    Vom Ressourcen-Verbrauch her gesehen: Ja.

                    @skorpil sagte in [gelöst] Manchmal geht es, manchmal nicht???:

                    neue Programme mit dem gleichen Trigger zu schreiben (funktioniert das) ?

                    Ja, das funktioniert, wenn man die Übersicht über mehrere Skripte behält.

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    S 1 Antwort Letzte Antwort
                    1
                    • paul53P paul53

                      @skorpil sagte:

                      Ist es klug, diese ganzen Teile in ein Programm zu packen

                      Vom Ressourcen-Verbrauch her gesehen: Ja.

                      @skorpil sagte in [gelöst] Manchmal geht es, manchmal nicht???:

                      neue Programme mit dem gleichen Trigger zu schreiben (funktioniert das) ?

                      Ja, das funktioniert, wenn man die Übersicht über mehrere Skripte behält.

                      S Offline
                      S Offline
                      skorpil
                      schrieb am zuletzt editiert von
                      #15

                      @paul53 Empfehlung? Wie würdest Du es machen?

                      paul53P 1 Antwort Letzte Antwort
                      0
                      • S skorpil

                        @paul53 Empfehlung? Wie würdest Du es machen?

                        paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von
                        #16

                        @skorpil sagte:

                        Wie würdest Du es machen?

                        Ich würde es in ein Skript packen.

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        1 Antwort Letzte Antwort
                        1
                        • S Offline
                          S Offline
                          skorpil
                          schrieb am zuletzt editiert von
                          #17

                          @paul53

                          ich schon wieder... Folgende Frage:

                          ich habe einen Datenpunkt, Typ String aus openweathermap

                          var idWindGeschw = 'openweathermap.0.forecast.current.windSpeed'/*Forecast for wind speed*/;
                          var idWindGeschwWert = idWindGeschw.state;
                          

                          Ich möchte in der Variablen"idWindGeschwWert " den INHALT des Datenpunktes, also den Wert, zuweisen. Und daran scheitere ich immer wieder. Weder mit ".state" noch mit ".val" noch mit ".state.val" bekomme ich das gewünschte Ergebnis. Ich produziere Fehlermeldungen.

                          Was mache ich falsch? Das Problem habe ich quasi immer wieder. Ich begreife einfach nicht, wie ich der Variablen "idWindGeschwWert "den Inhalt/ Wert zuweise. Bitte um Erklärung.

                          Dankeschön.

                          paul53P 1 Antwort Letzte Antwort
                          0
                          • S skorpil

                            @paul53

                            ich schon wieder... Folgende Frage:

                            ich habe einen Datenpunkt, Typ String aus openweathermap

                            var idWindGeschw = 'openweathermap.0.forecast.current.windSpeed'/*Forecast for wind speed*/;
                            var idWindGeschwWert = idWindGeschw.state;
                            

                            Ich möchte in der Variablen"idWindGeschwWert " den INHALT des Datenpunktes, also den Wert, zuweisen. Und daran scheitere ich immer wieder. Weder mit ".state" noch mit ".val" noch mit ".state.val" bekomme ich das gewünschte Ergebnis. Ich produziere Fehlermeldungen.

                            Was mache ich falsch? Das Problem habe ich quasi immer wieder. Ich begreife einfach nicht, wie ich der Variablen "idWindGeschwWert "den Inhalt/ Wert zuweise. Bitte um Erklärung.

                            Dankeschön.

                            paul53P Offline
                            paul53P Offline
                            paul53
                            schrieb am zuletzt editiert von paul53
                            #18

                            @skorpil sagte:

                            wie ich der Variablen "idWindGeschwWert "den Inhalt/ Wert zuweise.

                            getState(id).val

                            const idWindGeschw = 'openweathermap.0.forecast.current.windSpeed'/*Forecast for wind speed*/;
                            var WindGeschwWert = getState(idWindGeschw).val; // Initialisierung bei Script start
                            
                            on(idWindGeschw, function(dp) { // triggert bei Wertänderung
                               WindGeschwWert = dp.state.val;
                               // Auswertung der Variablen
                            });
                            

                            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                            S 2 Antworten Letzte Antwort
                            0
                            • paul53P paul53

                              @skorpil sagte:

                              wie ich der Variablen "idWindGeschwWert "den Inhalt/ Wert zuweise.

                              getState(id).val

                              const idWindGeschw = 'openweathermap.0.forecast.current.windSpeed'/*Forecast for wind speed*/;
                              var WindGeschwWert = getState(idWindGeschw).val; // Initialisierung bei Script start
                              
                              on(idWindGeschw, function(dp) { // triggert bei Wertänderung
                                 WindGeschwWert = dp.state.val;
                                 // Auswertung der Variablen
                              });
                              
                              S Offline
                              S Offline
                              skorpil
                              schrieb am zuletzt editiert von
                              #19

                              @paul53

                              Danke. getState. Klar Ich hätte es wissen müssen.

                              1 Antwort Letzte Antwort
                              0
                              • paul53P paul53

                                @skorpil sagte:

                                wie ich der Variablen "idWindGeschwWert "den Inhalt/ Wert zuweise.

                                getState(id).val

                                const idWindGeschw = 'openweathermap.0.forecast.current.windSpeed'/*Forecast for wind speed*/;
                                var WindGeschwWert = getState(idWindGeschw).val; // Initialisierung bei Script start
                                
                                on(idWindGeschw, function(dp) { // triggert bei Wertänderung
                                   WindGeschwWert = dp.state.val;
                                   // Auswertung der Variablen
                                });
                                
                                S Offline
                                S Offline
                                skorpil
                                schrieb am zuletzt editiert von
                                #20

                                @paul53

                                ...und nochmal ich...

                                In dem schon mehrfach diskutierten Skript habe ich mir timeouts eingebaut. Was ich erreichen will:

                                die drei Teile des Skripts sollen in einer bestimmten zeitlichen Reihenfolge ausgeführt werden:

                                on(idBM, function(dp) {
                                   if(dp.state.val && compareTime('6:00', '10:00', 'between') && !aufstehen) {
                                      aufstehen = true;
                                    
                                
                                    setTimeout(function() {
                                
                                    // ************************************************
                                    //  nach 12 Sekunden starten
                                    // ************************************************
                                
                                   Script  Teil 1
                                
                                
                                   }, 12000);
                                   // Ende timeout/ Verzögerung
                                
                                
                                setTimeout(function() {
                                    // ************************************************
                                    //  nach 45 Sekunden starten
                                    // ************************************************
                                
                                Script  Teil 2
                                
                                 }, 45000);
                                   // Ende timeout für Start
                                
                                setTimeout(function() {
                                    // ************************************************
                                    // Befehl zum stop nach 45 Minuten
                                    // ************************************************
                                
                                Script  Teil 3
                                
                                }, 2700000);
                                // Ende timeout für Stop
                                
                                
                                   }
                                   // Ende If
                                   
                                });
                                

                                Der erste Teil nach 12 Sekunden, der zweite Teil des Skripts nach 45 Sekunden, der dritte Teil nach 45 Minuten.

                                Ich kann das ja wg. der On Anweisung immer nur einmal morgens testen. Und heute morgen mindestens klappte Teil 1 des Skripts nicht.

                                Ist das so richtig?
                                Oder sollte ich das besser in drei verschiedenen Skripten abbilden?

                                paul53P 1 Antwort Letzte Antwort
                                0
                                • S skorpil

                                  @paul53

                                  ...und nochmal ich...

                                  In dem schon mehrfach diskutierten Skript habe ich mir timeouts eingebaut. Was ich erreichen will:

                                  die drei Teile des Skripts sollen in einer bestimmten zeitlichen Reihenfolge ausgeführt werden:

                                  on(idBM, function(dp) {
                                     if(dp.state.val && compareTime('6:00', '10:00', 'between') && !aufstehen) {
                                        aufstehen = true;
                                      
                                  
                                      setTimeout(function() {
                                  
                                      // ************************************************
                                      //  nach 12 Sekunden starten
                                      // ************************************************
                                  
                                     Script  Teil 1
                                  
                                  
                                     }, 12000);
                                     // Ende timeout/ Verzögerung
                                  
                                  
                                  setTimeout(function() {
                                      // ************************************************
                                      //  nach 45 Sekunden starten
                                      // ************************************************
                                  
                                  Script  Teil 2
                                  
                                   }, 45000);
                                     // Ende timeout für Start
                                  
                                  setTimeout(function() {
                                      // ************************************************
                                      // Befehl zum stop nach 45 Minuten
                                      // ************************************************
                                  
                                  Script  Teil 3
                                  
                                  }, 2700000);
                                  // Ende timeout für Stop
                                  
                                  
                                     }
                                     // Ende If
                                     
                                  });
                                  

                                  Der erste Teil nach 12 Sekunden, der zweite Teil des Skripts nach 45 Sekunden, der dritte Teil nach 45 Minuten.

                                  Ich kann das ja wg. der On Anweisung immer nur einmal morgens testen. Und heute morgen mindestens klappte Teil 1 des Skripts nicht.

                                  Ist das so richtig?
                                  Oder sollte ich das besser in drei verschiedenen Skripten abbilden?

                                  paul53P Offline
                                  paul53P Offline
                                  paul53
                                  schrieb am zuletzt editiert von
                                  #21

                                  @skorpil
                                  Das Rücksetzen der Variable aufstehen ist vorhanden ?

                                  schedule('0 3 * * *', function() {
                                     aufstehen = false;
                                  });
                                  

                                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                  S 3 Antworten Letzte Antwort
                                  0
                                  • paul53P paul53

                                    @skorpil
                                    Das Rücksetzen der Variable aufstehen ist vorhanden ?

                                    schedule('0 3 * * *', function() {
                                       aufstehen = false;
                                    });
                                    
                                    S Offline
                                    S Offline
                                    skorpil
                                    schrieb am zuletzt editiert von
                                    #22

                                    @paul53 ja

                                    1 Antwort Letzte Antwort
                                    0
                                    • paul53P paul53

                                      @skorpil
                                      Das Rücksetzen der Variable aufstehen ist vorhanden ?

                                      schedule('0 3 * * *', function() {
                                         aufstehen = false;
                                      });
                                      
                                      S Offline
                                      S Offline
                                      skorpil
                                      schrieb am zuletzt editiert von
                                      #23

                                      @paul53

                                      Nochmal zurück zu meiner Frage: ist das Skript von Grundsatz her so richtig?

                                      paul53P 1 Antwort Letzte Antwort
                                      0
                                      • S skorpil

                                        @paul53

                                        Nochmal zurück zu meiner Frage: ist das Skript von Grundsatz her so richtig?

                                        paul53P Offline
                                        paul53P Offline
                                        paul53
                                        schrieb am zuletzt editiert von paul53
                                        #24

                                        @skorpil sagte:

                                        ist das Skript von Grundsatz her so richtig?

                                        Ja, zusammen mit dem Rücksetzen von aufstehen.

                                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                        1 Antwort Letzte Antwort
                                        0
                                        • paul53P paul53

                                          @skorpil
                                          Das Rücksetzen der Variable aufstehen ist vorhanden ?

                                          schedule('0 3 * * *', function() {
                                             aufstehen = false;
                                          });
                                          
                                          S Offline
                                          S Offline
                                          skorpil
                                          schrieb am zuletzt editiert von
                                          #25

                                          @paul53

                                          Könntest Du Dir mal diese Fehlermeldung ansehen und mir sagen, was da falsch läuft?

                                          Link Text

                                          Ich verstehe diese Fehlermeldungen nicht.

                                          Danke u. frohe Pfingsten

                                          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

                                          753

                                          Online

                                          32.6k

                                          Benutzer

                                          82.1k

                                          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