Highcharts: Wie Darstellung von Variablen im Pie ?

Hallo Forum!

Ich habe folgendes Problem.
In einem Pie werden mehrere Variablen dargestellt. Dieses Pie soll die Variablen der letzten 24 Stunden darstellen. Aber nur die Änderung der Variable. Angezeigt wird mir aber der gesamte Wert. Es gibt die Möglichkeit die Variable auf Zählen zu stellen, was aber nur in der normalen Ansicht funktioniert. Im Pie ändert das nichts.
Was kann ich machen um mir die Änderung anzeigen zu lassen?
Muss ich die Differenz selber vor jedem Aufruf ausrechen?( delta = ist - alt ).
Schön wäre das nicht, da ich später den Anzeigebereich des Pie variabel gestalten möchte.

Hat jemand eine Idee??

Keiner Lust mir ein paar Möglichkeiten vorzuschlagen?
Alle die ein Pie verwenden müssen sich doch darüber schon mal Gedanken gemacht haben.

LG
Sebastian

Vielleicht weil keiner versteht wovon du redest?
Wo hast du den so eine Darstellung im IPS WebFront?
Zufällig ein Bild parat?
Michael

Na das ist doch schon mal etwas.:smiley:
Dann versuche ich es noch mal.

Im Bild 1 ist die Variable auf Standard gestellt.
1.jpg

Das Ergebnis im Webfront sieht so aus. Der Zähler zählt immer weiter. Und der tatsächliche Wert wird angezeigt
Bild 2

Im Bild 3 ist die Variable auf Zähler gestellt.
3.jpg

Das Ergebnis im Webfront. Je nachdem welche Skalierung ich auf der X-Achse wähle wird mir das Ergebnis pro Stunde, Tag, Monat usw. angezeigt. Somit weiß ich wie viel Energie am Tag verbraucht worden ist
Bild 4

Hi,

kannst du genauer erklähren was du vor hast?

Gruß

Na das ist doch schon mal etwas.:smiley:
Dann versuche ich es noch mal.

Im Bild 1 ist die Variable auf Standard gestellt.
1.jpg

Das Ergebnis im Webfront sieht so aus. Der Zähler zählt immer weiter. Und der tatsächliche Wert wird angezeigt
Bild 2

Im Bild 3 ist die Variable auf Zähler gestellt.
3.jpg

Das Ergebnis im Webfront. Je nachdem welche Skalierung ich auf der X-Achse wähle wird mir das Ergebnis pro Stunde, Tag, Monat usw. angezeigt. Somit weiß ich wie viel Energie am Tag verbraucht worden ist
Bild 4

Bis hier gibt es kein Problem.

Jetzt habe ich ein Pie mit anderen Variablen erstellt in dem ich die Anteile des Verbrauches darstellen möchte. Variable 7 Zeigt 50000001 kw/h . Diesen Wert habe ich vor mehreren Tagen eingetragen. Und da ist auch schon das Problem. Der Erfassungsbereich ist 24 h von heute 0 Uhr angefangen. Die Variable müsste 0 Anzeigen da sie sich in den dem Erfassungszeitraum nicht geändert hat. Diese Variable ist nur zum Testen da und kann auch nur Händisch im Objektbaum verändert werden.
Bild 5

Ändere ich die Variable jetzt Händisch auf 5000002, wird mir dieser Wert auch im Pie angezeigt. Auch das sollte nicht sein. Ich habe damit gerechnet das mir 1kw/h angezeigt wird. Da ich ja nur den Erfassungsbereich von 24 Stunden haben und eine Änderung jetzt.
Bild 7

Wie kann ich das Problem nun lösen? Ich möchte nur die Änderungen im Erfassungsbereich angezeigt bekommen. So wie es mit der normalen Darstellung Bild 4 auch möglich ist. Muss ich das selber errechnen? Wenn ja tut sich gleich das nächste Problem auf. Ich möchte nämlich im nächsten Schritt den Erfassungsbereich flexibel gestalten. dann müsste meine Rechnung im Hintergrund auch immer angepasst werden.

Ich hoffe das mein Problem erkennbar ist und bedanke mich schon im Voraus.

Hi,

sorry aber ich verstehe immer noch nicht was du vor hast.
Willst du eine Änderung darstellen?
Gestern zb. 20kW verbraucht und Heute 18kW = Gestern 2kW mehr als Heute?

Welche anteile meinst du?
Gesammt Verbrauch auf neben verbraucher aufteilen?

Gruß

Ich möchte nur den Verbrauch von heute anzeigen. Besser gesagt den im Zeitraum. Angezeigt wird mir aber der gesamt Zählerstand des Zählers.

Als Beispiel: Der Zähler in meiner Verteilung zeigt am 1.1.2018 5000000 Kw/h an. Am 2.1.2018 5000002. Wenn ich mir jetzt das Pie dazu anschaue und den Zeitraum vom 2.1.2018, 00:00 bis 2.1.2018, 23:59 vorgebe wird mir der Zählerstand 5000002 angezeigt. Aber das ist doch quatsch. 5000000kw/h wurden doch in den Jahren vor dem 1.1.2018 verbraucht.
Jetzt sollte mir das Pie 2 kw/h anzeigen. So viel wie auch vom 2.1.2018, 00:00 bis 2.1.2018, 23:59 verbraucht worden sind.

Jetzt besser :confused::smiley:

Jetzt :wink:

schau mal hier: AC_GetAggregatedValues — IP-Symcon :: Automatisierungssoftware

unten stehen paar Beispiele.

//Alle heutigen Datensätze abfragen (Tägliche Aggregationsstufe)
//z.B. um den heutigen Verbrauch er ermitteln oder die heutige Durchschnittstemperatur
$werte = AC_GetAggregatedValues(12345, 55554, 1 /* Täglich */, strtotime("today 00:00"), time(), 0); //55554 ist die ID der Variable, 12345 vom Archiv  
 
//Dieser Teil erstellt eine Ausgabe im Skriptfenster mit den abgefragten Werten        
foreach($werte as $wert) {
	echo date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Avg'] . PHP_EOL;
}

Gruß

Hallo sewo,

hat super geklappt mit AC_GetAggregatedValues.
Ich habe 7 Variablen die ich damit abfrage.
Aktuell sieht es so aus

$werte2 = AC_GetAggregatedValues(19437 /*[Archiv]*/, $object[1], 1 /* Täglich */, strtotime("today 00:00"), time(), 0); 
foreach($werte2 as $wert2)
     {
     SetValueInteger(20997 , $wert2['Avg']);
    }
echo  $werte2[0]['Avg']."
";

$werte3 = AC_GetAggregatedValues(19437 , strtotime("today 00:00"), time(), 0); 
foreach($werte3 as $wert3)
     {
     SetValueInteger(21151, $wert3['Avg']);
    }
//echo  $werte3[0]['Avg']."
";

$werte4 = AC_GetAggregatedValues(19437 /*[Archiv]*/, 29474, 1 , strtotime("today 00:00"), time(), 0); 
foreach($werte4 as $wert4)
     {
     SetValueInteger(33976 , $wert4['Avg']);
    }
//echo  $werte4[0]['Avg']."
";


usw.
Jetzt möchte ich gerne verschiedene Zeitbereiche in mehrer Pie darstellen und würde gerne aus diesem Grund den Code ein wenig optimieren. So das ich nur an einer Stelle die Zeit ändern brauche.

Nur leider bekomme ich dann immer diese Fehlermeldung " Notice: Array to string conversion "
Hier mal der Code

$starttime = mktime(0,0,0,1,1,2013);
$endtime = mktime (0,0,0,1,1,2014);
$limit = 1000;
$objectID[0] = 12275;
$objectID[1] = 54041;
$objectID[2] = 29474;
$result = array();

foreach ($objectID as $id)
{
$result =AC_GetAggregatedValues(19437,$id,1,$starttime,$endtime,$limit);
$result2 = $result;
echo  $result2."
";

Später soll dann das Ergebnis wie gehabt ins array eingetragen werden

$serie = array();
	$serie['name'] = 'Pie';
	$serie['type'] = 'pie';
//	$serie['data'][] = array('name'=>' 1', 'Id' => 48075, 'Unit'=>"h");
	$serie['data'][] = array('name'=>' 2', 'Id' => 20997, 'Unit'=>"h");

usw.

Kannst du mir da eine Tipp geben wie ich da weiter komme und jeden ausgelesenen Wert so aufbereite das ich ihn in die Variable bekomme?

Danke

Hallo,

ich bin ein wenig weiter gekommen. Verstehe aber immer noch nicht warum mir echo kein Ergebnis liefert.

$starttime = mktime(0,0,0,3,27,2018);
$endtime = mktime (0,0,0,3,28,2018);
$limit = 1000;
$objectID[0] = 12275;
$objectID[1] = 54041;
$objectID[2] = 29474;
//$result = array();

foreach ($objectID as $id)
{

$result = (AC_GetAggregatedValues(19437,$id,1,$starttime,$endtime,$limit));
//echo $result;
$test = implode(",", $result);
echo $test;

Die $id`s kann ich nacheinander auslesen. Mit dem Ergebnis klappt es leider nicht. Array to string conversion
Habt ihr eine Idee?

Ich versuche es noch anders zu erklären.

Folgender Code gibt die Zahlen 1 bis 5, 3 mal aus. (So oft wie objectID´s vorgegen sind)

$starttime = mktime(0,0,0,3,27,2018);
$endtime = mktime (0,0,0,3,28,2018);
$limit = 1000;
$objectID[0] = 12275;
$objectID[1] = 54041;
$objectID[2] = 29474;
//$result = array();

foreach ($objectID as $id)
{
$result = array("1", "2", "3", "4", "5");
//$result = (AC_GetAggregatedValues(19437,$id,1,$starttime,$endtime,$limit));
//echo $result;
$test = implode(",", $result);
echo $test;

Nun möchte ich mir nicht Zahlen wiedergeben lassen die ich zuvor eingetragen habe sondern die abgefragten Datensätze.

$starttime = mktime(0,0,0,3,27,2018);
$endtime = mktime (0,0,0,3,28,2018);
$limit = 1000;
$objectID[0] = 12275;
$objectID[1] = 54041;
$objectID[2] = 29474;
//$result = array();

foreach ($objectID as $id)
{
//$result = array("1", "2", "3", "4", "5");
$result = (AC_GetAggregatedValues(19437,$id,1,$starttime,$endtime,$limit));
//echo $result;
$test = implode(",", $result);
echo $test;

Dabei bekomme ich immer diese Fehlermeldung : Notice: Array to string conversion in E:\IP-Symcon\scripts\52381.ips.php on line 209
Array,Array

Ich habe jetzt schon echt alles mögliche versucht. Es geht einfach nicht.
Ich verstehe den Code so: In jedem Durchlauf der Schleife wird die nächste $id eingesetzt und der passende Datensatz in $result geschrieben. Danach erfolgt gleich die Ausgabe mit echo.

Jetzt habe ich eine Lösung gefunden. Sollte so eigentlich nicht sein, aber die Richtung stimmt.


//$starttime = mktime(0,0,0,3,28,2018);
$starttime = strtotime("last Monday");
echo "1" . date('F jS, Y g:i:s a', $starttime);
echo "
";
//$endtime = mktime (23,59,59,3,28,2018);
$endtime = strtotime("now");
echo "2" . date('F jS, Y g:i:s a', $endtime);
$limit = 8000;
//$objectID[0] = ;
$objectID[1] = 12275 /*Stunden2*/;
$objectID[2] = 54041 /*Stunden3*/;
$objectID[3] = 29474 /*Stunden4*/;
$objectID[4] = 42497 /*Stunden5*/;
$objectID[5] = 16658 /*Stunden6*/;
$objectID[6] = 30475 /*Stunden7*/;

foreach ($objectID as $id) // läuft so oft durch wie es objectID´s gibt
{
 $result = (AC_GetAggregatedValues(19437 /*[Archiv]*/,$id,1,$starttime,$endtime,$limit));
 If ($id == 12275 /*Stunden2*/)
 {
  $idn = 55366 /*Variable2*/;
 }
 If ($id == 54041 /*Stunden3*/)
 {
  $idn = 17517 /*Variable3*/;
 }
 If ($id == 29474 /*Stunden4*/)
 {
  $idn = 33018 /*Variable4*/;
 }
 If ($id == 42497 /*Stunden5*/)
 {
  $idn = 24468 /*Variable5*/;
 }
 If ($id == 16658 /*Stunden6*/)
 {
  $idn = 15464 /*Variable6*/;
 }
 If ($id == 30475 /*Stunden7*/)
 {
  $idn = 56834 /*Variable7*/;
 }
 
 foreach($result as $result7)
 {
  SetValueInteger($idn, $result7['Avg']);
 }
}

	$serie = array();
	$serie['name'] = 'Pie';
	$serie['type'] = 'pie';
//	$serie['data'][] = array('name'=>' 1', 'Id' => 48075, 'Unit'=>"h");
	$serie['data'][] = array('name'=>' 2', 'Id' => 55366, 'Unit'=>"h");
	$serie['data'][] = array('name'=>' 3', 'Id' => 21151, 'Unit'=>"h");
	$serie['data'][] = array('name'=>' 4', 'Id' => 33976, 'Unit'=>"h");
	$serie['data'][] = array('name'=>' 5', 'Id' => 28532, 'Unit'=>"h");
	$serie['data'][] = array('name'=>' 6', 'Id' => 38780, 'Unit'=>"h");
	$serie['data'][] = array('name'=>' 7', 'Id' => 36708, 'Unit'=>"h");
	$serie['allowPointSelect'] = true;
	$serie['cursor'] = 'pointer';
	$serie['center'] = array(750,200);
	$serie['size'] = 300;
	$serie['dataLabels']['enabled'] = true;
	$CfgDaten['series'][] = $serie;

Ein Problem gibt es noch. Lasse ich mir den Bereich zwischen strtotime(„yesterday 00:00“), strtotime(„today 00:00“) anzeigen stimmen die Werte. Wenn ich den Bereich auf strtotime(„last Monday“), strtotime(„now“) ändere stimmen die Werte nicht mehr. Woran kann das liegen?
Noch etwas. Gibt es hier im Forum eine Anzeige um zu sehen wie viele Online sind? Die Reaktionen sind doch sehr verhalten;). Wenn die Fragen zu blöd sind oder irgend wo anders das Problem liegt, dann ruhig raus damit. Alles andere frustriert nur.

Hat ja nicht jeder Urlaub, die meisten Leute arbeiten Tagsüber :p. Eine Anzeige findest Du unten am Forum, ob die aber irgendeine Aussagekraft hat bzw. aktuell ist weis ich nicht.

Fragen müssen nur richtig formuliert werden, dumme Fragen gibt es keine, aber man muss auch die Geduld haben, dass das andere lesen, verstehen und dann antworten können ;).

@Fonzo.
Schön das du auf meinen Beitrag reagiert hast. Leider nicht auf mein Problem. Wobei ich denke das es für dich ein Klacks wäre. So werde ich natürlich nie auf einem höheren Niveau mitreden können. Und Ihr unterhaltet euch immer in eurem eigenen Kreis.
Ich möchte wirklich keine Lösungen haben aber ein kleiner Schubser in die richtige Richtung…:wink:
Also fass dir ans Herz und hilf mir und dem Forum weiter. Sicherlich werden in Zukunft auch andere von deinem Wissen zehren und dir dankbar sein.
Nur für den Fall… Meine Worte sind nicht böse gemeint.:wink:

LG

Warum so wenige Reaktionen ? Wo hast du den gepostet ?
Funktionswünsche.
Aber welche ‚Funktion‘ nutzt du den ? Highcharts ! Und das ist nicht von Symcon.
Jemand der dir helfen kann; schaut nicht unbedingt in Funktionswünsche.

Schubs:

Q&A Highcharts - Multigraph V1.0

Ich schiebe das jetzt erstmal in den Bereich Skripte. Und ergänze den Titel. Eventuell findet sich dann jemand der dir helfen kann.

Michael

Also eigentlich geht alles, nur mit bestimmten Werten nicht, da kommt zumindest nichts sinnvolles raus?

Hallo Sebastian,

bitte für PHP-Skripte den PHP-Code-Tag (mittlere Zeile, ganz rechts „php“) benutzen.
Das dient der besseren Lesbarkeit als solchen.