Willkommens MP3 und Presence

Begonnen von mfeske, 17 September 2015, 20:29:26

Vorheriges Thema - Nächstes Thema

mfeske

Hallo zusammen,

ich möchte wenn die einzelnen Familienmitglieder eintreffen jeweils ein MP3 abspielen und habe aber Probleme die Komponenten zu kombinieren. Ich habe mir deshalb die Aufgabe in einzelne Schritte aufgeteilt
Was ich habe ist:
Einer Erkennung ob jemand anwesend ist zum Beispiel:
# Anwesenheit Dana
define Dana PRESENCE lan-ping 192.168.115.36 20 60
attr Dana userattr Bewohner_structure Bewohner_structure_map structexclude
attr Dana Bewohner_structure Bewohner_Eltern
attr Dana devStateIcon present:HOME_Status.1 absent:HOME_Status.3
attr Dana eventMap 1
attr Dana room Haus
attr Dana verbose 3
# Anwesenheit Dana Ende


Eine Willkommensansage
define gong_mp3_taster_doif DOIF ([taster_gong:?on]) ((set gong_MP3 playTone 0,002,0))
attr gong_mp3_taster_doif do always
attr gong_mp3_taster_doif room gong_ansagen


Einen Schalter der momentan das eintreffen noch simuliert:
define taster_gong dummy
attr taster_gong devStateIcon on:remotecontrol/black_btn_GREEN:on
attr taster_gong room gong_ansagen
attr taster_gong setList state:on off
attr taster_gong webCmd :


Doch wie kombiniere ich es jetzt, damit beim eintreffen der MP3 Sound abgespielt wird ? Ein anderes Problem ist ja auch das eintreffen im WLan nicht gleich eintreffen an der Tür im Hörbereich des MP3 Gongs ist. Vermutlich ist ein zusätzlicher Türkontakt die Lösung welcher momentan noch ungenutzt ist.
define Kontakt_ MAX ShutterContact 0f4f03
attr Kontakt_ IODev cm
attr Kontakt_ room Abstellkammer


Würde mich über Tipps freuen, ich vermute es geht in Richtung notify bin mir aber absolut unsicher :-( vielleicht ja doch eher DOIF, ein erster Ansatz.
define Eintreffen_Micha_doif DOIF ([Micha] = present)((set gong_MP3 playTone 0,002,0))
attr Eintreffen_Micha_doif room gong_ansagen


Gruß
Micha
Hardware:
1 x Raspberry Pi Mod. B 512 MB
eq-3 2 x MAX! eTRV Heizungssteller, 1 x MAX! Fensterkontakt, 1 x MAX! Cube - LAN Gateway (ausser Betrieb)
Intertechno 1x ITZ-500, 3x ITT-1500, 9x ITR-1500, 3 x ITDL-1000, 2 x ITL-500
1 x CC1101-USB-Lite 433MHz (CUL433)  V3 1 x CC1101-USB-Lite 868MHz (CUL868)

VB90

Du könntest einen Timer einbauen und in einem DOIF ein wait als Attribut setzen, bevor der  Gong spielt.
Alternativ presence über Bluetooth realisieren, die Reichweite ist im allgemeinen nicht ganz so groß wie bei WLAN.

Mögliche Kombination in einem DOIF, erstmal ganz einfach gestrickt.


define Willkommen_Dana DOIF ([Dana:state] eq "present"])((set gong_MP3 playTone 0,002,0))
attr Willkommen_Dana wait 30

Hier würde bei der Erkennung von Dana 30 Sekunden mit dem abspielen gewartet werden.

(ohne Anspruch auf absolute Richtigkeit der Syntax)

Wenn das funktioniert, wirst du in der Praxis erkennen, das du einige äußere Umstände "erkennen" und ausschliessen musst.
Sinnfreie Wiederholungen z.B. wenn Dana nur mal das Handy neu gestartet hat und deswegen nicht im LAN anwesend war und lauter solche Dinge.
Sonst wird es schnell nervig und die Akzeptanz sinkt rapide.

vb

edit:
Na da war ich ja schön zu langsam ;)
Dein erster Ansatz ist gut, weitermachen :)
Man muss das Rad nicht neu erfinden, nur wissen wie es gedreht wird.

Loredo

#2

Bei mir funktioniert es so:


Die Anwesenheit wird per Geofencing gesetzt (Kombination der Module GEOFANCY, ROOMMATE und RESIDENTS).


Wenn nun die Anwesenheit des RESIDENTS Devices auf "anwesend" wechselt, wird ein DOIF scharf geschaltet welches darauf wartet, dass die Haustür geöffnet wird. Nachdem die Tür dann geschlossen wurde, wird zeitverzögert die Nachricht abgespielt und Aktionen wie Beleuchtung ein etc. ausgelöst.


Als Inspiration hier das DOIF ohne weitere Erklärung:



define di_WelcomeHome DOIF
(
   [di_Residents:state] eq "absent" or
   [di_Residents:state] eq "gone"
)


DOELSEIF
(
   [rgr_Residents:?present] and
   [rgr_Residents:presence] eq "present" and
   ([?di_WelcomeHome:state] eq "initialized" or [?di_WelcomeHome:state] eq "off")
)


DOELSEIF
(
   [FL_FrontDoor:?closed] and
   [FL_FrontDoor:state] eq "closed" and
   ([?di_WelcomeHome:state] eq "initialized" or [?di_WelcomeHome:state] eq "off") and
   [?rgr_Residents:presence] eq "absent"
)


DOELSEIF
(
   (
      [FL_FrontDoor:?closed] and
      [FL_FrontDoor:state] eq "closed" and
      [?di_WelcomeHome:state] eq "standbyDoor"
   ) or (
      [rgr_Residents:?present] and
      [rgr_Residents:presence] eq "present" and
      [?di_WelcomeHome:state] eq "standbyPresence" and
      [?FL_FrontDoor:state] eq "closed"
   )
)
(
   IF ($hour < 23 and $hour > 17 and [HouseMode:state] eq "night") (
      set HouseMode evening
   ) ELSE (
      set HouseMode [HouseMode:state]
   ),


   set HouseAnn long,


   IF ([rgr_Residents:lastDurAbsence_cr] > 30) (
      (msg audio @rgr_Residents -1 Hallo Juljan, willkommen zuhause. ({jpWelcomeHome()}))
   )
)
(
   set g_APT_Lights_control auto,
   set g_APT_Shutters_control auto
)




attr di_WelcomeHome DbLogExclude .*
attr di_WelcomeHome alias Automation: Residents Welcome Home
attr di_WelcomeHome cmdState off|standbyDoor|standbyPresence|played
attr di_WelcomeHome devStateIcon standby.*:general_an@orange played:general_ok@green off:general_aus initialized:unknown
attr di_WelcomeHome event-on-change-reading state
attr di_WelcomeHome room Apartment,Automation,Residents
attr di_WelcomeHome wait 0:0:0:6,5



Damit gekoppelt ist noch dieses DOIF, welches die Schaltungen bei Abwesenheit (und anderen Status) erledigt:



define di_Residents DOIF

(
[rgr_Residents:state] eq "home"
)
(
set LR_PwrMedia_Sw:FILTER=state!=on on,
set Sonos Mute 0,
)


DOELSEIF
(
[rgr_Residents:state] eq "absent"
)
(
set g_APT_Lights_control manual,
set g_APT_Lights [FILTER=state!=off] off, (setstate g_APT_Lights,g_LR_Lights,g_BR_Lights,g_KT_Lights off),
set g_APT_Media [FILTER=state!=off] off, setstate g_APT_Media off,
set g_APT_Audio [FILTER=state!=off] off, setstate g_APT_Audio off,
set HouseAnn off,
set LR_PwrMedia_Sw:FILTER=state=on off,
set LR_SunBlind:FILTER=pct>0 in
)


DOELSEIF
(
[rgr_Residents:state] eq "gone"
)
(
set g_APT_Lights_control manual,
set g_APT_Lights [FILTER=state!=off] off, (setstate g_APT_Lights,g_LR_Lights,g_BR_Lights,g_KT_Lights off),
set g_APT_Media [FILTER=state!=off] off, setstate g_APT_Media off,
set g_APT_Audio [FILTER=state!=off] off, setstate g_APT_Audio off,
set HouseAnn off,
set LR_PwrMedia_Sw:FILTER=state=on off,
set LR_SunBlind:FILTER=pct>0 in,


set g_APT_Shutters_control manual,
set g_APT_Shutters [FILTER=state!=closed] down, (setstate g_APT_Shutters,g_LR_Shutters closed)
)


DOELSEIF
(
[rgr_Residents:state] eq "gotosleep"
)
(
set HouseMode:FILTER=state=day evening,
set g_APT_Media off,


IF ([rgr_Residents:residentsTotalGuestsPresent] == 0) (
set Sonos StopAll,
(sleep 10; set g_LR_Lights,g_KT_Lights [FILTER=state!=off] off; setstate g_LR_Lights,g_KT_Lights off)
) ELSE (
(sleep 10; set g_KT_Lights [FILTER=state!=off] off; setstate g_KT_Lights off)
)
)


DOELSEIF
(
[rgr_Residents:state] eq "asleep"
)
(
set HouseMode:FILTER=state!=night night,
set g_APT_Media off,
set Sonos_Bathroom:FILTER=transportState=PLAYING Stop,
(sleep 30; set HouseAnn:FILTER=state!=off off),
(sleep 20; set g_LR_Lights,FL_Light off)
)


DOELSEIF
(
[rgr_Residents:state] eq "awoken"
)
(
set HouseAnn:FILTER=state!=long long,
set HouseMode:FILTER=state=night morning,
set KT_CounterLight on-for-timer 6300
)


DOELSEIF
(
[rgr_Residents:residentsTotalWakeup] > 0
)
(
set HouseMode:FILTER=state=night morning
)




DOELSE





attr di_Residents DbLogExclude .*
attr di_Residents alias Automation: Residents Program
attr di_Residents cmdState present|absent|gone|gotosleep|asleep|awoken|wakeup|standby
attr di_Residents devStateIcon initialized:unknown present:status_available@green absent:status_away_1@orange gone:status_standby gotosleep:status_night@green asleep:status_night@green awoken:status_available@green
attr di_Residents event-on-change-reading state
attr di_Residents room Apartment,Automation,Residents
attr di_Residents wait 1:5:5:5:5:5:5:5



Im Grunde ist das eine (ausschnittsweise) Sneak-Peak auf mein noch immer irgendwie mal geplantes Modul HOMESTATE, bei dem ich mir seit DOIF eben nicht ganz sicher bin, ob es eher Templates werden oder doch ein eigenes Modul. Mal schauen ;)
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

mfeske

Hallo Loredo,

danke für die Tipps. Da ich kein IPhone User bin werde ich das wohl anders lösen müssen ;-) Aber die Idee schau ob jemand im Wlan ist, warte das die Tür auf geht und spiele verzögert den Ton ab ist natürlich gut.

Mein Angst ist jetzt aber mal wieder, was ist wenn mehrere gleichzeitig nach Hause kommen ? Vielleicht eine Idee für Dein Modul ;-)

Gruß
Micha
Hardware:
1 x Raspberry Pi Mod. B 512 MB
eq-3 2 x MAX! eTRV Heizungssteller, 1 x MAX! Fensterkontakt, 1 x MAX! Cube - LAN Gateway (ausser Betrieb)
Intertechno 1x ITZ-500, 3x ITT-1500, 9x ITR-1500, 3 x ITDL-1000, 2 x ITL-500
1 x CC1101-USB-Lite 433MHz (CUL433)  V3 1 x CC1101-USB-Lite 868MHz (CUL868)

Loredo

RESIDENTS und ROOMMATE funktionieren auch ohne GEOFANCY.


RESIDENTS kummuliert die Anwesenheit auch wenn mehrere Bewohner gleichzeitig nach Hause kommen. Es sei denn natürlich du möchtest unbedingt "Hallo Mandy, hallo Kevin, hallo Chantal, hallo Janine-Christin, willkommen zuhause" sagen  8)  (kleiner Spaß)
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

Otto123

Hallo Micha,

ich habe das relativ simpel gelöst. Ich habe pro Person einen Dummy dessen Status mittels Wlan Erkennung und Bluetooth Erkennung (je nach dem was schneller ist, meist BT) auf present gesetzt wird. Neben der Tür (innen) ist ein Bewegungsmelder fürs Flurlicht.
Pro Person gibt es ein DOIF ([PIR1] eq "motion" and [PersonOtto] eq "present") (set MyTTS tts Hallo Otto)
Jedes DOIF wird von der Person getriggert die gerade kommt und wartet dann auf den Bewegungsmelder. Kommen mehrere und die Tür geht auf werden alle nacheinander begrüßt.  8)
Klappt in den meisten Fällen perfekt, ist aber eh bloß ein Spaß.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz