Hallo,
ein per Wlan-Steckdose geschaltetes Licht soll nur dann täglich zwischen 19 und 6 Uhr leuchten, wenn meine Frau auch daheim ist.
Wenn Sie beispielsweise erst um 20 Uhr heimkommt, soll sich das Licht halt um 20 Uhr erst einschalten.
Wenn Sie beispielsweise schon um 5 Uhr das Haus verlässt, soll sich das Licht halt um 5 Uhr schon ausschalten.
Folgender Code ist ein erster Ansatz meinerseits. Ich verstehe nicht, warum es zu Syntaxfehlern kommt.
define babylampeLeuchtet at *19:00:00 { if (trackingFrau("presence") eq "present") && (($hour >= 19 || $hour < 6))) { fhem("set ogBabylampe on") } else { fhem("set ogBabylampe off") } }
syntax error at (eval 3398) line 1, near ") &&"
syntax error at (eval 3398) line 1, near "} }"
trackingFrau ist ein PRESENCE-Device. Funktioniert.
ogBabylampe ist eine Wlan-Steckdose (ESPEasy). Funktioniert.
Gruß Chris
ich empfehle das in ein DOIF zu packen.
Was Du vorhast wird mit at so nicht gehen.
Ok, super!
Das hier funktioniert bereits:
([08:17-08:18]) (set ogBabylicht on) DOELSE (set ogBabylicht off)
Das hier leider (noch) nicht:
([08:17-08:18] and [trackingFrau:presence] eq present) (set ogBabylicht on) DOELSE (set ogBabylicht off)
Im angelegten Device steht unten Probably associated with: trackingFrau present PRESENCE
Gruß Chris
mach eq "present"
daraus.
Ich würde mir das ganze noch einmal genauer überlegen. Wenn Du alles zu festen Zeiten machst ist das nicht Zielführend. Versuche mit Events zu arbeiten.
Zitat von: Frank_Huber am 08 Juni 2018, 07:39:17
ich empfehle das in ein DOIF zu packen.
Was Du vorhast wird mit at so nicht gehen.
DOIF ist die eine Variante (scheint ja auch zu laufen bei dir)
ansonsten hättet du ein "notify" nehmen können. (um auf die änderung von presence zu reagieren!)
Insofern war der Grundgedanke falsch:
Das System muß entscheiden, wenn jemand kommt. Also nicht zu einer festen Uhrzeit.
Zitat von: Wernieman am 08 Juni 2018, 09:37:35
Insofern war der Grundgedanke falsch:
Das System muß entscheiden, wenn jemand kommt. Also nicht zu einer festen Uhrzeit.
das ist oft der Gedankenfehler der gemacht wird finde ich.
fhem arbeitet eventbasiert und reagiert auf trigger. ( -> notify )
oft wird aber gedacht, wenn etwas in einem zeitraum abgefragt/geprüftn/ausgeführt werden soll, das dies mit einem at zu lösen ist. und damit hätten wir dann zustands-polling. geht auch, ist aber nicht schön :)
aber es hat alles seine daseins-berechtigung, deswegen jeder so wie er will _und_ wie er es versteht :)
Der Threadersteller muss hier in zwei Richtungen denken was seine Frau und das Licht an geht.
Einmal muß er auf das nach Hause kommen reagieren und abfragen ob es schon spät genug für Licht ist (isDay) und einmal muss er einen Event abfangen der entweder einen relativen Bezug zu isDay hat (Twilight) oder der intervall mäßig immer kommt und dann in einem Notify in einer Abfrage isDay endet.
Ich selbst reagiere auf Twilight:azimuth
Hi,
ich habe sowas ähnliches auch, ich stelle das mal allgemein dar:
define KommtGeht DOIF ([Person:"present"] and [?Zeitraum])(schalte an) DOELSEIF ([Person:"absent"] and [?Zeitraum])(schalte aus)
attr KommtGeht do always
Person Zeitraum und der Schaltvorgang muss natürlich ersetzt werden. [Person:"present"] triggert auf den event "present". Der Zeitraum wird nur abgefragt und kann natürlich mit Sonnenaufgang oder Sonnenuntergang belegt werden werden. Beispiele findet man in der Doku (https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung).
Man kann den Zeitraum auch triggern lassen, dann passiert etwas von wenn man da oder abwesend ist. Aber das entsprach nicht der ursprünglichen Aufgabenstellung.
Gruß Otto
Danke für die vielen Infos.. muss ich jetzt erstmal alles "auswerten". :P
Gruß Chris
Edit: Ähm, ich hab mir dieses Flussdiagramm nun mehrmals angeschaut, verstehe es jedoch noch immer nicht:
https://wiki.fhem.de/wiki/Datei:DOIF_Aufbau_Ablauf_nSVG.png
Was ist denn mit der Frage "Passt ein Auslöser der Bedingung 1 zum Ereignis?" gemeint? Ist ein Ereignis ein Auslöser?
DAS ist auch DOIF ... es kann viel, mir persönlich zu viel ... weshalb es zu DOIF von mir keine Hilfe geben wird. (Sorry)
Zitat von: Otto123 am 08 Juni 2018, 12:02:10
Hi,
ich habe sowas ähnliches auch, ich stelle das mal allgemein dar:
define KommtGeht DOIF ([Person:"present"] and [?Zeitraum])(schalte an) DOELSEIF ([Person:"absent"] and [?Zeitraum])(schalte aus)
attr KommtGeht do always
Person Zeitraum und der Schaltvorgang muss natürlich ersetzt werden. [Person:"present"] triggert auf den event "present". Der Zeitraum wird nur abgefragt und kann natürlich mit Sonnenaufgang oder Sonnenuntergang belegt werden werden. Beispiele findet man in der Doku (https://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung).
Man kann den Zeitraum auch triggern lassen, dann passiert etwas von wenn man da oder abwesend ist. Aber das entsprach nicht der ursprünglichen Aufgabenstellung.
Gruß Otto
Moin
Also ich sehe das anders, beim DOELSEIF sollte es schon durch die Zeit geschaltet werden, und dann auch als "or"! Sonst brennt die Lampe unter Umstaenden sehr lange!
Gruss Christoph
Hallo Christoph,
in der ursprünglichen Textaufgabe steht es aber anders drin. Da soll die Lampe nachts nicht von allein ausgehen.
Gruß Otto
Die Lampe soll (if "Frau daheim") von 19 Uhr abends bis morgens 6 Uhr brennen.
Gruß Chris
Edit: Das hier funktioniert (zumindest bei permanenter Anwesenheit der Weiblichkeit) jetzt zunächst einmal, womit die Aufgabe für mich jedoch noch nicht gelöst ist:
([19:00-06:00] and [trackingFrau:presence] eq "present") (set ogBabylicht on) DOELSE (set ogBabylicht off)
Zitat von: chq am 08 Juni 2018, 21:27:26
Die Lampe soll (if "Frau daheim") von 19 Uhr abends bis morgens 6 Uhr brennen.
Gruß Chris
Dann reicht einfach:
([19:00-06:00] and [trackingFrau:presence] eq "present") (set ogBabylicht on) DOELSE (set ogBabylicht off)
Das Licht geht an, wenn Frau nach 19:00 Uhr kommt und es geht ebenfalls um 19:00 Uhr an, wenn Frau vorher schon da war.
Das List geht aus, wenn Frau im Zeitraum geht oder spätestens um 06:00 Uhr, wenn sie da bleibt.
Werde mal einen Testlauf wagen.. ;D
Gruß Chris
Edit: Sämtliche "Schnelltests" verliefen positiv.
Sorry für die blöde Zwischenfrage, ein Zeitbereich [Anfang - Ende] geht auch über Mitternacht hinaus? Hab dann bisher immer 2 Zeitbereiche gemacht. Bis 00 und nach 00.....
Gesendet von meinem Doogee S60 mit Tapatalk
Zitat von: Frank_Huber am 08 Juni 2018, 21:49:24
Sorry für die blöde Zwischenfrage, ein Zeitbereich [Anfang - Ende] geht auch über Mitternacht hinaus? Hab dann bisher immer 2 Zeitbereiche gemacht. Bis 00 und nach 00.....
Gesendet von meinem Doogee S60 mit Tapatalk
Es geht über Mitternacht, das war immer schon so und wird auch so bleiben ;)
Kann es sein, dass das mal anders beschrieben war? Ich habe (bzw jetzt hatte) nämlich auch ein paar von der Sorte.
Danke Damian! [emoji6]
Hatte die Frage wohl schon viel früher stellen sollen..., [emoji23][emoji23][emoji23]
Gesendet von meinem Doogee S60 mit Tapatalk
Zitat von: rischbiter123 am 08 Juni 2018, 22:06:42
Kann es sein, dass das mal anders beschrieben war? Ich habe (bzw jetzt hatte) nämlich auch ein paar von der Sorte.
Kann mich nicht erinnern, dass es anders beschrieben wäre.
So steht es zumindest vom Anfang an in der Commandref:
ZitatZeitintervalle über Mitternacht:
define di_light DOIF ([22:00-07:00]) (set light on) DOELSE (set light off)
Habe gerade noch mal nachgesehen. Habe es bei DisableForInteval so gelesen und bin dann, wie andere vielleicht auch, davon ausgegangen, dass es bei DOIF genauso ist. Hat ja auch funktioniert, war nur etwas umständlicher. Aber man lernt ja nie aus.
Zitat von: Otto123 am 08 Juni 2018, 20:17:49
Hallo Christoph,
in der ursprünglichen Textaufgabe steht es aber anders drin. Da soll die Lampe nachts nicht von allein ausgehen.
Gruß Otto
Hallo Otto
Tagsueber aber schon! Und Dein Beispiel triggert nur auf Anwesenheit! Deshalb brennt Sie so lange, bis die Frau zwischen 19 und 6 Uhr weggeht!
Gruss Christoph
Edith: Oh! da hat die Forensoftware mir einen Streich gespielt! Ihr seid schon viel weiter!
Moin Christoph,
da hast Du Recht, aber die Aufgabe wächst sowieso mit jedem Lösungsschritt. Ich hatte die Korrekturantwort auch gerade parat da war Damian schneller. Aber das wird auch nicht die endgültige Lösung sein :)
Gruß otto