Skip to content
  • 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
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst] Array aus VIS verändern

NEWS

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

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

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

[gelöst] Array aus VIS verändern

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
32 Beiträge 8 Kommentatoren 8.4k 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.
  • M Offline
    M Offline
    Matthias I
    schrieb am zuletzt editiert von
    #23

    Hallo Brati,

    du hilfst ungemein!!!

    Ich habe die beiden ersten Skripte eingefügt,

    jeweils Kind1 und Kind2 durch die Namen von meiner Partnerin und mir ersetzt und die Object-IDs im Widget angepasst.

    Das funktioniert schon mal prima 🙂

    Als nächstes müsste ich nun das eigentliche "Weckerskript" einfügen. Das müsste dieses hier sein oder?

    ! function szeit() {
    ! var tag, weckzeiten, schulzeit, feiertag;
    ! schulzeit = getState("hm-rega.0.7475").val; // Schulzeit dann true
    ! feiertag = getState("hm-rega.0.31053").val; // Feiertag_morgen
    ! tag = new Date().getDay(); // Sonntag= 0 Montag=1, einlesen immer für nächsten Tag
    ! if (tag === 0) {tag = 7; } // getDay für Sonntag = 0 daher wird auf 1 gesetzt
    ! weckzeiten = JSON.parse(getState("javascript.0.Timer.Wecker.Editor.Weckzeiten").val); //einlesen der Weckzeiten aus State
    ! setState("hm-rega.0.25633", weckzeiten[tag].Optionen.KDienst);
    ! setState("javascript.0.Timer.Wecker.Kind1.Stunde", weckzeiten[tag].Kind1.stunde);
    ! setState("javascript.0.Timer.Wecker.Kind1.Minute", weckzeiten[tag].Kind1.minute);
    ! setState("Timer.Wecker.Kind1.Aktiv", weckzeiten[tag].Kind1.wecken);
    ! if (!schulzeit || feiertag) setState("Timer.Wecker.Kind1.Aktiv", false);
    ! }
    ! schedule("0 10 * * *", function (){
    ! szeit();
    ! });
    ! // ##################### variable ZEITSTEUERUNG #####################
    ! on(/^javascript.0.Timer.Wecker.Kind1.Stunde|javascript.0.Timer.Wecker.Kind1.Minute/, function(obj) {
    ! clearSchedule(Li_Auf);
    ! var id_Stunde = getState("javascript.0.Timer.Wecker.Kind1.Stunde").val,
    ! id_Minute = getState("javascript.0.Timer.Wecker.Kind1.Minute").val;
    ! AufZeit = id_Minute + ' ' + id_Stunde + ' * * *';
    ! log("Kind1 Aufstehen geändert auf: " + AufZeit);
    ! // ##################### Wecker entsprechend ZEITSTEUERUNG #####################
    ! Li_Auf = schedule(AufZeit, function(){
    ! var WStatus = getState("Timer.Wecker.Kind1.Aktiv").val,
    ! if (WStatus) { // wenn Wecker aktiv
    ! // hier kommt rein was zur Weckzeit passieren soll //
    ! }
    ! });
    ! });
    ! // ##################### Weckzeiten bei Neustart setzen #####################
    ! var Li_Auf = "00 12 * * *";
    ! createState("Timer.Wecker.Kind1.Stunde");
    ! createState("Timer.Wecker.Kind1.Minute");
    ! createState("Timer.Wecker.Kind1.Aktiv", true);
    ! var Temp_Minute = getState("Timer.Wecker.Kind1.Minute").val;
    ! setState("Timer.Wecker.Kind1.Minute", 59); // Timer bei Neustart setzen
    ! setState("Timer.Wecker.Kind1.Minute", Temp_Minute);
    ! // ##################### Standardzeiten entsprechend KDienst #####################
    ! on ({
    ! id: "hm-rega.0.25633",
    ! change: 'ne',
    ! val: 1 // Standardzeiten für Vaddi Dienst
    ! },
    ! function(){
    ! setState("javascript.0.Timer.Wecker.Kind1.Stunde",6);
    ! setState("javascript.0.Timer.Wecker.Kind1.Minute",25);
    ! setState("javascript.0.Timer.Wecker.Kind2.Stunde",6);
    ! setState("javascript.0.Timer.Wecker.Kind2.Minute",25);
    ! setState("Timer.Wecker.Kind1.Aktiv", true);
    ! setState("Timer.Wecker.Kind2.Aktiv", true);
    ! setState("javascript.0.Timer.Wecker.Fabia.Stunde",6);
    ! setState("javascript.0.Timer.Wecker.Fabia.Minute",25);
    ! setState("Timer.Wecker.Fabia.Aktiv", true);
    ! }
    ! );
    ! on ({
    ! id: "hm-rega.0.25633",
    ! change: 'ne',
    ! val: 0 // Standardzeiten für Muddi Dienst
    ! },
    ! function(){
    ! setState("javascript.0.Timer.Wecker.Kind1.Stunde",6);
    ! setState("javascript.0.Timer.Wecker.Kind1.Minute",30);
    ! setState("javascript.0.Timer.Wecker.Kind2.Stunde",6);
    ! setState("javascript.0.Timer.Wecker.Kind2.Minute",30);
    ! setState("Timer.Wecker.Kind1.Aktiv", true);
    ! setState("Timer.Wecker.Kind2.Aktiv", true);
    ! setState("javascript.0.Timer.Wecker.Fabia.Stunde",6);
    ! setState("javascript.0.Timer.Wecker.Fabia.Minute",55);
    ! setState("Timer.Wecker.Fabia.Aktiv", true);
    ! }
    ! );
    ! on ({
    ! id: "hm-rega.0.25633",
    ! change: 'ne',
    ! val: 2 // Wecker aus, wenn gar keiner muss
    ! },
    ! function(){
    ! setState("Timer.Wecker.Kind1.Aktiv", false);
    ! setState("Timer.Wecker.Kind2.Aktiv", false);
    ! setState("Timer.Wecker.Fabia.Aktiv", false);
    ! }
    ! );

    Darin fragst du (wenn ich das richtig verstehe) ab, ob ein Feiertag ist damit an einem Feiertag der Wecker ausgeschaltet bleibt vermute ich mal?

    Was steht hinter "hm-rega.0.25633"?

    Was muss ich beim Einfügen hier beachten?

    Gruß

    Matthias

    1 Antwort Letzte Antwort
    0
    • B Offline
      B Offline
      Brati
      schrieb am zuletzt editiert von
      #24

      > Was steht hinter "hm-rega.0.25633"?

      Das ist meine Variable Kinderdienst auf der CCU. Das ist halt so ein Mix aus CCU Programmen und ioBroker :). Das verlinkte Script ist richtig und ist das Masterscript. Es setzt auch die Standardzeiten wenn wir "aus Versehen" mal unseren Dienst tauschen. Bedeutet: Wäre morgen ich dran, meine Frau macht es aber, tippen wir auf Kinderdienst und die Variable springt eins weiter. Das Script reagiert darauf und setzt die Standardzeiten. Die Variable kann 0=Muddi, 1=Vaddi, 2=niemand seien und wird auch so per Widget durchgeschaltet. Also Muddi wird nur bei 0 angezeigt und schaltet bei Druck auf 1, dann wird nur Vaddi angezeigt und schaltet bei Druck auf….

      Für Kind 2 ist das Script einfacher.

      ! ````
      function szeit() {
      ! var tag, weckzeiten, schulzeit, feiertag;

      schulzeit   = getState("hm-rega.0.7475").val;       // Schulzeit dann true
      feiertag    = getState("hm-rega.0.31053").val;      // Feiertag_morgen
      

      ! tag = new Date().getDay(); // 1 = Sonntag 7 = Montag, einlesen immer für nächsten Tag

      if (tag === 0) {tag = 7; }   // getDay für Sonntag = 0 daher wird auf 1 gesetzt
      
      weckzeiten = JSON.parse(getState("javascript.0.Timer.Wecker.Editor.Weckzeiten").val);       //einlesen der Weckzeiten aus State
      
      log("Kind2 Tag heute: " + tag);
      setState("javascript.0.Timer.Wecker.Kind2.Stunde", weckzeiten[tag].Kind2.stunde);
      setState("javascript.0.Timer.Wecker.Kind2.Minute", weckzeiten[tag].Kind2.minute);
      setState("Timer.Wecker.Kind2.Aktiv", weckzeiten[tag].Kind2.wecken);
      if (!schulzeit || feiertag) 
          setState("Timer.Wecker.Kind2.Aktiv", false),
          setState("hm-rega.0.25633", 2);
      

      }

      ! schedule("1 10 * * *", function (){ // Zeitplan - wird jeden Tag um 10:00 Uhr für nächsten Tag gesetzt
      szeit();
      });
      ! // ##################### variable ZEITSTEUERUNG #####################
      var He_Auf = "00 12 * * *";
      ! on(/^javascript.0.Timer.Wecker.Kind2.Stunde|javascript.0.Timer.Wecker.Kind2.Minute/, function(obj) {
      clearSchedule(He_Auf);
      var id_Stunde = getState("javascript.0.Timer.Wecker.Kind2.Stunde").val,
      id_Minute = getState("javascript.0.Timer.Wecker.Kind2.Minute").val;

      AufZeit = id_Minute + ' ' + id_Stunde + ' * * *';
      log("HE Aufstehen geändert auf: " + AufZeit);
      He_Auf = schedule(AufZeit, function(){
          log("++++++++++ Aufsteh Script Kind2+++++ ");
          var WStatus = getState("Timer.Wecker.Kind2.Aktiv").val,   /*Wecker an (true) oder aus (false)*/
      
              weckzeiten  = JSON.parse(getState("javascript.0.Timer.Wecker.Editor.Weckzeiten").val),
              Luxwert     = getState("hm-rpc.0.NEQ0322510.1.LUX").val,     /*Lichtsensor.LUX*/
      
              tag = (new Date().getDay()-1); // 0 = Sonntag 1 = Montag, einlesen immer für nächsten Tag
                  if (tag === 0) {tag = 7; }   // getDay für Montag = 1 daher wird auf 7 gesetzt
                  if (tag === -1) {tag = 6; }  // getDay für Sonntag = 0 daher wird auf 6 gesetzt
              var Luxmax      = weckzeiten[tag].Optionen.Licht;
      
          if (WStatus === true) {                  // wenn Wecker aktiv
      
          // ##########   Hier kommt rein was der Wecker machen soll!!! ############//;
      });
      

      });

      createState("Timer.Wecker.Kind2.Stunde");
      createState("Timer.Wecker.Kind2.Minute");
      createState("Timer.Wecker.Kind2.Aktiv");
      var Temp_Minute = getState("Timer.Wecker.Kind2.Minute").val; // Timer beim Neustart setzen
      setState("Timer.Wecker.Kind2.Minute", 59);
      setState("Timer.Wecker.Kind2.Minute", Temp_Minute);

      ! ````

      Teste am Besten mit Logs rum und man kann auch gut im Blockly Aktionen erstellen und den JS Code hier einfügen. Hab mir auch JS alleine durch ioBroker beigebracht…

      Grüße

      Brati

      CCU2 - 46 Geräte, ioBroker auf Intel NUC (DN2820FYKH) mit Tab als Frontend, Projekt Gartenhaus mit HM

      1 Antwort Letzte Antwort
      0
      • M Offline
        M Offline
        Matthias I
        schrieb am zuletzt editiert von
        #25

        Hallo Brati,

        ich lerne JS auch gerade erst über iobroker 😉

        Habe das Masterskript nun eingefügt (auch hier habe ich Kind1 und Kind2 jeweils ersetzt).

        In Zeile 5 und 6 fragst du ab, ob Schultag oder Feiertag ist. Das möchte ich gerne übernhemen.

        Wie hast du das umgesetzt?

        Gruß

        Matthias

        1 Antwort Letzte Antwort
        0
        • B Offline
          B Offline
          Brati
          schrieb am zuletzt editiert von
          #26

          Wenn es nur der Feiertag seien soll, dann das Feiertage Script aus dem Homematic Forum, Feiertag heute & morgen. Mit Variablen auf der CCU.

          Schulzeit liest der Ical Adapter aus einem online Ferien Kalender aus.

          Es gibt auch direkt für ioBroker einen Feiertag Adapter, wenn du das also auf der CCU nicht brauchst, würde ich den nehmen. Keine Ahnung wie der funktioniert, aber vermutlich setzt er einen State auf true und den wertest du dann aus.

          Grüße Brati

          Von unterwegs gesendet…

          CCU2 - 46 Geräte, ioBroker auf Intel NUC (DN2820FYKH) mit Tab als Frontend, Projekt Gartenhaus mit HM

          1 Antwort Letzte Antwort
          0
          • M Offline
            M Offline
            Matthias I
            schrieb am zuletzt editiert von
            #27

            Den Feiertagadapter habe ich in iobroker installiert, der läuft 🙂

            Wie hast du den "Onlineferienkalender" eingebunden?

            Gruß

            Matthias

            1 Antwort Letzte Antwort
            0
            • T Offline
              T Offline
              tempestas
              schrieb am zuletzt editiert von
              #28

              eine Möglichkeit ist via iCal Adapter. So mache ich es.

              schulferien.org bietet die ics zum download an; direktes verlinken geht vielleicht auch, habs nicht ausprobiert

              <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

              1 Antwort Letzte Antwort
              0
              • B Offline
                B Offline
                Brati
                schrieb am zuletzt editiert von
                #29

                @tempestas:

                eine Möglichkeit ist via iCal Adapter. So mache ich es.

                schulferien.org bietet die ics zum download an; direktes verlinken geht vielleicht auch, habs nicht ausprobiert ` Dito und direktes Verlinken klappt.
                709_ical.jpg
                filename="Zustände.jpg" index="0">~~

                Von unterwegs gesendet…

                CCU2 - 46 Geräte, ioBroker auf Intel NUC (DN2820FYKH) mit Tab als Frontend, Projekt Gartenhaus mit HM

                1 Antwort Letzte Antwort
                0
                • M Offline
                  M Offline
                  Matthias I
                  schrieb am zuletzt editiert von
                  #30

                  Hallo Brati,

                  so sieht das bei mir jetzt auch aus.

                  Werde die Tage (zwischen den Weihnachtsvorbereitungen) immer mal wieder etwas rumprobieren

                  und hoffe ich darf dich dann zwischen den Jahren nochmal mit der ein oder anderen Frage nerven 😉

                  Liebe Grüße und schöne Feiertage!

                  Matthias

                  1 Antwort Letzte Antwort
                  0
                  • D Offline
                    D Offline
                    davincino
                    schrieb am zuletzt editiert von
                    #31

                    Hi Brati, vielen Dank für die ganzen Code-Zeilen. Hätte niemals mit json-table angefangen wenn ich nicht deine Zeilen gesehen hätte.

                    Passe nun alles entsprechend meiner Wünsche an und ergänze noch ein paar Sachen.

                    Mit war aufgefallen, dass Änderungen in der Tabelle sehr langsam übernommenen wurden. Lag am timeout von 2s vor Aufruf der main-function. Hatte ich zunächst nicht gesehen. Gab es dafür spezielle Gründe oder einfach Geschmackssache?

                    Danke

                    1 Antwort Letzte Antwort
                    0
                    • B Offline
                      B Offline
                      Brati
                      schrieb am zuletzt editiert von
                      #32

                      Der Timeout ist Zufall, stört mich nicht und da hatte mir pix geholfen.

                      Grüße Brati

                      CCU2 - 46 Geräte, ioBroker auf Intel NUC (DN2820FYKH) mit Tab als Frontend, Projekt Gartenhaus mit HM

                      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

                      734

                      Online

                      32.4k

                      Benutzer

                      81.4k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe