Zeit seit letztem Variablen Update

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 :smiley:

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");}

Sollte so gehen:


if (strotime($last_update) >= strtotime($time)  + (60*10)) {
//do stuff
} 

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.

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.

@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");
				}

	 }
    

?>

Sicher? In $var_time[i] liegt doch nur die ID der Variablen, aber nicht der (Zeit-) Wert.

Oder stehe ich auf dem Schlauch?

Ja, klar, hast recht. Stand grad auf dem Schlauch. :slight_smile: Aber läuft ja jetzt eh schon.