FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: heicar am 31 Januar 2018, 19:00:51

Titel: [gelöst] presence maybe Problem
Beitrag von: heicar am 31 Januar 2018, 19:00:51
Hallo

ich habe mit dem Presence ein Problem. ich habe den absense/presenceThreshold gesetzt. Nun passiert es aber das folgende Events auflaufen:
2018-01-31 17:50:12 PRESENCE netzwerkIPCam maybe absent
2018-01-31 17:50:56 PRESENCE netzwerkIPCam maybe present
2018-01-31 17:52:42 PRESENCE netzwerkIPCam present


Auf present wird ein Event gefeuert. Ist auch gut so, aber der Status war nicht auf absent! Es wird ja state geändert und im Prinhzip ist das Event auch ok, aber nur wenn vorher der state auch wirklich auf absent war.
Wer kann die Denke bei mir im Kopf anstoßen?
Im Moment bekomm ich immer Meldungen das die cam wieder present ist. Mehrere hintereinander...


Internals:
   ADDRESS    ipcam
   CHANGED   
   DEF        lan-ping ipcam 30
   INTERVAL_NORMAL 30
   INTERVAL_PRESENT 30
   MODE       lan-ping
   NAME       netzwerkIPCam
   NOTIFYDEV  global
   NR         104
   NTFY_ORDER 50-netzwerkIPCam
   STATE      present
   TYPE       PRESENCE
   .userReadings:
     HASH(0x28b66d8)
     HASH(0x28b6818)
   READINGS:
     2018-01-31 18:56:09   .absenceThresholdCounter 0
     2018-01-31 18:56:09   .presenceThresholdCounter 1
     2018-01-31 17:52:39   model           lan-ping
     2018-01-31 18:56:09   presence        present
     2018-01-31 18:08:10   state           present
   helper:
     CURRENT_STATE present
     PRESENT_COUNT 1
Attributes:
   DbLogExclude .*
   absenceThreshold 2
   event-on-change-reading state
   group      Netzwerkueberwachung
   presenceThreshold 2
   room       75_Geraete
   timestamp-on-change-reading state
   verbose    3



notify dev

netzwerk.* {
  my $stat = "xx";
  if ($EVENT eq "absent") {
    $stat = "NICHT erreichbar";
  } elsif ($EVENT eq "present") {
    $stat = "wieder ERREICHBAR :-) ";
  }
  if ($stat ne "xx") {
  fhem ("set telegram_fhembot message Im Netzwerk ist das Geraet: $NAME $stat !!!")
}
}



Danke!!
Titel: Antw:presence maybe Problem
Beitrag von: heicar am 01 Februar 2018, 07:39:59
Ich denke ich muß erst mal wenn das device auf absent geht ein dummy auf z.b. "wahr" setzen, und im notify prüfen ob dummy wahr => dann message schicken, wenn nicht wahr halt nichts machen...

Oder geht's noch einfacher?

:-\
Titel: Antw:presence maybe Problem
Beitrag von: Otto123 am 01 Februar 2018, 09:25:39
Hi,

naja Du hast das typische Problem mit dem Schwellwert, ab wann ist abwesend. Ich arbeite an der Stelle mehrstufig, mit einer  Zeitschwelle.

Beispiel, geht erst nach 10 sec auf abwesend aber sofort wieder auf anwesend. st_Dev1 ist das eigentliche Presence Device.

define PersonD1 dummy 
attr PersonD1 room Status 

define di_st_Dev1 DOIF ([st_Dev1] eq "absent")(set PersonD1 absent) DOELSEIF ([st_Dev1] eq "present")(set PersonD1 present) 
attr di_st_Dev1 room Status 
attr di_st_Dev1 wait 10 


Gruß Otto
Titel: Antw:presence maybe Problem
Beitrag von: heicar am 01 Februar 2018, 10:45:06
Hallo,
naja, ich denke nicht das es ein Schwellwert Problem ist. Das Presence denkt bei ersten Check Gerät weg (dann Status: maybe absent), beim nächsten Check Gerät wieder anpingbar (maybe present), dann der nächste Check geht's auf present und Event geht los. Soll aber in diesem Fall ja nicht weil wegen war ja gar nicht absent (nur maybe)

Oder denke ich hier komplett falsch? :-\
Titel: Antw:presence maybe Problem
Beitrag von: Otto123 am 01 Februar 2018, 10:53:02
Ob Du es Schwellwert nennst oder wie ist jetzt egal. Die Frag ist wann ist weg!?
Weg?
eventuell weg?
10 sekunden weg
5 min weg?
Nur mal kurz im Garten?
Komme gleich wieder?

Nichts anderes bedeutet doch maybe? Ich habe keine Ahnung wie das genau entsteht (offenbar durch Dein threshold, ich habe diesen Zustand bei mir nicht). Also sicher wenn mal ein oder zwei pings fehlen und es dann wieder geht?
Hängt die Kamera am instabilen Wlan?

Warum gefällt Dir mein Vorschlag nicht?

Gruß Otto
Titel: Antw:presence maybe Problem
Beitrag von: frank am 01 Februar 2018, 10:55:16
warum hast du eigentlich presence threshold?
wenn der ping erfolgreich ist, ist das gerät doch auf jeden fall anwesend, nicht nur vielleicht anwesend.
Titel: Antw:presence maybe Problem
Beitrag von: heicar am 01 Februar 2018, 11:23:16
Otto, dein Vorschlag ist gut. Nur wenn ich die Parameter absenceThreshold und sein Gegenpart richtig verstehe macht es genau das wie auch dein Vorschlag.

Frank, das ist richtig, aber dann wird das state von "maybe absent" direkt auf "Present" gehen. Ja auch hier gibt es ein dann ein Event, will ich aber nicht...  :D
Erst wenn das Gerät wirklich das state "absent" hat (logisch dann Event) und erst wenn dann der state auf "present" geht soll wieder ein Event kommen....

Warum hab ich denn nur dieses Problem? :-\
Titel: Antw:presence maybe Problem
Beitrag von: Markus Bloch am 01 Februar 2018, 11:35:27
Hallo zusammen,

der Zustand "maybe absent"  / "maybe present" entsteht, wenn sich der Zustand ändert (present=>absent / absent=>present) aber die notwendige Anzahl an entsprechenden Checks (Attribut absenceThreshold/presenceThreshold > 1) noch nicht erreicht ist.

Es bedeutet soviel wie "ich bin mir noch nicht sicher, ob er wirklich abwesend/anwesend ist".

Ist halt die Frage ob man das als Reading/Event ausgeben sollte oder nicht. Ich habe mich für eine Ausgabe entschieden, damit der User sieht, der Zustand hat sich gerade geändert, ist aber noch nicht komplett verifiziert.

Mein Vorschlag:

setzen eines User-Readings welches nur "present"/"absent" enthält und dieses mit event-on-change-reading nur bei einer Wertänderung triggern lassen.

Gruß
Markus
Titel: Antw:presence maybe Problem
Beitrag von: Otto123 am 01 Februar 2018, 11:47:37
Wozu ist der Stress mit der Nachricht überhaupt? Weil die WebCam immer mal alleine fortläuft?  ;D
Ich meine das man wissen will wenn sie weg ist - ok. Aber das man informiert werden will wenn Sie wieder da ist?! Geklaut ist geklaut - oder?

Egal Markus sein Vorschlag ist sicher der Beste, Du verzichtest auf den Status maybe ...
Titel: Antw:presence maybe Problem
Beitrag von: heicar am 01 Februar 2018, 11:55:21
ok,
???

setzen eines User-Readings welches nur "present"/"absent" enthält und dieses mit event-on-change-reading nur bei einer Wertänderung triggern lassen


also in dieser Form: (ich kanns jetzt aktuell nicht ausprobieren)

attr netzwerkIPCam userReadings status:(present|absent) { ReadingsVal("netzwerkIPCam","present",0) ? ReadingsVal("netzwerkIPCam","absent","") : "" }

Keine Angst, nicht mein Code hab ihn gefunden und (versucht) anzupassen...


Otto, ist ja nicht nur ne Cam, ist ja bei anderen Geräten im Netz genauso.  ;)
Titel: Antw:presence maybe Problem
Beitrag von: Otto123 am 01 Februar 2018, 12:04:17
Also bei den nicht umherlaufenden Geräten im Netzwerk braucht man das doch nicht? Ich mache ich das ohne threshold  - das funktioniert für meine Begriffe sauber. Der Status wechselt dann einfach zwischen absent und present .
Titel: [gelöst] Antw:presence maybe Problem
Beitrag von: heicar am 01 Februar 2018, 21:24:40
Danke,
funktioniert, ich musste das Userreading anpassen hat nach ner Stunde auch dann funktioniert... ???

... status:(present|absent) { ReadingsVal("netzwerkIPCam","state",0) eq 'present' ? "ok" : "nok" }

Aber auf diese Idee mit einem Userreading wäre ich niemals gekommen...Aber genial


Titel: Antw:presence maybe Problem
Beitrag von: Gisbert am 05 März 2019, 10:19:05
Zitat von: Markus Bloch am 01 Februar 2018, 11:35:27
Hallo zusammen,

der Zustand "maybe absent"  / "maybe present" entsteht, wenn sich der Zustand ändert (present=>absent / absent=>present) aber die notwendige Anzahl an entsprechenden Checks (Attribut absenceThreshold/presenceThreshold > 1) noch nicht erreicht ist.

Es bedeutet soviel wie "ich bin mir noch nicht sicher, ob er wirklich abwesend/anwesend ist".

Ist halt die Frage ob man das als Reading/Event ausgeben sollte oder nicht. Ich habe mich für eine Ausgabe entschieden, damit der User sieht, der Zustand hat sich gerade geändert, ist aber noch nicht komplett verifiziert.

Mein Vorschlag:

setzen eines User-Readings welches nur "present"/"absent" enthält und dieses mit event-on-change-reading nur bei einer Wertänderung triggern lassen.

Gruß
Markus

Hallo Markus,

ich krame diesen Thread nochmals aus, in der Hoffnung, dass ich einen Weg für folgendes finde:

Ich logge die presence-Werte (als 0 und 1) und erzeuge damit ein Diagramm. Das funktioniert soweit, bis auf die geloggten maybe, die jede Menge perl warnings ergeben (10 pro Sekunde ist nichts dagegen). Diese Perl warnings möchte ich gerne los werden.

list des Devices:
defmod Honor8 PRESENCE lan-ping 192.168.xx.yy 150
attr Honor8 absenceThreshold 2
attr Honor8 eventMap present:1 absent:0


list der log-Datei:
defmod FileLog_Smartphone FileLog ./log/Smartphone-%Y-%m.log Honor8:presence:.*
attr FileLog_Smartphone createGluedFile 1
attr FileLog_Smartphone logtype text


Damit erhält man folgende log-Einträge mit maybe, die zu Schwierigkeiten bei Diagrammen, bzw. dann zu sehr vielen log-Einträgen mit Perlwarnungen führt.
2019-03-05_09:21:31 Honor8 presence: maybe 0
2019-03-05_09:24:04 Honor8 presence: 1


Es gibt das Attribut ignoreRegexp, allerdings weiß ich nicht, wie ich es nutzen kann.
Hast du hierzu eine Idee?

Viele​ Grüße​ Gisbert​
Titel: Antw:[gelöst] presence maybe Problem
Beitrag von: Otto123 am 05 März 2019, 11:10:11
Hallo Gisbert,

dann logge doch einfach nur absent|present bzw die 0 und 1.
defmod FileLog_Smartphone FileLog ./log/Smartphone-%Y-%m.log Honor8:presence:.(0|1)


Gruß Otto
Titel: Antw:[gelöst] presence maybe Problem
Beitrag von: frank am 05 März 2019, 11:31:24
eventuell würde auch eine geänderte schreibweise der "übergangswerte" einiges erleichtern:
"maybe present" => "maybe_present".
Titel: Antw:[gelöst] presence maybe Problem
Beitrag von: Gisbert am 05 März 2019, 17:50:26
Zitat von: Otto123 am 05 März 2019, 11:10:11
Hallo Gisbert,

dann logge doch einfach nur absent|present bzw die 0 und 1.
defmod FileLog_Smartphone FileLog ./log/Smartphone-%Y-%m.log Honor8:presence:.(0|1)

Gruß Otto
Hallo Otto,

vielen Dank, den Gedanken hatte ich auch schon, ich konnte es aber nicht umsetzen.
Der Punkt zwischen ":" und "(" hat gefehlt, da wäre ich wahrscheinlich nie drauf gekommen.

Der Punkt müsste dann für genau ein Zeichen als Platzhalter stehen, nähmlich für ein Leerzeichen - richtig?
Dann müsste doch eigentlich auch statt des Punktes ein Leerzeichen gehen:
defmod FileLog_Smartphone FileLog ./log/Smartphone-%Y-%m.log Honor8:presence: (0|1)
Da sagt Fhem aber:
wrong syntax: define <name> FileLog filename regexp [readonly]
Also bleibt es bei deiner Definition.

Nochmals vielen Dank
Gisbert
Titel: Antw:[gelöst] presence maybe Problem
Beitrag von: Otto123 am 05 März 2019, 19:59:38
Hallo Gisbert,

den musst Du Dir unbedingt merken!  ;)
Der Punkt steht im regExp für ein beliebiges Zeichen.
Leerzeichen ist etwas spezielles, deswegen nimmt man dort häufig einfach den Punkt.

\s steht für Whitespaces, also Leerzeichen, Zeilenumbrüche, Tabulatoren etc.

Gruß Otto