Zähler (Betriebsstunden)

Wie lange war ein Gerät an?
Oder wie viele Stunden habe ich vor dem PC verbracht?
Um diese oder ähnliche Zeiten aufzuaddieren ist folgendes Skript nützlich.
Es muss vor der ersten Benutzung per „Hand“ ausgeführt werden.
Dabei legt es die Variablen „Running“ und „Counter“ an. Außerdem wird das „Ereignis“ für „StartStop“ eingerichtet.
Solange "„Running“ TRUE ist wird „Counter“ sekundlich um 1 hochgezählt.
Die Variablennamen können selbstverständlich nach belieben geändert werden.

MST

<?
// "Counter" - (C) by IP-Symcon 04.07.2008
 
 if($IPS_SENDER == "Execute")                // nur wenn bei "Ausführen"
 {
  $vid = CreateVariableByName($IPS_SELF, "Running", 0);
  $eid = CreateEventIDByName($IPS_SELF, "StartStop", 0);

  IPS_SetEventActive($eid, true);
  IPS_SetEventTrigger($eid, 0, $vid);
  IPS_SetEventScript($eid, $IPS_SELF);

  echo "Erfolgreich eingerichtet";
 }

 if($IPS_SENDER == "Variable")
 {
  if($IPS_VALUE)
  {
   IPS_SetScriptTimer($IPS_SELF, 1);         // 1-Sekunden-Takt
  } else {
   IPS_SetScriptTimer($IPS_SELF, 0);
  }
 }
 
 if($IPS_SENDER == "TimerEvent")             //
 {
  $id = CreateVariableByName($IPS_SELF, "Counter", 1);
  SetValue($id, GetValue($id)+1);
  $idbh = CreateVariableByName($IPS_SELF, "Betiebs-Stunden", 3);   
  SetValue($idbh, date("z \T\a\g\e + H:i:s", GetValue($id)));
 }

function CreateVariableByName($id, $name, $type)
{
   global $IPS_SELF;
   $vid = @IPS_GetVariableIDByName($name, $id);
   if($vid===false) {
      $vid = IPS_CreateVariable($type);
      IPS_SetParent($vid, $id);
      IPS_SetName($vid, $name);
      IPS_SetInfo($vid, "This Variable was created by Script #$IPS_SELF");
   }
   return $vid;
}

function CreateEventIDByName($id, $name, $type)
{
   global $IPS_SELF;
   $eid = @IPS_GetEventIDByName($name, $id);
   if($eid===false) {
      $eid = IPS_CreateEvent($type);
      IPS_SetParent($eid, $id);
      IPS_SetName($eid, $name);
      IPS_SetInfo($eid, "This Event was created by Script #$IPS_SELF");
   }
   return $eid;
}

?>

PS: das o.g. Skript gilt nur für IPS V2.0

Und wer gern mit dem IPS-Server über LAN die Uptime seiner Workstation erfassen möchte kann dafür TT_UpTime aus den Tonitools verwenden.

auch nur IPS2…

Gruß,

Toni

Hallo Toni,

wie kann ich denn die Minuten in Tage, Stunden, usw. umwandeln.
Ich war der Meinung hier mal ne Anleitung gelesen zu haben, finde aber jetzt nichts mehr.

Minuten / 60 = Stunden
Stunden / 24 = Tage

Soll ich weiter machen? :smiley:

Toni


echo gmdate("z \T\a\g\e + H:i:s", $sekunden);

So finde ich es am elegantesten :slight_smile:

Beschränkung: Max. 365 Tage!

paresy

Danke Toni und paresy.

… ich habe mal das o.g. Skript um dies ergänzt:

$idbh = CreateVariableByName($IPS_SELF, "Betiebs-Stunden", 3);   // um die ID herauszufinden
SetValue($idbh, date("z \T\a\g\e + H:i:s", GetValue($id)));

MST

PS: Tage / 7 = 1 Woche

Hallo Toni,

so ganz bekomme ich es noch nicht hin :frowning:

Hier das Script:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : uptime_server.ips.php
Trigger  : 
Interval : 
*/

$diff=time()-$Result = TT_UpTime();
            $days=floor($diff / (60 * 60 * 24));
            $diff=$diff - $days * (60 * 60 * 24);
            $hours=floor($diff / (60 * 60));
            $diff=$diff - $hours * (60 * 60);
            $minutes=floor($diff / (60));
            $diff=$diff - $minutes * (60);
            $seconds=$diff;
            $Time=sprintf("%d + %02d:%02d:%02d", $days, $hours, $minutes, $seconds);


echo $Time;

SetValueString("system_laufzeit","$Time");
?>

Und hier das Ergebnis:

14068+16:21:41

Was mache ich noch falsch ?

… was spricht denn gegen : H:i:s :confused:

Nichts, aber ich bekomme es nicht hin :o

… ja, ja, klar, verstehe ich völlig - nur warum benutzt Du es nicht …

Da Toni die Uptime in Minuten ausgibt,
müsste es dann so sein?

 echo date("z \T\a\g\e + H:i:s", $Result = TT_UpTime()*60);

… nee ist nicht mein Tag:


$diff=time()-$Result = TT_UpTime(); 

so etwas habe ich noch nie gesehen - wo steht das = Zeichen? - dass ist zu hoch für mich :mad:

und

 echo date("z \T\a\g\e  H:i:s", 0);

ergibt:
0 Tage 01:00:00
Ein klarer Fall für echte Äxpärten …

MST

Stimmt. Mein Fehler. (date bezieht unsere Zeitzone mit ein) So ist es richtig:


echo gmdate("z \T\a\g\e + H:i:s", $sekunden);

paresy

Hallo Steiner tut mir ja Leid wenn Du dich heute abend noch über mich ärgern musst, aber ich bin nun mal kein Programmierer :wink:

So sieht es beim mir aus, ist allerdings genau eine Stunde mehr als mir windows anzeigt.

bild.jpg

gmdate… Siehe einen Post über deinem.

paresy

Danke, hatte Deine Post nicht gesehen :o

Entspricht der date() Funktion, außer dass als Zeitangabe immer Greenwich Mean Time (GMT) zurück gegeben wird. Steht ihr System in Deutschland (GMT + 01:00), wird im Beispiel unten (1. Zeile) „Jan 01 1998 00:00:00“ ausgegeben, wogegen die 2. Zeile „Dec 31 1997 23:00:00“ zurück gibt.

Quelle: http://de3.php.net/manual/de/function.gmdate.php

<?php
echo date("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 1998));
echo gmdate("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 1998));
?>

Danke steiner,

habe mir auch gleich mal `nen Link auf die Seite eingerichtet :wink:

Es gibt immer mehrere Wege, die zum Ziel führen. Ich wollte gern die einzelnen Tage und Stunden in separaten Variablen haben und hab mich für den Weg des „bodenständigen Mathematikers“ entschieden.

Nur wegen der Vollständigkeit nochmal meine Lösung:

<?
  $Uptime = TT_Uptime('localhost'); // Notation IPS2.0
  $Stunden = floor($Uptime/60);
  $Minuten = $Uptime % 60;
  $Tage = floor($Stunden/24);
  $Stunden = ($Stunden % 24);

  echo $Uptime.' Minuten entsprechen '.$Tage.' Tage, '.$Stunden. ' Stunden und '.$Minuten.' Minuten';
?>

% Steht für Modulo und das kennen wir schon aus der Grundschule. Es steht für: 9 geteilt durch 2 ist gleich 4, Rest 1.

Gruß,

Toni