FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: vestaxb am 18 April 2014, 08:12:42

Titel: Presence manuell übersteuern
Beitrag von: vestaxb am 18 April 2014, 08:12:42
Hallo zusammen,

ich habe mir ein Presence-Modul erstellt, welches zwei Lampen steuert, sobald mein TV ein- oder ausschaltet:


define TV PRESENCE lan-ping 192.168.178.30 5


define TV_an notify TV.* {\
my $TV = Value("TV");;\
if (($TV eq "present") && (Value("GE.Lampe") ne "on")) {\
fhem("set GE.Lampe on");; fhem("set GE.Stehlampe on");;\
Log 3, "Licht anschalten...., Status $TV";;\
} elsif (($TV eq "absent")) && (Value("GE.Lampe") ne "off")) {\
fhem("set GE.Lampe off");; fhem("set GE.Stehlampe off");;\
Log 3, "Licht ausschalten...., Status $TV";;\
}\
}


Nun ist es aber auch mal so, dass ich das Licht einschalten möchte, ohne dass der TV läuft. Mit der obigen Definition schalten nun die Lampen nach spätestens fünf Sekunden wieder aus, nachdem ich sie manuell eingeschaltet habe.

Gibt es daher eine Möglichkeit FHEM zu sagen, dass sobald die Lampen quasi manuell geschaltet wurden und nicht über das Presence-Modul, eingeschaltet bleiben?

Danke und Gruß
Titel: Antw:Presence manuell übersteuern
Beitrag von: marvin78 am 18 April 2014, 08:23:34
Das Attribut "event-on-change-reading" im PRESENCE Modul könnte dir helfen. Dann wird nur noch getriggert, wenn der Status zum ersten Mal auf "absent" gesetzt wird. Der nächste Trigger kommt dann erst wieder wenn der TV wieder an bzw. dann danach wieder aus gemacht wird.
Titel: Antw:Presence manuell übersteuern
Beitrag von: Pfriemler am 18 April 2014, 08:29:36
PRESENCE erzeugt bei jedem Check des TV ein Event, auf das dein Notify reagiert. Setze in "TV" das Attribut event-on-change-reading auf "state", dann wird das Notify nur bei jeder TV-Zustandsänderung schalten. Du kannst die Lampe dann auch ausschalten wenn du tags fernsiehst ...

BTW: 5 Sekunden?

Vom 7Zöller via Tapatalk

Titel: Antw:Presence manuell übersteuern
Beitrag von: vestaxb am 18 April 2014, 09:12:16
Funktioniert wunderbar! Vielen Dank für die schnelle Hilfe!

Fünf Sekunden waren nur zum Testen. Dann muss ich nicht so lange warten... ;)

Hier meine vorläufige Definition:

define TV PRESENCE lan-ping 192.168.178.30
attr TV event-on-change-reading state

define TV_an notify TV.* {\
my $TV = Value("TV");;\
if (($TV eq "present") && (Value("GE.Lampe") ne "on")) {\
fhem("set GE.Lampe on");; fhem("set GE.Stehlampe on");;\
Log 3, "Licht anschalten...., Status $TV";;\
}elsif (($TV eq "absent") && (Value("GE.Lampe") ne "off")) {\
fhem("set GE.Lampe off");; fhem("set GE.Stehlampe off");;\
Log 3, "Licht ausschalten...., Status $TV";;\
}\
}


Der nächste Schritt ist dann die Verknüpfung mit Twilight bzw. sunset.
Titel: Antw:Presence manuell übersteuern
Beitrag von: Pfriemler am 18 April 2014, 09:59:48
Zitat von: vestaxb am 18 April 2014, 09:12:16
Der nächste Schritt ist dann die Verknüpfung mit Twilight bzw. sunset.
Guter Mann! Und dann beim Dämmerungsübergang den TV-Status prüfen und die Lampe ggf. dazuschalten, falls derf TV gerade an ist ...  8)
Titel: Antw:Presence manuell übersteuern
Beitrag von: vestaxb am 18 April 2014, 11:18:04
hehe! Genauso habe ich mir das gedacht! Und meine Freundin macht große Augen!  8)
Titel: Antw:Presence manuell übersteuern
Beitrag von: vestaxb am 18 April 2014, 14:53:28
Nächste Ausbaustufe. Das Licht wird nur eingeschaltet, wenn Twilight auf State 8 ist:

define TV PRESENCE lan-ping 192.168.178.30
attr TV event-on-change-reading state
define TV_an notify TV.* {\
my $TV = Value("TV");;\
my $light = ReadingsVal("T","light",0);;\
if (($TV eq "present") && (Value("GE.Lampe") ne "on") && ($light == 8)) {\
fhem("set GE.Lampe on");; fhem("set GE.Stehlampe on");;\
Log 3, "Licht anschalten...., Status $TV";;\
}elsif (($TV eq "absent") && (Value("GE.Lampe") ne "off")) {\
fhem("set GE.Lampe off");; fhem("set GE.Stehlampe off");;\
Log 3, "Licht ausschalten...., Status $TV";;\
}\
}


Würde das schon so funktionieren? Oder brauche ich wegen event-on-change-reading state noch einen weiteren Watchdog (?), der den Status des Fernsehers erneut überprüft?
Titel: Antw:Presence manuell übersteuern
Beitrag von: vestaxb am 19 April 2014, 10:35:47
Ich habe das jetzt noch einmal angepasst:

define TV_an notify TV.* {\
my $TV = Value("TV");;\
my $light = ReadingsVal("T","light",0);;\
if (($TV eq "present") && (Value("GE.Lampe") ne "on") && ($light gt 6)) {\
fhem("set GE.Lampe on");; fhem("set GE.Stehlampe on");;\
Log 3, "Licht anschalten...., Status $TV";;\
}elsif (($TV eq "absent") && (Value("GE.Lampe") ne "off")) {\
fhem("set GE.Lampe off");; fhem("set GE.Stehlampe off");;\
Log 3, "Licht ausschalten...., Status $TV";;\
}\
}


Das Licht schaltet jetzt aber nur, wenn ich nachdem der Wert von $light größer als 6 ist, den TV einmal aus- und wieder einschalte.

Wie schaffe ich es, dass das Licht auch während der TV bereits eingeschaltet ist, schaltet?
Titel: Antw:Presence manuell übersteuern
Beitrag von: der-Lolo am 19 April 2014, 10:44:59
den Eingang des notifys musst du glaube ich anpassen...
light ist zur zeit ja nur eine Bedingung, der trigger kommt bei Änderung des State vom TV.
Wenn Du den Fernseher bei Tageslicht anmachst kommt ja keine State Änderung mehr wenn es dämmert.

Zitatdefine TV_an notify TV.*|$light.*
damit das notify nicht nur auf TV reagiert sondern eben auch auf light. Schau dazu auch mal in die Comandref

Ich bin aber nicht sicher ob $light in einem notify Aufruf funktioniert.
Titel: Antw:Presence manuell übersteuern
Beitrag von: vestaxb am 21 April 2014, 12:15:35
Zitatdefine TV_an notify TV.*|$light.*

Das war ein guter Hinweis. Mit der eigenen Variablen hat es leider nicht geklappt. Ich habe es daher nun so gelöst:

define Licht_an notify T:.*|TV.* {\
my $light = ReadingsVal("T","twilight_weather",0);;\
my $TV = Value ("TV");;\
if (($light<75) && ($TV eq "present") && (Value("GE.Lampe") ne "on")){\
fhem("set GE.Lampe on");; fhem("set GE.Stehlampe on");;\
Log 3, "Licht anschalten...., Status TV: $TV, Licht: $light";;\
}elsif (($light>75) && ($TV eq "absent") && (Value("GE.Lampe") ne "off")){\
fhem("set GE.Lampe off");; fhem("set GE.Stehlampe off");;\
Log 3, "Licht ausschalten...., Status TV: $TV, Licht: $light";;\
}\
}


In den Test gerade eben hat das gut geklappt. Mal sehen, wie es sich verhält, wenn es heute Abend dämmert und der TV bereits eingeschaltet ist...
Titel: Antw:Presence manuell übersteuern
Beitrag von: Toto1973 am 11 Februar 2015, 00:08:38
Hallo!
Mir gefällt diese Steuerung. Deshalb wollte ich mal nachfragen, ob das alles so geklappt hat?
Ich würde das ganze gerne so übernehmen, wenn alles klappt.