Hallo zusammen,
ich bräuchte mal Anregungen um dieses Problem elegant zu lösen (unelegant geht es leicht):
Ich habe eine Klingel am KNX Bus hängen und ein notify ruft eine Funktion auf, um die Klingelzeit in ein dummy zu speichern. Ich hab bewusst keine readingshistory verwendet, da ich es so schöner in die TabletUI einbauen kann.
Nun wäre es aber schön, wenn der Türkontakt dabei noch Verwendung hat und nicht geloggt wird, wenn innerhalb eines gewissen Zeitraums die Tür geöffnet wurde. Natürlich könnte ich den Presence Status abfragen, aber das hat einen geringeren Coolnessfaktor ;)
Nun hab ich diese Funktion
sub RingHistory() {
my $i;
my $datestring;
my $hist;
my $unixTime = time();
if($unixTime-Value("EINGANG_KLINGEL_VERLAUF")>3*60){
for($i =4; $i>0; $i--){
$hist =ReadingsVal("EINGANG_KLINGEL_VERLAUF", "History".($i-1), 0);
fhem("setreading EINGANG_KLINGEL_VERLAUF History".$i." ".$hist);
}
$datestring = strftime "%d.%m %H:%M", localtime;
fhem("setreading EINGANG_KLINGEL_VERLAUF History0 ".$datestring);
fhem("set EINGANG_KLINGEL_VERLAUF ".$unixTime);
fhem("set Telefon send ".$datestring.": Es hat geklingelt");
}
}
die zu einem den Unix Timestamp des letzten Läutezeitpunkts speichert, damit dieser nur alle 3 Minuten erfasst wird und das Datum mit Uhrzeit der letzen 5 Erfassungen. Per Schleife werden die letzen Werte einfach nach unten geschoben und der aktuellste ganz an den Anfang geschrieben.
Nun zur Frage: Welches wäre die schönste Variante, das Logging nur dann zu machen, wenn die Türe nicht geöffnet wurde?
VG
Bernd
Habs doch recht elegant lösen können.
Die Klingel startet ein at welches nach 3 Minuten die Logfunktion aufruft. Der Türkontakt setzt dieses at einfach auf inactive.
Im Test funktioniert es soweit wie gewünscht.