[Gelöst] userreading für Tükontak letzte Öffnung/Schliessung

Begonnen von Grimmschak, 05 September 2019, 09:02:22

Vorheriges Thema - Nächstes Thema

Grimmschak

Hallo zusammen,

ich habe diverse Tür/Fenster Kontakte und würde gern dort jeweils usereadings mit den Zeiten der letzten Zustandsänderungen haben.
Da meine Fähigkeiten in perl nur leicht besser als mein koreanisch sind, nun die Frage hier... ;D

Ich denke das das bestimmt schon jemand "gebaut" hat, leider haben diverse Versuche mit der Suche mir auch noch keine Lösung bescherrt.

Die genaue Idee ist 2, bzw 3 usereadings ala lastchange2closed;lastchanged2open und falls der sensor es kennt lastchanged2tilted zu haben, in denen Datum und Uhrzeit der jeweils letzten Änderung in den jeweiligen Zustand stehen. Ob ich das direkt in den userreadings codieren kann, oder noch ein notify dazu benötige entzieht sich leider im Moment auch noch meinem Wissen, aber ich arbeite dran.

Also meine Bitte falls a) das jemand schon so umgesetzt hat: bitte mit mir teilen, oder b) falls die Idee neu sein sollte, kann das jemand "einfach" als Deffinition posten ?


Danke schon einmal für alle hilfreichen Posts  ;)

Gruß
Jens

t1me2die

Moin Jens,

eine fertige Lösung habe ich für Dich aktuell nicht parat, jedoch mache ich soetwas "ähnliches".
Ich zähle jeden Tag, wie oft die Eingangstür geöffnet / geschlossen wird mit einem Zähler.
Anhand dessen steuer ich andere Komponenten.

Ich arbeite mit einem Notify, der die Eingangstür überwacht:

fl_Eingangstuer:(open|closed)
{   if ($EVENT eq 'open')
    {   my $countOpen = ReadingsNum('fl_Eingangstuer','countOpen',0)+1;
         fhem "setreading fl_Eingangstuer countOpen $countOpen";
    }
    elsif ($EVENT eq 'closed')
    {   my $countClosed = ReadingsNum('fl_Eingangstuer','countClosed',0)+1;
         fhem "setreading fl_Eingangstuer countClosed $countClosed";
    }
}


Du könntest mit ReadingsTimestamp('fl_Eingangstuer','state','') arbeiten.
Evtl. wie folgt:


fl_Eingangstuer:(open|closed)
{   if ($EVENT eq 'open')
    {   my $lastchanged2open = ReadingsTimestamp('fl_Eingangstuer','state',0);
         fhem "setreading fl_Eingangstuer lastchanged2open $lastchanged2open";
    }
    elsif ($EVENT eq 'closed')
    {   my $lastchanged2closed = ReadingsTimestamp('fl_Eingangstuer','state',0);
         fhem "setreading fl_Eingangstuer lastchanged2closed $lastchanged2closed";
    }
}


Ungetestet.

Gruß
Mathze

AndreasHH

FHEM 5.8, FB7490, FB7390, Linux-Server, Raspi 1, Raspi 2, FHEM2FHEM, div. FS20, div. FHT, div. HMS, div. Homematic, MQTT, ESP8266, Arduino

Grimmschak

#3
Hi Mathze,

hat fast funktioniert, Danke.

Leider wird der letzte, aktuelle Zustand immer mit aktuellem Zeitstempel überschrieben, das ist suboptimal.

Jens

Peteruser

Hallo,
es gibt auch die Harte Tour.

Watchdog überwacht das device
defmod Check.WindfangEingang notify WindfangEingang:.* {system ("/home/fhem/skripte/Check.WindfangEingang.sh &")}

Skript schreibt das bei open (man könnte also auch den * mit open ersetzen) in einen Dummy
defmod Info.WindfangEingang.Offen dummy

Entspricht nicht 100% der reinen Lehre, klappt aber:-)

Grüße Peter


Grüße Peter
Ubuntu+Debian FHEM + ESPEasy + Homematic + ConBee + DUROFERN

juemuc

Hallo,

ich habe hierzu ein userreadings definiert.
attr <devicename> userReadings LastOpen:1.STATE.* {if (ReadingsVal($name,"state","") eq "open") {ReadingsTimestamp($name,"state","") =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+:\d+)$/;; return "$3.$2.$1 - $4";;} else {ReadingsVal($name,"LastOpen","")}}
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

DeeSPe

Ich habe das auch über 2 userReadings gelöst:
Code (RAW DEF) Auswählen
attr <DEVICE> userReadings lastOpen:open {ReadingsTimestamp($name,"state","") =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+:\d+)$/;; "$3.$2.$1 $4"},lastClosed:closed {ReadingsTimestamp($name,"state","") =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+:\d+)$/;; "$3.$2.$1 $4"}

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Grimmschak

Hallo zusammen,

die UserReadings haben leider auch genau das Problem wie das notify, sobald das Device (HMCCUDEV) aktuallisiert wird, wird auch das UserReading des Status in dem es sich zum Zeitpunkt der Aktualisierung befand mit aktualisiert.

Das ist unschön, da ich eigentlich nur den Zeitunkt der Änderung merken will.
Hat da noch jemand eine Idee ?

Habe ich in dem Device vieleicht einen Fehler ?

Gruß
Jens

jkriegl

Bei einem HM habe ich ein userreading seit {substr(ReadingsTimestamp($name,"trigger_cnt",""),8, 8);}
Da ist noch der Tag mit dabei, sieht so aus: 06 10:45
Bei einem Xiaomi ist es schwieriger, man muss sich die Zeit in einem userReading merken.
Rpi 3/4, buster, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

Peteruser

Hallo,
der Tip war echt gut :-)
attr <devicename> userReadings lastOpen:open {ReadingsTimestamp($name,"state","") =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+:\d+)$/;; "$3.$2.$1 $4"},lastClosed:closed {ReadingsTimestamp($name,"state","") =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+:\d+)$/;; "$3.$2.$1 $4"}

Das gibt bei mir den Zeitpunkt z.B. des letzten Öffnen aus.

Bei mir handelt es sich um:     lumi.sensor_magnet.aq2 = Xiaomi Aqara Smart Fenstersensor

Grüße und Danke vom Peter
Ubuntu+Debian FHEM + ESPEasy + Homematic + ConBee + DUROFERN

Grimmschak

#10
Hallo zusammen,

bei mir sind es Homematik Sensoren, mit HMCCUDEV in fhem.
Leider aktualisieren die die immer auch den state.

Frage zu dem "seit", welches reading ist "trigger_cnt" ?
Das habe ich nicht bei meinen HMCCUDEV Geräten.

J.

rippi46

#11
Hallo Grimmschak,

Ich habe das Beispiel von t1me2die verwendet nur mit dem Unterschied, dass ich nicht state beutzt habe sondern den contact.
Dadurch habe ich zumindest nur bei einem Reading die letzte Zustandsänderung.

defmod opencloseElena_ntfy notify (Fensterhinten:contact.*) {\
if ($EVTPART1 eq 'open')\
    {   my $lastchanged2open = ReadingsTimestamp('Fensterhinten','contact',0);;\
         fhem "setreading Fensterhinten lastchanged2open $lastchanged2open";;\
    }\
    elsif ($EVTPART1 eq 'close')\
    {   my $lastchanged2closed = ReadingsTimestamp('Fensterhinten','contact',0);;\
         fhem "setreading Fensterhinten lastchanged2closed $lastchanged2closed";;\
    }}
attr opencloseElena_ntfy room Elena

setstate opencloseElena_ntfy 2019-09-09 09:05:52
setstate opencloseElena_ntfy 2019-09-08 19:27:16 state active



PS: also ich kann feststellen wann es zuletzt geöffnet oder geschlossen wurde, je nachdem welche Zeit älter ist

Gruß rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

Grimmschak

Hallo rippi46,

leider haben die HMCCUDEV das Attribut contact nicht, und leider finde ich auch kein Attribut was sich nicht mit ändert, da ich die Devices aktiv alle 15 min update. Dieses hat sich bewährt um auch VARS etc aus der CCU3 aktuell zu halten.
Interessanterweise hat bei mir anscheinend geholfen ein event-on-change-reading .* mit einzubauen, damit scheint er sie Werte sowohl mit der notify Lösung als auch mit den userreading zu behalten. Ich werde das noch ein paar Tage beobachten.

Gruß
Jens

rippi46

FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

juemuc

#14
Zitat von: Grimmschak am 10 September 2019, 19:19:22
Hallo rippi46,

leider haben die HMCCUDEV das Attribut contact nicht, und leider finde ich auch kein Attribut was sich nicht mit ändert, da ich die Devices aktiv alle 15 min update. Dieses hat sich bewährt um auch VARS etc aus der CCU3 aktuell zu halten.
Interessanterweise hat bei mir anscheinend geholfen ein event-on-change-reading .* mit einzubauen, damit scheint er sie Werte sowohl mit der notify Lösung als auch mit den userreading zu behalten. Ich werde das noch ein paar Tage beobachten.

Gruß
Jens

Hallo Jens,
wenn fhem neu gestartet wird, hilft auch das "event-on-change-reading" nicht.
Ich such auch nach einer Lösung, dass der Timestamp für die Userreadings nur bei einer "echten" Änderung verändert wird. Ich habe aber noch keine Idee. Dies ist aus meiner Sicht vor allem dann relevant, wenn der Kontakt nur selten verändert wird, aber fhem hin und wieder ein update erhält  8)

Viele Grüße
Jürgen

3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).