Hallo,
ich verfolge schon lange das FHEM Projekt und habe mich seit ca. 2 Monaten nun selbst an die Realisierung einer eigenen automatischen Haussteuerung gemacht. Dabei ist mir das Forum mit den unzähligen Beiträgen eine sehr große Hilfe. Leider habe ich zu meinem aktuellen Problem bislang keine Lösung oder einen Ansatz gefunden.
Ich lasse über einen Kalender regelmäßige TV Sendungen aufnehmen. Der Kalendereintrag aktiviert die Funksteckdose und schaltet somit den MediaReceiever für die Zeit der Aufnahme + 5min an. Das klappt soweit auch ganz gut. Das Problem ist nur wenn ich oder meine Frau zu Hause sind, sollte zwar das Einschalten der Steckdose umgesetzt werden aber nicht das ausschalten. Dies möchte ich über den Verbindungsstatus des TV's an der FritzBox bzw. über die Anwesenheit der Mobiltelefone regeln lassen.
Leider habe ich nichts gefunden wie man einen ausgeführten Kalendereintrag der noch aktiv ist vorzeitig unterbrechen kann.
Wenn ich den Eintrag im IPhone nach dem Ausführen aus dem Kalender lösche, wird das Ausschalten der Funksteckdose nicht ausgeführt.
Also müsste es prinzipiell möglich sein bei Anwesenheit das Ausschalten der Steckdose zu verhindern.
Mit freundlichen Grüßen
Daniel
Zitat von: BBB82 am 03 November 2015, 15:21:35
Hallo,
ich verfolge schon lange das FHEM Projekt und habe mich seit ca. 2 Monaten nun selbst an die Realisierung einer eigenen automatischen Haussteuerung gemacht. Dabei ist mir das Forum mit den unzähligen Beiträgen eine sehr große Hilfe. Leider habe ich zu meinem aktuellen Problem bislang keine Lösung oder einen Ansatz gefunden.
Ich lasse über einen Kalender regelmäßige TV Sendungen aufnehmen. Der Kalendereintrag aktiviert die Funksteckdose und schaltet somit den MediaReceiever für die Zeit der Aufnahme + 5min an. Das klappt soweit auch ganz gut. Das Problem ist nur wenn ich oder meine Frau zu Hause sind, sollte zwar das Einschalten der Steckdose umgesetzt werden aber nicht das ausschalten. Dies möchte ich über den Verbindungsstatus des TV's an der FritzBox bzw. über die Anwesenheit der Mobiltelefone regeln lassen.
Leider habe ich nichts gefunden wie man einen ausgeführten Kalendereintrag der noch aktiv ist vorzeitig unterbrechen kann.
Wie verbindest Du denn den Kalendareintrag mit dem Schalten der Funksteckdose?
Für Dein Problem müsste diese Verbindung beim Auschalten per IF berücksichtigen ob Ihr anwesend seid. Also denn (Aus-)Schaltbefehl nur senden, wenn ihr NICHT anwesend seid.
Um das genauer zu beschreiben ist aber erforderlich welcher Mechanismus für die Verbindung verwendet wird, denn dann kann man entweder das IF direkt einbauen oder muss u.U. einen Umweg gehen.
Auf gut Deutsch, gib mal Code ;D
Zitat von: CoolTux am 03 November 2015, 16:30:38
Auf gut Deutsch, gib mal Code ;D
Ich will das auch in drei Worten können ;)
Hallo,
Danke für die schnellen Antworten. Das mit dem Code habe ich ganz vergessen.
Sonderlich Kreativ war ich dabei nicht, ich habe den Code zum auslesen des Aktors aus dem CommandRef verwendet. Dieser leistet auch sehr gute Dienste!
Dies ist der Code den ich verwende:
define SwitchActorOn notify Fhem:modeStarted.* { my $reading="%EVTPART0";; my $uid= "%EVTPART1";; my $actor= fhem("get Fhem summary $uid");; if(defined $actor) { fhem("set $actor on") } }
define SwitchActorOff notify Fhem:modeEnded.* { my $reading="%EVTPART0";; my $uid= "%EVTPART1";; my $actor= fhem("get Fhem summary $uid");; if(defined $actor) { fhem("set $actor off") } }
@ viegener
Wenn ich dich richtig verstehe müsste die Abfrage über die Anwesenheit im SwitchActorOff in der Öffentlichkeit Funktion erfolgen?
Etwa so:
... if (([iPhoneDaniel_d:state] eq "mac_98_FE_94_D5_C6_AD: inaktive" or [iPhoneLydia_d:state] eq " \
mac_C0_1A_DA_46_95_57: inaktive") and [defined $actor]) { fhem ("set $actor off")}}
Zitat von: BBB82 am 03 November 2015, 18:58:56
Wenn ich dich richtig verstehe müsste die Abfrage über die Anwesenheit im SwitchActorOff in der Öffentlichkeit Funktion erfolgen?
Etwa so:
... if (([iPhoneDaniel_d:state] eq "mac_98_FE_94_D5_C6_AD: inaktive" or [iPhoneLydia_d:state] eq " \
mac_C0_1A_DA_46_95_57: inaktive") and [defined $actor]) { fhem ("set $actor off")}}
Ja das wollte ich aussagen, ich bin jetzt mit der Syntax des Anwesenheits-Moduls nicht so vertraut und ob das nicht kürzer geht. Allerdings müsstest Du vermutlich statt "or" hier ein "and" verwenden, denn es geht ja darum, dass der actor nur ausgeschaltet werden soll, wenn BEIDE iPhones inaktiv sind (also ihr beide nicht da seid).
Guten Morgen und danke für den Tipp. Leider ist mir die Umsetzung noch nicht geglückt. FHEM gibt im Log immer folgenden Fehler aus:
2015.11.06 09:42:03 3: SwitchActorOff retur$syntax error at (eval 14996) line 1, near ") {"
syntax error at (eval 14996) line 1, near "} }"
Der Code dazu:
define SwitchActorOff notify Fhem:modeEnded.* { my $reading="%EVTPART0";; my $uid= "%EVTPART1";; my $actor= fhem("get Fhem summary $uid");; if(ReadingsVal("iPhoneDaniel_d:state", "mac_98_FE_94_D5_C6_AD:", "inactive") eq ("inactive") && (ReadingsVal("iPhoneLydia_d:state", "mac_C0_1A_DA_46_95_57:", "inactive") eq ("inactive") && (defined $actor)) { fhem("set $actor off") } }
Den Status der Telefone lasse ich aus dem Modul FritzBox auslesen, was in einer DOIF Funktion schon sehr funktioniert. Irgendwie scheint da aber ein Fehler in der Syntax zu sein, welcher sich mir aber nicht erschließt.
Der Übersichtlichkeit und flexibleren Nutzung halber würde ich Dir zu einem "Anwesenheits-Dummy" raten.
Ob das nun per Fritzbox, WLAN, bluetooth, irgendwas ist, spielt nicht die Rolle.
Auch die Weiterverarbeitung über structure oder das Residentsmodul ist Geschmacksache.
Sinn wäre, das Du am Ende 1 Variable/Dummy hast (jemand zuhause ja/nein), die Du sehr einfach als zusätzliche Bedingung in beliebige Abläufe und Funktionen ergänzen kannst.
Der Ansatz mit dem dummy für die Anwesenheit ist auf jeden Fall gut, da bei Änderung nicht mehrere Bereiche angepasst werden müssen.
Generell packe ich komplexe perl-Sequenzen eher in myUtils auszulagern, denn genau das Problem, dass die Fehlermeldung nicht sehr hifreich ist, lässt sich damit leicht umgehen. Dies finde ich leichter zu warten und gerade bei Mischung von perl und fhem Kommandos viel leichter zu handhaben.
Auf jeden Fall scheint mir hinter
fhem("set $actor off")
die abschliessenden ;; zu fehlen, die den perl Befehl abschliessen.