Modulfamilie für Bewohner / 10_RESIDENTS 20_ROOMMATE 20_GUEST

Begonnen von Loredo, 19 Januar 2014, 23:12:34

Vorheriges Thema - Nächstes Thema

ujaudio

Dein Weckprogramm hat mir schon jede Menge Arbeti erspart, Dinge selbst auszutüfteln. Für eine Kleinigkeit suche ich noch einen eleganten Weg: Es kommt ein paar Mal im Jahr vor, dass ich am nächsten tag keinen Wecker haben will. Ich möchte demzufolge am Vorabend, wenn ich schlafen gehe, einmalig den Wecker ausschalten, am nächsten Morgen kann ich dann bis in ide Puppen schlafen - aber am Folgetag soll er wieder ganz normal klingeln. Hast du eine gute Idee? Ich würde ihn über Tastendruck ganz ausschalten und mit dem nächsten "gotosleep" wieder einschalten.
Einen lieben Gruß
Jürgen

Loredo

Genau dafür ist eigentlich die Reset-Funktion gedacht.
Der Wecker wird dann am Folgetag zu der Zeit, zu der er zuletzt aktiv war, automatisch wieder mit der im Attribut wakeupDefaultTime hinterlegten Zeit aktiviert. Die Funktion ist also sowohl für das Zurücksetzen kurzzeitig veränderter Wecker gedacht als auch für das erneute Aktivieren kurzzeitig deaktivierter Wecker. Wenn das Attribut wakeupResetdays nicht gesetzt ist, wird der Wecker täglich entsprechend auf die Default-Zeit gesetzt.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

ujaudio

Das Modul funktioniert erstklassig (DANKE!), auch der Wecker!

Aber gestern ist bei uns folgendes passiert: weil Sonntag ist, klingelt der Wecker um 9 Uhr. Allerdings sind wir um 8 Uhr aufgestandenund haben den Status der Person auf Home gestellt. Die Erwartung war, dass der Wecker nicht klingelt, wenn man nicht "asleep" ist. Er hat aber dennoch "geklingelt" - und man konnte ihn nicht wie gewohnt durch Druck auf die Taste, die den Staus der Person auf "Home" stellt, abschalten. Mhm ??!?
Einen lieben Gruß
Jürgen

Loredo

Es ist absicht, dass der Wecker "klingelt", egal wie der Status des Bewohners dabei ist (beispielsweise weil man aus welchem Grund auch immer abends vergessen sollte sich "schlafend" zu stellen). Ansonsten würde man Gefahr laufen, dass der Wecker nicht klingelt und man verschläft. Für ein früheres Aufstehen ist das grundsätzlich noch ein Problem. Zwar wird bereits berücksichtigt, dass bei Nutzung der Reset Funktion der Wecker bei einer späteren Default-Zeit nicht erneut auslöst. Für ein früheres Aufstehen fehlt allerdings eine Abfrage noch, wann der Status des Bewohners sich zuletzt geändert hat. Ich schaue mal, dass ich das bei Gelegenheit mit einbaue.


Ansonsten ist für das explizite Unterbrechen eines Weckprogramms nicht vorgesehen, dass man den Status des Bewohners wechselt (auch wenn das implizit beim aufstehen passiert). Vielmehr soll beim entsprechenden Wecker ein stop-Befehl geschickt werden. devStateIcon ist dafür bereits so vordefiniert, dass der Wecker ein blaues Icon hat, wenn er gerade aktiv ist und man nur dort drauf drücken muss, um ihn zu unterbrechen (entspricht einem set-Befehl "stop").




Gruß
Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

LeoSum

Hallo Leute,
ersteinmal danke für dieses tolle Modul.

Leider schaffe ich es bislang noch nicht, den Status von Geräten die ich mit PRESENCE erfolgreich überwache an die Residents weiter zu geben. Wie mache ich das? Mit notifies oder watchdogs? Bislang werden folgende Geräte mit PRESENCE überwacht:


mako_bluetooth
Wlan_Device_klte
Wlan_Device_mako


mako_bluetooth und Wlan_Device_mako sollen dem Resident rr_Leo zugeordnet werden, Wlan_Device_klte dem Resident rr_Peter.

Bislang habe ich foldendes probiert aber es klappt einfach nicht:

define mako_WLAN_home notify Wlan_Device_mako:present set rr_Leo home
define mako_Bluetooth_home notify Bluetooth_Device_mako:present set rr_Leo home
define mako_WLAN_absent notify Wlan_Device_mako:absent set rr_Leo absent
define klte_WLAN_home notify Wlan_Device_klte:present set rr_Peter home
define klte_WLAN_absent notify Wlan_Device_klte:absent set rr_Peter absent


Leider tut sich da aber nix. Die PRESENCE devices spiegeln den Status korrekt wieder, aber die Residents bleiben immer auf dem Status "home".

Die PRESENCE devices haben alle das attribut "event-on-change-reading state"

Weiß jemand Rat?

ujaudio

es muss heißen
set rr_Peter state absent
usw.

Da bin ich auch darüber gestolpert  ;)
Einen lieben Gruß
Jürgen

ujaudio

Wie ich ein notify baue, welches triggert, sobald der Status auf "home" geht, weiß ich. Aber ich möchte unterscheiden ob es von "absent nach home" gewechselt hat oder ob es von "asleep nach home" gewechselt hat. Kann mir bitte jemand mal einen Tipp geben?
Einen lieben Gruß
Jürgen

LeoSum

Danke ujaudio! Jetzt klappt es!

Als nächstes möchte ich natürlich basierend auf den Stati der Residents Aktionen durchführen. Alles ausschalten wenn keiner zu Hause ist ist glaub ich einfach (Wohnung1 ist mein Residents device):

define watchdog_Anwesenheit watchdog Wohnung1:absent 00:15 Wohnung1:home set Gesamte_Wohnung off ;; setstate watchdog_Anwesenheit defined
attr watchdog_Anwesenheit regexp1WontReactivate 1


Aber wie kann ich lösen, dass wenn Leo nach hause kommt, das Licht in der Küche angeht, aber nur wenn Peter nicht da ist? Kann das Event für das Notify irgendwie eine "&"-Verknüpfung sein oder kann man das ganze in eine If bedingung packen? Wie würde so ein Notify aussehen?

ZitatAber ich möchte unterscheiden ob es von "absent nach home" gewechselt hat oder ob es von "asleep nach home" gewechselt hat. Kann mir bitte jemand mal einen Tipp geben?

Kann man hierzu nicht irgendwie das Reading "lastState" über eine "&" Verknüpfung mit einbeziehen? Ich blicke leider durch die FHEM/Perl Syntax nicht durch, sodass das Programmieren hier eher zum Ratespiel wird. Irgendwie gibt es zu den Residents auch keine "get" Methode...

der-Lolo


LeoSum

Danke für den Hinweis. Es funtkioniert schon fast:

define Leo_coming_home_di DOIF ([rr_Peter] eq "absent" and [rr_Leo] eq "home") (set SqueezeKueche volume 90; sleep 0.5; set SqueezeKueche playlists Metal; sleep 0.5; set SqueezeKueche shuffle song; sleep 0.5; set SqueezeKueche play)

lässt die Squeezebox losspielen wenn Leo heimkommt und Peter weg ist. Allerdings spielt sie auch los, sobald Peter das Haus verlässt. Das möchte ich nicht. Wie setze ich das mit DOIF um?

Normalerweise würde ich zwei verschachtelte If-Bedinungen verwenden, wobei der trigger die äußere wäre. Mit DOIF geht das aber scheinbar nicht.

Die Definition:

define Leo_coming_home_di DOIF ([rr_Leo] eq "home") DOIF ([rr_Peter] eq "absent") (set SqueezeKueche volume 90; sleep 0.5; set SqueezeKueche playlists Metal; sleep 0.5; set SqueezeKueche shuffle song; sleep 0.5; set SqueezeKueche play)

gibt den Fehler im Logfile:
2015.09.19 17:11:59 2: Leo_coming_home_di: DOIF (home eq "absent") (set SqueezeKueche volume 90; sleep 0.5; set SqueezeKueche playlists Metal; sleep 0.5; set SqueezeKueche shuffle song; sleep 0.5; set SqueezeKueche play): Unknown command DOIF, try help.

Jemand eine Idee wie ich das hinbekommen kann?

EDIT:
In Anlehnung hieran habe ich es jetzt hinbekommen: http://www.fhemwiki.de/wiki/Schalten_mit_mehreren_Bedingungen#Script

define Leo_coming_home_notify rr_Leo:home {if ($value{rr_Peter} eq "absent") {fhem "set SqueezeKueche volume 80; sleep 0.5; set SqueezeKueche playlists Metal; sleep 0.5; set SqueezeKueche shuffle song; sleep 0.5; set SqueezeKueche play"}}

der-Lolo

Nur auf den Zustand eines devices zu reagieren und beim umschalten nicht zu triggern funktioniert mit dem ? Schau Dir mal die Comandref an, DOIF ist ausgezeichnet dokumentiert - ansonsten hilft Dir sicher der zugehörige Support Thread...

Loredo

Ich habe gerade eine neue Version des RESIDENTS Moduls eingecheckt, welches nun neben den nummerischen Readings auch welche mit den Device und Alias Namen erzeugt. Hilfreich, wenn man den Klarnamen z.B. in einer Audio Ansage verwenden oder die Devices anderweitig im Code weiterverarbeiten möchte.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

r_knipp

Moin,

ich habe mich jetzt mal etwas intensiver mit dem Residents Tool Kit beschäftigt und habe etwas Probleme damit, die ich bisher nicht lösen konnte.
Zum einen sind die einzigen Modi, die ich für einen Roommate auswählen kann home, gotosleep, absent und gone. Asleep oder awoken werden in dem Dropdown nicht angezeigt.
Zum anderen wird mir der Resetswitcher nicht angezeigt, obwohl ich im Wakeuptimer das Attribut definiert habe.
Mein FHEM ist auf dem aktuellen Stand. Hat jemand nen Tip wo der Fehler liegen kann? Oder habe ich vielleicht eine Einstellung vergessen? (Wahrscheinlich sitzt der Fehler wieder vor dem Monitor  ;))
Besten Dank.

Gruß
Robert

Loredo

Hallo Robert,


du meinst nicht das RESIDENTStoolkit, dieser Begriff ist anders belegt  ;)
Du sprichst von der RESIDENTS Modulfamilie (also RESIDENTS, ROOMMATE, GUEST).


Wie in der Commandref beschrieben werden die Status asleep und awoken nur dann aufgeführt, wenn der aktuelle Status entweder gotosleep oder asleep ist. Der Grund ist einfach, dass hier eine Art Mini-Prozess abgebildet ist: Du wachst vermutlich nicht auf, wenn du nicht vorher geschlafen hast... Die Status direkt anzuspringen macht daher eigentlich keinen Sinn. Wenn du anderer Meinung bist, kannst du die Status über das Attribut "rr_showAllStates" einblenden. Alternativ kannst du auch nur ganz gezielte Status über das Attribut "rr_states" einblenden (widgetOverride sollte auch funktionieren, wer es bevorzugt).


Der Resetswitcher ist wiederrum korrekterweise Teil des RESIDENTStoolkit  :D
Der Resetswitcher wird automatisch angelegt, wenn du im Wecker-Device ein Attribut mit dem Namen wakeupResetSwitcher anlegst. Das Attribut muss den Namen des Gerätes enthalten, welches als Resetswitcher angelegt werden soll. Es darf unter dem Namen kein anderes Gerät geben und es darf kein Leerzeichen oder so im Namen geben.
Du kannst das Attribut auch nochmals löschen und wieder neu anlegen. Ein ggf. bereits erzeugtes Device muss zuvor manuell wieder gelöscht werden.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

r_knipp

Zitat von: Loredo am 31 Oktober 2015, 13:15:33
Wie in der Commandref beschrieben werden die Status asleep und awoken nur dann aufgeführt, wenn der aktuelle Status entweder gotosleep oder asleep ist.

Sowas dachte ich mir schon. Allerdings wird mir asleep auch nicht angezeigt wenn ich gotosleep ausgewählt habe.

Zitat von: Loredo am 31 Oktober 2015, 13:15:33
Der Resetswitcher wird automatisch angelegt, wenn du im Wecker-Device ein Attribut mit dem Namen wakeupResetSwitcher anlegst. Das Attribut muss den Namen des Gerätes enthalten, welches als Resetswitcher angelegt werden soll. Es darf unter dem Namen kein anderes Gerät geben und es darf kein Leerzeichen oder so im Namen geben.

Habe ihn nochmal neu angelegt. Tut trotzdem nicht.
Der Wecker heißt rr_Robert_wakeuptimer1 und der Resetswitcher dazu heißt rr_Robert_wakeuptimer1_ResetSwitcher.
Sollte doch so richtig sein. Oder habe ich das doch falsch verstanden?