Zonen-basierte Anwesenheitserkennung und -steuerung

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

Vorheriges Thema - Nächstes Thema

obi

Hi,

ich wollte dieses Modul mal testen und habe gemerkt, dass es wohl mit meiner Konstellation von Bewegungsmeldern nicht funktioniert.
Ich bekomme nur ein Event bei einer Bewegung und bei keiner Bewegung vom Bewegungsmelder. Wenn einmal eine Bewegung erkannt wurde werden keine weiteren Events mehr generiert solange es eine Bewegung gibt.
Lässt sich es sich so einstellen, dass man noch ein Attribut für "hz_NOToccupancyEvent" hinzufüget wenn also der Bewegundmelder keine Bewegung mehr meldet dass dann erst der Timer runterläuft.

Was meint ihr?

VG Sebastian

MadMax-FHEM

Was für Bewegungsmelder hast du!?
Evtl. kann man dort was einstellen...

Hast du event-on-change-reading o.ä. gesetzt!?

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Prof. Dr. Peter Henning

@obi: Das ist eine Speziallösung, die sollte vielleicht jeder selbst realisieren. Geht problemlos mit sequence oder DOIF.

LG

pah

obi

Hallo,

ich habe KNX Bewegungsmelder, dort könnte ich einstellen, dass alle x Sekunden der Status gesendet wird. Dies erzeugt mir aber zu viel unnötige Bus Last.
Ich werde wie empfohlen doch wohl einfacher DOIF verwenden. Das hatte ich mir auch schon gedacht.

VG

laberlaib

Wäre das Bewegungsevent nicht einfach als "close" im Sinne dieses Moduls zu verstehen?
Und wenn dann "nicht Bewegung" kommt, dann ist es ein "open"?
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

Prof. Dr. Peter Henning

Ich denke auch, dass das erweitert werden muss. Ich habe jetzt mein Treppenhaus mit Bewegungsmeldern ausgestattet und kann aus der Reihenfolge der Auslösung sagen, wann eine Person z.B. vom Dachgeschoss bis ins Erdgeschoss wechselt - oder umgekehrt.

Ins Modul müsste also ein set-Befehl, der die Anzahl der Personen pro Zone um 1 erhöht  oder erniedrigt. Die Occupancy wäre dann also eine Gleitkommazahl, die auch größer als 1 (oder 100%) sein kann.

LG

pah

patlabor

Hallo zusammen,

ich versuche gerade 2 Zonen zum "zusammen Spiel" zu bewegen, aber irgendwie bekomme ich das nicht hin.

Die Situation ist folgende:
Küche und Wohnzimmer jeweils mit Bewegunsmelder und als Zone angelegt.
Die Küche hat eine Tür mit Türkontakt, das Wohnzimmer hat keine Tür, ist jedoch nur durch die Küche erreichbar.
Im Wohnzimmer steht ein TV, welches ich über presence in fhem abbilde.

Jetzt soll die Zone Küche present sein, sobald die Tür aufgeht, oder der Bewegungsmelder in der Küche anschlägt, und den Countdown starte, wenn die Tür wieder geöffent wird, oder der Bewegunsmelder im Wohnzimmer auslöst.

Das Wohnzimmer soll present sein, wenn der Bewegungsmelder im Wohnzimmer anschlägt und den Countdown starten, sobald der Bewegungsmelder in der Küche Bewegung meldet, jedoch NICHT wenn gerade das TV an ist.

Bisher hatte ich das so gelöst, das der TV sowohl als Tür als auch als occupancy event im Wohnzimmer eingestellt war, und der Zustand present/absent der Zone Wohnzimmer als Tür in der Zone Küche.

Das hat soweit auch gut funktioniert, war abends der TV an, und kam jemand durch die Tür rein und hat dann die Küche wieder verlassen, hat zwar der Countdown angefangen, da das TV jedoch alle 60 Sek ein event present auslöst, wurde die Zone Wohnzimmer vor ablauf des Countdowns wieder auf close und present gesetzt, und das Licht bleibt an.

Steht jemand im Wohnzimmer auf, um sich aus der Küche etwas zu trinken zu holen, geht in der Küche das Licht an, da aber die Zone Wohnzimmer noch auf present steht geht nach verlassen der Küche der Timer los, und das Licht in der Küche geht wieder aus.

Das Problem ist nun allerdings, wenn z.B. im Wohnzimmer Personen anwesend sind, und jemand anderes in der Küche z.B. Kocht. Dadurch schlägt der Bewegungsmelder in der Küche nicht rebelmässig an, weil man ja selten vor dem Herd herumtanzt, sondern eher ruhig dasteht. und nach ablauf des Countdowns steht man in der Küche im dunkeln.

Ich habe jetzt versucht das mit hz_adjacent und boxmode zu lösen, allerdings blicke ich besonders bei boxmode nicht wirklich durch.

Ich habe die Zonen jeweils als adjacent in der anderen Zone eingestellt, und boxmode in beiden Zonen auf 1.

Leider geht jetzt keine der Zonen mehr auf absent.
Bewege ich mich z.B. in der Küche, geht zwar der Countdown im Wohnzimmer los, wird jedoch bei 90 von dem Zustand in der Küche überschrieben, und wieder auf 99 gesetzt.
Die Küche wiederum lässt sich durch Bewegungen im Wohnzimmer nicht beeindrucken, vermutlich, da die Tür ja geschlossen ist und dadurch die Zone auf closed steht.

Ich hoffe jemand liest diesen Text bis hierher, und kann mir einen Hinweis geben, wie ich dieses Problem lösen kann.

laberlaib

Zitat von: patlabor am 23 Oktober 2020, 21:05:04
Hallo zusammen,

ich versuche gerade 2 Zonen zum "zusammen Spiel" zu bewegen, aber irgendwie bekomme ich das nicht hin.

Die Situation ist folgende:
Küche und Wohnzimmer jeweils mit Bewegunsmelder und als Zone angelegt.
Die Küche hat eine Tür mit Türkontakt, das Wohnzimmer hat keine Tür, ist jedoch nur durch die Küche erreichbar.
Im Wohnzimmer steht ein TV, welches ich über presence in fhem abbilde.

Jetzt soll die Zone Küche present sein, sobald die Tür aufgeht, oder der Bewegungsmelder in der Küche anschlägt, und den Countdown starte, wenn die Tür wieder geöffent wird, oder der Bewegunsmelder im Wohnzimmer auslöst.

Das Wohnzimmer soll present sein, wenn der Bewegungsmelder im Wohnzimmer anschlägt und den Countdown starten, sobald der Bewegungsmelder in der Küche Bewegung meldet, jedoch NICHT wenn gerade das TV an ist.

Bisher hatte ich das so gelöst, das der TV sowohl als Tür als auch als occupancy event im Wohnzimmer eingestellt war, und der Zustand present/absent der Zone Wohnzimmer als Tür in der Zone Küche.

Das hat soweit auch gut funktioniert, war abends der TV an, und kam jemand durch die Tür rein und hat dann die Küche wieder verlassen, hat zwar der Countdown angefangen, da das TV jedoch alle 60 Sek ein event present auslöst, wurde die Zone Wohnzimmer vor ablauf des Countdowns wieder auf close und present gesetzt, und das Licht bleibt an.

Steht jemand im Wohnzimmer auf, um sich aus der Küche etwas zu trinken zu holen, geht in der Küche das Licht an, da aber die Zone Wohnzimmer noch auf present steht geht nach verlassen der Küche der Timer los, und das Licht in der Küche geht wieder aus.

Das Problem ist nun allerdings, wenn z.B. im Wohnzimmer Personen anwesend sind, und jemand anderes in der Küche z.B. Kocht. Dadurch schlägt der Bewegungsmelder in der Küche nicht rebelmässig an, weil man ja selten vor dem Herd herumtanzt, sondern eher ruhig dasteht. und nach ablauf des Countdowns steht man in der Küche im dunkeln.

Ich habe jetzt versucht das mit hz_adjacent und boxmode zu lösen, allerdings blicke ich besonders bei boxmode nicht wirklich durch.

Ich habe die Zonen jeweils als adjacent in der anderen Zone eingestellt, und boxmode in beiden Zonen auf 1.

Leider geht jetzt keine der Zonen mehr auf absent.
Bewege ich mich z.B. in der Küche, geht zwar der Countdown im Wohnzimmer los, wird jedoch bei 90 von dem Zustand in der Küche überschrieben, und wieder auf 99 gesetzt.
Die Küche wiederum lässt sich durch Bewegungen im Wohnzimmer nicht beeindrucken, vermutlich, da die Tür ja geschlossen ist und dadurch die Zone auf closed steht.

Ich hoffe jemand liest diesen Text bis hierher, und kann mir einen Hinweis geben, wie ich dieses Problem lösen kann.

Mal gucken ob ich das richtig verstanden habe:

Nur Kochen => Küche zu, Küche "belegt", Licht bleibt an.
Kochen + TV/Wohnzimmer => TV/Wohnzimmer öffnet die Küche, Countdown läuft => Licht geht dort irgendwann aus.

Das Problem wird doch sein, wie wird "rein-kochen-stillstehen" und "rein-Bierzapfen-rausgehen" unterschieden.
Technisch ist das doch gleich: Rahmenbedingungen (TV an/aus x Tür auf/zu) x Bewegungsevents
Du willst bei beiden Situation, welche sich erstmal technisch gleich darstellen, unterschiedliche Reaktionen.
D.h. wenn du nur umkonfigurierst, wird doch zwangsläufig eine Situation falsch abgebildet.

Des Weiteren ist das Ableiten von Anwesenheiten durch BWM mMn immer problematisch, sobald mehrere Personen im Spiel sind. Denk an die Donnerkuppel!
Zwei gehen rein, einer kommt raus. Der andere spielt regungslos auf seinem Handy, braucht dazu aber schon ein wenig Licht.

Ich glaube, man braucht weitere Parameter:
Man könnte die Küche "besser" auf Belegung Prüfen: Längerer Countdown bei kürzerem BWM-Cooldown (wenn man das einstellen kann). Mehr/empfindlichere Bewegungsmelder. Weitere Kochgeräte z.B. Herd überwachen (wobei man mein köcheln lassen und währenddessen TV gucken in der Küche kein Licht braucht).



--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

slor

Hallo zusammen, wird das Modul noch weiter entwickelt?
Habe neue Bewegungsmelder und würde gerne alle Räume im Haus als Homezone definieren.
Habe aber noch ein Problem, das ich nicht lösen könnte:

In einem Raum mit Türkontakt und Bewegungsmelder läuft der Timer nicht los, wenn keiner im Raum ist und für zu.
Ich müsste also nach Schließen der Tür noch mal prüfen ob es Bergung im Raum gibt. Wenn nicht, dann Timer los, sonst Zone locked und keine Aktion.

Das scheint das Modul aktuell nicht zu unterstützen.
Fhem auf Raspberry Pi 4
CCU3 mit RaspberryMatic mit HMCCU an FHEM
HMCCU, Telegram, Conbee2 und Hue/Tradfri/Osram Lampen AQARA Sensoren, HomeConnect

slor

Ich habe weitergebaut... mir ist noch etwas aufgefallen.

Szenario:
Zone mit Kontakt an der Tür der open oder closed setzt
Bewegungsmelder, der occupancy meldet
Lichtschalter, der bei off eine absenceEvent setzt

Wenn ich nun die Tür öffne und durch den Lichtschalter ein Absence Event auslöse geht die Zone auf open und abwesend.
Schließe ich die Tür von außen geht die Zone wieder auf Closed und Presence auf 100%.
Der Bewegungsmelder hat mich dabei nicht erfasst.

Soll das so? Oder habe ich einen Fehler in meiner Logik?
Fhem auf Raspberry Pi 4
CCU3 mit RaspberryMatic mit HMCCU an FHEM
HMCCU, Telegram, Conbee2 und Hue/Tradfri/Osram Lampen AQARA Sensoren, HomeConnect

laberlaib

#160
Gude,

ich habe das mal schnell getestet und ein Absenceevent eingebaut.
Das geht schon in Deine Richtung, heute abend mach ich da vielleicht mal genauer weiter:

Bewegung setzt occupied auf 99% und dann läuft der decay, egal ob open oder closed.
=> erwartet
Zone steht "closed" und danach Beweugng: occupied 100%, kein decay
=> erwartet
Zone auf "open" und AbsenceEvent: occupied auf 0%
=> erwartet
Zone "closed" und AbsenceEvent: occupied auf 100%, kein decay
=> kein decay ist erwartet, aber 100% occupied nicht.

Wobei bei Dir das ja ein bisschen anders ist: Du schließt die Tür nach dem absenceEvent, bei mir ist die Tür geschlossen und danach schicke ich das AbsenceEvent.

Edit: Verbose 5 aus dem log:
2021.03.23 07:35:24 5: [homezone - hz_Bad]: set absence in condition closed
2021.03.23 07:35:24 5: [homezone - hz_Bad]: Luminance: 0 Threshold: 0-9999999999
2021.03.23 07:35:24 5: [homezone - hz_Bad]: Luminance: 0 Threshold: 0-9999999999
2021.03.23 07:35:24 5: [homezone - hz_Bad]: 100

Die Situation wird also richtig erkannt: absence in condition closed, aber die falschen Konsequenzen daraus gezogen.

Edit 2: Ich tippe nun auf Bug:
Ab Zeile 252:
        foreach my $o (@abs) {
            my ( $absDev, $absEv ) = split( ":", $o, 2 );
            if ( $dev =~ /$absDev/ && $event =~ /$absEv/ ) {
                Log3 $name, 5, "[homezone - $name]: set absence in condition " . ReadingsVal( $name, "condition", "" );
                homezone_setOcc( $hash, 0 );
                last;
            }
        }

@abs enthält alle absenceEvents
und dann
ab Zeile 267:
sub homezone_setOcc($$;$) {
    my ( $hash, $occ, $lastChild ) = @_;
    my $name = $hash->{NAME};

    $lastChild = "self" unless $lastChild;

    if ( ReadingsVal( $name, "condition", "" ) eq "closed" && $lastChild ne "timer" ) {
        $occ = 100;
    }


Aus meiner bescheidenen Perl-Kenntnis heraus:
$lastChild wird nicht übergeben, ist daher "undef"; wird zu "self" und ist damit ungleich "timer".
D.h. wenn closed ist, dann wird immer occ auf 100 gesetzt und die übergebenen 0 damit überschrieben.
Was danach in der sub folgt spielt auch keine Rolle mehr, die 100 ist gesetzt.
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

slor

Cool, danke für die Analyse!
Jetzt die Frage, wird das Modul noch aktiv von KernSani weiter entwickelt?
Fhem auf Raspberry Pi 4
CCU3 mit RaspberryMatic mit HMCCU an FHEM
HMCCU, Telegram, Conbee2 und Hue/Tradfri/Osram Lampen AQARA Sensoren, HomeConnect

slor

Guten Abend zusammen,

ich habe gerade das Nachtlicht bei uns im Flur durch eine Homezone optimieren wollen...
Aktuell geht es 24h am Tag für 2 min an, wenn Bewegung erkannt wird.
Nun dachte ich, es langt ja, wenn es angeht, wenn es dunkel ist. Leider sind die Helligkeitswerte des Bewegungsmelders bogus...

Eine Idee wäre über das sunrise_el dynamisch die Zeiten für Evening und Morning anzupassen, damit das mit den Jahrenszeiten zusammenpasst. Oder ich setze einen Schwellwert auf Helligkeit und schreibe über sunrise_el die Helligkeit in einen Dummy, den ich auswerte.

Sonst noch Ideen, wie ich das dynamisch anpassen könnte?
Fhem auf Raspberry Pi 4
CCU3 mit RaspberryMatic mit HMCCU an FHEM
HMCCU, Telegram, Conbee2 und Hue/Tradfri/Osram Lampen AQARA Sensoren, HomeConnect

laberlaib

Gude,

du kannst ja bei den cmds die bei einem bestimmten State ausgeführt werden auch Perlcode aufrufen.
Dann kannste ja da eine if-Schleife als Einzeiler oder als ausgelagerte Sub bauen.

--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

KernSani

Zitat von: slor am 23 März 2021, 12:28:18
Cool, danke für die Analyse!
Jetzt die Frage, wird das Modul noch aktiv von KernSani weiter entwickelt?
Bin wieder da und schaue mir das die nächsten Tage mal an :-)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...