Diagramm Erstellung, fehlende Daten auffüllen.

Hallo,

ich bin gerade dabei mir ein Farbbalkendiagramm zu basteln, ich erstelle das Diagramm Linear mit einer Schleife aus den Daten der Datenbank. Leider sind die Daten in der Datenbank nicht immer in den selben Zeitabständen, so das meine Tagesbalken immer unterschiedlich lang sind. Weiß jemand wie man die Daten für das Diagramm hin bekommt das sie immer den gleichen Zeitabstand haben?

Im Anhang ein Beispiel, eine Zeile ist immer ein Tag.

Schöne Grüße
Thomas

Ich hatte das Thema am WE (bin aber noch nicht dazu gekommen,das fertig zu stellen). Das liegt in der Systematik des (ressourcensparenden) Loggings, da wirst du interpolieren müssen, sinngemäß
mit ner for-Schleife und darin eine Abfrage: wenn kein Datensatz, nimmt den leztzten Datensatz und setze ihn ein. Solange, bis es wieder einen aktuellen Datensatz gibt.

Immer noch wach? Ja das Problem hab ich jetzt auch.
„(ressourcensparenden) Loggings“ bringt neue Probleme.
Da ich Highcharts benutze ist das jetzt ein Problem von khc ?

denke ich nicht, eher des Anwenders :wink: Da kommst du nicht umhin, die Daten aufzubereiten und extern der HC-Config zu übergeben

Hab ich noch nicht probiert. Muss mich mehr mit HC beschaeftigen;)

das hat mit HC weniger zu tun. Du musst einer Series nur ein Daten-Array in folgender Form zuführen:


Array
(
    [0] => Array
        (
            [Value] => 63
            [TimeStamp] => 1339452960
            [humanDate] => 12.06.2012. 00:16:00
        )

    [1] => Array
        (
            [Value] => 125
            [TimeStamp] => 1339453100
            [humanDate] => 12.06.2012. 00:18:20
        )

    [2] => Array
        (
            [Value] => 66
            [TimeStamp] => 1339453140
            [humanDate] => 12.06.2012. 00:19:00
        )

das „humanDate“ kannste ignorieren, das füge ich nur zum Troubleshooting ein.
An HC-Config übergibst du das Array mit


$serie['Data'] 	= $HC_Data_VM_Delay;

statt


$serie['Id'] 	= 37450  /*[Wetterdaten RS.loc\Thies Niederschlag-Sensor (6017 CH00)\Meßdaten\Intensität\Intensität (1 /Minute)]*/;

Danke fuer den Tip. Hab immer nur die Variable uebergeben.

Thomas,

anbei noch ein erster Ansatz zum Auffüllen von Daten, wie in #2 angedeutet.
Ich denke aber, dass es sicherer wäre, auf Uhrzeit zu prüfen statt auf den Array-Key


for($h=0;$h<24;$h++)
{
	// Aray mit Stundenwerten
  	$array_ts            			= mktime(0+$h, 0, 0, date("m", $ts), date("d", $ts)-1, date("Y", $ts));
	$array_te            			= mktime(0+$h, 59, 59, date("m", $ts), date("d", $ts)-1, date("Y", $ts));
	
	$minute_values         			= AC_GetLoggedValues($archiveID,$rawData_ID,	$array_ts, 	$array_te, 1400);
	//$minute_values         			= array_reverse($minute_values);
	
	for($m=0;$m<60;$m++)
	{
		if(isset($minute_values[$m]['Value']))
		{
		  $DataArray[$h][$m] = $minute_values[$m]['Value'];
		}
		else
		{
		  
		  $DataArray[$h][$m] 		=  $DataArray[$h][$m - 1];
		}
	}

}

}

Im Ergebnis sieht das dann so aus (vorher sah es wei in deinem Beispiel aus)

Hallo,

ich habe es jetzt mal mit dem Array Teil Duration probiert.
Als Beispiel, Duration 421.
Die habe ich durch 60 geteilt und gerundet, macht 7.
Also habe ich den letzten Wert 7 mal wieder holt, passt zwar noch nicht ganz, ist aber schon besser als vorher.

Schöne Grüße
Thomas

ich denke, es wird besser sein, auf den Timestamp (und hier „Minute“ )zu checken. Der Duration traue ich nicht so recht über den Weg.