NEWS
[Vorlage] Anwesenheitssimulation - Script
-
Das kann ich verneinen ->
// Einstellung teilnehmende Homematic Geräte je IDGruppe maximal 5 - Eingabe der Homematic ID var IDGruppe11 = "sonoff.0.Highboard-Long.POWER"; // Licht Wohnzimmer Esstisch Deckenlampe var IDGruppe12 = "sonoff.0.Highboard-Small.POWER"; // Licht Terrassentuere var IDGruppe13 = "fritzdect.0.DECT200_087610400044.state"; // Licht Wohnzimmer Esstisch Stehlampe var IDGruppe14 = ""; // Licht Kinderbad var IDGruppe15 = ""; // Licht Hobbyraum var Grp1ZufAnz = 3; // Anzahl der Geräte zur zufälligen Bestimmung des Geraetes var IDGruppe21 = ""; // Licht Wohnzimmer Esstisch Deckenlampe var IDGruppe22 = ""; // Licht Terrassentuere var IDGruppe23 = ""; // Licht Wohnzimmer Esstisch Stehlampe var IDGruppe24 = ""; var IDGruppe25 = ""; var Grp2ZufAnz = 0; // Anzahl der Geräte zur zufälligen Bestimmung des Geraetes var IDGruppe31 = ""; // Licht Flur oben Wand; var IDGruppe32 = ""; // Licht Flur oben unten; var IDGruppe33 = ""; // Licht Kinderbad var IDGruppe34 = ""; var IDGruppe35 = ""; var Grp3ZufAnz = 0; // Anzahl der Geräte zur zufälligen Bestimmung des Geraetes var IDGruppe41 = ""; // Licht aussen Steinterrasse var IDGruppe42 = ""; // Licht aussen Kugeln var IDGruppe43 = ""; // Licht Schwimmbad Nebenlicht; var IDGruppe44 = ""; var IDGruppe45 = ""; var Grp4ZufAnz = 0; // Anzahl der Geräte zur zufälligen Bestimmung des Geraetes var IDGruppe51 = ""; var IDGruppe52 = ""; var IDGruppe53 = ""; var IDGruppe54 = ""; var IDGruppe55 = ""; var Grp5ZufAnz = 0; // 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 = true; // Wenn AWS deaktiviert wird, dann werden alle Teilnehmer ausgeschaltet // Ende Einstellungen .......................................................................................................
-
Hallo, ich hatte anfänglich auch Probleme mit den Sonoff, da die Namen leerzeichen enthalten haben. Versuche doch mal den Namen der Sonoffs zu ändern ohne das - Zeichen ..Ist erstmal Áufwand, da das in der web Oberfläche desTasmota vorgenommen wird und evtl. scripte angepasst werden müssen welche die Objekt ID nutzen…
Ein Versuch ist es wert.
Und läuft bei dir das Script für die Anwesenheitssteuerung?
-
hab noch ein kleinen Buck entdeckt…
Anwesenheitserkennung läuft übers Handy. Wenn ich nun Licht im Wohnzimmer anhabe und der Status in der Anweseheitssteuerung aktualisiert wird also z.B von 2 Anwesenden auf nur noch einen, läuft das AWS Script los und schaltet mein Licht aus...Genauso wenn jemand dazu kommt also eine person schon da und noch eine kommt nach Hause...
Der Status in der Anwesenheitssteuerung wird aktualisiert die objekt id : jemand da ist true und aktualisiert wieder auf true, wird aber nicht false...
Dennoch rennt das Script los.. Hier der log dazu...
-
So ok, der Fehler ist in dem Script Anwesenheitssteuerung welche mit dem Script Anwesenheitssimulation verküpft werden kann.
Die Verküpfung kann im Script Anwesenheitssteuerung konfiguriert werden.
Dies habe ich geändert und ein separates Script für die Aktivierung der AWSAktiv ID geschrieben..
Somit habe ich das für mich gelöst..
Gleichzeitig habe ich noch ein Automatik / on off State mit eingebaut..
funktioniert prima!
createState('javascript.0.Anwesenheitssteuerung.Automatik', {def: 'false', type: 'boolean', name: 'Rolladen Gesamt Automatik aktivieren'}); const id1 = 'javascript.0.Anwesenheitssteuerung.Automatik'; const id2 = 'javascript.0.Anwesenheitssteuerung.Userlist.JemandDa'; const AWS = 'javascript.0.Anwesenheitssteuerung.AWSAktiv'; function aktivieren() { var jemandDa = getState('javascript.0.Anwesenheitssteuerung.Userlist.JemandDa').val; var Anja = getState('tr-064.0.devices.Anja-Iphone').val; var Michi = getState('tr-064.0.devices.Privattelefon-Michael').val; var Moni = getState('tr-064.0.devices.Monika-Iphone').val; var Automatik = getState('javascript.0.Anwesenheitssteuerung.Automatik').val; var AWSAktiv = getState('javascript.0.Anwesenheitssteuerung.AWSAktiv').val; if(AWSaktiv === false && Automatik === true && jemandDa === false && Anja === false & Michi === false && Moni === false) { setStateDelayed(AWS, true, 180*1000); log('AWS wird in 3 Minuten gestartet'); } else { if(AWSAktiv === true && Automatik === true) && (jemandDa === true || Anja === true || Michi === true || Moni === true) { setState(AWS, false); log('AWS wegen Anwesenheit deaktiviert'); } else { if(Automatik === false && AWSAktiv === true) { setState(AWS, false); log('AWS manuell deaktiviert'); } } } aktivieren(); // Skriptstart on(id1, function(dp) { kontakt1 = dp.state.val; aktivieren(); }); on(id2, function(dp) { kontakt2 = dp.state.val; aktivieren(); });
-
Ich habe seit nunmehr einiger Zeit eine Anwesenheitssimulation auf meiner CCU/Rasperrymatic laufen. Allerdings versuche ich nach und nach meine Skripte in Richtung ioBroker zu bekommen. Daher kommt mir dieses Skript hier natürlich sehr gelegen.
Ich habe es eben aktiviert, erstmal nur ein Aktor.
Das Beispiel im ersten Post habe ich verstanden, glaube ich zumindest
Ich würde mich über ein Beispiel für den morgendlichen Ablauf freuen. Idealerweise unter Berücksichtigung der Astrozeit. Hat das jemand?
Ich gehe davon aus, dass eine Unterscheidung zwischen Wochentagen und Wochenende nicht möglich ist, richtig?
Danke!
Stefan
-
@ak1:Ich würde mich über ein Beispiel für den morgendlichen Ablauf freuen. Idealerweise unter Berücksichtigung der Astrozeit. Hat das jemand?
Ich gehe davon aus, dass eine Unterscheidung zwischen Wochentagen und Wochenende nicht möglich ist, richtig? `
Hi,
Ein Beispiel habe ich im Moment nicht zur Hand. Am WE wieder aber vielleicht kann jemand helfen, der das Script auch nutzt.
Zwischen Wochentagen und Wochenende könnte schon unterschieden werden.
Dafür das script 2 x Anlegen und den Datenpunkt für die Aktivierung jeweils anders benennen.
Dann kannst du die Scripte mit unterschiedlichen Planungen versehen und je nach Wochentag das eine oder eben andere Script aktivieren.
vG Looxer
-
Danke! Wenn sonst niemand ein Morgen-Beispiel parat hat, warte ich gerne bis zum Wochenende. Gar kein Problem.
Und der Ansatz zur Unterscheidung zwischen Wochentagen und Wochenende ist einleuchtend.
VG
Stefan
-
@ak1:Ich würde mich über ein Beispiel für den morgendlichen Ablauf freuen. Idealerweise unter Berücksichtigung der Astrozeit. Hat das jemand? `
Hi,ich musss nochmal nachfragen was du genau erwartest.
-
start der Steuerung nach Sonnenaufgang (muesste ich mir ansehen)
-
nach Sonnenaufgang würde eine Lichtsteuerung ja weniger Sinn machen. Was willst du steuern ?
vG Looxer
-
-
Ich vermute mal, dass die Idee ist, Licht zu einer bestimmten Zeit einzuschalten und bei Sonnenaufgang wieder auszuschalten. Da diese Zeiten Wochentags (Arbeitstage) normalerweise anders sind, als am Wochenende, würde eine Unterscheidung hier schon sinnvoll sein.
Der erste Punkt ist ja erst mal kein Problem. Start um z.B: 06:00Uhr bis Sonnenaufgang, sollte doch so möglich sein:
zeit1von = "06:00:00";
vonAstro1 = false;
bisAstro1 = true;
Was passiert, wenn die Sonne bereits vor 6:00 Uhr aufgegangen ist, weiß ich jetzt allerdings auch nicht. Da müsste man eventuell noch einen check einbauen, falls das noch nicht berücksichtigt wird.
Die Wochentage lassen sich doch im cron-Pattern setzen.
cron1job = "*/"+cron1+" * * * 6,0";
Das müsste für Samstag und Sonntag stehen.
Ist jetzt so ins Blaue getippt und vielleicht nicht ganz richtig aber prinzipiell sollte es so machbar sein.
Ich finde die Idee, Arbeitstage und Wochenende zu unterscheiden jedenfalls gut. Benötigt halt ein paar mehr schedules.
-
Ich vermute mal, dass die Idee ist, Licht zu einer bestimmten Zeit einzuschalten und bei Sonnenaufgang wieder auszuschalten. Da diese Zeiten Wochentags (Arbeitstage) normalerweise anders sind, als am Wochenende, würde eine Unterscheidung hier schon sinnvoll sein.
Der erste Punkt ist ja erst mal kein Problem. Start um z.B: 06:00Uhr bis Sonnenaufgang, sollte doch so möglich sein:
zeit1von = "06:00:00";
vonAstro1 = false;
bisAstro1 = true;
Was passiert, wenn die Sonne bereits vor 6:00 Uhr aufgegangen ist, weiß ich jetzt allerdings auch nicht. Da müsste man eventuell noch einen check einbauen, falls das noch nicht berücksichtigt wird.
Die Wochentage lassen sich doch im cron-Pattern setzen.
cron1job = "*/"+cron1+" * * * 6,0";
Das müsste für Samstag und Sonntag stehen. `
Hi,
das Programm kann bei Erreichen der Morgendaemmerung über die Astrozeit die Steuerung ausschalten.
Wenn das also der Wunsch ist, dann sollte das kein Problem sein. War mir nicht klar wegen der Formulierung "Morgen-Beispiel"
und ja, über den Schedule lassen sich auch die Wochentage steuern. Allerdings habe ich das in den Einstellungen so nicht vorgesehen.
Ohne Programmänderung also nicht.
vG Looxer
-
Mihaerus Interpretation ist korrekt. Mir geht es tatsächlich darum, einen typischen Ablauf am morgen zu simulieren. Z.B. Der Wecker geht gegen 6 Uhr und dann gehen sukzessive Lichter an (z.B. Bad, Flur, Küche, …). Bis das Haus irgendwann verlassen wird (zur Schule, Arbeit, etc.) oder aber es sowieso hell genug ist (Sonnenaufgang + x). In der Tat, im Sommer ist der Sonnenaufgang so früh, dass normalerweise gar keine Lichter geschaltet werden.
VG
Stefan
-
@ak1:Mihaerus Interpretation ist korrekt. Mir geht es tatsächlich darum, einen typischen Ablauf am morgen zu simulieren. Z.B. Der Wecker geht gegen 6 Uhr und dann gehen sukzessive Lichter an (z.B. Bad, Flur, Küche, …). Bis das Haus irgendwann verlassen wird (zur Schule, Arbeit, etc.) oder aber es sowieso hell genug ist (Sonnenaufgang + x). In der Tat, im Sommer ist der Sonnenaufgang so früh, dass normalerweise gar keine Lichter geschaltet werden.
VG
Stefan `
Hi,na ja, das ist schon was ich mir zu Anfang gedacht habe. Damit simulierst du keine Anwesenheit sondern unterstützt deine Anwesenheit
Die Simulation wählt zufällig irgendwelche Datenpunkte aus. Das ist dann wohl nicht das was du willst.
vG Looxer
-
Hi,
na ja, das ist schon was ich mir zu Anfang gedacht habe. Damit simulierst du keine Anwesenheit sondern unterstützt deine Anwesenheit
Die Simulation wählt zufällig irgendwelche Datenpunkte aus. Das ist dann wohl nicht das was du willst.
vG Looxer `
Hmm, eigentlich geht es mir sehr wohl um eine Simulation. Niemand ist zu Hause, z.B. wegen Urlaubsabwesenheit. Es soll aber bzgl. der geschalteten Lichter wie der typische Ablauf am Morgen aussehen. Natürlich mit einer gewissen Variabilität um realistischer zu sein.
Gruß
Stefan
-
aaah, ok danke,
Sollte ohne Probleme gehen.
Im Prinzip sollte es so aussehen.
Du könntest dazu z.B. zwei unterschiedliche Gruppen verwenden und die Datenpunkte entsprechend eintragen.
Bei Zeit könntest du als Start z.B. 04:30 Morgens eingeben und also Ende-Zeit die Astrozeit
Wie gesagt kann ich am WE mal ein Beispiel zimmern.
vG Looxer
-
aaah, ok danke,
Sollte ohne Probleme gehen.
Im Prinzip sollte es so aussehen.
Du könntest dazu z.B. zwei unterschiedliche Gruppen verwenden und die Datenpunkte entsprechend eintragen.
Bei Zeit könntest du als Start z.B. 04:30 Morgens eingeben und also Ende-Zeit die Astrozeit
Wie gesagt kann ich am WE mal ein Beispiel zimmern.
vG Looxer `
Danke! Ich freue mich auf das Beispiel.
VG
Stefan
-
Hi,
anbei ein Beispiel mit drei aktiven Gruppen.
Damit dürften die Anzahl der parallel eingeschaleten Lichter sich erhöhen und somit Lebhaftigkeit simulieren.
Alle Lampen gehen zum Sonnenaufgang aus.
Getestet habe ich die Einstellungen nicht. Wenn du das Log einschaltest kannst du aber schon das Ergebnis sehen.
z.B. in einem Excel Format.
vG Looxer
!
// Das Script wird aktiviert, wenn das Flag "Anwesenheitssteuerung gesetzt wird" // HIER Einstellungen vornehmen............................................................................................ ! // Einstellungen der Aktivzeiten je IDGruppe von bis var zeit1von = "04:30:00"; //Aktivzeit von IDGruppe1 var zeit1bis = "07:30:00"; //Aktivzeit bis IDGruppe1 ! var zeit2von = "06:15:00"; //Aktivzeit von IDGruppe2 var zeit2bis = "07:30:00"; //Aktivzeit bis IDGruppe2 ! var zeit3von = "07:15:00"; //Aktivzeit von IDGruppe3 var zeit3bis = "07:30:00"; //Aktivzeit bis IDGruppe3 ! var zeit4von = "00:00:00"; //Aktivzeit von IDGruppe4 var zeit4bis = "00:00:00"; //Aktivzeit bis IDGruppe4 ! var zeit5von = "00:00:00"; //Aktivzeit von IDGruppe5 var zeit5bis = "00:00:00"; //Aktivzeit bis IDGruppe5 ! // Wenn Astrozeit auf true steht, dann wird die vonZeit durch die Astrozeit übersteuert var vonAstro1 = false ; // 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 = true ; // die zeit1von wird ersetzt durch die Astrozeit - setting ist optional true = Verwendung der Astrozeit - IDGruppe1 var bisAstro2 = true ; // die zeit1von wird ersetzt durch die Astrozeit - setting ist optional true = Verwendung der Astrozeit - IDGruppe2 var bisAstro3 = true ; // 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 = 5; // Minuten IDGruppe1 bis var ein2von = 10; // Minuten IDGruppe2 von var ein2bis = 20; // Minuten IDGruppe2 bis var ein3von = 5; // Minuten IDGruppe3 von var ein3bis = 10; // Minuten IDGruppe3 bis var ein4von = 5; // Minuten IDGruppe4 von var ein4bis = 10; // 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 = 1; // Maximale Startverzoegerung Gruppe1 var StartDelay2 = 3; // Maximale Startverzoegerung Gruppe2 var StartDelay3 = 5; // Maximale Startverzoegerung Gruppe3 var StartDelay4 = 5; // 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 = 2; // checks alle x Minuten für IDGruppe1 var cron2 = 5; // checks alle x Minuten für IDGruppe2 var cron3 = 5; // checks alle x Minuten für IDGruppe3 var cron4 = 5; // 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 = "hm-rpc.0.xxx.1.STATE"; // Licht Wohnzimmer Esstisch Stehlampe var IDGruppe12 = "hm-rpc.0.xxx.1.STATE"; // Licht Terrassentuere var IDGruppe13 = "hm-rpc.0.xxx.1.STATE"; // Licht Flur oben unten; var IDGruppe14 = "hm-rpc.0.xxx.1.STATE"; // Licht Kinderbad var IDGruppe15 = "hm-rpc.0.xxx.1.STATE"; // Licht Hobbyraum var Grp1ZufAnz = 5; // Anzahl der Geräte zur zufälligen Bestimmung des Geraetes ! var IDGruppe21 = "hm-rpc.0.xxx.1.STATE"; // Licht Flur oben Wand; var IDGruppe22 = "hm-rpc.0.xxx.1.STATE"; // Licht Terrassentuere var IDGruppe23 = "hm-rpc.0.xxx.1.STATE"; // Licht Wohnzimmer Esstisch Stehlampe var IDGruppe24 = " "; var IDGruppe25 = " "; var Grp2ZufAnz = 3; // Anzahl der Geräte zur zufälligen Bestimmung des Geraetes ! var IDGruppe31 = "hm-rpc.0.xxx.1.STATE"; // Licht Flur oben Wand; var IDGruppe32 = "hm-rpc.0.xxx.1.STATE"; // Licht Flur oben unten; var IDGruppe33 = "hm-rpc.0.xxx.1.STATE"; // Licht Kinderbad var IDGruppe34 = " "; var IDGruppe35 = " "; var Grp3ZufAnz = 5; // Anzahl der Geräte zur zufälligen Bestimmung des Geraetes ! var IDGruppe41 = "hm-rpc.0.xxx.4.STATE"; // Licht aussen Steinterrasse var IDGruppe42 = "hm-rpc.0.xxx.1.STATE"; // Licht Kinderbad var IDGruppe43 = "hm-rpc.0.xxx.1.STATE"; // Licht Schwimmbad Nebenlicht; var IDGruppe44 = " "; var IDGruppe45 = " "; var Grp4ZufAnz = 3; // Anzahl der Geräte zur zufälligen Bestimmung des Geraetes ! var IDGruppe51 = " "; var IDGruppe52 = " "; var IDGruppe53 = " "; var IDGruppe54 = " "; var IDGruppe55 = " "; var Grp5ZufAnz = 5; // 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 = true; // Wenn AWS deaktiviert wird, dann werden alle Teilnehmer ausgeschaltet ! // Ende Einstellungen ....................................................................................................... !
-
Hi,
anbei ein Beispiel mit drei aktiven Gruppen.
Damit dürften die Anzahl der parallel eingeschaleten Lichter sich erhöhen und somit Lebhaftigkeit simulieren.
Alle Lampen gehen zum Sonnenaufgang aus.
Getestet habe ich die Einstellungen nicht. Wenn du das Log einschaltest kannst du aber schon das Ergebnis sehen.
z.B. in einem Excel Format.
vG Looxer `
Herzlichen Dank! Ich werde das ausprobieren. Aufgrund der beruflichen Auslastung dauert es aber etwa zwei Wochen, bis ich das etwas intensiver machen kann.
VG
Stefan
-
@ak1:Aufgrund der beruflichen Auslastung dauert es aber etwa zwei Wochen `
kein Problem. glaub mir, ich weiss wovon du redest :lol:vG Looxer
-
Hallo Looxer,
ich komme jetzt wieder schrittweise dazu, mich mit dem Thema zu beschäftigen.
Bevor ich die Simulation "live" schalte, möchte ich erst ein wenig testen. Dazu habe ich mir ein paar Datenpunkte (state/switch) angelegt, die ich schalte.
Meine Frage: Wie stelle ich die Schaltzeiten übersichtlich dar, um den Zeitverlauf zu kontrollieren. Sowohl in Excel mit dem AWSLog.csv tue ich mich schwer etwas Übersichtliches zu erzeugen, als auch mit dem History- und dem flot-Adapter.
Es muss doch einen einfachen Weg geben die true/false Stati auf einer Zeitachse darstellen zu können.
VG
Stefan
-
Hi,
@ak1:Wie stelle ich die Schaltzeiten übersichtlich dar, um den Zeitverlauf zu kontrollieren. Sowohl in Excel mit dem AWSLog.csv tue ich mich schwer etwas Übersichtliches zu erzeugen, als auch mit dem History- und dem flot-Adapter.
Es muss doch einen einfachen Weg geben die true/false Stati auf einer Zeitachse darstellen zu können. `
in der Tat habe ich dafür das Excel angedacht. Aber über Flot geht es natürlich auch. Allerdings ist ja i.d.R. nur true und false verfügbar. Die Kurven sehen also etwas eigenartig aus.Was ist denn das Problem mit dem Excel ?
vG Looxer