doppelten Archiveintrag löschen

Ok. Nochmals ein ganz neuer Testaufbau, mit nur einer Stringvariablen und ohne Scripte.

  1. eine neue Stringvariable

  1. Schreibe manuell (Variable verändern) den Wert „erster Eintrag“.
    Ergebnis im WebFront::slight_smile:

3 . Schalte den IPS Dienst aus, warte 10 Sek. und schalte den (um 08:17 Uhr :o) wieder ein.
Ergebnis im WebFront::mad:

Die Diskussion ist schon spannend, die Frage ist nur „Was ist richtig?“.

Es sollen Variablen geloggt werden, wenn IPS (länger?) nicht läuft sind die Daten unbekannt. Wenn IPS wieder startet wird der aktuell bekannte Wert eingetragen. Doppelt ist da erstmal nichts. Ich finde das nicht falsch.

Ich sage ja nicht das es falsch ist. Ich will doch „nur“ etwas Unterstützung bei dem Script dass diesen zweiten Eintrag beim Start von IPS löscht.

Dann zeig doch mal was du bisher schon dazu programmiert/probiert hast, dann kann man das ergänzen/optimieren/korrigieren…

Grüße,
Chris

Bin grad dran. Gebt mir noch so 2-3 Stunden.:smiley:

Quasi hast du 5-6 Tage darauf gewartet, dass das einer für dich komplett macht…dachte ich mir…in der Zeit hättest du schon 10x fertig sein können… Aber das Thema hatten wir ja schon an anderer Stelle :wink:

Richtig Methode >> Probieren etwas selbst zu lösen/programmieren, wenn man nicht weiter kommt sein Skript posten und ruck zuck bekommt man geholfen… Nur nach einer Lösung schreien = wenig bis keine Hilfe :slight_smile:

Wenn du was probiert hast (mehr als eine Zeile :D), dann einfach posten und dir wird gerne geholfen (auch von mir).

Grüße,
Chris

Booooooooooooooooooooooooh ich kotz hier gleich.:mad:
PM an Chris erfolgt.

So hab mal neben der Arbeit mal an dem Script gebastelt.:smiley:
Hier Dank an Parsey für den Tip gestern.

<?

$ArchivID 	= 51090 /*[Archiv]*/;
$ObjectID	= 36479 /*[Service\TEST\01\Auswahl\EIN]*/;


$werte = AC_GetLoggedValues($ArchivID, $ObjectID, mktime(0, 0, 0, 1, 1, 2000), time(), 0);

$Anzahl = sizeof($werte);
if ($Anzahl < 2){
   return;
}

for($index = 1; $index < $Anzahl; $index++){
   if ($werte[$index]['Value'] == $werte[$index-1]['Value']){
      echo date("d.m.Y H:i:s", $werte[$index-1]['TimeStamp']) . " --> " . $werte[$index-1]['Value'] . PHP_EOL;
      AC_DeleteVariableData($ArchivID, $ObjectID, $werte[$index-1]['TimeStamp'], $werte[$index-1]['TimeStamp']);
   }
}

?>

Funktioniert soweit. Hat jemand ein Verbesserungsvorschlag, was man evtl. eleganter löst?

PS: Ich habe nicht 5-6 Tage auf ein fertiges Script gewartet, sondern EINEN Tag nach dem Tip von Parsey (wie auch danach kommentiert) mich an das Scripterstellen gesetzt.

Um das Problem der doppelten Einträge beim Hochfahren zu umgehen würde ich ein Startskript erstellen, das die gerade (in den letzten 60 Sekunden) eingetragenen Werte gleich wieder löscht.

z.B.: (ungeprüft)


define ('ID_ARCHIVE_HANDLER', IPS_GetInstanceIDByName('Archive Handler', 0));
define ('ID_EIN', 36479 /*[Service\TEST\01\Auswahl\EIN]*/);
define ('ID_AUS', xxxxx );

AC_DeleteVariableData (ID_ARCHIVE_HANDLER, ID_EIN, time() - 60, time());
AC_DeleteVariableData (ID_ARCHIVE_HANDLER, ID_AUS, time() - 60, time());


Dieses Skript ist unter Kern Instanzen -> Event Handler -> Start Script einzutragen.

Gruß

Burkhard

PS: bin weiterhin der Meinung, das der Archive Handler nur geänderte und aktualisierte Werte eintragen sollte

Alles klar. Danke für dein Beispiel.