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.
    • Homoran
      Homoran Global Moderator Administrators last edited by

      Hallo und Willkommen im Forum!

      Für beide Postings von dir kann ich dir nur allgemeine Hilfe anbieten, da ich dies alles selber nicht einsetze.

      Fangen wir mal mit den Begrifflichkeiten an, damit wir nicht aneinander vorbeireden:
      @caravandriver:

      ich habe seit gestern IObroker laufen und mal den Fhem Connector aktiviert. `
      Ich nehme an du meinst den FHEM Adapter.

      @caravandriver:

      Sehe dort alles und kann in der Webgui ja mit den Widges arbeiten `
      Wenn du hier den Admin (<ip>:8081) meinst und dort den Reiter "Objekte" solltest du dort alle Datenpunkte aus FHEM sehen können.

      Wenn du mit der WebGUI, allerdings ioBroker.vis meinst (nur dort gibt es Widgets) und die FHEM Datenpunkte in deren Konfiguration siehst, sind wir schon einmal einen großen Schritt weiter.

      @caravandriver:

      Dazu würde ich in fhem ein Dummydevice anlegen, welches mein shellscript was ich dafür erstellt habe triggert.

      Wie mache ich so etwas unter IOBroker? Ich bin seit gestern dabei und finde irgendwie nichts dazu. `
      Wenn du dieses Dummy-Device angelegt hast, sollte auch der entsprechende Datenpunkt in ioBroker erscheinen, und diesen kannst du dann über ein entsprechendes Widget (manuell) steuern.

      Willst du dies jedoch interaktiv durchführen musst du mit javascript, Blockly, node-red oder dem Szenenadapter arbeiten.

      Gruß

      Rainer</ip>

      1 Reply Last reply Reply Quote 0
      • 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

                          772
                          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