NEWS
[Frage] Wie fange ich an? Komme von Fhem…
-
MOD-Edit by eric2905 - 27.04.2017/12:50 : "[Frage]" zum Betreff hinzugefügt
Hallo,
ich habe seit gestern IObroker laufen und mal den Fhem Connector aktiviert. Sehe dort alles und kann in der Webgui ja mit den Widges arbeiten. Das sieht super aus und gefällt mir sehr gut.
Unter fhem habe ich auch alexa und einie Scripte laufen. z.B. Kann ich mein Komplette Multimedianlage steuern.
Ich würde nun gerne "schleichend" komplett nach IOBroker umziehen.
Das nächste neue Szenario Atmolight der Enigma2 Box (VU) würde ich gerne an und ausschalten können. 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.
-
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.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.
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>
-
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.
-
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.Was mir jetzt fehlt ist das gescripte… `
Und ich kann das gar nichtBist 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
-
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?
-
Ich denke true/false ?!
-
habe ich auch durch… macht nix.
-
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
-
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,StartDelay160,y)1000; // Ermittlung der Einschaltverzögerung aufgrund der Zufallszahl
y = zufall(ein1von60,ein1bis60,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,StartDelay260,y)1000; // Ermittlung der Einschaltverzögerung aufgrund der Zufallszahl
y = zufall(ein2von60,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,StartDelay360,y)1000; // Ermittlung der Einschaltverzögerung aufgrund der Zufallszahl
y = zufall(ein3von60,ein3bis60,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,StartDelay460,y)1000; // Ermittlung der Einschaltverzögerung aufgrund der Zufallszahl
y = zufall(ein4von60,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,StartDelay560,y)1000; // Ermittlung der Einschaltverzögerung aufgrund der Zufallszahl
y = zufall(ein5von60,ein5bis60,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 Geraeteif (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 -
Bin bei dem Thema noch nicht weiter. Das Script macht einfach nichts. Liegt es daran, das ich meine Geräte in Fhem habe?
-
Was passiert denn, wenn Du die Änderungen, die Dein Script machen soll, direkt am jeweiligen Objekt (im Admin, Reiter Objekte) durchführst?
Gruß,
Eric
-
Habe das nun hinbekommen. Das lag am Haken "Debug"…