Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. [Frage] Wie fange ich an? Komme von Fhem…

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Frage] Wie fange ich an? Komme von Fhem…

    This topic has been deleted. Only users with topic management privileges can see it.
    • caravandriver
      caravandriver last edited by

      Ja, genau ich meine ioBroker.vis - Ich kann meine Geräte ansteuern, Werte dort sehen, kein Problem… Ich könnte jetzt Problemlos eine schöne Oberfläche bauen und alle Geräte steuern.

      Was mir jetzt fehlt ist das gescripte...

      Ich möchte auf lange Sicht hin komplett von fhem weg und daher für das neue Szenario "atmolight" direkt alles in iobroker anlegen.

      1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators last edited by

        @caravandriver:

        Ich könnte jetzt Problemlos eine schöne Oberfläche bauen und alle Geräte steuern. `
        Das hört sich ja schon mal gut an.

        @caravandriver:

        Was mir jetzt fehlt ist das gescripte… `
        Und ich kann das gar nicht 😞

        Bist du denn des javascripts mächtig? Dann könntest du ja wirklich alles über ioBroker machen, und brauchst sehr wahrscheinlich auch kein Dummyscript.

        Schließlich schreibst du:
        @caravandriver:

        Ich möchte auf lange Sicht hin komplett von fhem weg `

        Für das Scripten und Blockly müsstest du dir von dem javascript Adapter eine Instanz anlegen und dann mal ansehen und etwas spielen.

        Dokus für die Logik- und Script-Adapter gibt es hier

        http://www.iobroker.net/?page_id=2415&lang=de

        Hilfe gibt es im Forum!

        Gruß

        Rainer

        1 Reply Last reply Reply Quote 0
        • caravandriver
          caravandriver last edited by

          Ich bekomme es einfach nicht hin via iobroker Script ein fhem device zu schalten:

          setState('fhem.0.Tischlampe.state',on); -> geht nicht

          setState("fhem.0.Tischlampe.state",on); –> geht nicht

          setState("fhem.0.Tischlampe.state","on"); --> geht nicht

          Wie ists richtig?

          1 Reply Last reply Reply Quote 0
          • apollon77
            apollon77 last edited by

            Ich denke true/false ?!

            1 Reply Last reply Reply Quote 0
            • caravandriver
              caravandriver last edited by

              habe ich auch durch… macht nix.

              1 Reply Last reply Reply Quote 0
              • apollon77
                apollon77 last edited by

                Dann geh mal auf "objekte" und suche das Obkeklt. Dann rechts das Stiftsymbol. Und sag mal was da steht … oder kopiere dass "raw experts only" JSON mal hierher

                1 Reply Last reply Reply Quote 0
                • caravandriver
                  caravandriver last edited by

                  Jetzt klappt es:

                  setState('fhem.0.Wohnzimmerlampe.state',true);
                  

                  Ich schaue mir gerade das Abwesenheitssimulationsscript an.

                  ! ```
                  `//..........Anwesenheitssimulation AWS Version 0.80
                  //..........Datum: 28.12.2015
                  //..........Autor: Looxer01
                  //..........Forum ioBroker
                  //..........http://forum.iobroker.com/posting.php?mode=post&f=21&sid=b3b2a31dae55081fedaf0ad9c8d74acd
                  //
                  //..........Änderungshistorie
                  //..........Version 0.10 Initial 28.12.2015
                  //..........Version 0.11 29.12.2015 Einstellungen um Astrozeiten erweitert (noch ohne Funktion)
                  //.........,Version 0.12 29.12.2015 EVENT Deaktivierung von AWS hinzugefügt: Schreiben Log und loeschen Schedules
                  //...............................................Aktivierung von AWS hihzugüfügt: Schreiben Log bei Aktivierung
                  //..........Version 0.13 29.12.2015 das Schreiben des externen Logs optional gemacht - unter Einstellungen auswaehlbar
                  //..........Version 0.20 29.12.2015 Astrozeit Funktion hinzugefügt. Astrozeit wird je IDGruppe auf true/false gesetzt und overruled die variablen zeit1von,zeit2von,zeit3von,zeit4von,zeit5von
                  //..........Version 0.30 29.12.2015 Umarbeitung zur Verkürzung des Scripts
                  //..........Version 0.31 30.12.2015 Fehlerbeseitigung in IDGruppen3 und 4 - einige Code Hygiene Massnahmen
                  //..................................Umbenennung der IDGruppen mit führend "ID" / Startverzögerungseinstellungen hinzugefügt
                  //..........Version 0.32 30.12.2015 umgestellt auf setStateDelayed / Startverzögerungsfunktion hinzugefügt.
                  //..........Version 0.33 31.12.2015 Fehler mit EVAL Funktion gefixt / Fehler mit Startverzoegerung und Einschaltzeiten gefixt
                  //..................................Funktion Anzahl von Geraete Teilnehmer zur Geraete ID bestimmung hinzugefügt
                  //..........Version 0.40 01.01.2016 Log-Pfad variablel gemacht // Log-File Format umgearbeitet und Headerline hinzugefügt fuer externes Log. Internes Log ueberarbeitet
                  //..........Version 0.41 02.01.2016 Funktionen von Baetz zum TimeInRange Check hinzugefuegt. Keine Globale Funktion mehr notwendig. -- Kommentarte ueberarbeitet
                  //..........Version 0.42 02.01.2015 Herkunftsnachweis für IsTimeInRange Funktion hinzugefuegt
                  //..................................Fehler zur zufaelligen Geraete Findung behoben. Das letzte Geraet wurde nie ausgewaehlt // Fehler im log "Gearaet wurde nicht eingeschaltet wurde gelogged auch wenn es eingeschaltet wurde"
                  //..........Version 0.43 03.01.2015 Wenn AWS auf inaktiv gesetzt wird, dann werden alle teilnehmenden Geraete ausgeschaltet - Dokumentation der Variablen / variablen deklaration nachgeholt fuer zwei Faelle
                  //..........Version 0.44 04.01.2015 Addieren der Einschaltverzoegerung zur Ausschaltzeit fuer die Ausschaltzeitberechnung // Fixed Fehler doppelte Schaltung fuer STATE geraete
                  //..........Version 0.45 04.01.2015 weiterer Fehler zur Berechnung der Ausschaltzeit korrigiert
                  //..........Version 0.50 04.01.2015 Beseitigung unnötiges Coding // Ueberpruefung ob Geraet existiert hinzugefuegt - LogMeldung falls nicht hinzugefuegt. - kein Javascript restart mehr, wenn geraet nicht existiert
                  //..........Version 0.60 04.01.2015 Ausschalten der Teilnehmer bei Deaktivierung optimiert. Ausschaltung optional gemacht / Astrozeit ueberarbeitet
                  //..................................Astrozeit auch fuer die bis Zeit hinzugefuegt. Damit lassen sich Schaltungen bis zum Sonnenaufgang umsetzen / weitere Codeoptimierungen
                  //..........Version 0.61 05.01.2015 Beim Ausschalten Verzoegerung zwischen Schaltvorgange eingebaut / Codeiptimierung bei den Gruppen Schedules / Fehler bei der GrpZufAnz und StartDelay beseitigt fuer Gruppen 2-5
                  //..........Version 0.65 06.01.2015 Reaktion bei bereits eigneschalteten Lampen variabel gemacht / Codeoptimierungen / ID fuer AWS-Aktiv ist jetzt variabel
                  //..........Version 0.70 26.01.2015 SetStateDelayed ist jetzt in javascript gefixt ab JS version 1.1.2 - Das Loeschen von Ein/Auschaltplanungen wird jetzt mit dem neuen Befehl clearStateDelayed gemacht
                  //..................................Vorläufig wurde das Merken der letzten Aktion geloescht, da es keine Verwendung im Moment hat
                  //..........Version 0.75 27.01.2015 Fehler beim Loeschen von Ein/Auschaltplanungen behoben - Es wurde nicht geloescht, wenn Verbraucher eingeschaltet bleiben sollen
                  //..........Version 0.80 28.04.2016 Fehler mit der Astrozeit, wenn die BisZeit < ist als die Astrozeit(von) beseitigt
                  ! //// Das Script wird aktiviert, wenn das Flag "Anwesenheitssteuerung gesetzt wird"
                  // HIER Einstellungen vornehmen............................................................................................
                  ! // Einstellungen der Aktivzeiten je IDGruppe von bis
                  var zeit1von = "12:00:00"; //Aktivzeit von IDGruppe1
                  var zeit1bis = "21:30:00"; //Aktivzeit bis IDGruppe1
                  ! var zeit2von = "12:15:00"; //Aktivzeit von IDGruppe2
                  var zeit2bis = "13:30:00"; //Aktivzeit bis IDGruppe2
                  ! var zeit3von = "12:30:00"; //Aktivzeit von IDGruppe3
                  var zeit3bis = "14:00:00"; //Aktivzeit bis IDGruppe3
                  ! var zeit4von = "12:00:00"; //Aktivzeit von IDGruppe4
                  var zeit4bis = "13:00:00"; //Aktivzeit bis IDGruppe4
                  ! var zeit5von = "12:00:00"; //Aktivzeit von IDGruppe5
                  var zeit5bis = "13:00:00"; //Aktivzeit bis IDGruppe5
                  ! // Wenn Astrozeit auf true steht, dann wird die vonZeit durch die Astrozeit übersteuert
                  var vonAstro1 = true ; // die zeit1von wird ersetzt durch die Astrozeit - wenn auf night - setting ist optional true = Verwendung der Astrozeit - IDGruppe1
                  var vonAstro2 = false ; // die zeit1von wird ersetzt durch die Astrozeit - wenn auf night - setting ist optional true = Verwendung der Astrozeit - IDGruppe2
                  var vonAstro3 = false ; // die zeit1von wird ersetzt durch die Astrozeit - wenn auf night - setting ist optional true = Verwendung der Astrozeit - IDGruppe3
                  var vonAstro4 = false ; // die zeit1von wird ersetzt durch die Astrozeit - wenn auf night - setting ist optional true = Verwendung der Astrozeit - IDGruppe4
                  var vonAstro5 = false ; // die zeit1von wird ersetzt durch die Astrozeit - wenn auf night - setting ist optional true = Verwendung der Astrozeit - IDGruppe5
                  ! // Wenn bis Astrozeit auf true steht, dann wird die bisZeit durch die Astrozeit übersteuert
                  var bisAstro1 = false ; // die zeit1von wird ersetzt durch die Astrozeit - setting ist optional true = Verwendung der Astrozeit - IDGruppe1
                  var bisAstro2 = false ; // die zeit1von wird ersetzt durch die Astrozeit - setting ist optional true = Verwendung der Astrozeit - IDGruppe2
                  var bisAstro3 = false ; // die zeit1von wird ersetzt durch die Astrozeit - setting ist optional true = Verwendung der Astrozeit - IDGruppe3
                  var bisAstro4 = false ; // die zeit1von wird ersetzt durch die Astrozeit - setting ist optional true = Verwendung der Astrozeit - IDGruppe4
                  var bisAstro5 = false ; // die zeit1von wird ersetzt durch die Astrozeit - setting ist optional true = Verwendung der Astrozeit - IDGruppe5
                  ! // Einstellungen der zufaelligen Einschaltdauer je IDGruppe von bis
                  var ein1von = 1; // Minuten IDGruppe1 von
                  var ein1bis = 10; // Minuten IDGruppe1 bis
                  var ein2von = 10; // Minuten IDGruppe2 von
                  var ein2bis = 30; // Minuten IDGruppe2 bis
                  var ein3von = 5; // Minuten IDGruppe3 von
                  var ein3bis = 20; // Minuten IDGruppe3 bis
                  var ein4von = 20; // Minuten IDGruppe4 von
                  var ein4bis = 45; // Minuten IDGruppe4 bis
                  var ein5von = 10; // Minuten IDGruppe5 von
                  var ein5bis = 30; // Minuten IDGruppe5 bis
                  ! // Einstellung je Gruppe für die maximale Startverzögerung in Minuten
                  // bei 0 = keine Startverzögerung - bei z.B. 10 = Startverzögerung zwischen 0 und 10 in Minuten
                  //
                  var StartDelay1 = 0; // Maximale Startverzoegerung Gruppe1
                  var StartDelay2 = 0; // Maximale Startverzoegerung Gruppe2
                  var StartDelay3 = 0; // Maximale Startverzoegerung Gruppe3
                  var StartDelay4 = 0; // Maximale Startverzoegerung Gruppe4
                  var StartDelay5 = 0; // Maximale Startverzoegerung Gruppe5
                  ! // Einstellung Check-schedule - Voreinstellung z.B. alle 30 Minuten je IDGruppe - Damit wird je Lauf nach Zufaelligkeit je ein Geraet der IDGruppe eingeschaltet
                  var cron1 = 1; // checks alle x Minuten für IDGruppe1
                  var cron2 = 1; // checks alle x Minuten für IDGruppe2
                  var cron3 = 1; // checks alle x Minuten für IDGruppe3
                  var cron4 = 1; // checks alle x Minuten für IDGruppe4
                  var cron5 = 0; // checks alle x Minuten für IDGruppe5
                  ! // Einstellung teilnehmende Homematic Geräte je IDGruppe maximal 5 - Eingabe der Homematic ID
                  var IDGruppe11 = "fhem.0.Vitrine.state";
                  var IDGruppe12 = "fhem.0.Tischlampe.state";
                  var IDGruppe13 = "fhem.0.Treppe.state";
                  var IDGruppe14 = ""; // Licht Kinderbad
                  var IDGruppe15 = ""; // Licht Hobbyraum
                  var Grp1ZufAnz = 3; // Anzahl der Geräte zur zufälligen Bestimmung des Geraetes
                  ! var IDGruppe21 = "fhem.0.Vitrine.state"; // Licht Wohnzimmer Esstisch Deckenlampe
                  var IDGruppe22 = "fhem.0.Tischlampe.state"; // Licht Terrassentuere
                  var IDGruppe23 = "fhem.0.Treppe.state"; // Licht Wohnzimmer Esstisch Stehlampe
                  var IDGruppe24 = " ";
                  var IDGruppe25 = " ";
                  var Grp2ZufAnz = 3; // Anzahl der Geräte zur zufälligen Bestimmung des Geraetes
                  ! var IDGruppe31 = "fhem.0.Vitrine.state"; // Licht Flur oben Wand;
                  var IDGruppe32 = "fhem.0.Tischlampe.state"; // Licht Flur oben unten;
                  var IDGruppe33 = "fhem.0.Treppe.state"; // Licht Kinderbad
                  var IDGruppe34 = " ";
                  var IDGruppe35 = " ";
                  var Grp3ZufAnz = 3; // Anzahl der Geräte zur zufälligen Bestimmung des Geraetes
                  ! var IDGruppe41 = "fhem.0.Vitrine.state";
                  var IDGruppe42 = "fhem.0.Tischlampe.state";
                  var IDGruppe43 = "fhem.0.Treppe.state";
                  var IDGruppe44 = " ";
                  var IDGruppe45 = " ";
                  var Grp4ZufAnz = 3; // Anzahl der Geräte zur zufälligen Bestimmung des Geraetes
                  ! var IDGruppe51 = "fhem.0.Vitrine.state";
                  var IDGruppe52 = "fhem.0.Tischlampe.state";
                  var IDGruppe53 = "fhem.0.Treppe.state";
                  var IDGruppe54 = " ";
                  var IDGruppe55 = " ";
                  var Grp5ZufAnz = 3; // Anzahl der Geräte zur zufälligen Bestimmung des Geraetes
                  ! var logflag = true; // wenn auf true dann wird das logging in Datei /opt/iobroker/iobroker-data/AWSLog.csv eingeschaltet bei false vice versa
                  ! var ausflag = false; // Wenn AWS deaktiviert wird, dann werden alle Teilnehmer ausgeschaltet
                  ! // Ende Einstellungen .......................................................................................................
                  ! // Experten-Einstellungen .......................................................................................................
                  ! createState('Anwesenheitssteuerung.AWSAktiv',true);
                  var IDAWSaktiv = "javascript.0.Anwesenheitssteuerung.AWSAktiv"; // in den objekten angelegte variable zur Bestimmung ob AWS aktiv ist - Kann auch ausgetauscht werden durch eine andere
                  var LogPath = "/opt/iobroker/iobroker-data/AWSLog.csv"; // Pfad und Dateiname des externen Logs
                  var IgnoreWhenOn = false; // bei true: Ignoriert den Schaltvorgang, wenn das Geraet bereits eingeschaltet war
                  ! // Ende Experten-Einstellungen .......................................................................................................
                  ! var fs = require('fs'); // enable write fuer externes log
                  var cron1job = "/"+cron1+" * * * "; // CRON pattern aufgrund der Vorgabe in den Einstellungen
                  var cron2job = "
                  /"+cron2+" * * * "; // CRON pattern aufgrund der Vorgabe in den Einstellungen
                  var cron3job = "
                  /"+cron3+" * * * "; // CRON pattern aufgrund der Vorgabe in den Einstellungen
                  var cron4job = "
                  /"+cron4+" * * * "; // CRON pattern aufgrund der Vorgabe in den Einstellungen
                  var cron5job = "
                  /"+cron5+" * * * "; // CRON pattern aufgrund der Vorgabe in den Einstellungen
                  var x = 0; // Geraetenummer der Gruppe, die zufaellig ausgewaehlt wurde
                  var y = 0; // Einschaltzdauer aufgrund der Zufallszahl in Millisekunden
                  var z = 0; // Einschaltverzögerung aufgrund der Zufallszahl
                  var string = " "; // Logstring
                  var logtext=" " ; // Kommentar im log
                  var objIDGruppe = " "; // uebergabe an Funktion der IDGruppe zum Schalten des Geraetes
                  var SpaceChk = new RegExp(/\s/); // pattern um zu pruefen ob eine IDGruppe blanks enthaelt
                  ! // Execute IDGruppe1
                  //-------------------------------------------------------------------------------------------------------------------------------------------------------
                  schedule(cron1job, function() {
                  if (getState(IDAWSaktiv).val === true) { // AWS aktiv ?
                  zeit1von = astrojetzt(zeit1von,zeit1bis,"von",vonAstro1,bisAstro1); // endif - setzen der abweichenden von-Zeit falls Astro aktiv
                  zeit1bis = astrojetzt(zeit1von,zeit1bis,"bis",vonAstro1,bisAstro1); // endif - setzen der abweichenden bis-Zeit falls Astro aktiv
                  // if (vonAstro1 === true) { zeit1von = astrojetzt(zeit1von,"von"); } // endif - setzen der abweichenden von-Zeit falls Astro aktiv
                  // if (bisAstro1 === true) { zeit1bis = astrojetzt(zeit1bis,"bis"); } // endif - setzen der abweichenden bis-Zeit falls Astro aktiv
                  if(isTimeInRange(zeit1von, zeit1bis)) { // ist die "von"-Zeit innerhalb des aktuellen Zeitfensters ?
                  log("astrozeit1von gesetzt von " + zeit1von + " bis " + zeit1bis ,"info");
                  x = zufall(1,Grp1ZufAnz,x); // Ermittlung zufaelliges Geraet zum enschalten
                  z = zufall(0,StartDelay1
                  60,y)1000; // Ermittlung der Einschaltverzögerung aufgrund der Zufallszahl
                  y = zufall(ein1von
                  60,ein1bis
                  60,y)1000; // Ermittlung der Einschaltzdauer aufgrund der Zufallszahl in Millisekunden
                  var IDGruppe = "IDGruppe1" + x; // Ermittlung Gruppenname z.B. IDGruppe11
                  if (x <= 5 && GeraetExists(IDGruppe)) { AWSSchaltung(IDGruppe,y,z); } // Geraetenummer muss 1 - 5 sein, dass Geraet muss existieren dann schalten
                  } // Ende Zeitcheck
                  } // Endeif für AWS-Aktivflag check
                  }); // end schedule IDGruppe1
                  ! // Execute IDGruppe2
                  //-------------------------------------------------------------------------------------------------------------------------------------------------------
                  schedule(cron2job, function() {
                  if (getState(IDAWSaktiv).val === true) { // AWS aktiv ?
                  zeit2von = astrojetzt(zeit2von,zeit2bis,"von",vonAstro2,bisAstro2); // endif - setzen der abweichenden von-Zeit falls Astro aktiv
                  zeit2bis = astrojetzt(zeit2von,zeit2bis,"bis",vonAstro2,bisAstro2); // endif - setzen der abweichenden bis-Zeit falls Astro aktiv
                  // if (vonAstro2 === true) { zeit2von = astrojetzt(zeit2von,"von"); } // endif - setzen der abweichenden von-Zeit falls Astro aktiv
                  // if (bisAstro2 === true) { zeit2bis = astrojetzt(zeit2bis,"bis"); } // endif - setzen der abweichenden bis-Zeit falls Astro aktiv
                  if(isTimeInRange(zeit2von, zeit2bis)) { // ist die "von"-Zeit innerhalb des aktuellen Zeitfensters ?
                  x = zufall(1,Grp2ZufAnz,x); // Ermittlung zufaelliges Geraet zum enschalten
                  z = zufall(0,StartDelay2
                  60,y)1000; // Ermittlung der Einschaltverzögerung aufgrund der Zufallszahl
                  y = zufall(ein2von
                  60,ein2bis60,y)1000; // Ermittlung der Einschaltzdauer aufgrund der Zufallszahl in Millisekunden
                  var IDGruppe = "IDGruppe2" + x; // Ermittlung Gruppenname z.B. IDGruppe21
                  if (x <= 5 && GeraetExists(IDGruppe)) { AWSSchaltung(IDGruppe,y,z); } // Geraetenummer muss 1 - 5 sein, dass Geraet muss existieren dann schalten
                  } // Ende Zeitcheck
                  } // Endeif für AWS-Aktivflag check
                  }); // end schedule IDGruppe2
                  ! // Execute IDGruppe3
                  //-------------------------------------------------------------------------------------------------------------------------------------------------------
                  schedule(cron3job, function() {
                  if (getState(IDAWSaktiv).val === true) { // AWS aktiv ?
                  zeit3von = astrojetzt(zeit3von,zeit3bis,"von",vonAstro3,bisAstro3); // endif - setzen der abweichenden von-Zeit falls Astro aktiv
                  zeit3bis = astrojetzt(zeit3von,zeit3bis,"bis",vonAstro3,bisAstro3); // endif - setzen der abweichenden bis-Zeit falls Astro aktiv
                  // if (vonAstro3 === true) { zeit3von = astrojetzt(zeit3von,"von"); } // endif - setzen der abweichenden von-Zeit falls Astro aktiv
                  // if (bisAstro3 === true) { zeit3bis = astrojetzt(zeit3bis,"bis"); } // endif - setzen der abweichenden bis-Zeit falls Astro aktiv
                  if(isTimeInRange(zeit3von, zeit3bis)) { // ist die "von"-Zeit innerhalb des aktuellen Zeitfensters ?
                  x = zufall(1,Grp3ZufAnz,x); // Ermittlung zufaelliges Geraet zum enschalten
                  z = zufall(0,StartDelay3
                  60,y)1000; // Ermittlung der Einschaltverzögerung aufgrund der Zufallszahl
                  y = zufall(ein3von
                  60,ein3bis
                  60,y)1000; // Ermittlung der Einschaltzdauer aufgrund der Zufallszahl in Millisekunden
                  var IDGruppe = "IDGruppe3" + x; // Ermittlung Gruppenname z.B. IDGruppe31
                  if (x <= 5 && GeraetExists(IDGruppe)) { AWSSchaltung(IDGruppe,y,z); } // Geraetenummer muss 1 - 5 sein, dass Geraet muss existieren dann schalten
                  } // Ende Zeitcheck
                  } // Endeif für AWS-Aktivflag check
                  }); // end schedule IDGruppe3
                  ! // Execute IDGruppe4
                  //-------------------------------------------------------------------------------------------------------------------------------------------------------
                  schedule(cron4job, function() {
                  if (getState(IDAWSaktiv).val === true) { // AWS aktiv ?
                  zeit4von = astrojetzt(zeit4von,zeit4bis,"von",vonAstro4,bisAstro4); // endif - setzen der abweichenden von-Zeit falls Astro aktiv
                  zeit4bis = astrojetzt(zeit4von,zeit4bis,"bis",vonAstro4,bisAstro4); // endif - setzen der abweichenden bis-Zeit falls Astro aktiv
                  // if (vonAstro4 === true) { zeit4von = astrojetzt(zeit4von,"von"); } // endif - setzen der abweichenden von-Zeit falls Astro aktiv
                  // if (bisAstro4 === true) { zeit1bis = astrojetzt(zeit4bis,"bis"); } // endif - setzen der abweichenden bis-Zeit falls Astro aktiv
                  if(isTimeInRange(zeit4von, zeit4bis)) { // ist die "von"-Zeit innerhalb des aktuellen Zeitfensters ?
                  x = zufall(1,Grp4ZufAnz,x); // Ermittlung zufaelliges Geraet zum enschalten
                  z = zufall(0,StartDelay4
                  60,y)1000; // Ermittlung der Einschaltverzögerung aufgrund der Zufallszahl
                  y = zufall(ein4von
                  60,ein4bis60,y)1000; // Ermittlung der Einschaltzdauer aufgrund der Zufallszahl in Millisekunden
                  var IDGruppe = "IDGruppe4" + x; // Ermittlung Gruppenname z.B. IDGruppe41
                  if (x <= 5 && GeraetExists(IDGruppe)) { AWSSchaltung(IDGruppe,y,z); } // Geraetenummer muss 1 - 5 sein, dass Geraet muss existieren dann schalten
                  } // Ende Zeitcheck
                  } // Endeif für AWS-Aktivflag check
                  }); // end schedule IDGruppe4
                  ! // Execute IDGruppe5
                  //-------------------------------------------------------------------------------------------------------------------------------------------------------
                  schedule(cron5job, function() {
                  if (getState(IDAWSaktiv).val === true) { // AWS aktiv ?
                  zeit5von = astrojetzt(zeit5von,zeit5bis,"von",vonAstro5,bisAstro5); // endif - setzen der abweichenden von-Zeit falls Astro aktiv
                  zeit5bis = astrojetzt(zeit5von,zeit5bis,"bis",vonAstro5,bisAstro5); // endif - setzen der abweichenden bis-Zeit falls Astro aktiv
                  // if (vonAstro5 === true) { zeit5von = astrojetzt(zeit5von,"von"); } // endif - setzen der abweichenden von-Zeit falls Astro aktiv
                  // if (bisAstro5 === true) { zeit5bis = astrojetzt(zeit5bis,"bis"); } // endif - setzen der abweichenden bis-Zeit falls Astro aktiv
                  if(isTimeInRange(zeit5von, zeit5bis)) { // ist die "von"-Zeit innerhalb des aktuellen Zeitfensters ?
                  x = zufall(1,Grp5ZufAnz,x); // Ermittlung zufaelliges Geraet zum enschalten
                  z = zufall(0,StartDelay5
                  60,y)1000; // Ermittlung der Einschaltverzögerung aufgrund der Zufallszahl
                  y = zufall(ein5von
                  60,ein5bis
                  60,y)*1000; // Ermittlung der Einschaltzdauer aufgrund der Zufallszahl in Millisekunden
                  var IDGruppe = "IDGruppe5" + x; // Ermittlung Gruppenname z.B. IDGruppe51
                  if (x <= 5 && GeraetExists(IDGruppe)) { AWSSchaltung(IDGruppe,y,z); } // Geraetenummer muss 1 - 5 sein, dass Geraet muss existieren dann schalten
                  } // Ende Zeitcheck
                  } // Endeif für AWS-Aktivflag check
                  }); // end schedule IDGruppe5
                  ! // ------------------------Ruecksetzen der Timeouts /Ausschalten der teilnehmenden Geraete, wenn AWS-Aktiv auf false gesetzt wird--------------
                  ! on({id: IDAWSaktiv, val: false }, function(obj) // Event: wenn AWS Flag auf nicht aktiv gesetzt wurde
                  {
                  ! var objGruppeI = " "; // Baut die IDGruppe zusammen Position 1
                  var objGruppeJ = " "; // Baut die IDGruppe zusammen Position 2
                  var countobj = 0; //counter fuer Verzoegerungen zwischen den Ausschaltungen
                  ! for (i = 1; i <= 5; i++) { // Loop fuer die Gruppen-Nr
                  objGruppeI = "IDGruppe" + i; // Loop fuer die Geraete Nr der IDGruppen 1 - 5
                  for (j = 1; j <= 5; j++) { // Loop Position 2 /1 - 5 )
                  objGruppeJ = objGruppeI + j ; // Ermittlung Position 2
                  if (SpaceChk.test(eval(objGruppeJ))) { // Check for blanks
                  } else { // keine blanks
                  if (GeraetExists(objGruppeJ) === true) { // Gibt es das Geraet
                  clearStateDelayed(eval(objGruppeJ)); // Alle Pläne der Gruppe loeschen
                  if (ausflag) { // sollen die Teilnehmer ausgeschaltet werden ?
                  setStateDelayed(eval(objGruppeJ), false, countobj); // ausschalten mit je 300 millisekunden wartezeit
                  } // endif check ob Geraete ausgeschaltet werden sollen
                  countobj = countobj + 300; // alle 300 millisekunden schalten
                  } // endif fuer Geraetecheck und switch off
                  } // end Space Check
                  } // Ende Position 2 Loop
                  } // Ende Position 1 Loop
                  log("EVENT AWS deaktiviert Der schedule zur geplanten Ausschaltung von Geraeten wurde zurueckgesetzt " ,"info");
                  string = ";;;;;;;AWS wurde deaktiviert - Der schedule zur geplanten Ausschaltung von Geraeten wurde zurueckgesetzt"; // bereite LOG vor
                  ! writelog(string); // schreibe LOG in Datei
                  ! }); // ende on id
                  ! // ------------------------schreibe Log wenn AWS aktiviert wurde--------------------------------------
                  ! on({id: IDAWSaktiv, val: true }, function(obj) // Event: wenn AWS Flag auf nicht aktiv gesetzt wurde
                  {
                  ! log("EVENT AWS wurde aktiviert " ,"info");
                  string = ";;;;;;;AWS wurde aktiviert"; // bereite LOG vor
                  writelog(string);
                  ! }); // ende on id
                  ! // ------------------------ F U N K T I O N E N -------------------------------------------------------
                  ! //-----------------------------------------------------------------------------------------------------
                  // Diese Funktion schaltet die IDGruppenmitglieder der gerade zu berabeitenden IDGruppe
                  //-----------------------------------------------------------------------------------------------------
                  function AWSSchaltung(objIDGruppe,y,z) {
                  logtext = " ";
                  if (eval(objIDGruppe).match('STATE')) { // ist es ein STATE Geraet ?
                  if (getState(eval(objIDGruppe)).val === false ) { // nur wenn noch nicht eingeschaltet
                  setStateDelayed(eval(objIDGruppe), true, z); // Licht an in z millisekunden
                  // var timer = setTimeout(function (){
                  // setState(eval(objIDGruppe),0); }, z+y); //Licht aus in y millisekunden (Einschaltverzoegerung plus Einschaltdauer)
                  setStateDelayed(eval(objIDGruppe), false, z+y, false); //Licht aus in z+y millisekunden (Einschaltverzoegerung plus Einschaltdauer)
                  } else { // else - Geraet ist schon eingeschaltet
                  if (IgnoreWhenOn) { //keine Reaktion wenn Geraet bereits eingeschaltet war
                  logtext = "keine Aktion - Geraet war bereits eingeschaltet";
                  } else { // else - es soll uebersteuert werden mit den neuen werten
                  z = 0; // Einschaltverzoegerung setzen auf Null
                  setStateDelayed(eval(objIDGruppe), false, z+y, true ); //Licht aus in z+y millisekunden (Einschaltverzoegerung plus Einschaltdauer) ohne Einschaltverzoegerung
                  logtext = "Geraet war bereits eingeschaltet -- uebersteuert - ohne Einschaltverzoegerung - alter schedule geloescht- ";
                  } // endeif IgnoreWhenOn
                  } // Ende IF fuer Check ob bereits eingeschaltet
                  } // Ende IF für STATE Geraete

                  if (eval(objIDGruppe).match('LEVEL')) {                                             // ist es ein LEVEL Geraet ?
                     if  (getState(eval(objIDGruppe)).val === 0 ) {                                   // nur wenn noch nicht eingeschaltet
                          setStateDelayed(eval(objIDGruppe), 100,  z);                                // Licht an in z millisekunden
                  

                  // var timer = setTimeout(function (){
                  // setState(eval(objIDGruppe),0); }, z+y); //Licht aus in y millisekunden (Einschaltverzoegerung plus Einschaltdauer)
                  setStateDelayed(eval(objIDGruppe), 0, z+y, false); //Licht aus in y millisekunden (Einschaltverzoegerung plus Einschaltdauer)
                  } else { // else - Geraet ist schon eingeschaltet
                  if (IgnoreWhenOn) { //keine Reaktion wenn Geraet bereits eingeschaltet war
                  logtext = "keine Aktion - Geraet war bereits eingeschaltet";
                  } else { // else - es soll uebersteuert werden mit den neuen werten
                  z = 0; // Einschaltverzoegerung setzen auf Null
                  setStateDelayed(eval(objIDGruppe), 0, z+y, true); //Licht aus in z+y millisekunden (Einschaltverzoegerung plus Einschaltdauer) ohne Einschaltverzoegerung
                  logtext = "Geraet war bereits eingeschaltet -- uebersteuert - ohne Einschaltverzoegerung - alter schedule geloescht- ";
                  } // endeif IgnoreWhenOn
                  } // Ende IF fuer Check ob bereits eingeschaltet
                  } // Ende IF für LEVEL Geraete

                  ! var GeraeteName = getObject(eval(objIDGruppe)).common.name; // Name des Geraetes in Klartext
                  var now = new Date(); // store current date and time
                  var currSec = now.getTime(); // millisekunden seit 01.01.1970 /current millisecs
                  var berechnEinZeit = millisecToDate( currSec + z); // millisecs in Zeit umrechnen fuer die Einschaltzeit
                  var berechnAusZeit = millisecToDate(currSec + z + y); // millisecs in Zeit umrechnen fuer die Ausschaltzeit
                  // WriteArray(objIDGruppe,timer, currSec + z, currSec + z + y) // Merken des Schaltvorganges
                  string = objIDGruppe+";" + eval(objIDGruppe) +";" + GeraeteName + ";" + z/1000 + ";" +y/1000+";"+berechnEinZeit + ";" + berechnAusZeit + ";" + logtext; // bereite LOG vor
                  log("EVENT " + objIDGruppe + "; " + eval(objIDGruppe) + "; " + GeraeteName + "; " + z/1000 + "; " + y/1000 + "; " + berechnEinZeit + "; " + berechnAusZeit + "; " + logtext, "info"); //Log schreiben
                  writelog(string); // schreibe LOG in Datei
                  Logtext = " ";

                  } // Ende Funktion

                  ! //-----------------------------------------------------------------------------------------------------
                  // Funktion merkt sich den letzten Schaltvorgang zum Loeschen des Schedules und auch zur Optimierung der Schaltvorgaenge
                  //-----------------------------------------------------------------------------------------------------
                  //function WriteArray(objIDGruppe,timer,von,bis) {
                  // log("EVENT " + objIDGruppe + "; " + von + "; " + bis + "; " , "info");
                  ! //for (var i = 0; i <=25; ++i) {
                  // if ( Gruppen[i][0].slice(6,8) === objIDGruppe.slice(8,10)) { // Identifikation der Objektgruppe
                  // Gruppen[i][1] = timer; Gruppen[i][2] = von; Gruppen[i][3] = bis; // Schreibe Werte in Array
                  // log("Arrayliste "+ Gruppen[i][0] + " " + " " + Gruppen[i][0].slice(7,2) + objIDGruppe.slice(9,2) ),"info";
                  // log("Arrayliste "+ Gruppen[i][0] + " " + Gruppen[i][1] + " " + Gruppen[i][2] + " " + Gruppen[i][3] ),"info";
                  //
                  // } // ende if - Identifikation der Gruppe
                  ! // } // ende for Schleife
                  //return Gruppen;
                  // } // ende Funktion
                  ! //-----------------------------------------------------------------------------------------------------
                  // Funktion zur Bestimmung einer ganzzahligen Zufallszahl innerhalb vorgegebener min/max Werte
                  //-----------------------------------------------------------------------------------------------------
                  function zufall(low,high,back) {
                  back = Math.floor(Math.random() * (high - low + 1)) + low;
                  // log("EVENT AWS Zufallszahlen - low = " + low + "high = " + high + " back = " + back ,"info");
                  return back;
                  } // ende Funktion
                  ! //-----------------------------------------------------------------------------------------------------
                  // Funktion zur Ueberpruefung ob die angegebenen Geraete exisiteren
                  //-----------------------------------------------------------------------------------------------------
                  function GeraetExists(objGruppe) {
                  back = false;

                  if (SpaceChk.test(eval(objGruppe))) { // objIDGruppe darf kein space enthalten // ist ein Geraet ueberhaupt zugeordnet ?
                  // log("Geraet hat kein assignment - Gruppe " + objGruppe, "info");
                  return back;
                  } // endif IDGruppe hat kein assignment

                  ! if (getState(eval(objGruppe))) { // Existiert das Geraet ?
                  back = true;
                  } else { log("Geraet existiert nicht - bitte in den Einstellungen ueberpruefen - Gruppe " + objGruppe, "info");
                  } // endif check on Geraet exists
                  ! return back;
                  } // ende Funktion
                  ! //-----------------------------------------------------------------------------------------------------
                  // Funktion schreibt einen Logeintrag in das Filesystem und auch in das interne Log-System
                  //-----------------------------------------------------------------------------------------------------
                  function writelog(string) {
                  if (logflag === true) {
                  // Zerlege Datum und Zeit in Variable
                  var now = new Date(); // store current date and time
                  var year = now.getFullYear();
                  var month = addZero(now.getMonth()+1);
                  var day = addZero(now.getDate());
                  var Thour = addZero(now.getHours());
                  var Tmin = addZero(now.getMinutes());
                  var Tsec = addZero(now.getSeconds());
                  var logdate = day + '.' + month + '.' + year;
                  var logtime = Thour + ':' + Tmin + ':' + Tsec;
                  ! if (fs.existsSync(LogPath)) {
                  fs.appendFileSync(LogPath, logdate+" ;"+logtime+" ;"+string + "\n"); // Füge Satz in Datei ein
                  } else {
                  log("Logfile nicht gefunden - wird angelegt"), "info";
                  var headerLine= "Datum;Uhrzeit;Gruppe;GeraeteID;Geraetebezeichnung;Einschaltverzoegerung;LaengeSchaltzeit;ZeitEin berechnet;ZeitAus berechnet;Kommentar"
                  fs.appendFileSync(LogPath, headerLine + "\n"); // Füge Satz in Datei ein
                  fs.appendFileSync(LogPath, logdate+" ;"+logtime+" ;"+string + "\n"); // Füge Satz in Datei ein
                  } // endif Filecheck
                  } ; // Ende check on logflag
                  } // Ende Funktion
                  ! //------------------------Ermittlung der Zeit wenn Astrozeit eingeschaltet wird
                  // Funktion bestimmt ob die Astrozeit die Gültigkeitsbereich der VonZeit overruled
                  //-----------------------------------------------------------------------------------------------------
                  ! function astrojetzt(zeitvon, zeitbis, abschnitt,astrovon,astrobis) {
                  var sunriseEnd = getAstroDate("sunriseEnd"); // Ende der Nacht nach Astro
                  var sunsetStart = getAstroDate("sunsetStart"); // Ende des Tages nach Astro
                  var nowvon; // fuer astrozeitrechnung vonzeit
                  var nowbis; // fuer astrozeitrechnung vonzeit
                  var Thour; // Stunde mit führender Null
                  var Tmin; // Minute mit führender Null
                  var lower; // Zeitvergleich
                  var upper; // Zeitvergleih
                  var zeit; // Rueckgabezeit
                  ! if(astrovon === true ) { // Astrozeit gesetzt
                  nowvon = new Date(sunsetStart); // store sunset date and time vonZeit
                  Thour = addZero(nowvon.getHours()); // extract hour
                  Tmin = addZero(nowvon.getMinutes()); // extract min
                  zeitvon = Thour + ':' + Tmin + ':' + "00"; // Zusammensetzen der Zeit in Format hh:mm:ss
                  }
                  ! if(astrobis === true ) { // Astrozeit gesetzt
                  nowbis = new Date(sunriseEnd); // store sunset date and time vonZeit
                  Thour = addZero(nowbis.getHours()); // extract hour
                  Tmin = addZero(nowbis.getMinutes()); // extract min
                  zeitbis = Thour + ':' + Tmin + ':' + "00"; // Zusammensetzen der Zeit in Format hh:mm:ss
                  }
                  ! if (abschnitt === "von") { // wenn vonZeit berechnet wird
                  lower = addTime(zeitvon); // vonZeit muss kleiner sein als bis Zeit
                  upper = addTime(zeitbis); // bisZeit muss groesser sein als vonZeit
                  zeit = zeitvon;
                  if (upper < lower && astrovon === true && astrobis === false) { // Sonderfall wenn die biszeit kleiner als die astrozeit ist
                  zeit = zeitbis; // wenn die Astrozeit groesser wird als die BisZeit, dann ist vonZeit = bisZeit
                  }
                  }
                  ! if (abschnitt === "bis") { // nur Rückgabewert setzen
                  zeit = zeitbis;
                  }
                  ! return zeit; // fertig

                  } // Ende Funktion

                  ! //-----------------------------------------------------------------------------------------------------
                  // Funktion zur Erzeugung von führenden Nullen für das Datum Format
                  //-----------------------------------------------------------------------------------------------------
                  function addZero(i) {
                  if (i < 10) {
                  i = "0" + i;
                  }
                  return i;
                  } // Ende Funktion
                  ! //-----------------------------------------------------------------------------------------------------
                  // Funktion Millisekunden in Datum/Zeit umrechnen /wird für logging benoetigt
                  //-----------------------------------------------------------------------------------------------------
                  function millisecToDate(millisec) {
                  var time = new Date(millisec);
                  var Thour = addZero(time.getHours());
                  var Tmin = addZero(time.getMinutes());
                  var Tsec = addZero(time.getSeconds());
                  datum = Thour + ':' + Tmin + ':' + Tsec;
                  return datum;
                  } // Ende Funktion

                  //-----------------------------------------------------------------------------------------------------
                  // 3 Funktionen zum Zeitrange check zur Prüfung ob die Schaltungszeiten erreicht sind
                  // Autor ist Beatz - uebernommen aus:
                  // viewtopic.php?f=21&t=1072&p=11167&hilit=isTimeInRange&sid=4dca8ea2c7f9337cdc73a1a9e4824a40#p11167
                  //-----------------------------------------------------------------------------------------------------
                  function isTimeInRange(strLower, strUpper) {
                  var now = new Date();
                  var lower = addTime(strLower);
                  var upper = addTime(strUpper);
                  var inRange = false;
                  if (upper > lower) {
                  // opens and closes in same day
                  inRange = (now >= lower && now <= upper) ? true : false;
                  } else {
                  // closes in the following day
                  inRange = (now >= upper && now <= lower) ? false : true;
                  }
                  return inRange;
                  }

                  ! function currentDate() {
                  var d = new Date();
                  return new Date(d.getFullYear(), d.getMonth(), d.getDate());
                  }
                  function addTime(strTime) {
                  var time = strTime.split(':');
                  var d = currentDate();
                  d.setHours(time[0]);
                  d.setMinutes(time[1]);
                  d.setSeconds(time[2]);
                  return d;
                  } ! Leider bekomme ich da aber kein Ergebnis: ! ~~[quote]~~12:38:32.516 [info] javascript.0 Stop script script.js.common.anwesenheitsim
                  ! 12:38:33.303 [info] javascript.0 Start javascript script.js.common.anwesenheitsim
                  ! 12:38:33.306 [info] javascript.0 script.js.common.anwesenheitsim: registered 2 subscriptions and 5 schedules
                  ! 12:38:57.544 [info] javascript.0 script.js.common.anwesenheitsim: EVENT AWS wurde aktiviert
                  ! 12:39:00.303 [info] javascript.0 script.js.common.anwesenheitsim: astrozeit1von gesetzt von NaN:NaN:00 bis 21:30:00
                  ! 12:39:00.303 [info] javascript.0 script.js.common.anwesenheitsim: EVENT IDGruppe13; fhem.0.Treppe.state; Treppe state; 0; 269; 10:39:00; 10:43:29;
                  ! 12:39:01.545 [info] javascript.0 Stop script script.js.common.anwesenheitsim
                  ! 12:39:01.616 [info] javascript.0 Start javascript script.js.common.anwesenheitsim
                  ! 12:39:01.616 [info] javascript.0 script.js.common.anwesenheitsim: registered 2 subscriptions and 5 schedules [/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]

                  1 Reply Last reply Reply Quote 0
                  • caravandriver
                    caravandriver last edited by

                    Bin bei dem Thema noch nicht weiter. Das Script macht einfach nichts. Liegt es daran, das ich meine Geräte in Fhem habe?

                    1 Reply Last reply Reply Quote 0
                    • eric2905
                      eric2905 last edited by

                      Was passiert denn, wenn Du die Änderungen, die Dein Script machen soll, direkt am jeweiligen Objekt (im Admin, Reiter Objekte) durchführst?

                      Gruß,

                      Eric

                      1 Reply Last reply Reply Quote 0
                      • caravandriver
                        caravandriver last edited by

                        Habe das nun hinbekommen. Das lag am Haken "Debug"…

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate
                        FAQ Cloud / IOT
                        HowTo: Node.js-Update
                        HowTo: Backup/Restore
                        Downloads
                        BLOG

                        797
                        Online

                        32.0k
                        Users

                        80.5k
                        Topics

                        1.3m
                        Posts

                        4
                        12
                        4981
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo