Zonen-basierte Anwesenheitserkennung und -steuerung

Begonnen von KernSani, 15 März 2019, 19:06:04

Vorheriges Thema - Nächstes Thema

KernSani

Hi Sebastian,

könnte ich theoretisch einbauen, aber wäre es nicht geschickter das über Events zu lösen (also bei "gotosleep" auf inactive zu setzen und bei "asleep" wieder auf active)?

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

binford6000

Zitatkönnte ich theoretisch einbauen, aber wäre es nicht geschickter das über Events zu lösen (also bei "gotosleep" auf inactive zu setzen und bei "asleep" wieder auf active)?
Wie gesagt, ich kann mir auch anders helfen. War nur ein Vorschlag...
VG Sebastian

KernSani

Zitat von: binford6000 am 28 März 2019, 22:36:40
Wie gesagt, ich kann mir auch anders helfen. War nur ein Vorschlag...
VG Sebastian
ok, tut nicht weh :) Vorschlag angenommen (neue Version im ersten Post)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

binford6000

#93
Moin Oli,
danke fürs Einbauen  :)

Ich habe im Log seltsame Fehler:
2019.03.29 07:58:12 5: [homezone - fl_zone]: 60
2019.03.29 07:58:41 5: [homezone - fl_zone]: Luminance: 1521 Threshold: 0-9999999999
2019.03.29 07:58:41 5: [homezone - fl_zone]: Luminance: 1521 Threshold: 0-9999999999
2019.03.29 07:58:41 1: [homezone - fl_zone]: Command execution failed:
2019.03.29 07:58:41 1: [homezone - fl_zone]: Perl execution failed:
2019.03.29 07:58:41 5: [homezone - fl_zone]: 52019.03.29 07:59:12 5: [homezone - fl_zone]: Luminance: 1521 Threshold: 0-9999999999
2019.03.29 07:59:12 1: [homezone - wz_zone]: Command execution failed:
2019.03.29 07:59:12 1: [homezone - wz_zone]: Perl execution failed:
2019.03.29 07:59:12 1: [homezone - ku_zone]: Command execution failed:
2019.03.29 07:59:12 1: [homezone - ku_zone]: Perl execution failed:
2019.03.29 07:59:12 5: [homezone - fl_zone]: Luminance: 1521 Threshold: 0-9999999999
2019.03.29 07:59:12 5: [homezone - fl_zone]: Luminance: 1521 Threshold: 0-9999999999
2019.03.29 07:59:12 1: [homezone - fl_zone]: Command execution failed:
2019.03.29 07:59:12 5: [homezone - fl_zone]: 0


Der Perlcode wird immer korrekt ausgeführt, allerdings mit den Fehlermeldungen. Luminance-Threshold nutze ich nicht.
Hier mal ein device als Beispiel:

Historie löschen
Internals:
   FUUID      5c8bead4-f33f-0308-08a7-e01e244c7c0155f4
   FVERSION   98_homezone.pm:v0.0.13-s18522/2019-02-07
   NAME       fl_zone
   NR         398
   NTFY_ORDER 50-fl_zone
   STATE      absent
   TYPE       homezone
   VERSION    0.0.13
   HELPER:
     doors      0
   READINGS:
     2019-03-24 09:23:36   condition       open
     2019-03-29 07:59:12   lastDayTime     morning
     2019-03-29 07:59:12   lastLumi        1521
     2019-03-29 07:59:12   lastZone        timer
     2019-03-29 07:59:12   occupied        0
     2019-03-29 07:59:12   state           absent
   helper:
     TIMER      1553842751
Attributes:
   devStateIcon inactive:ios-NACK present:user_available@blue likely:user_available@lightgreen unlikely:user_unknown@orange absent:user_away@red
   hz_cmd_absent {
my $room = (split /_/,"$name")[0];
fhem("set ".$room."_szene scene abwesend") if (Value($room."_AutoLight") eq "on");
}
   hz_cmd_likely {
my $room = (split /_/,"$name")[0];
my $tv = ReadingsVal('PhilipsTV.PRE','presence','present');
my $mode = ReadingsVal('Wohnung','mode','');
my $luminance = ReadingsNum('Wohnung','luminance','100');
my $light = ReadingsNum('Daemmerung','light','6');
my $tw = ReadingsNum('Daemmerung','twilight_weather','100');
my $tgtlum = ReadingsNum('helligkeit.DUM','target_luminance','40');
my $tgttwi = ReadingsNum('helligkeit.DUM','target_twilight','5');
my $tgttwiw = ReadingsNum('helligkeit.DUM','target_twilight_weather','80');
my $fully = Value('fully');
my $fullybri = ReadingsVal('fully','brightness','255');
my $aeah = ReadingsVal('Wohnung','anyoneElseAtHome','0');
if ($mode !~ /sleep/ && $aeah eq "off" && $fully ne "on") {
fhem("set fully on");
fhem("sleep 2; set fully brightness 255") if ($tw >= 71 && $fullybri != 255);
fhem("sleep 2; set fully brightness 20") if ($tw <= 70 && $fullybri != 20);
fhem("defmod atTmp_Bewegungsmelder_Tablet_aus_$name at +00:03:00 set fully off");
}
if (($light <= $tgttwi || $tw <= $tgttwiw || $luminance <= $tgtlum) && Value($room."_AutoLight") eq "on") {
my $scene;
my $actscene = Value($room.'_szene');
if ("$mode" =~ /asleep|gotosleep/) {
$scene = "schlafen";
}
elsif ("$mode" !~ /asleep/ && $room eq "wz") {
$scene = "anwesend_alle" if ($tv eq "present");
$scene = "anwesend" if ($tv eq "absent");
}
elsif ("$mode" !~ /asleep/ && $room eq "sz") {
$scene = "anwesend" if (isInTime('09:00-16:59'));
$scene = "schlafen" if (isInTime('17:00-24:00 00:00-08:59'));
}
elsif ("$mode" !~ /asleep/ && $room =~ /fl|ka|ku|bu|bz|wc/) {
$scene = "anwesend";
}
fhem("set ".$room."_szene scene $scene") if ($actscene ne "$scene");
}

}
   hz_dayTimes 05:00|morning 10:00|day 14:00|afternoon 18:00|evening 23:00|night
   hz_decay   300
   hz_decay_evening 600
   hz_decay_night 100
   hz_luminanceReading Wohnung:luminance
   hz_occupancyEvent fl_bwm:motion
   hz_state   100:present 50:likely 1:unlikely 0:absent
   icon       floor
   userattr   hz_decay_afternoon hz_decay_day hz_decay_evening hz_decay_morning hz_decay_night         hz_decay_sr hz_decay_ss hz_decay_sr hz_decay_ss  :textField-long    :textField-long    :textField-long    :textField-long   hz_cmd_present:textField-long hz_lumiThreshold_present hz_cmd_likely:textField-long hz_lumiThreshold_likely hz_cmd_unlikely:textField-long hz_lumiThreshold_unlikely hz_cmd_absent:textField-long hz_lumiThreshold_absent
   verbose    5


VG Sebastian

KernSani

Hi Sebastian,

luminance wird immer ausgewertet, auch wenn das Attribut nicht gesetzt ist (also nichts was stören sollte). Die Meldung bez. Command execution bzw perl execution kannst du ebenfalls ignorieren, diese wird dummerweise auch bei "leerem" Fehler ausgegeben (komisch, dass mir das nicht vorher aufgefallen ist). Werde ich in der nächsten Version fixen.

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

enno

Moin Oli,

Frage, wann geht der Status auf "closed"? Ich nutze nur Bewegungsmelder für "hz_occupancyEvent", sonst nichts. Trotzdem stehen die Zonen immer mal wieder auf "closed" und ich muss einmal "set open" stellen, damit wieder occupied runtergezählt wird. Kann das bei einem Neustart passieren? Ich habe noch nicht verstanden wann das gesetzt wird und vor allem, wie ich das verhindern kann.

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC

KernSani

Zitat von: enno am 29 März 2019, 10:31:18
Moin Oli,

Frage, wann geht der Status auf "closed"? Ich nutze nur Bewegungsmelder für "hz_occupancyEvent", sonst nichts. Trotzdem stehen die Zonen immer mal wieder auf "closed" und ich muss einmal "set open" stellen, damit wieder occupied runtergezählt wird. Kann das bei einem Neustart passieren? Ich habe noch nicht verstanden wann das gesetzt wird und vor allem, wie ich das verhindern kann.

Gruss
  Enno
Hi Enno,
eigentlich darf eine homezone nur auf "closed" gehen, wenn das closedEvent ausgelöst wird oder wenn manuell auf "closed" gesetzt wird. In einer früheren Version hatte ich beim "boxMode" auch auf closed gesetzt, das ist aber mittlerweile nicht mehr der Fall... Beim Neustart sollte da nichts passieren (habe ich auch noch nicht beobachtet. Falls du irgendeinen Anhaltspunkt findest nach dem ich suchen kann...

Grüße,

Oli


RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

binford6000

Zitat von: KernSani am 29 März 2019, 10:17:07
Hi Sebastian,

luminance wird immer ausgewertet, auch wenn das Attribut nicht gesetzt ist (also nichts was stören sollte). Die Meldung bez. Command execution bzw perl execution kannst du ebenfalls ignorieren, diese wird dummerweise auch bei "leerem" Fehler ausgegeben (komisch, dass mir das nicht vorher aufgefallen ist). Werde ich in der nächsten Version fixen.

Grüße,

Oli

Hi Oli,
nur kurz aber der Vollständigkeit halber: bei den Logeinträgen von set .*_zone inactive 2400 fehlen die device-Namen. Und sie könnten m.M.n. auch nur mit V3 geloggt werden:

2019.04.04 06:01:27 1: Timer: 2400
2019.04.04 06:01:27 1: Timer: 2400
2019.04.04 06:01:27 1: Timer: 2400
2019.04.04 06:01:27 1: Timer: 2400
2019.04.04 06:01:27 1: Timer: 2400
2019.04.04 06:01:27 1: Timer: 2400
2019.04.04 06:01:27 1: Timer: 2400
2019.04.04 06:01:27 1: Timer: 2400
2019.04.04 06:01:27 1: Timer: 2400


Sonst läuft alles bestens. Ich habe meine Bewegungsmelder-Lichtautomatik jetzt komplett auf homezone umgezogen  8)
Nochmal ein fettes DANKESCHÖN für deine Arbeit!  :)
VG Sebastian

flummy1978

#98
Holla,

puuuuhhh manchmal lohnt es sich die kompletten 7 Seiten durchzulesen und jedes noch so kleine Detail zu verfolgen. Damit lassen sich viele Kleinigkeiten schon im Vorfeld klären.

Alles was ich bisher hier gelesen habe, scheint so ziemlich meinen Wünschen zu entsprechen, die ich demnächst gerne umsetzen möchte .... Ob es wirklich klappt, hängt in erster Linie an der Umsetzung  der Hardwareanbindung. Aber auch in Mangel an Testumgebung schon mal bis dahin.

Zitat von: binford6000 am 04 April 2019, 13:27:08
Nochmal ein fettes DANKESCHÖN für deine Arbeit!  :)
VG Sebastian

natürlich in erster Linie KernSani (Olli) und auch an alle anderen Testern, aber vor allem auch Dir Sebastian.
Ich glaube (ohne wirklich zu wissen, wer sich sonst noch wie gemeldet hat) warst Du da für Olli wohl der Haupttester bis hierhin. Ich hoffe auch irgendwie noch n bissl was zur Entwicklung beitragen zu können, aber das wird noch ein wenig dauern, bis die entsprechende Hardware da und einsatzfähig ist.

Viele Grüße und nochmals Danke für Eure bisherige Arbeit  :)
Andreas

binford6000

Hallo,
nach kanpp zwei Monaten im Produktiveinsatz läuft alles soweit gut. Ein Anmerkung/Frage habe ich noch:

Ich musste mir für zwei Zonen jeweils ein notify bauen, welches ein hz_cmd_present immer dann ausführt,
wenn auch das entsprechende hz_closedEvent ausgelöst wird. Und nicht nur einmalig.

Habe ich da was übersehen oder ist das Verhalten so gewollt?
VG Sebastian

patlabor

Hallo zusammen,

habe die Zonen zusammen mit Xiaomi Sensoren schon seit einiger Zeit erfolgreich im Einsatz, und habe jetzt versucht eine per ESP_Easy aufgebaute Anwesenheitserkennung für ein Bett umzusetzen.
Per ESP_Easy wird ein Ultraschall Abstandssensor ausgelesen, per mqtt kommt entweder 1 wenn der Abstand Boden <> Lattenrost kleiner 18 cm, ansonsten 0
Damit lässt sich ziemlich zuverlässig erkennen ob gerade jemand im Bett liegt oder nicht.
der Sensor ist als presence_bett_patrick in fhem eingebunden und zeigt dort entweder true oder false
Die Tür zum Schlafzimmer hat einen Xiaomi Türkontakt (tk_schlafzimmer) welcher entweder close oder open meldet.
Für Testzwecke sendet presence_bett_patrick momentan jede Sekunde einmal den Status.
Jetzt wollte ich das ganze mit homezone vernünftig verpacken, aber leider komme ich hier nicht weiter.

Hier mal ein list wie ich das ganze angelegt habe:
Internals:
   CFGFN     
   FUUID      5cfe37ce-f33f-3d24-f0a1-a8b5a68ada38036c
   NAME       bett_patrick
   NR         19220
   NTFY_ORDER 50-bett_patrick
   STATE      present
   TYPE       homezone
   VERSION    0.0.12
   HELPER:
     doors      1
   READINGS:
     2019-06-10 13:37:38   condition       closed
     2019-06-10 13:48:34   lastDayTime     day
     2019-06-10 13:48:34   lastZone        self
     2019-06-10 13:48:34   occupied        100
     2019-06-10 13:48:34   state           present
   helper:
     TIMER      1560166653
Attributes:
   devStateIcon present:user_available@green likely:user_available@lightgreen unlikely:user_unknown@yellow absent:user_away
   hz_absenceEvent presence_bett_patrick:presence:.*false
   hz_closedEvent tk_schlafzimmer:contact:.*close
   hz_dayTimes 05:00|morning 10:00|day 14:00|afternoon 18:00|evening 23:00|night
   hz_decay   10
   hz_occupancyEvent presence_bett_patrick:presence:.*true
   hz_openEvent tk_schlafzimmer:contact:.*open
   hz_state   100:present 50:likely 1:unlikely 0:absent
   room       Schlafzimmer
   userattr   hz_cmd_present:textField-long hz_lumiThreshold_present hz_cmd_likely:textField-long hz_lumiThreshold_likely hz_cmd_unlikely:textField-long hz_lumiThreshold_unlikely hz_cmd_absent:textField-long hz_lumiThreshold_absent hz_decay_morning hz_decay_day hz_decay_afternoon hz_decay_evening hz_decay_night


Das Problem ist jetzt, das sobald ich die Tür schließe die Zone sofort auf Present springt, egal ob presence_bett_patrick true oder false ist

slor

Hallo zusammen,

hat zufällig jemand von Euch mal die Verbindung von ein paar Räumen, sonsoren etc. grafisch dargestellt?
Ich würde mir gern erst mal ein "Design" überlegen wollen, wie ich die Räume und Sensoren strukturieren, bevor ich alles einhacke.
Momentan ist mir das noch etwas Theoretisch.

Wir das Modul eigentlich bald offiziell eingechecked?

Sebastian
Fhem auf Raspberry Pi 4
CCU3 mit RaspberryMatic mit HMCCU an FHEM
HMCCU, Telegram, Conbee2 und Hue/Tradfri/Osram Lampen AQARA Sensoren, HomeConnect

binford6000

Zitat von: slor am 14 Juni 2019, 23:38:47
Hallo zusammen,

hat zufällig jemand von Euch mal die Verbindung von ein paar Räumen, sonsoren etc. grafisch dargestellt?
Ich würde mir gern erst mal ein "Design" überlegen wollen, wie ich die Räume und Sensoren strukturieren, bevor ich alles einhacke.
Momentan ist mir das noch etwas Theoretisch.

Wir das Modul eigentlich bald offiziell eingechecked?

Sebastian

Hallo Sebastian,
das bringt m.M.n. nicht so viel... Leg dir lieber 1-3 Räume als homezone-Device an und schau was passiert.   ;)
Als Hierarchie kann sowas dienen: Wohnung -> Etagen -> Räume

Ansonsten ist die Beschreibung im ersten Post von Oli ganz gut. Ich lese dort auch immer nochmal was nach.  8)

VG Sebastian

Eisix

Hallo,

habe seit 3 Tagen Probleme


2019.09.02 12:42:59.981 1: PERL WARNING: Deep recursion on subroutine "main::CallFn" at fhem.pl line 1892.
2019.09.02 12:42:59.982 1: PERL WARNING: Deep recursion on subroutine "main::homezone_setOcc" at ./FHEM/98_homezone.pm line 427.
2019.09.02 12:42:59.982 1: PERL WARNING: Deep recursion on subroutine "main::AnalyzeCommandChain" at ./FHEM/98_homezone.pm line 330.
2019.09.02 12:42:59.982 1: PERL WARNING: Deep recursion on subroutine "main::AnalyzeCommand" at fhem.pl line 1091.
2019.09.02 12:42:59.982 1: PERL WARNING: Deep recursion on subroutine "main::CommandSet" at fhem.pl line 1238.
2019.09.02 12:42:59.982 1: PERL WARNING: Deep recursion on subroutine "main::DoSet" at fhem.pl line 1924.
2019.09.02 12:42:59.982 1: PERL WARNING: Deep recursion on subroutine "main::homezone_Set" at fhem.pl line 3747.


danach stürzt Fhem ab und ich muss neu starten.
Ich vermute es liegt an einem hz_occupancyEvent weil ich da einige verändert hatte, konnte aber noch nicht identifizieren welche Zone es ist. Oder habe ich einen Bug gefunden?
Jemand einen Tip?

Gruß
Eisix


dorian67

Hallo Zusammen,

ich finde die Idee hinter dem Modul gut und habe sie bei mir auch eingebunden.
Ich habe verschiedene Zonen definiert und auch einen

hz_occupancyEvent Beweg_WZ:state:motion"

dazu.

Wenn der Bewegungsmelder auslöst müsste sich da nicht der State der Zone ändern habe habe ich die Funktion des Moduls falsch verstanden?

Hier die Def. der Zone:
Internals:
   FUUID      5d6d758f-f33f-45a3-0a2b-9522db28c51d2a45
   NAME       HZ_WZ
   NR         1437
   NTFY_ORDER 50-HZ_WZ
   STATE      absent
   TYPE       homezone
   VERSION    0.0.13
   HELPER:
     doors      0
   READINGS:
     2019-09-02 22:57:28   condition       open
     2019-09-02 23:13:32   lastDayTime     night
     2019-09-02 23:13:32   lastZone        self
     2019-09-02 23:13:32   state           absent
Attributes:
   devStateIcon present:user_available@green likely:user_available@lightgreen unlikely:user_unknown@yellow absent:user_away
   group      HZ_Räume
   hz_dayTimes 05:00|morning 10:00|day 14:00|afternoon 18:00|evening 23:00|night
   hz_decay   120
   hz_occupancyEvent Beweg_WZ:state:motion
   hz_state   100:present 50:likely 1:unlikely 0:absent
   room       System
   userattr   hz_cmd_present:textField-long hz_lumiThreshold_present  :textField-long    :textField-long    :textField-long   hz_decay_morning hz_decay_day hz_decay_afternoon hz_decay_evening hz_decay_night hz_cmd_present:textField-long hz_lumiThreshold_present hz_cmd_likely:textField-long hz_lumiThreshold_likely hz_cmd_unlikely:textField-long hz_lumiThreshold_unlikely hz_cmd_absent:textField-long hz_lumiThreshold_absent



Grüße Dorian