Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. [Frage] Wie fange ich an? Komme von Fhem…

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    533

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

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

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

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
12 Beiträge 4 Kommentatoren 5.3k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • caravandriverC Offline
    caravandriverC Offline
    caravandriver
    schrieb am zuletzt editiert von
    #3

    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 Antwort Letzte Antwort
    0
    • HomoranH Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von
      #4

      @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

      kein Support per PN! - Fragen im Forum stellen -
      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
      Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton im Header. Danke!
      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      1 Antwort Letzte Antwort
      0
      • caravandriverC Offline
        caravandriverC Offline
        caravandriver
        schrieb am zuletzt editiert von
        #5

        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 Antwort Letzte Antwort
        0
        • apollon77A Offline
          apollon77A Offline
          apollon77
          schrieb am zuletzt editiert von
          #6

          Ich denke true/false ?!

          Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

          • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
          • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
          1 Antwort Letzte Antwort
          0
          • caravandriverC Offline
            caravandriverC Offline
            caravandriver
            schrieb am zuletzt editiert von
            #7

            habe ich auch durch… macht nix.

            1 Antwort Letzte Antwort
            0
            • apollon77A Offline
              apollon77A Offline
              apollon77
              schrieb am zuletzt editiert von
              #8

              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

              Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

              • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
              • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
              1 Antwort Letzte Antwort
              0
              • caravandriverC Offline
                caravandriverC Offline
                caravandriver
                schrieb am zuletzt editiert von
                #9

                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 Antwort Letzte Antwort
                0
                • caravandriverC Offline
                  caravandriverC Offline
                  caravandriver
                  schrieb am zuletzt editiert von
                  #10

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

                  1 Antwort Letzte Antwort
                  0
                  • eric2905E Offline
                    eric2905E Offline
                    eric2905
                    schrieb am zuletzt editiert von
                    #11

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

                    Gruß,

                    Eric

                    Roses are red, violets are blue,

                    if I listen to metal, my neighbours do too

                    1 Antwort Letzte Antwort
                    0
                    • caravandriverC Offline
                      caravandriverC Offline
                      caravandriver
                      schrieb am zuletzt editiert von
                      #12

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

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

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

                      654

                      Online

                      32.7k

                      Benutzer

                      82.5k

                      Themen

                      1.3m

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

                      • Du hast noch kein Konto? Registrieren

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