Anwesenheitserkennung durch Temperatursensor im Auto

Begonnen von chunter1, 29 September 2015, 15:31:40

Vorheriges Thema - Nächstes Thema

chunter1

Hallo,

ich versuche grade eine Anwesenheitserkennung durch einen Temperatursensor (TX29DTH-IT) im Auto zu realisieren.
Wenn der Sensor empfangen wird, bin ich zu Hause; wenn nicht, dann nicht.

Folgenden Ansatz hätte ich geplant:
Durch ein AT jede Minute abfragen, ob die in den Internals des Sensors zuletzt hinterlegte "LaCrosse_lastRcv" Uhrzeit länger als 1 Minute her ist.
Wenn ja, bin ich abwesend - sonst anwesend.

Frag mich jetzt blos wie ich die Uhrzeit die ich per "{InternalVal("T_Sensor_Auto","LaCrosse_lastRcv","")}" auslese mit der aktuellen vergleiche und feststelle obs länger als 1 Minute her ist. Kann mir da wer einen Beispielcode schicken?
Ebenfalls weiß ich nicht obs damit Probleme mit der 24h Tagesgrenze gibt?

Wenn wer eine elegantere Lösung parat hat wär ich dankbar.

lg

chunter1

#1
also hier mal mein erster Versuch für die die's interessiert... obwohl ich glaube, dass ein watchdog einfacher ist ;)


define T_SENSOR_PRESENCE_CHECK +*00:01:00 {
my $lastRcv_tstamp = InternalVal("T_Sensor_Auto","LaCrosse_lastRcv",0);
my @lastRcv= split(" ",$lastRcv_tstamp);
my @lastRcv_day    = split("-",$lastRcv[0]);
my @lastRcv_time   = split(":",$lastRcv[1]);
my $lastRcv_time   = fhemTimeLocal($lastRcv_time[2],$lastRcv_time[1],$lastRcv_time[0],$lastRcv_day[2],$lastRcv_day[1],$lastRcv_day[0]);

my $now_tstamp    = TimeNow();
my @now           = split(" ",$now_tstamp);
my @now_day       = split("-",$now[0]);
my @now_time      = split(":",$now[1]);
my $now_time      = fhemTimeLocal($now_time[2],$now_time[1],$now_time[0],$now_day[2],$now_day[1],$now_day[0]);

my $delta_seconds = ($now_time - $lastRcv_time);
f ($delta_seconds > 60) { fhem("set Auto UNTERWEGS"); } else {fhem("set Auto ZUHAUSE"); }
}


Damian

#2
Man kann sich das Leben auch etwas leichter machen  ;):

define di_check DOIF ([T_Sensor_Auto:?])(set Auto ZUHAUSE)(set Auto UNTERWEGS)
attr di_check wait 0,60
attr di_check do resetwait


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

chunter1

Danke Damian!

Kann man eigentlich auch einen notify auf Internals wie z.B. auf "LaCrosse_lastRcv" bei einem LaCrosse Temperatur Sensor machen?
Hintergrund ist der, dass ich um Events zu minimieren den Temperaturwert nur alle 2 Minuten abfrage aber sofort reagieren will wenn der Sensor wieder in Reichweite ist.

Hollo

Hmm... sendet der LaCrosse nicht von sich aus selbstständig alle ca. 10 Sekunden !?
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

chunter1

ja, aber ich habe diese Attribute hier gesetzt, damit nicht so viele Events und Daten ins LogFile geschrieben werden:


attr    event-aggregator            temperature:120:linear:mean
attr    event-on-update-reading     temperature


und genau darum hab ich mir gedacht, dass ich einfach ein Internals als trigger für einen notify verwende.
Aber ich glaub das geht nicht - zumindest nicht mit notify?

justme1968

um zu reagieren brauchst du ein event. wenn du schnell reagieren willst braucht du entweder genau dann ein event wenn das ereignis passiert oder viele events. internals erzeugen keine events.

du kannst dir aber über ein userReading ein event erzeugen das passen sollte.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Hollo

Zitat von: chunter1 am 29 September 2015, 22:17:48
ja, aber ich habe diese Attribute hier gesetzt, damit nicht so viele Events und Daten ins LogFile geschrieben werden...
Damit "begrenzt" Du die Einträge ins Log.
Das ändert aber nichts daran, dass der Sensor sendet und sich der state "ständig" ändert.
Den kannst Du also trotzdem zum triggern von notify oder watchdog benutzen; dann brauchst Du keine regelmäßige Abfrage.

FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

justme1968

nein. damit werden die events begrenzt. ohne events kann man auch keinen watchdog oder notify verwenden.

der sensor sendet zwar ständig, die daten kommen auch in fhem an und sogar die readings werden aktualisiert. es erfährt aber sonst niemand mehr in fhem davon. werde log noch notify noch sonst jemand.

du musst wie oben geschrieben dafür sorgen das z.b. über ein user reading ein anderes event erzeugt wird auf das du dann mit notify oder sonst wie reagieren kannst. dieses event sollte aber nur erzeugt werden wenn sich der zustand auch geändert hat.

gruß
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

chunter1

#9
...ok, also da ich immer ein event brauche um darauf reagieren zu können, werd ich mal folgendes probieren.

Im Sensor selbst sind jetzt folgende Attribute gesetzt:
(Um die FileLog Datei des Sensors nicht zuzumüllen werden nur alle 120s Werte "gepostet".)


attr    event-aggregator            temperature:120:linear:mean
attr    event-on-update-reading     temperature,battery


Es wird also das battery-event zur Auswertung immer sofort weitergereicht.
Um sofort auf die Anwesenheit zu reagieren nutze ich ein notify.
Um die '"nicht-erreichbarkeit" des Sensors zu detektieren verwende ich einen watchdog mit 1 Minute Timeout.
Um beim Auswerten des "Auto_status"-Dummies nur Events bei Änderung zu erhalten, sind in beiden Funktionen IF-Anweisungen integriert.


define SensorEmpfangen notify T_Sensor_Auto:battery.* {
  if ( Value("Auto_status") ne "present" ) {
     fhem("set Auto_status present");
  }
}

define SensorWatchdog watchdog T_Sensor_Auto:battery.* 00:01:00 T_Sensor_Auto:battery.* {
  if ( Value("Auto_status") ne "absent" ) {
     fhem("set Auto_status absent");
  }
  fhem("setstate SensorWatchdog defined");
}


Der Vorteil gegenüber der Lösung mit einem periodischen "at" ist, dass beim nach Hause kommen beim ersten empfangenen Sensorwert sofort reagiert wird. (z.B. Licht in der Einfahrt an).
Auf der Suche nach dem "perfekten" code bin ich natürlich für elegantere Lösungen dankbar ;)
Wenn sich das ganze mit nur einem Kommando erledingen lässt wärs natürlich übersichtlicher.

CoolTux

Zitat
attr    event-on-update-reading     temperature,battery

Was machst Du eigentlich wenn sich seit der letzten erfolgreichen Übertragung die Werte für Temp und Bat nicht geändert haben? Dann gibt es auch kein Event und somit krachst Du ohne Licht in die Garage.   ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

justme1968

event-on-update-reading nicht event-on-change-reading 
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

CoolTux

aaahhhhhh, OK Erleuchtung kam. Danke für den Hinweis
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

chunter1

#13
Übrigens werd ich den Temperatursensor im Auto auch dafür benutzen, meine elektrische Innenraumheizung (DEFA Termini 2100) zu steuern.
Zum Schalten verwende ich den Energiemessstecker (HM-ES-PMSw1-Pl).
Wenn die gewünschte Innenraumtemperatur erreicht ist, schaltet FHEM den Lüfter aus und ich erhalte eine Notification.
Geplant ist auch, dass am Abend der Lüfter für 1s eingeschaltet wird um zu überprüfen ob Strom fließt bzw. ob ich nicht vergessen habe ihn anzustecken.
Wenn vergessen -> dann Erinnerung -> sonst eiskratzen und frieren ;)
Sogar eine Außentemperatur gesteuerte Einschalt-/Vorlaufzeit der Heizung ist möglich.
Was im Alltag wirklich praktisch ist, wird sich aber erst herausstellen ;)

Hollo

Zitat von: justme1968 am 30 September 2015, 09:27:09
...der sensor sendet zwar ständig, die daten kommen auch in fhem an und sogar die readings werden aktualisiert. es erfährt aber sonst niemand mehr in fhem davon. werde log noch notify noch sonst jemand...
Mist, das stimmt.  :-X
Hatte noch im Hinterkopf das die readings trotzdem aktualisiert wurden, als ich das Log ausdünnen wollte.
Aber damit fallen natürlich auch die Events weg und damit die Triggerbedingung. 
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"