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. Frage zum Timing von setState

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

Frage zum Timing von setState

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
11 Beiträge 3 Kommentatoren 1.7k 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 Offline
    paul53P Offline
    paul53
    schrieb am zuletzt editiert von
    #2

    @Christof.Kac:

    würde ich gerne verstehen, was die "richtige" Lösung für dieses Problem ist. `

    setState('javascript.0.Settings.Weckzeit', "7:19", function() {
       log(getState('javascript.0.Settings.Weckzeit').val);
    });
    

    Nennt sich Callback.

    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

    hanssH 1 Antwort Letzte Antwort
    0
    • Christof.KacC Offline
      Christof.KacC Offline
      Christof.Kac
      schrieb am zuletzt editiert von
      #3

      Hi,

      da ich nun eine ganze Handvoll States initialisiere und dann in einer Funktion auswerte:

      Kann ich davon ausgehen, dass ich die CallBack Funktion beim letzten setState nutzen soll? Es macht ja keinen Sinn, bei 10 verschiedenen States den gleichen Callback zu definieren und ausführen zu lassen, oder?

      Oder habe ich da einen Denkfehler?

      Danke

      Christof

      ioBroker admin 6 mit cloud in einer VM mit CCU2, Rademacher Homepilot, FS20, Homematic, Google Home

      1 Antwort Letzte Antwort
      0
      • paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #4

        @Christof.Kac:

        Kann ich davon ausgehen, dass ich die CallBack Funktion beim letzten setState nutzen soll? `
        Nein.
        @Christof.Kac:

        Es macht ja keinen Sinn, bei 10 verschiedenen States den gleichen Callback zu definieren und ausführen zu lassen, oder? `
        Die Callbacks sind in dem Beispiel nicht gleich, denn sie verwenden verschiedene Datenpunkt-IDs.

        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
        • Christof.KacC Offline
          Christof.KacC Offline
          Christof.Kac
          schrieb am zuletzt editiert von
          #5

          Hi,

          dann brauche ich noch einen kleinen Tip.

          Meine Lösung sieht so aus, dass ich in einem Skript alle schedules für den Tag aufsetze (also nicht eins per Datenpunkt).

          Damit habe ich nicht ein Callback pro State.

          Sollte ich mein Skript aufteilen (wobei manchmal zwei States gebraucht werden, um einen schedule aufzusetzen => wird also schwierig) oder gibt es eine pfiffigere Lösung für mein Problem?

          Danke für den Support!

          Christof

          ioBroker admin 6 mit cloud in einer VM mit CCU2, Rademacher Homepilot, FS20, Homematic, Google Home

          1 Antwort Letzte Antwort
          0
          • paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #6

            Poste bitte das Skript, wie Du es bisher gelöst hast (oder lösen wolltest).

            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
            • Christof.KacC Offline
              Christof.KacC Offline
              Christof.Kac
              schrieb am zuletzt editiert von
              #7

              Hi,

              hier mein Skript. Ich hoffe, daraus wird meine Idee klar.

              ! ````
              createState('Settings', {
              name: 'Feiertag'
              });
              createState('Settings.SprachansageWochentag', {
              name: 'Uhrzeit für die Sprachansage am Wochentag'
              });
              createState('Settings.SprachansageWochenende', {
              name: 'Uhrzeit für die Sprachansage am Wochenende'
              });
              createState('Settings.Nachtruhe', {
              name: 'Uhrzeit für das Abschalten aller Lampen'
              });
              createState('Settings.LampenAusMorgens', {
              name: 'Uhrzeit für das Abschalten aller Lampen am Morgen'
              });
              createState('Settings.FruehestensRollosHochWochentag', {
              name: 'Uhrzeit für die früheste Zeit, wann Rollos Wochentags hochgehen dürfen'
              });
              createState('Settings.RollosHochWochenende', {
              name: 'Uhrzeit für Rollos hoch am Wochenende'
              });
              createState('Settings.Weckzeit', {
              name: 'Uhrzeit für den Wecker'
              });
              ! function initStates()
              {
              setState('javascript.0.Settings.Nachtruhe', "23:00");
              setState('javascript.0.Settings.SprachansageWochentag', "7:20");
              setState('javascript.0.Settings.SprachansageWochenende', "10:45");
              setState('javascript.0.Settings.LampenAusMorgens', "7:40");
              setState('javascript.0.Settings.FruehestensRollosHochWochentag', "6:30");
              setState('javascript.0.Settings.RollosHochWochenende', "9:30");
              setState('javascript.0.Settings.Weckzeit', "6:10");
              }
              ! var Morgenschedule;
              var Weckerschedule;
              ! function getScheduleObject(state) {
              var t = getState(state).val.split(":");
              var h = parseInt(t[0]);
              var m = parseInt(t[1]);
              var SchedStr = m + ' ' + h + ' * * *';
              return SchedStr;
              }
              ! // Jeden Morgen werden die schedules gesetzt
              on({time: {hour: 4, minute: 30}}, function () {
              TriggerSchedules();
              });
              ! function TriggerSchedules()
              {
              clearSchedule(Morgenschedule);
              clearSchedule(Weckerschedule);
              // Rollos hoch bei Sonnenaufgang, aber nicht vor 6.30 uhr am Wochentag
              if (getState("javascript.0.Feiertag.freierTag"/Heute frei (Feiertag oder Wochenende/).val === false)
              {
              // *********** Rollosteuerung ******************
              var today = new Date();
              var sonnenaufgang = getAstroDate('sunrise', today);
              today.setHours(6);
              today.setMinutes(30);
              var timeHourUp, timeMinuteUp;
              if (sonnenaufgang > today)
              {
              timeHourUp = sonnenaufgang.getHours();
              timeMinuteUp = sonnenaufgang.getMinutes();
              }
              else
              {
              var t = getState('javascript.0.Settings.FruehestensRollosHochWochentag').val.split(":");
              timeHourUp = parseInt(t[0]);
              timeMinuteUp = parseInt(t[1]);
              }

                  // *********** Wecker ******************
                  if (getState("ical.0.events.Urlaub"/*Urlaub*/).val === false)
                  {
              
                      var to = getScheduleObject('javascript.0.Settings.Weckzeit');
                      Weckerschedule = schedule(to, function ()
                      {
                          //setState("tr-064.0.states.ring"/*ring*/, '**611,5');
                          sendTo('telegram', 'Wecker');
                      });
                      log("Wecker: "+ getState('javascript.0.Settings.Weckzeit').val + " Uhr");
                  }
              }
              else
              {
                  // *********** Rollosteuerung ******************
                  t = getState('javascript.0.Settings.RollosHochWochenende').val.split(":");
                  timeHourUp = parseInt(t[0]);
                  timeMinuteUp = parseInt(t[1]);
              }
              
              Morgenschedule = schedule(timeMinuteUp + ' ' + timeHourUp + ' * * *', function () 
              {
                  RolloSteuerung(0);
              });
              log("Rollos auf: "+ timeHourUp+":"+timeMinuteUp + " Uhr");
              

              }
              // Skriptstart
              initStates();
              TriggerSchedules();

              ioBroker admin 6 mit cloud in einer VM mit CCU2, Rademacher Homepilot, FS20, Homematic, Google Home

              1 Antwort Letzte Antwort
              0
              • paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von paul53
                #8

                Das kann man durchaus so machen. Allerdings erscheint mir der Aufruf von initStates() bei jedem Skriptstart nicht sinnvoll, denn das setzt bei jedem Skriptstart manuell im Datenpunkt geänderte Zeiten (z.B. neue Weckzeit) auf die Zeiten im Skript zurück.

                Eine Erstinitialisierung der Datenpunktwerte macht man eigentlich mit createState(). Beispiel:

                createState('Settings.Nachtruhe', '23:00', {
                    name: 'Uhrzeit für das Abschalten aller Lampen',
                    type: 'string'
                });
                

                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
                • Christof.KacC Offline
                  Christof.KacC Offline
                  Christof.Kac
                  schrieb am zuletzt editiert von
                  #9

                  Danke….das ist natürlich einfacher.

                  Dann baue ich mein Skript etwas um.

                  Danke!

                  Christof

                  ioBroker admin 6 mit cloud in einer VM mit CCU2, Rademacher Homepilot, FS20, Homematic, Google Home

                  1 Antwort Letzte Antwort
                  0
                  • paul53P paul53

                    @Christof.Kac:

                    würde ich gerne verstehen, was die "richtige" Lösung für dieses Problem ist. `

                    setState('javascript.0.Settings.Weckzeit', "7:19", function() {
                       log(getState('javascript.0.Settings.Weckzeit').val);
                    });
                    

                    Nennt sich Callback.

                    hanssH Offline
                    hanssH Offline
                    hanss
                    schrieb am zuletzt editiert von
                    #10

                    @paul53
                    Wie kann ich der Callback Funktion einen Wert mitgeben?

                    val test = 5
                    setState('javascript.0.Settings.Weckzeit', "7:19", function(f_test) {
                       log(getState('javascript.0.Settings.Weckzeit').val);
                       log("test: "+f_test)
                    },test);
                    
                    paul53P 1 Antwort Letzte Antwort
                    0
                    • hanssH hanss

                      @paul53
                      Wie kann ich der Callback Funktion einen Wert mitgeben?

                      val test = 5
                      setState('javascript.0.Settings.Weckzeit', "7:19", function(f_test) {
                         log(getState('javascript.0.Settings.Weckzeit').val);
                         log("test: "+f_test)
                      },test);
                      
                      paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von paul53
                      #11

                      @hanss sagte:

                      Wie kann ich der Callback Funktion einen Wert mitgeben?

                      Man kann keinen Wert mitgeben, denn was an die Callback-Funktion übergeben wird, bestimmt die aufgerufene Funktion setState(id, val, ack, callback). setState() liefert nichts an die Callback-Funktion zurück (undefined).

                      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
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      484

                      Online

                      32.6k

                      Benutzer

                      82.0k

                      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