Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr

Begonnen von DeeSPe, 07 Januar 2017, 15:59:43

Vorheriges Thema - Nächstes Thema

pjakobs

Moin, ich hab ein kleines, aber nerviges Problem mit HOMEMODE bzw. RESIDENTS / ROOMMATE (und ich fürchte, in Wirklichkeit ist es letzteres)

fast alle Lichter bei mir sind über FHEM gesteuert und wenn ich zu Bett gehe und meinen Schlafphasenwecker aktiviere, setzt der meinen ROOMMATE status auf "gotosleep" - in einem Homemode Event werden alle Lichter auf "auto" geschaltet und eine Routine in den 99_myUtils sorgt dafür, dass im Zustand "Auto" die Lichter aus bleiben, wenn der Residents State nicht "home" ist, also wenn ich nicht daheim bin oder eben "asleep". Ansonsten werden die Lichter entsprechend der Helligkeit außen (via Twilight) gedimmt.

Die Präsenzerkennung läuft über eine Kombination von Bluetooth (presenced/collectord) und der WLAN MAC auf der Fritz!Box

Nun das Problem: wenn mein Präsenzstatus nachts kurz auf "away" und dann zurück auf "home" springt, dann geht auch der RESIDENTS status auf "home" und nicht mehr auf irgendwas anderes, d.h. der entsprechende HOMEMODE event wird getriggert und mein Haus geht in den normalen Tagesmodus. Dass die Kaffeemaschine anspringt ist ja ok, aber dass dann das Licht im Schlafzimmer an geht nervt doch sehr.

Ich denke, das Problem hat mehrere Ebenen:
* warum verliere ich manchmal meinen Präsenzstatus?
* warum kann ich das in RESIDENTS nicht so konfigurieren, dass es keinen STATE Übergang von asleep->away->home zulässt?
* kann ich das irgendwo in HOMEMODE vermeiden?

Vielleicht hat jemand ne Idee?

danke

pj

volschin

Grundsätzlich halte ich das hier für den falschen Thread. Homemode tut, was es soll und es gibt reichlich Möglichkeiten mit Presence und Residents hier eine Latenz einzubauen.
Also das Problem in den ursächlichen Modulen korrigieren.
Intel NUC+Ubuntu 24.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7690, Echo Dots+Show8, HomeBridge

binford6000

Zitat von: pjakobs am 07 Oktober 2019, 10:05:46
* kann ich das irgendwo in HOMEMODE vermeiden?

Ja kannst du:
Setz einfach HomeAutoPresenceSuppressState auf asleep|awoken|gotosleep. Dann werden kleine Presence-Sprünge ignoriert  ;)

VG Sebastian

binford6000

ZitatDie Präsenzerkennung läuft über eine Kombination von Bluetooth (presenced/collectord) und der WLAN MAC auf der Fritz!Box

Am besten du bast diese Kombinationen in eine Structure und hinterlegst diese dann als Presence-Gerät in HOMEMODE. Falls du Geräte hast die
auch mal alleine zu Hause sein dürfen (Tablets oder so...) steckst du diese in eine eigene Structure und kaskadierst diese mit deiner Haupt-Struktur.

VG Sebastian

pjakobs

Zitat von: binford6000 am 07 Oktober 2019, 10:40:58
Am besten du bast diese Kombinationen in eine Structure und hinterlegst diese dann als Presence-Gerät in HOMEMODE. Falls du Geräte hast die
auch mal alleine zu Hause sein dürfen (Tablets oder so...) steckst du diese in eine eigene Structure und kaskadierst diese mit deiner Haupt-Struktur.

VG Sebastian
Mit Structures hatte ich mich bisher noch nicht auseinandergesetzt, auch weil die Doku da eher schwach scheint. Ich hab halt ein kleines Script, dass den Präsenzstatus mehrerer Geräte oder verknüpft [emoji2369]

pj

Gesendet von meinem HTC U11 mit Tapatalk


binford6000

Zitat von: pjakobs am 07 Oktober 2019, 11:42:57
Mit Structures hatte ich mich bisher noch nicht auseinandergesetzt, auch weil die Doku da eher schwach scheint. Ich hab halt ein kleines Script, dass den Präsenzstatus mehrerer Geräte oder verknüpft [emoji2369]

pj

Gesendet von meinem HTC U11 mit Tapatalk

Hier mal meine Structure:
Internals:
   ATTR       st_type_presence
   CHANGED   
   CHANGEDCNT 205
   DEF        st_type_presence Sebastian.dum sebastian_gtag.pre sebastian_iphone.pre
   FUUID      5c44a527-f33f-0308-050d-762c0c15ede2cca3
   FVERSION   98_structure.pm:0.202720/2019-09-29
   NAME       sebastian.str
   NR         134
   NTFY_ORDER 50-sebastian.str
   STATE      present
   TYPE       structure
   READINGS:
     2019-10-07 11:56:39   LastDevice      sebastian_gtag.pre
     2019-10-07 11:56:39   LastDevice_Abs  sebastian_gtag.pre
     2019-10-07 11:56:39   presence        present
     2019-10-07 11:56:39   state           present
Attributes:
   alias      Sebastians Anwesenheit
   clientstate_behavior relative
   clientstate_priority present absent
   devStateIcon present:ios-on-blue absent:ios-off disabled:ios-NACK
   event-on-change-reading .*
   group      Anwesenheits-Struktur
   icon       male
   room       30_Devices
   userReadings presence {ReadingsVal('sebastian.str','state','');;}


Die Structure geht auf Present sobald eines der Geräte auf present geht. Latenzen (absenceThreshold) sind im nur gtag-Presence-Device eingebaut.
Die iPhone Erkennung via FritzBox ist träge genug. Diese Structure ist als einziges Presence-Device in HOMEMODE eingetragen. 

attr HomePresenceDeviceType structure

Der Name muss den Namen des jeweiligen ROOMMATE enthalten und es braucht noch ein userReading "presence" welchen den state abbildet.
Und falls dann der unwahrscheinliche Fall eintritt, dass über Nacht der iPhone-Akku UND die Batterie vom gtag leer ist kommt HomeAutoPresenceSuppressState zum tragen.

Vielleicht kannst du da was von verwenden...  ;)

VG Sebastian

DeeSPe

Zitat von: binford6000 am 07 Oktober 2019, 12:10:00
Hier mal meine Structure:
Internals:
   ATTR       st_type_presence
   CHANGED   
   CHANGEDCNT 205
   DEF        st_type_presence Sebastian.dum sebastian_gtag.pre sebastian_iphone.pre
   FUUID      5c44a527-f33f-0308-050d-762c0c15ede2cca3
   FVERSION   98_structure.pm:0.202720/2019-09-29
   NAME       sebastian.str
   NR         134
   NTFY_ORDER 50-sebastian.str
   STATE      present
   TYPE       structure
   READINGS:
     2019-10-07 11:56:39   LastDevice      sebastian_gtag.pre
     2019-10-07 11:56:39   LastDevice_Abs  sebastian_gtag.pre
     2019-10-07 11:56:39   presence        present
     2019-10-07 11:56:39   state           present
Attributes:
   alias      Sebastians Anwesenheit
   clientstate_behavior relative
   clientstate_priority present absent
   devStateIcon present:ios-on-blue absent:ios-off disabled:ios-NACK
   event-on-change-reading .*
   group      Anwesenheits-Struktur
   icon       male
   room       30_Devices
   userReadings presence {ReadingsVal('sebastian.str','state','');;}


Die Structure geht auf Present sobald eines der Geräte auf present geht. Latenzen (absenceThreshold) sind im nur gtag-Presence-Device eingebaut.
Die iPhone Erkennung via FritzBox ist träge genug. Diese Structure ist als einziges Presence-Device in HOMEMODE eingetragen. 

attr HomePresenceDeviceType structure

Der Name muss den Namen des jeweiligen ROOMMATE enthalten und es braucht noch ein userReading "presence" welchen den state abbildet.
Und falls dann der unwahrscheinliche Fall eintritt, dass über Nacht der iPhone-Akku UND die Batterie vom gtag leer ist kommt HomeAutoPresenceSuppressState zum tragen.

Vielleicht kannst du da was von verwenden...  ;)

VG Sebastian

HOMEMODE kann auch mit mehrere PRESENCE Devices pro RESIDENT umgehen, somit ist ein structure eigentlich nicht nötig. Wenn es mehrere PRESENCE Devices pro RESIDENT gibt kann man in HOMEMODE auch einstellen wie viele dieser Devices als an-/abwesend gemeldet werden müssen um den jeweiligen RESIDENT auf an-/abwesend zu schalten.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

volschin

Sinnvoll wäre aber zuerst mal an das Attribut absenceTimeout des PRESENCE Devices Hand anzulegen.
Intel NUC+Ubuntu 24.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7690, Echo Dots+Show8, HomeBridge

binford6000

#1013
Zitat von: volschin am 07 Oktober 2019, 19:55:39
Sinnvoll wäre aber zuerst mal an das Attribut absenceTimeout des PRESENCE Devices Hand anzulegen.

Du meinst sicher absenceThreshold  ;)
absenceTimeout ist nur für den Event-Mode. pj hat aber lan-bluetooth und function im Einsatz...

VG Sebastian

binford6000

Zitat von: DeeSPe am 07 Oktober 2019, 13:01:40
HOMEMODE kann auch mit mehrere PRESENCE Devices pro RESIDENT umgehen, somit ist ein structure eigentlich nicht nötig. Wenn es mehrere PRESENCE Devices pro RESIDENT gibt kann man in HOMEMODE auch einstellen wie viele dieser Devices als an-/abwesend gemeldet werden müssen um den jeweiligen RESIDENT auf an-/abwesend zu schalten.

Gruß
Dan

So hatte ich das früher auch gemacht. Immerhin habe ich durch die Übung structure verstanden  ;)
VG Sebastian

volschin

Intel NUC+Ubuntu 24.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7690, Echo Dots+Show8, HomeBridge

DeeSPe

Habe soeben v1.5.1 eingecheckt.

Zitat von: Changelog v1.5.1
- added attribs HomeCMDbattery & HomeCMDbatteryNormal
- added new reading lastBatteryNormal
- added new placeholder %BATTERYNORMAL%
- fixed batteryLow readings creation while adding sensors to HomeSensorsBattery

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

cortmen

  :)Hallo zusammen, ich arbeite mich gerade in das sehr gut gemachte HOMEMODE Modul ein.

Bis jetzt klappt alles alles perfekt, Dank guter Doku.

Nur zur Frage:
Ich habe als Motion Sensor einen FIBARO System FGMS001-ZW5 Motion Sensor
Der Sensor liefert als state  - open/closed.

Was mich allerdings wundert, die kleinen Test-Befehle unter HomeCMDmotion

{
  if ( "%ALARMHR%" =~ m/^Motion_Wohnzimmer/i ) {
    Log 1,"%ALARMHR% hat den Status: %STATE%";
  }
}


werden 2 x durchlaufen.
Das ist bestimmt nicht so vorgesehen oder?
Jemand eine Tipp, warum dieser Sensor das macht ?

Log - verbose 5 -

2019.10.20 19:43:50 5: Home: Events from monitored device FIBZW5_Motion_Sensor: alarm: HomeSecurity: Motion Detection - Unknown Location
2019.10.20 19:43:50 5: Home: Events from monitored device FIBZW5_Motion_Sensor: state: open --- reportedState: open
2019.10.20 19:43:50 5: Home: cmdnew: {  if ( "%ALARMHR%" =~ m/^Motion_Wohnzimmer/i ) {  Log 1,"%ALARMHR% hat den Status: geöffnet";  } }
2019.10.20 19:43:50 4: executed CMDs: {  if ( "" =~ m/^Motion_Wohnzimmer/i ) {  Log 1," hat den Status: geöffnet";;  } }
2019.10.20 19:43:50 5: Home: cmdnew:
2019.10.20 19:43:50 4: executed CMDs:
2019.10.20 19:43:50 5: Home: Events from monitored device FIBZW5_Motion_Sensor: state: open --- reportedState: open
2019.10.20 19:43:50 5: Home: cmdnew: {  if ( "%ALARMHR%" =~ m/^Motion_Wohnzimmer/i ) {  Log 1,"%ALARMHR% hat den Status: geöffnet";  } }
2019.10.20 19:43:50 1: Motion_Wohnzimmer hat den Status: geöffnet
2019.10.20 19:43:50 4: executed CMDs: {  if ( "Motion_Wohnzimmer" =~ m/^Motion_Wohnzimmer/i ) {  Log 1,"Motion_Wohnzimmer hat den Status: geöffnet";;  } }

binford6000

Zitat von: cortmen am 20 Oktober 2019, 19:54:43
  :)Hallo zusammen, ich arbeite mich gerade in das sehr gut gemachte HOMEMODE Modul ein.

Bis jetzt klappt alles alles perfekt, Dank guter Doku.

Nur zur Frage:
Ich habe als Motion Sensor einen FIBARO System FGMS001-ZW5 Motion Sensor
Der Sensor liefert als state  - open/closed.

Was mich allerdings wundert, die kleinen Test-Befehle unter HomeCMDmotion

{
  if ( "%ALARMHR%" =~ m/^Motion_Wohnzimmer/i ) {
    Log 1,"%ALARMHR% hat den Status: %STATE%";
  }
}


werden 2 x durchlaufen.
Das ist bestimmt nicht so vorgesehen oder?
Jemand eine Tipp, warum dieser Sensor das macht ?

Log - verbose 5 -

2019.10.20 19:43:50 5: Home: Events from monitored device FIBZW5_Motion_Sensor: alarm: HomeSecurity: Motion Detection - Unknown Location
2019.10.20 19:43:50 5: Home: Events from monitored device FIBZW5_Motion_Sensor: state: open --- reportedState: open
2019.10.20 19:43:50 5: Home: cmdnew: {  if ( "%ALARMHR%" =~ m/^Motion_Wohnzimmer/i ) {  Log 1,"%ALARMHR% hat den Status: geöffnet";  } }
2019.10.20 19:43:50 4: executed CMDs: {  if ( "" =~ m/^Motion_Wohnzimmer/i ) {  Log 1," hat den Status: geöffnet";;  } }
2019.10.20 19:43:50 5: Home: cmdnew:
2019.10.20 19:43:50 4: executed CMDs:
2019.10.20 19:43:50 5: Home: Events from monitored device FIBZW5_Motion_Sensor: state: open --- reportedState: open
2019.10.20 19:43:50 5: Home: cmdnew: {  if ( "%ALARMHR%" =~ m/^Motion_Wohnzimmer/i ) {  Log 1,"%ALARMHR% hat den Status: geöffnet";  } }
2019.10.20 19:43:50 1: Motion_Wohnzimmer hat den Status: geöffnet
2019.10.20 19:43:50 4: executed CMDs: {  if ( "Motion_Wohnzimmer" =~ m/^Motion_Wohnzimmer/i ) {  Log 1,"Motion_Wohnzimmer hat den Status: geöffnet";;  } }


Da du keine Unterscheidung zwischen geöffnet und geschlossen machst wird der Befehl beim open und closed Event ausgeführt. Nicht zweimal.

VG Sebastian


Gesendet von iPad mit Tapatalk

cortmen

#1019
Danke für Deine Antwort.
Aber bitte schau auf die Uhrzeit open event und in der gleichen Sek. close event.
Kann ja eigenlich nicht, der Sensor stellt sich in 5min wieder auf closed.