Hallo zusammen,
im Moment stehe ich auf dem Schlauch.
Man kann zwar das Attribut "showtime" setzen und bekommt das Datum der letzten Änderung eines / des state / readings mitangezeigt, aber wie kann ich das von perl aus abfragen?
Da gibt es $NAME; §EVENT (bzw. @ und $), aber nichts für das Änderungsdatum.
Man könnte zwar natürlich sich ein notify definieren und damit das Änderungsdatum "abfangen", aber wozu, wenn es ja intern sowieso bei dem state / reading gespeichert wird? Also, wie komme ich da per perl dran? readingVal)...
in der CommandRef habe ich dazu nix gefunden.
Gruß
Elektrolurch
Hier mal ein Beispiel aus meiner MyOwnUtils.pm zum Auslesen und auch Umwandeln und Vergleichen von Zeiten:# Abgaegige Devices checken
# define Chk at +00:00:05 {dev2chk}
sub dev2chk {
Log 3, "\n";
foreach my $dev (devspec2array("room=Check")) {
my $tlast = ReadingsTimestamp($dev, "state", "-");
if ($tlast eq "-") {
$tlast = ReadingsTimestamp($dev, "Window", "1970-01-01 01:00:01");
}
my $slast = time_str2num($tlast);
Log 3, $dev . " " . $tlast . " " . $slast . " " . time();
if (time() - $slast > 3600) {
Log 3, "^ " . $dev . " letzte Meldung am " . $tlast;
if ( Value("A_AlarmMail") ne "AUS") { FB_mail('empfaenger@mail.com',"^ " . $dev . " abgaengig","Letzte Meldung am " . $tlast); }
if ( Value("A_AlarmGong") ne "AUS") { fhem "set GONGen off"; }
}
}
Log 3, "\n";
fhem "setstate CheckAlive off";
}
Zitat von: Elektrolurch schrieb am Fr, 30 August 2013 21:33das Datum der letzten Änderung eines / des state / readings mitangezeigt, aber wie kann ich das von perl aus abfragen?
Analog zum Auslesen des Value mit ReadingsVal() gibt es die Funktion ReadingsTimestamp().
my $lastChange = ReadingsTimestamp($deviceName, $readingName, $default);
Hallo Betateilchen,
Du bist der Größte!!! Gerade über die Kommandozeile ausprobiert. Geht. Jetzt werde ich das noch mit einem userreading kombinieren und dann habe ich auf der Übersichtsseite sofort für alle Alarmgeber der Alarmanlage den Zeitstempel, wann und wo etwas ausgelöst wurde.
Klasse. Und dass mit ein par Zeilen Code.
Ich habe die Anweisung allerdings nicht in der CommandRef gefunden oder nach x-maligem Suchen immer noch übersehen. Falls die dort nicht stehen sollte, sollte man das mal nachziehen.
Danke.
Elektrolurch
Zitat von: Elektrolurch schrieb am So, 01 September 2013 11:18Ich habe die Anweisung allerdings nicht in der CommandRef gefunden oder nach x-maligem Suchen immer noch übersehen.
Ich suche sowas immer direkt in der
fhem.pl, da findet man noch ganz andere spannende Sachen :)
Hallo Betateilchen,
so müßte das doch gehen:
define EG0_Bewegungsmelder FS20 21114313 1112
attr EG0_Bewegungsmelder model fs20piru
attr EG0_Bewegungsmelder room Treppenhaus
attr EG0_Bewegungsmelder showtime 1
attr EG0_Bewegungsmelder userReadings Alarmzeit {if (Value("Alarmanlage") eq "scharf") {ReadingsTimestamp("EG0_Bewegungsmelder", "state", "nicht ausgeloest");;}}
Oder habe ich da einen Denkfehler? Ich möchte, wenn Alarmanlage eq scharf, den letzten Auslösezeitpunkt des Bewegungsmelders in userreadings Alarmzeit speichern. Wenn ich keinen Trigger fuer das userreading angebe, müßte das doch so funktonieren, dass bei jedem Update des BM das userreading neu berechnet wird.
Da ich einige von denen habe, kann man in dem userreading eine Referenz, Staat des "EG0_Bewegungsmelders" (wie $NAME oder @) einsetzen?
Wenn ich auf das Objekt "EG0_Bewegungsmelder" in fhem klicke, she ich zwar die Definition des userreadings, aber keinen Wert. Fehler in fhem? Oder klappt das so nicht?
Elektrolurch
Dein userReading hat nur dann überhaupt einen Value, wenn die Anlage scharf ist. Vielleicht solltest Du dem Reading auch dann einen Wert zuweisen, wenn die Anlage unscharf ist.
Bei mir stehen übrigens die Timestamps immer hinter den Meldern, egal ob Anlage scharf oder unscharf.
(siehe Anhang / see attachement)
Die unterschiedlichen Farben geben an, ob das Fenster/Tür offen ( rot), geschlossen (grün) oder gekippt (gelb) ist. Dargestellt wird das Ganze in einem RSS.
Hallo Betateilchen,
das war auch so gedacht. In der Routine, in der die Alarmanlage scharf geschaltet wird, werde ich vmtl. die "Alarmzeit" mit einem "-" initialisieren. Und das Datum werde ich noch umdrehen, so hh:mm:ss dd-mm-yyyy. Die Routine dafür habe ich zwar schon prgrammiert, aber ev. gibt's die ja auch schon fertig?
Das mit den Farben ist zwar eine gute Idee... Nutzt mir leider nix (siehe unten).
Gruß
Elektrolurch