Ich kann ja verstehen, dass mein vorgeschlagener Beitrag etwas Nacharbeit benötigt, da er für ein Modul gedacht war. Aber der letzte Beitrag liefert doch genau, das was du suchst.
Ich habe es mal etwas angehübscht und mit Kommentaren versehen.
<?php
function GetFirst($end, $archiv, $var)
{
$rc = "";
$i = 100; // max 100 iterations
while ($i--)
{
$val = AC_GetLoggedValues ($archiv, $var, 0,$end, 10000);
$rc = $val[sizeof($val)-1];
$end = $rc['TimeStamp'];
if (sizeof($val) <10000)
{
return $rc;
}
echo $i . "
"; // das muss wieder raus
}
return $rc;
}
$var = 42211; // hier die gewünschte Variable
$archiveHandlerID = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0];
$val = AC_GetLoggedValues ($archiveHandlerID, $var, 0,0, 0); // ersten Datensatz,
if (sizeof($val) > 0)
{
$tempdate = $val[sizeof($val)-1];
// Check Limit --> rekursiv start ermitteln
if (sizeof($val) >= 10000)
{
$tempdate = GetFirst($tempdate['TimeStamp'], 28670, $var);
}
}
echo date("Y.m.d h:i", $tempdate['TimeStamp']);
Vielen Dank, genau so funktioniert es !!
Dieser Wert soll nun in eine Variable geschrieben werden und sollte sich der Wert ändern, sollte dieser automatisch aktualisiert werden…Wie könnte ich dieses Umsetzten?
Wenn du das Datum nur anzeigen möchtest, dann mit SetValueString in eine Variable schreiben.
Damit das regelmäßig aktualisiert wird, müsste das das Script regelmäßig aufrufen.
Vielleicht solltest du dir erstmal die Grundlagen von PHP und Symcon ansehen, bevor du so komplexe Probleme angehst ;).
Mir ist dein Problem absolut nicht klar, warum sollte sich das Startdatum einer geloggten Variable ändern, außer du löscht manuell über das Archivcontrol Werte?
ganz genau deshalb, wenn die Datensätze manuell gelöscht werden dann das aktualisierte Startdatum automatisch in die Variable.
Aber mal ganz von vorne: ich dachte ich finde ein Modul, in welchem die Betriebsstunden der Geräte aufgezeichnet werden. Ich habe aber nur den Betriebsstundenzähler in GitHub gefunden https://github.com/symcon/Betriebsstundenzaehler.git
So etwas in der Art habe ich mir vorgestellt, nur sollten hier…
a.) mehrere Geräte definierbar sein,
b.) einen Resetknopf für das löschen der Datensätze (Stundenzähler startet von vorne mit 0 Stunden)
c.) und das Startdatum der Aufzeichnung sollte angezeigt werden
Dieses Umzusetzen scheitert leider an meinen Kenntnissen, außer ich erhalte Unterstützung vom Forum.
Vielleicht ist ja hier jemand bereit, die Codes wären ja im Prinzip schon teilweise vorhanden…
Ich kenne zwar das Modul nicht, aber es scheint für deine Anforderung das richtige zu sein.
Gehe die Punkte am besten Schritt für Schritt an.
a) hier definierst du dir einfach mehrere Instanzen des „Betriebsstundenzählers“
b) der Resetknopf wäre ein Skript, das du in dein Webfront verlinkst. In dem Skript löscht du alle Archivdaten.
c) Als Zeitdatum des Aufzeichnungsstarts könntest du vielleicht die aktuelle Uhrzeit nehmen, wenn das Skript ausgeführt wird. Dann schreibst du die aktuelle Uhrzeit in deinem Skript noch in die Variable.
Das klingt doch machbar
Wenn du den Weg gehen solltest, mach am besten einen neuen Thread auf. Dieser ist ja mit dem oben genannten Beispielcode gelöst.
auf, so stellt man fest, dass $tempdate ein array ist. Die Funktion erwartet einen Zeitstempel und Du lieferst ein Array. Kann nicht funktionieren. Nun wissen wir, was der Fehler ist.
In dem Feld „TimeStamp“ des arrays ist der Zeitstempel enthalten, den Du für den Befehl AC_DeleteVariableData brauchst.
Richtig, es sollen alle Datensätze gelöscht werden, aber nicht die Variable im Archiv.
Denn das passiert wie bereits erwähnt bei Startzeit=0 und Endzeit=0.
allerdings nur wenn auch Daten vorhanden sind.
Wurden noch keine Daten geloggt und möchte mit dem Script löschen erhalte ich Sinngemäß Fehlermeldungen.
Also muss ich nur noch einen Weg suchen, das Script abzubrechen wenn keine Daten geloggt wurden…
Danke für den Tipp, somit brauche ich erst gar nicht nach dem Startpunkt zu suchen…
Was mich noch etwas verwundert, dass ich beim Ausführen des Scripts und setzen des Datums in der Variable eine Uhrzeit von 13.24Uhr erhalte, aber in der WebFront eine Uhrzeit von 01.24Uhr angezeigt bekomme…