Presence manuell übersteuern

Begonnen von vestaxb, 18 April 2014, 08:12:42

Vorheriges Thema - Nächstes Thema

vestaxb

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ß

marvin78

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.

Pfriemler

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

"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

vestaxb

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.

Pfriemler

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)
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

vestaxb

hehe! Genauso habe ich mir das gedacht! Und meine Freundin macht große Augen!  8)

vestaxb

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?

vestaxb

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?

der-Lolo

#8
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.

vestaxb

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...

Toto1973

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.
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000