Datum / Uhrzeit Berechnungen

Begonnen von Lars, 29 Dezember 2012, 15:32:57

Vorheriges Thema - Nächstes Thema

Lars

Ich habe das Problem schon in meinem anderen Thread geschildert, ich glaube es ist aber hilfreich wenn ich ein neues Thema aufmache.
Vielleicht hole ich etwas weiter aus. Ziel ist die Überwachung der Raumtemperaturen und Alarmierung wenn die Temperatur einen Wert unter oder einen anderen Wert übersteigt. Die Messdaten kommen von S300TH Sendern. Der Alarm wird durch ein notify ausgelöst. Da die Sender alle 3 Minuten einen Datensatz liefern, würde bei einer Über- bzw. Unterschreitung der Werte alle 3 Minuten eine Alarmierung erfolgen. Das ist mir zu häufig, ich möchte zum Teil nur einmal am Tag informiert werden.

Ich hatte nun überlegt eine Dummyvariable LastTempWarn* zu erstellen und in dieser den Zeitpunkt der letzten Alarmierung festzuhalten.
Hinter dem notify wird dann abgefragt, ob schon genügend Zeit für eine erneute Alarmierung vergangen ist.

Soweit der Plan. Damit die Rechenoperationen funktionieren, muss die Variable mit einem halbwegs vernünftigen Wert - sprich Zeitstempel - initialisiert werden.
Und hier genau ist mein Problem. Hier der Code zur Initialisierung:



define LastTempWarnSZ dummy
attr LastTempWarnSZ room Schlafzimmer
set LastTempWarnSZ { \
use DateTime;; \
DateTime->new( year => 2012, month => 2, day => 23 );; \
}


Anstelle der Funktionsrückgabe - sprich dem Zeitstempel - hat die Var nun aber den State:


{ \ use DateTime; \ DateTime->new( year => 2012, month => 2, day => 23 ); \ }


Ich habe es auch schon mit einem vorangestellten "print" in der letzten Zeile funktioniert, hilft aber auch nicht.
Was mache ich falsch?

Habt ihr evtl. eine einfacherer Lösung für das oben geschilderte Vorhaben?

Gruß
Lars  
FHEM Hauptsystem auf ESXi VM | dblog | 3 rPi für Nebensysteme | 2 Beaglebone Black Test- / Integrationssystem

Lars

FHEM Hauptsystem auf ESXi VM | dblog | 3 rPi für Nebensysteme | 2 Beaglebone Black Test- / Integrationssystem

Lars

So, ich konnte das Problem jetzt finden und lösen.
Die Zuweisung des Wertes der Perl-Variable zum Dummy muss wie folgt erfolgen:


fhem("set LastTempWarnSZ $LastTempWarnSZ");; \


Danach hatte ich jedoch das Problem, dass das Modul DateTime nicht mit "in Strings ausgelagerten" Variablen Werten arbeiten kann, daher musste ich den zu speichernden Zeitstempel in einer globalen Variablen vorhalten.

Ich kopiere mein Ergebnis in die Codeschnipsel.

Gruß
Lars
FHEM Hauptsystem auf ESXi VM | dblog | 3 rPi für Nebensysteme | 2 Beaglebone Black Test- / Integrationssystem