Hallo Forum,
meine HMS Temp Sensoren senden in der Regel recht zuverlässig. Trotz alledem möchte ich gerne in meiner Dashboard Visu hinter jeden Temp Wert die vergangene Zeit seit letztem update der Temp Variablen anzeigen, upgedatet z.B. alle 5 Mins.
Im Prinzip eigentlich nicht schwer, sobald der Wert in einer Variablen vorliegt.
Ich finde aber keinen Hebel, wie ich an die Zeit des letzten updates für die dem HMS zugeordente Temp Variable innerhalb von IPS herankomme.
Wäre für Hinweise dankbar.
Gruss,
wupperi
Mit folgendem Script lasse ich die Updatezeiten anzeigen, Du mußt Deine Var als Trigger für dieses Script benutzen.
Wenn Du dann das Script noch aller 5min triggerst und die Zeitdifferenz zwischen jetzt und der gespeicherten Zeit nimmst hast Du Deinen Wert fürs Dash.
$var[0] = 53991 /*[Erdgeschoß\Außen\Bewegungsmelder\Status]*/;
$var_time[0] = 10605 /*[.Scripte Allgemein\Verwaltung\Logging\log_var_time\update_time_00]*/;
//und weitere................
$var[14] = 44853 /*[Wetterstation\WMRS200 Außen\Temperatur Außen]*/;
$var_time[14] = 11059 /*[.Scripte Allgemein\Verwaltung\Logging\log_var_time\update_time_15]*/;
$anz = count($var);
for($i=0; $i < $anz; $i++)
{
if($IPS_VARIABLE == $var[$i])
{
SetValueString($var_time[$i], date("d.m.y H:i"));
}
}
Ein weiterer Ansatz ist über array IPS_GetVariable ( integer $VariablenID ) hier liegen auch die Zeitinfos.
Dazu steht auch noch ein Beispiel in der [u]Doku[/u] .
So hole ich zu einer Variable den Zeitpunkt der letzten Änderung (Code habe ich wo abgeschrieben):
function IPS_GetUpdatetimeByID($id) {
$ts = 0;
$f = IPS_GetVariable($id);
foreach($f as $key => $val) {
# echo $key.":".$val."
";
if ($key == "VariableUpdated") {
$ts=$val;
}
}
return $ts;
}
Ich starte zyklisch ein Skript, welches schaut ob die Zeit seit der letzten Änderung meiner HMS größer als ein Schwellwert ist. Jeder HMS-Sensor hat bei mir noch eine OK-Variable welche ich aus diesem Skript entsprechend setzte. Diese Var ändert dann im Dashboard die Farbe der Temp-/Feuchtewerte (graue Schrift wenn gestört). Damit weiß bei mir jeder sofort ob er dem Wert vertrauen darf
wupperi
21. Februar 2010 um 14:34
5
Rubberduck:
Ich starte zyklisch ein Skript, welches schaut ob die Zeit seit der letzten Änderung meiner HMS größer als ein Schwellwert ist. Jeder HMS-Sensor hat bei mir noch eine OK-Variable welche ich aus diesem Skript entsprechend setzte. Diese Var ändert dann im Dashboard die Farbe der Temp-/Feuchtewerte (graue Schrift wenn gestört
Genau das habe ich vor. Versuche gerade herauszufinden, wie ich in php den Vergleich programmiere …
Ich habe die aktuelle Zeit im Skript als:
$time = date (date("d.m.y H:i"));
und die zuletzt gesetzte Zeit der Temp Variable als String
$last_update
mit dem Wert z.B.: „21.02.10 14:22“.
Was ich bräuchte wäre:
$time = date (date("d.m.y H:i"));
$last_update = getvalue (xxxxx);
if ($last_update ist älter als 10 Minuten als $time)
{
setvalue ("boole_update_too_old", "true");
}
Wäre für einen tip dankbar.
Gruss,
wupperi
Versuch das doch mal so…
$timeupdate = IPS_GetVariable("Var-ID");
$timeupdate = $timeupdate['VariableUpdated']; // Wann war Variablenupdate
$time = microtime(true); // aktueller Unix-Timestamp
$timer = 600; // Verzögerung in Sekunden
if ( ($time - $timeupdate) > $timer) // Zeit zwischen Variablenupdate und Jetzt größer als Timer
{setvalue ("boole_update_too_old", "true");}
dfhome
21. Februar 2010 um 14:53
7
Sollte so gehen:
if (strotime($last_update) >= strtotime($time) + (60*10)) {
//do stuff
}
wupperi
21. Februar 2010 um 15:37
8
Geht leider nicht.
Mewin Skript sieht (testweise) so aus:
<?
$var_time[0] = 59024 /*[Klima\Haus\Temp Ankleide OG\last_update]*/;
$var_time[1] = 15536 /*[Klima\Haus\Temp Büro OG\last_update]*/;
$var_time[2] = 30843 /*[Klima\Haus\Temp Gäste UG\last_update]*/;
$var_time[3] = 49736 /*[Klima\Haus\Temp Kinderzimmer UG\last_update]*/;
$var_time[4] = 25833 /*[Klima\Haus\Temp Küche EG\last_update]*/;
$var_time[5] = 33902 /*[Klima\Haus\Temp Schlafzimmer OG\last_update]*/;
$var_time[6] = 15517 /*[Klima\Haus\Temp Speisekammer EG\last_update]*/;
$var_time[7] = 53571 /*[Klima\Haus\Temp Werkstatt UG\last_update]*/;
$var_time[8] = 46573 /*[Klima\Haus\Temp Wohnzimmer EG\last_update]*/;
$var_time[9] = 45963 /*[Klima\Haus\Temp/Feuchte Bad OG\last_update_feuchte]*/;
$var_time[10] = 39682 /*[Klima\Haus\Temp/Feuchte Bad OG\last_update_temp]*/;
$var_time[11] = 43411 /*[Klima\Haus\Temp/Feuchte Bad UG\last_update_feuchte]*/;
$var_time[12] = 28561 /*[Klima\Haus\Temp/Feuchte Bad UG\last_update_temp]*/;
$var_time[13] = 11520 /*[Klima\Haus\Temp/Feuchte Technikraum\last_update_temp]*/;
$var_time[14] = 15194 /*[Klima\Haus\Temp/Feuchte Technikraum\last_update_feuchte]*/;
$var_time[15] = 50273 /*[Klima\Haus\Temp Gäste WC\last_update]*/;
$var_time[16] = 49927 /*[Klima\Haus\Temp/Feuchte Hauswirtschaftsraum\last_update_temp]*/;
$var_time[17] = 32902 /*[Klima\Haus\Temp/Feuchte Hauswirtschaftsraum\last_update_feuchte]*/;
$update_status[0] = 20667 /*[Klima\Haus\Temp Ankleide OG\Temp_Status]*/;
$update_status[1] = 28141 /*[Klima\Haus\Temp Büro OG\Temp_Status]*/;
$update_status[2] = 21092 /*[Klima\Haus\Temp Gäste UG\Temp_Status]*/;
$update_status[3] = 10565 /*[Klima\Haus\Temp Kinderzimmer UG\Temp_Status]*/;
$update_status[4] = 40195 /*[Klima\Haus\Temp Küche EG\Temp_Status]*/;
$update_status[5] = 57111 /*[Klima\Haus\Temp Schlafzimmer OG\Temp_Status]*/;
$update_status[6] = 49875 /*[Klima\Haus\Temp Speisekammer EG\Temp_Status]*/;
$update_status[7] = 44029 /*[Klima\Haus\Temp Werkstatt UG\Temp_Status]*/;
$update_status[8] = 56494 /*[Klima\Haus\Temp Wohnzimmer EG\Temp_Status]*/;
$update_status[9] = 52321 /*[Klima\Haus\Temp/Feuchte Bad OG\Temp_Status]*/;
$update_status[10] = 56729 /*[Klima\Haus\Temp/Feuchte Bad OG\Feuchte_Status]*/;
$update_status[11] = 49405 /*[Klima\Haus\Temp/Feuchte Bad UG\Temp_Status]*/;
$update_status[12] = 16631 /*[Klima\Haus\Temp/Feuchte Bad UG\Feuchte_Status]*/;
$update_status[13] = 44648 /*[Klima\Haus\Temp/Feuchte Technikraum\Temp_Status]*/;
$update_status[14] = 38164 /*[Klima\Haus\Temp/Feuchte Technikraum\Feuchte_Status]*/;
$update_status[15] = 55037 /*[Klima\Haus\Temp Gäste WC\Temp_Status]*/;
$update_status[16] = 59073 /*[Klima\Haus\Temp/Feuchte Hauswirtschaftsraum\Temp_Status]*/;
$update_status[17] = 54368 /*[Klima\Haus\Temp/Feuchte Hauswirtschaftsraum\Feuchte_Status]*/;
$anz = count($var_time);
for($i=0; $i < $anz; $i++)
{
$time = date (date("d.m.y H:i"));
$last_time=getvalue($var_time[$i]);
//if (strtotime($last_time) >= strtotime($time) + (60*10)) {
//setvalue ($update_status[$i], false);
//} else {
//setvalue ($update_status[$i], true);
//}
echo strtotime ($last_time);
}
?>
Der Befehl
echo strtotime($last_time);
gibt nur „“ aus, insoferngeht auch mein (auskommentierter) Vergleich nicht.
dfhome
21. Februar 2010 um 15:46
9
Du brauchst das GetValue nicht:
$last_time = $var_Time[i];
Probier auch mal folgendes:
if (time() >= $var_time[$i] + (60*10)) {
...
}
Die Umwandlung nach String brauchst Du nicht, da $var_time ja auch schon als Unix-Timestamp vorliegt.
wupperi
21. Februar 2010 um 15:46
10
@Nancilla : Dein Skript geht.
Für die Nachwelt poste ich es nochmals funktionierend komplett:
<?
$var_time[0] = 59024 /*[Klima\Haus\Temp Ankleide OG\last_update]*/;
$var_time[1] = 15536 /*[Klima\Haus\Temp Büro OG\last_update]*/;
$var_time[2] = 30843 /*[Klima\Haus\Temp Gäste UG\last_update]*/;
$var_time[3] = 49736 /*[Klima\Haus\Temp Kinderzimmer UG\last_update]*/;
$var_time[4] = 25833 /*[Klima\Haus\Temp Küche EG\last_update]*/;
$var_time[5] = 33902 /*[Klima\Haus\Temp Schlafzimmer OG\last_update]*/;
$var_time[6] = 15517 /*[Klima\Haus\Temp Speisekammer EG\last_update]*/;
$var_time[7] = 53571 /*[Klima\Haus\Temp Werkstatt UG\last_update]*/;
$var_time[8] = 46573 /*[Klima\Haus\Temp Wohnzimmer EG\last_update]*/;
$var_time[9] = 45963 /*[Klima\Haus\Temp/Feuchte Bad OG\last_update_feuchte]*/;
$var_time[10] = 39682 /*[Klima\Haus\Temp/Feuchte Bad OG\last_update_temp]*/;
$var_time[11] = 43411 /*[Klima\Haus\Temp/Feuchte Bad UG\last_update_feuchte]*/;
$var_time[12] = 28561 /*[Klima\Haus\Temp/Feuchte Bad UG\last_update_temp]*/;
$var_time[13] = 11520 /*[Klima\Haus\Temp/Feuchte Technikraum\last_update_temp]*/;
$var_time[14] = 15194 /*[Klima\Haus\Temp/Feuchte Technikraum\last_update_feuchte]*/;
$var_time[15] = 50273 /*[Klima\Haus\Temp Gäste WC\last_update]*/;
$var_time[16] = 49927 /*[Klima\Haus\Temp/Feuchte Hauswirtschaftsraum\last_update_temp]*/;
$var_time[17] = 32902 /*[Klima\Haus\Temp/Feuchte Hauswirtschaftsraum\last_update_feuchte]*/;
$update_status[0] = 20667 /*[Klima\Haus\Temp Ankleide OG\Temp_Status]*/;
$update_status[1] = 28141 /*[Klima\Haus\Temp Büro OG\Temp_Status]*/;
$update_status[2] = 21092 /*[Klima\Haus\Temp Gäste UG\Temp_Status]*/;
$update_status[3] = 10565 /*[Klima\Haus\Temp Kinderzimmer UG\Temp_Status]*/;
$update_status[4] = 40195 /*[Klima\Haus\Temp Küche EG\Temp_Status]*/;
$update_status[5] = 57111 /*[Klima\Haus\Temp Schlafzimmer OG\Temp_Status]*/;
$update_status[6] = 49875 /*[Klima\Haus\Temp Speisekammer EG\Temp_Status]*/;
$update_status[7] = 44029 /*[Klima\Haus\Temp Werkstatt UG\Temp_Status]*/;
$update_status[8] = 56494 /*[Klima\Haus\Temp Wohnzimmer EG\Temp_Status]*/;
$update_status[9] = 52321 /*[Klima\Haus\Temp/Feuchte Bad OG\Temp_Status]*/;
$update_status[10] = 56729 /*[Klima\Haus\Temp/Feuchte Bad OG\Feuchte_Status]*/;
$update_status[11] = 49405 /*[Klima\Haus\Temp/Feuchte Bad UG\Temp_Status]*/;
$update_status[12] = 16631 /*[Klima\Haus\Temp/Feuchte Bad UG\Feuchte_Status]*/;
$update_status[13] = 44648 /*[Klima\Haus\Temp/Feuchte Technikraum\Temp_Status]*/;
$update_status[14] = 38164 /*[Klima\Haus\Temp/Feuchte Technikraum\Feuchte_Status]*/;
$update_status[15] = 55037 /*[Klima\Haus\Temp Gäste WC\Temp_Status]*/;
$update_status[16] = 59073 /*[Klima\Haus\Temp/Feuchte Hauswirtschaftsraum\Temp_Status]*/;
$update_status[17] = 54368 /*[Klima\Haus\Temp/Feuchte Hauswirtschaftsraum\Feuchte_Status]*/;
$anz = count($var_time);
for($i=0; $i < $anz; $i++)
{
$timeupdate = IPS_GetVariable($var_time[$i]);
$timeupdate = $timeupdate['VariableUpdated']; // Wann war Variablenupdate
$time = microtime(true); // aktueller Unix-Timestamp
$timer = 600; // Verzögerung in Sekunden
if (($time - $timeupdate) > $timer) // Zeit zwischen Variablenupdate und Jetzt größer als Timer
{
setvalue ($update_status[$i], "false");
}
else
{
setvalue ($update_status[$i], "true");
}
}
?>
wupperi
21. Februar 2010 um 15:48
11
Sicher? In $var_time[i] liegt doch nur die ID der Variablen, aber nicht der (Zeit-) Wert.
Oder stehe ich auf dem Schlauch?
dfhome
21. Februar 2010 um 15:50
12
Ja, klar, hast recht. Stand grad auf dem Schlauch. Aber läuft ja jetzt eh schon.