IPS liest DB-Einträge falsch?

Naben Leute,

Versuche mit IPS einige DB Einträge auszulesen, leider kommt es immer wieder vor das Werte doppelt oder teilweiße gar nicht ausgegeben werden wie im Bild schön zu sehen ist.

Hat von euch jemand evtl. eine Ahnung warum IPS das so macht?

Hallo,

du nutzt AC_GetAggregatedValues, probiere mal AC_GetLoggedValues.

Schöne Grüße
Thomas

Hey Thomas,

Da drüber habe ich auch schon mal nachgedacht das Problem ist allerdings das ich immer denn höchste Wert brauche der am Tag geloggt wurde.

Weil z.B. wenn der Server Neustartet schreibt er einen weiteren Eintrag in die DB und der ist dann kleiner als der
eigentliche gewollte wert, deswegen benutze ich eigentlich die Funktion umso sicherzustellen dass immer der größte wert am Tag verarbeitet wird.

Hallo,

Das bringt mich jetzt nicht wirklich weiter.

paresy hast du evtl. eine Idee wo dran das liegen könnte?

LG
Sven

Hallo,

bitte erkläre noch mal genau wo das Problem ist.
Du willst für jeden Tag den Höhstwert haben?
Und du sagst der Angezeigte Wert vom 09.09 ist nicht richtig?
Lass doch mal dieses Script laufen wie sind dort die Ergebnisse?


<?
$Archiv = 51244;
$Variable = 14887;
$min = 100;
$max = -100;
$werte = AC_GetLoggedValues($Archiv, $Variable, mktime(0, 0, 0, 9, 17, 2014), mktime(23, 59, 59, 9, 17, 2014), 1000); //55554 ist die ID der Variable, 12345 vom Archiv
foreach($werte as $wert) {
	if ($wert['Value'] > $max)
	{
	$max = $wert['Value'];
   }
   if ($wert['Value'] < $min)
	{
	$min = $wert['Value'];
   }
}
echo "Min: ".$min . PHP_EOL;
echo "Max: ".$max . PHP_EOL;

$werte = AC_GetAggregatedValues($Archiv, $Variable, 1 /* Täglich */, mktime(0, 0, 0, 9, 17, 2014), mktime(23, 59, 59, 9, 17, 2014), 100); //55554 ist die ID der Variable, 12345 vom Archiv
foreach($werte as $wert) {
	echo date("d.m.Y H:i:s", $wert['TimeStamp']) . " Min: ". $wert['Min']. " Max: " . $wert['Max'] . PHP_EOL;
}
?>

Update:
ich habe noch etwas rum gespielt und sehe jetzt wo das Problem ist. Steht in der Variable z.B. am 08.09 um 23:59 der Wert 123 und am 09.09 z.B 10:00 startet IPS neu dann wird der Wert 123 in die DB geschrieben. Ist dein Tages Höstwert am 09.09 aber nur 100 wird dieser durch die 123 überschrieben.
Auf die Schnelle würde ich jeden Tag die Variable um 00:00 auf Null setzen.
Man könnte auch alle Doppelten per Script löschen, aber da weiß ich nicht genau wie IPS dann darauf reagiert.

Schöne Grüße
Thomas

Hallo,

hier einmal meine Ergebnisse.

Min: 3.8447999999999
Max: 3.8447999999999
17.09.2014 00:00:00 Min: 3.8447999999999 Max: 4.1719000000003

Mein Problem ist einfach das die Werte nicht übereinstimmen z.B. wenn der Wert vom 09.09 in der DB „8,8417999999“ ist und ich die höchsten werte per AC_GetAggregatedValues genau auf denselben Tag ausgebe dann ist der Wert angeblich 9.5436 und am Tag davor auch?

Das geht doch gar nicht, die werte sind wie oben auf dem Bild zu sehen teilweiße doppelt aber auch wiederum nicht jeden Tag, da ist doch was faul?

Update:
Der Server startet natürlich nur bei Updates neu, soll heißen nicht jeden Tag.
Die oben genannten Fehler sind nicht mit einen Server Neustart in Verbindung zu bringen.

Lg
Sven

Hier einmal vom 09.09.

Der min und max Wert stimmt ja, aber nicht der von AC_GetAggregatedValues?

Hallo,

dann lass uns noch mal die Rohdaten ansehen, was kommt hier bei raus?


<?
$werte = AC_GetLoggedValues(31684, 56437 , mktime(0, 0, 0, 9, 8, 2014), mktime(23, 59, 59, 9, 10, 2014), 1000);
foreach($werte as $wert) {
	echo " -> " . date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Value'] . PHP_EOL;
}
?>

Schöne Grüße
Thomas

Hallo,

Das kommt dabei raus.

-> 10.09.2014 23:59:55 -> 9.2128000000002
-> 09.09.2014 23:59:55 -> 8.8417999999992
-> 08.09.2014 23:59:55 -> 9.5436

Lg
Sven

Hallo,

vielleicht passt bei dir etwas mit der Zeitzone nicht, probier mal:


<?php

echo"Eingestellte Zeitzone: ",
    date_default_timezone_get();

?>

Und sende noch mal was hier bei heraus kommt:


<?
$werte = AC_GetLoggedValues(31684, 56437 , mktime(0, 0, 0, 9, 8, 2014), mktime(23, 59, 59, 9, 10, 2014), 1000);
foreach($werte as $wert) {
    echo " -> " .  $wert['TimeStamp']  . " -> " . $wert['Value'] . PHP_EOL;
}
?>

Und hier noch ein Versuch:


<?
$werte = AC_GetLoggedValues(31684, 56437 , mktime(1, 0, 0, 9, 9, 2014), mktime(23, 59, 59, 9, 9, 2014), 1000);
foreach($werte as $wert) {
    echo " -> " . date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Value'] . PHP_EOL;
}

$werte = AC_GetLoggedValues(31684, 56437 , mktime(2, 0, 0, 9, 9, 2014), mktime(23, 59, 59, 9, 9, 2014), 1000);
foreach($werte as $wert) {
    echo " -> " . date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Value'] . PHP_EOL;
}

$werte = AC_GetLoggedValues(31684, 56437 , mktime(3, 0, 0, 9, 9, 2014), mktime(23, 59, 59, 9, 9, 2014), 1000);
foreach($werte as $wert) {
    echo " -> " . date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Value'] . PHP_EOL;
}

$werte = AC_GetLoggedValues(31684, 56437 , mktime(4, 0, 0, 9, 9, 2014), mktime(23, 59, 59, 9, 9, 2014), 1000);
foreach($werte as $wert) {
    echo " -> " . date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Value'] . PHP_EOL;
}
?>

Schöne Grüße
Thomas

Sry, das es etwas länger gedauert hat :wink:

Also die Zeitzone ist „Eingestellte Zeitzone: Europe/Berlin“

Ausgabe 2

-> 1410386395 -> 9.2128000000002
-> 1410299995 -> 8.8417999999992
-> 1410213595 -> 9.5436

und Ausgabe zu Script 3

-> 09.09.2014 23:59:55 -> 8.8417999999992
-> 09.09.2014 23:59:55 -> 8.8417999999992
-> 09.09.2014 23:59:55 -> 8.8417999999992
-> 09.09.2014 23:59:55 -> 8.8417999999992

Hallo,

ich bin jetzt nicht mehr ganz im Thema, aber 8.8417999999992 ist doch der richtige Wert für den 9.9. oder?
Also liegt es an der Zeitzone, vielleicht hat ein Rechner Sommerzeit, der andere nicht.

Schöne Grüße
Thomas