Hauptmenü

Anwesendheitserkennung

Begonnen von Schneidi1985, 22 Februar 2017, 19:48:15

Vorheriges Thema - Nächstes Thema

Schneidi1985

Moin liebe Gemeinde,

ich bin neu im Thema PI -Fhem und natürlich auch im Forum. Deshalb wollte ich mich erst einmal vorstellen : Denis 32 Jahr jung und Technik interessiert :)
Die Pi mit Fhem läuft seit gestern mit dem Osram Gateway.

Nun habe ich mich bereits schon durch einige Anleitungen durchgekämpft ... es macht von mal zu mal mehr Spaß .... nur leider bin ich gerade an einen Punkt wo gerade nichts mehr geht.

Hier einmal was ich vorhabe: Ich möchte gerne eine Present abfrage über W-Lan , present ... Flurlicht an .... absent .... Flurlicht aus

Dies habe ich wie Folgt gemacht:



define handy_Denis PRESENCE lan-ping 192.168.x.x
attr handy_Denis room Anwesenheit Denis

define Anwesenheit_Denis STRUCTURE presence handy_Denis
attr Anwesenheit_Denis clientstate_behavior relative
attr Anwesenheit_Denis clientstate_priority present absent
attr Anwesenheit_Denis room Anwesenheit Denis



define PowerAll STRUCTURE room LIGHTIFYAFC2060000261884
attr PowerAll room Anwesenheit Denis

define di_PowerAll DOIF ([Anwesenheit] eq "absent") (set PowerAll off) DOELSE (set PowerAll on)

Das Funktioniert auch einwandfrei. Nun sind wir aber kein Single Haushalt.
Jetzt dachte ich mir ich mache bis PowerAll alles mit einen zweiten Gerät .... das Funktioniert auch
Nun dachte ich mir in meinen jungendlichen Leichtsinn

define di_PowerAll DOIF ([Anwesenheit_Denis] eq "absent") (set PowerAll off) ([Anwesenheit_Antje] eq "absent") (set PowerAll off)DOELSE (set PowerAll on)
da Funktioniert leider nur wenn mein Gerät aus ist geht das Licht aus .... an geht aber leider gar nichts.

Hauptsächlich geht es mir um das einschalten des Flurlichts wenn die Geräte sich ins W-Lan anmelden. Ausmachen wäre auch toll wird aber schwierig sein wenn einer geht und der andere aber noch im Haus ist.

Könnte mir da vielleicht jemand auf die Sprünge helfen wie man das eventuell realisieren könnte ?

Einen Schönen abend euch noch

KernSani

Willkommen Denis,

Zuersteinmal ein Tipp: coding wird lesbarer, wenn es in code tags gepostet wird (# Button im Editor).

Zu deinem Problem: Ich vermisse das DOELSEIF in deinem DOIF. Hilft dir das auf die Sprünge?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

chrisko

Also, ich bin selbst auch ein Anfänger, deshalb kann ich dir so auf Anhieb, ohne zu suchen keine richtige Syntax bieten.
Am einfachsten ist es aber meiner Meinung nach, wenn du einen dummy mit dem Ergebnis einer logischen Verknüpfung fütterst und dann diesen dummy zum schalten benutzt.
Verknüpfung in etwa so: WENN Dennis = absent UND Antje = absent DANN dummy = absent ANSONSTEN dummy = present


Viele Grüße,
Chris

Schneidi1985

Hi KernSani,

danke für deinen Tipp mit dem coding ... werde ich absofort befolgen.
Das DOELSEIF sagt mir nix aber ich belese mich gerade .... dafür das ich vor 3 Tagen noch nicht einmal wusste was ein Pi ist ... kann ich mit vielen begriffen leider noch nichts Anfangen

Brice

#4
Du bist schon auf dem richtigen Weg. Allerdings noch nicht ganz.

Definiere ein zweites Mobiltelefon, z.B. -> hast du ja schon

define handy_Antje PRESENCE lan-ping 192.168.x.x 10 60

Der Zusatz 10 60 bedeutet, dass im Abwesenheitsstatus alle 10 sek geprüft wird, ob das Telefon anwesend ist, im Anwesenheitsfall alle 60 sek

Das nimmst du dann in deine Structure, die würde ich aber umbenennen z.B.

define Alle_Anwesend STRUCTURE presence handy_Denis handy_Antje
attr Alle_Anwesend clientstate_behavior relative
attr Alle_Anwesend clientstate_priority present absent
attr Alle_Anwesend room Anwesenheit Denis


wenn du es noch hübsch machen möchtest

attr Alle_Anwesend devStateIcon absent:user_away@red present:user_available@green
oder
attr Alle_Anwesend devStateIcon present:status_available@00CC33 absent:status_away_1@CC0033

Jetzt hast du zwei Zustände: wenn mindestens ein Mobiltelefon anwesend ist -> Status present, wenn kein Mobiltelefon anwesend ist -> Status absent

Damit kannst du dir dann notify, DOIFs oder was immer bauen. Also z.B. wenn Status Alle_Anwesend = absent, schalte Devices aus etc.

Jetzt kommt es darauf an, wie schnell dein Router erkennt, wann sich ein Mobiltelefon zurückmeldet. Ist nicht immer ganz performant.

Edit: überarbeitet
FHEM auf RPi 4 4GB (Buster) | produktiv) CUL 868 für FS20 | S300TH | KS300 | Max!Cube als CUN 868 für TechemWZ | HM-MOD-RPI-PCB für HM | Z-Wave ZME_UZB1 | FRITZ!DECT 200 | HUE | Lightify | Echo Dot | WS3080

Schneidi1985

Hi Brice,

danke dir für den Tip mit dem "wenn es hübsch aussehen soll" sowas suche ich auch schon den ganzen Tag :)

Das in einer Gruppe stecken hatte ich am Anfang auch aber mir ist dann folgendes Aufgefallen. Wenn der erste @ home kommt läuft alles super meist schon von am Eingang verbindet sich meistens unsere Handys mit dem WLAN. Somit macht man die Tür auf und steht nicht im dunklen Flur. Im verlauf wird meisten der Flur via Alexa ausgeschaltet. ( Ohne Fhem müsste Mann/Frau durch die komplette Bude brüllen damit Licht an ist oder halt klassisch den Schalter benutzen) .... nun ist Antje bereits da ... und meine Wenigkeit kommt @ home .... da würde ja beim Verbinden Handy_Denis nichts mehr passieren da bereits ein Handy schon im Netz present ist ? Deshalb dachte ich, ich trenne beide voneinander.

könntest du mir eventuell eine kleine Hilfe Stellung geben bzgl. der Regel wenn dann... also für mich als kompletter Anfänger ist es immer schwer erstmal den Anfang hinzubekommen, mit einer Regelung Wenn dann via DOIF bzw. notify

Brice

Deinen Anwendungsfall solltest du besser mit einem Bewegungsmelder realisieren.

Eventuell könntest du mit Presence etwas zusammenknorzen.

attr handy_Denis event-on-change-reading .*
attr handy_Antje event-on-change-reading .*


Und dann ein Notify
if ((Value ("handy_Denis") eq "present") || (Value ("handy_Antje") eq "present")) set <Device> on

Aber das ist ungetestet. Und hätte den bedauerlichen Nachteil, dass bei jeder Neuanmeldung im WLan, also auch nach kurzzeitigem Abruch der WLan-Verbindung, das Device eingeschaltet wird. Ich halte das für nicht zielführend.

Mit DOIF kenne ich mich nicht aus, das gibt es noch nicht so lange 8)
FHEM auf RPi 4 4GB (Buster) | produktiv) CUL 868 für FS20 | S300TH | KS300 | Max!Cube als CUN 868 für TechemWZ | HM-MOD-RPI-PCB für HM | Z-Wave ZME_UZB1 | FRITZ!DECT 200 | HUE | Lightify | Echo Dot | WS3080

Faber38

#7
so könnte man es mit DOIF definieren.
erkennt in diesem Beispiel wenn keins der Handys da sind schalte Anlage an
define Handy_out DOIF ([Handy1:state] eq "absent" and [Handy2:state] eq "absent" and [Anlage:state] eq "off"  ) (set Anlage on) DOELSE  (set Anlage off)

man könnte nun die "nicht" Erkennung endlos weiter führen mit Handy3 ect.

ps:
ich benutze das über Bluetooth.. die Erkennung ist meines Wissens besser.
define Handy1 PRESENCE lan-bluetooth yy:yy:yy:yy  xx.xx.xx.xx:5111 30 120/[code]

Schneidi1985

Danke eure unterstützen.

habe mich etwas belesen und bin auch ein Stück weiter gekommen Leider mit einem neuen Problem :-\

(["^Anwesenheit_:present"]) (set PowerAll on) DOELSEIF ([LIGHTIFYAFC2060000261...] eq "off") (set PowerAll off)

Das Ausschalten ist mir nicht so wichtig eher das Automatische an wenn jemand kommt .... Ausgeschaltet wird anschließend über Alexa ... wenn man angekommen ist bzw. über die Osram App wenn man im Auto sitzt.

Nun habe ich aber das Problem, dass der present Status alle 60 sec neu erfragt wird und somit durch den Tigger jedes mal die Lampe alle 60 sec wieder angeht.
Wüsste einer einen Lösungsansatz wie das Licht bei aktuellem present des Handys aber LED off nicht alle 60 sec wieder anschaltet?

Ich weiß mit einen Bewegungsmelder der richtig positioniert ist würde man das Glaube ich am schnellsten hin bekommen. Würde aber trotzdem gern probieren es auch über die WLan Anwesenheit dies zu ermöglichen.

Grüße und recht herzlichen Dank für die Hilfe

Faber38

du kannst ja mal folgendes probieren
###############################
##  dummy autoLicht
###############################
define autoLicht dummy
attr autoLicht alias Automatik aktiv:
attr autoLicht devStateIcon .*:rc_BLANK
attr autoLicht icon fts_shutter_automatic@yellow
attr autoLicht room Test
attr autoLicht setList state:an,aus
attr autoLicht sortby 01
attr autoLicht webCmd state
define no_autoLicht DOIF ([autoLicht:state] ne "an" ) (set autoLicht an)
attr no_autoLicht room Test


jetzt hast du einen Buttton den du in deine DOIF Abfrage einbauen kannst .... in etwa
(["^Anwesenheit_:present"] and ["autoLicht:an"] ) (set PowerAll on) DOELSEIF ([LIGHTIFYAFC2060000261...] eq "off") (set PowerAll off)

Schneidi1985

#10
Hi Faber,

ich habe den Dummy mal angelegt und die DOIF di_PowerAll DEF abgeändert wie du Sie gepostet hast.
Leider passiert nix außer das ich eine Fehlermeldung im EventMonitor erhalte:


2017.02.23 20:13:42 1 : PERL WARNING: Bareword found where operator expected at (eval 27615) line 1, near ") EventDoIf"
2017.02.23 20:13:42 3 : eval: {PRESENCE_ProcessLocalScan('handy_Denis|0|present')}

Eine verständnis Frage, was hat es eigentlich mit dem Dummy auf sich ?

Danke dir für deine Hilfe 

Faber38

soll eigentlich nur eine schalter sein den du an/aus schaltest..

ich hatte gedacht das du wenn der schalter /an ist du per Wlan erkannt wirst...das Licht angeht
danach kannst du den schalter ausschalten (per at) somit wäre das ewige anschalten des Lichts vorbei

Schneidi1985

Ok.

nach Einbindung schaltet er aber gar nichts mehr, egal ob auf an oder aus. Wüsstest du vielleicht ne Lösung ?


Faber38

(["^Anwesenheit_:present"] and ["autoLicht:an"] ) (set PowerAll on) DOELSEIF ([LIGHTIFYAFC2060000261...] eq "off") (set PowerAll off)

hätte ich anders definiert
define di_Licht DOIF ([Anwesenheit:status] eq "present" ) and [autoLicht:state] eq "an"  )(set PowerAll on )

Faber38

Kommen die Emails an bei dir ? GMX blockt meinen Server schon mal...

Schneidi1985

ja kam an habe dir auch geantwortet