Q&A Highcharts - Multigraph V1.0

Hallo Zusammen,

ich versuche vergebens in einem spline-Diagramm 3 Strommesswerte eines Drehstromgeräts aufsummiert darzustellen.
Suchbegriffe waren stacked und gestapelt.

Leider habe ich es nach Stunden nicht hinbekommen.
Hat jemand einen Tipp für mich?

Hallo,

hat schon jemand erfolgreich die folgenden Chart-Typen vom Highcharts implementieren können?

*) Master Detail Charts
https://www.highcharts.com/demo/dynamic-master-detail

*) Synchronized Charts (mehrere Charts übereinander
https://www.highcharts.com/demo/synchronized-charts

Ich würde diese Charts gerne für die Auswertung der Homematic Wetterstation verwenden, kriege das aber nicht hin.
Vielleicht hat ja jemand ein passendes Konfigurationsscript.

vielen Dank
liebe Grüße
Wolfgang

Hallo hab gerade IPS auf 5.5 upgedatet.
Seit dem funktionieren die Graphen nicht mehr.

Verwende Highcharts 3.01

Fehler:
Abort Processing during Fatal-Error: The behavior of unparenthesized expressions containing both ‚.‘ and ‚+‘/’-’ will change in PHP 8: ‚+‘/’-’ will take a higher precedence
Error in Script C:\ProgramData\Symcon\scripts\37316.ips.php on Line 248

Kann mir jemand helfen?

Danke
Erwoolf

Ich vermute, wenn du die Operation weiter anschaust (Die geht über mehrere Zeilen), dann wirst du da irgendwo ein + oder - haben. Und dann beschreibt der Fehler ja, dass sich die Priorität dieser Operatoren ändert. Ich weiß jetzt nicht genau, was PHP da neu macht, ich würde aber vermuten, dass du es mit passender Klammerung fixen kannst, also $x = ‚Test‘ . (1 + 2); statt $x = ‚Test‘ . 1 + 2;

Hi,

ich nutzte HighCharts schon lange… nun wollte ich mal etwas umbauen und bin auf ein „Problem“ gestoßen was ich eigentlich noch nie hinbekommen habe:
Wie kann ich die Maxima der y-Achse festlegen/fixieren?!

In diesem Chart würde ich gerne die y-Achse [0] (kWh) z.B. auf 280 kWh festlegen. Versucht habe ich das wie folgt:

    $CfgDaten['yAxis'][0]['title']['text'] = "elek. Leistung [kWh]"; 
    $CfgDaten['yAxis'][0]['Unit'] = NULL; 
    $CfgDaten['yAxis'][0]['opposite'] = false; 
    $CfgDaten['yAxis'][0]['tickInterval'] = 40; 
    $CfgDaten['yAxis'][0]['min'] = 0;
    $CfgDaten['yAxis'][0]['max'] = 280; 

und

    $serie = array(); 
    $serie['name'] = "Verbrauch Wärmepumpe"; 
    $serie['Id'] = 26421; 
    $serie['Unit'] = "KWh"; 
    $serie['ReplaceValues'] =false;
	$serie['RoundValue'] = 0; 
    $serie['type'] = "column"; 
	$serie['color']= 'rgba(228, 249, 142, 0.6)';
	$serie['borderColor']= 'rgba(228, 249, 142, 0.3)';
	$serie['borderWidth']= "3"; 
    $serie['yAxis'] = 0;
    $CfgDaten['series'][] = $serie; 

Dennoch wird das Maximum wie im Screenshot zusehen ist auf 360 gesetzt.
Mache ich was falsch? hängt das mit den Rohdaten zusammen? dem Profil der Variable? Oder geht es nicht anders?

Gruß

hardlog

Hallo,

hast du zusätzlich schon folgendes ausprobiert:

...
$CfgDaten['yAxis'][0]['alignTicks'] = false;
$CfgDaten['yAxis'][0]['startOnTick'] = false;
$CfgDaten['yAxis'][0]['endOnTick'] = false;
$CfgDaten['yAxis'][0]['allowDecimals'] = true;
...

Das wars, 1000 Dank!!!

Gruß
hardlog

Bitte! Das hatte mir damals auch einige Zeit gekostet… :rolleyes:

Hallo,

ich brauch nochmal Hilfe:
Ich möchte in ein Säulendiagramm ähnlich diesem aus der Demo von Highchart

den jährlichen (geloggte Daten) Energieverbrauch in PV-Erzeugung, EInspeisung und Eigenverbrauch als „stacked“-Säule darstellen und die Jahre nebeneinander.
Ich bekomme es aber nicht allein hin:

	$serie = array();
	$serie['name'] = "Enerige";
    $serie['stacking'] = "normal";
	$serie['data'][] = array('name'=>'PV Ertrag', 'Id' => 26421, 'Unit'=>"kWh");
	$serie['data'][] = array('name'=>'Vertrauch', 'Id' => 59229, 'Unit'=>"kWh");
    $serie['data'][] = array('name'=>'Einspeisung', 'Id' => 39229, 'Unit'=>"kWh");
	$serie['Unit'] = "kWh";
	$serie['ReplaceValues'] =false;
	$serie['type'] = "column";
	$serie['step'] = false;
	$serie['yAxis'] = 0;
	$serie['shadow'] = true;
	$serie['states']['hover']['lineWidth'] = 2;
	$serie['marker']['enabled'] = false;
	$serie['marker']['states']['hover']['enabled'] = true;
	$serie['marker']['states']['hover']['symbol'] = 'circle';
	$serie['marker']['states']['hover']['radius'] = 4;
	$serie['marker']['states']['hover']['lineWidth'] = 1;
	$CfgDaten['series'][] = $serie;

Gruß
hardlog

einzelne Daten versuchsweise bekomme ich hin, aber keine Serien geloggter Daten.

   $serie['data'][] = array('color' => 'blue','TimeStamp'=> mktime(0,0,0,1,1,2020),'Value'=>5); 
    $serie['data'][] = array('color' => 'yellow','TimeStamp'=> mktime(0,0,0,1,1,2020),'Value'=>10); 
    $serie['data'][] = array('color' => 'red','TimeStamp'=> mktime(0,0,0,1,1,2020),'Value'=>7);

Bin nicht sicher, was Du genau darstellen willst. Wenn es Monatswerte aus mehreren Jahren nebeneinander sind, dann könnte das den Weg zeigen:

$Titel = "Gesamt";
	$Name = ["Kaltwasser", "Warmwasser", ];
	$ID = [15702 /*[Hardware - Haustechnik\Wasser\Wasserverbrauch\Kaltwasser - Zählerstand]*/, 35687 /*[Hardware - Haustechnik\Wasser\Wasserverbrauch\Warmwasser - Zählerstand]*/, ];
	$Color = ["#1A75FF", "#FF0000", ];

	$CfgDaten['title']['text'] = $CfgDaten['title']['text']." ".$Titel;
		
	for ($Stack = 0; $Stack <= count($ID)-1; $Stack++)
		{
		$Offset = 0;
		for ($Column = $kb_Vergangenheit; $Column >= 0; $Column--)
			{
			$serie = array();
			$serie['name'] = $Name[$Stack];
			$serie['Id'] = $ID[$Stack];
			$serie['Unit'] = "m³";
			$serie['color'] = $Color[$Stack];
			
			$serie['StartTime'] = strtotime(date("d.m.Y H:i:s", $CfgDaten["StartTime"])." -".$Column." years");
			$serie['EndTime'] = strtotime(date("d.m.Y H:i:s", $CfgDaten["EndTime"])." -".$Column." years");	
			$serie['Offset'] = $CfgDaten["StartTime"]-$serie['StartTime'];
			if ($kb_Einheit == 5 and $kb_Zeitraum == 2 and $kb_Aufloesung == 3) $serie['pointRange'] = 1000*60*60*24*31; // Bei Monatswerten korrekte Skala erzwingen
	
			$serie['name'] = $serie['name']." ".date("Y",$serie['StartTime']);
			$serie['ReplaceValues'] = false;
			$serie['RoundValue'] = 2;
			$serie['animation'] = false;
			$serie['type'] = "column";
			$serie['stack'] = $Column;
			$serie['stacking'] = "normal";
			$serie['yAxis'] = 0;
			$serie['shadow'] = true;
			$serie['lineWidth'] = 2;
			$serie['marker']['enabled'] = false;
			$serie['showInLegend'] = false;
			if ($Column == 0) $serie['showInLegend'] = true;
			//$serie['states']['hover']['lineWidth'] = 2;
			//$serie['marker']['states']['hover']['enabled'] = true;
			//$serie['marker']['states']['hover']['symbol'] = 'circle';
			//$serie['marker']['states']['hover']['radius'] = 4;
			//$serie['marker']['states']['hover']['lineWidth'] = 1;
			$CfgDaten['series'][] = $serie;
			}
		}

Die äussere Schleife generiert die Werte in einer Spalte übereinander, die innere Schleife die jeweiligen Monatswerte aus mehreren Jahren nebeneinander

$serie['stack'] = $Column;

. Musst Du sicher anpassen, weil mein Script nicht ganz Standard ist (und ja, die Darstellung ist nicht ‚korrekt‘ php ;-))

Moin, Moin,

ich muss jetzt noch mal hier nachfragen da es ja anscheinend bei Euch läuft. Ich erhalte folgenden Fehler:

Deprecated: The behavior of unparenthesized expressions containing both '.' and '+'/'-' will change in PHP 8: '+'/'-' will take a higher precedence in /var/lib/symcon/scripts/30550.ips.php on line 248

Ich habe nun schon versucht mit den Klammern zu bastelten (wobei ich nicht wirklich weiß, was ich da tue). Wenn ich die Klammern so setze:

" height=". ($cfg["HighChart"]["Height"] + 16) .

gibt es zwar keinen Fehler mehr,- der Chart wird aber auch nicht angezeigt.

Frage: Kann mir jemand sagen, wo ich genau die Änderungen vornehmen muss?

Danke und Gruß aus Hamburg

Möglicherweise hast Du davor oder danach einen Fehler eingebaut. Die von Dir geänderte Zeile ist nur ein Teil des Ausdrucks. Bei mir sieht der gesamte Ausdruck nach Korrektur wie folgt aus:

  $s = "http://" . $cfg['Ips']['Dashboard']['Ip'] . ":" . $cfg['Ips']['Dashboard']['Port'] .
				"/user/IPS-Highcharts.php?ScriptId=$scriptId " .
				" width=". $cfg["HighChart"]["Width"] .
				" height=". ($cfg["HighChart"]["Height"] + 16) .
				" ' frameborder='1' scrolling='no'";

Gruß, Uwe

Puh,- das war ja nen Akt, das Konto zu erstellen…Irgend wie hat das aber mit dem alten Usernamen nicht mehr geklappt. OK,- aber zum Problem.
Jetzt bin ich ein Stück weiter. Mit den Klammern ist zwar die Fehlermeldung weg, aber der Chart wird trotz dem nicht angezeigt. Jetzt habe ich das ganze mal auf wieder auf http umgestellt und siehe da,- es funktioniert. Leider kann ich http nicht nutzen weil IPS bei mir nach außen gelegt ist. Daher ist IPS nur via https über den Standard Port 443 zu erreichen. Auch wenn ich im Codeteil http:// durch https:// ersetze und in der Highcharts_config auch den Hostnamen und den Port angebe:

	$CfgDaten['Ips']['Dashboard']['Ip'] = "ipsymcon.xyz.com";
	$CfgDaten['Ips']['Dashboard']['Port'] = "443";

wird nichts angezeigt.

Frage: Wie kann ich das Problem lösen? Port 80 ist nicht möglich und via IP wird das nicht funktionieren weil dann das Zertifikat ja nicht mehr stimmt.

Also, ich habe mir das ganze jetzt noch einmal genauer angeschaut. Rufe ich die URL:

http://ipsymcon.xyz.com:3777/#32218

auf, so bekomme ich den Chart angezeigt. In dem Fall eben via http und nicht https und über den Port 3777

rufe ich die URL:

https://ipsymcon.xyz.com/#32218

wird der Chart nicht angezeigt.

Für das Webinterface Webfrontend habe ich folgendes eingestellt:

es scheint völlig egal zu sein, was ich in der Highchart_config eintrage:

	// Übergabe der IP-Adresse und des Ports für die Darstellung im Dashboard
	// Wichtig! Wenn Darstellung in Webfront diese Variablen auskommentieren
	$CfgDaten['Ips']['Dashboard']['Ip'] = "ipsymcon.xyz.com";
	$CfgDaten['Ips']['Dashboard']['Port'] = "443";

oder auch in der Highcharts die URL in https abändere:

			$s = "https://" . $cfg['Ips']['Dashboard']['Ip'] . ":" . $cfg['Ips']['Dashboard']['Port'] .
				"/user/IPS-Highcharts.php?ScriptId=$scriptId " .
				" width=". $cfg["HighChart"]["Width"] .
				" height=". ($cfg["HighChart"]["Height"] + 16) .
				" ' frameborder='1' scrolling='no'";

ändert das nichts daran, dass der Chart via https nicht angezeigt wird.

Bin ich wirklich der einzige der das Problem hat? Hat hier keiner eine Idee wie ich das zum laufen bekomme? Ich kann das doch unmöglich via Port 80 nach außen legen.

Also entweder bin ich mittlerweile viel zu blöd, nen einfachen Forum zu benutzen oder… ja was eigentlich…

Irgend wie verstehe ich das ganze hier nicht mehr. Seid der Umstellung des Forums finde ich persönlich gar nichts mehr. Bei diesem Beitrag hier, muss ich ganze 110 Sekunden am Mausrad drehen um ans Ende der 800 Beiträge zu gelangen. Nun stelle ich mir die Frage, ob es eventuell daran liegt, dass ich hier noch nicht mal nen ja/nein als Antwort erhalte oder ob ich schlichtweg nicht mehr die gewünschte Zielgruppe bin und doch auch eine fertige Lösung wie Fibaro setzen soll.

OK,- jetzt nehme ich´s sportlich… Ich setze jetzt einfach mal nen ioBroker auf und portiere meine Gerät auf ioBroker. Ich denke, das werde ich eher fertig bekommen, als das ich hier Hilfe bekomme. So spare ich mir wenigstens die jährlichen Subskription für IPS und kann meine IPS Lizenz verkaufen…

Gibt es bei den Highcharts noch Weiterentwicklungen, oder ist das inzwischen tot?
Ich wollte mit mittels einer Highcharts Gauge einen Anzeige für den BAtteriestand meiner Solarbatterie zusammenbauen, aber das bekomme ch die Fehlermeldung, dass „gauge“ als Serientyp nicht unterstützt wird.
Die Grafana-Schnittstelle hab ich mir auch mal angeschaut, aber die ist ja leider aktuell auch noch nicht das gelbe vom Ei.

Vielleicht ist das hier eine Alternative?

Michael