PHPlot als mögliche Basis für Graphen (noch keine Lösung, nur ein Denkansatz)

http://www.ip-symcon.de/forum/f2/ip-symcon-2-4-preview-13558/index3.html#post114991

Na ja,

da in diesem Jahr für IPS wohl keine Multigraphen mehr kommen werden, muß man über die möglichen „nachhaltigen“ Alternative nachdenken. Grundsätzlich muss man hierbei überlegen, ob man die Grafik lokal erstellt oder im WEB rendern lässt (die Cloud ist halt überall).

Ich persönlich mag den Cloudansatz nicht, man kann damit aber schnell was erreichen. Die GoogleCharts von Karlheinz sind hier ein schönes Beispiel. Ich visualisiere damit testhalber meine Aussen- und Heizungstemperaturen.

Mir gefallen lokale Lösungen wesentlich besser, da ich hierbei nicht auf eine ständige Internetverbindung, die Servicestabilität des Providers und dessen Nachhaltigkeit der Schnittstelle angewiesen bin. Auch die Sicherheit spielt dabei eine Rolle, bei Temperaturen ist es wohl egal, bei Präsenzinformationen hätte ich schon schwere Bauchschmerzen.

Das Problem bei der lokalen Graphenerstellung sind wohl die Grafen-Libraries. Ich habe mir viele angesehen (Jpgraph, Fusionscharts, Amcharts, pchart, Highcharts, und und …) und festgestellt, dass sind entweder nicht mehr weiter entwickelt werden oder in die kommerzielle Schiene abdriften.

Auch die Frage des gewünschten Outputs ist sehr wichtig. Als Alternativen sehen ich hier FLASH, HTML5, SVG oder einfache Bitmapgrafiken. Flash werden von den IPhones/IPads nicht gemocht, mit HTML5 haben manche Browser noch so ihre Probleme und SVG braucht halt auch wieder Pluigins. Einzig Bitmaps können wohl mit fast allen Endgeräten bearbeitet werden. Aber die haben halt Probleme mit Interaktivität und zu übertragender Datenmenge.

Letzendlich denke ich, dass ein lokaler bitmapbasierender Ansatz zum heutigen Zeitpunkt wohl nicht falsch wäre. Das Libraryproblem hat mich dann zu PHPlot geführt, da es wohl von der Funktionalität ausreicht und eine gewissen Nachhaltigkeit vorhanden ist. Hier ist die Doku.

Wenn ihr jetzt fragt, ob es schon was Fertiges für IPS gibt, muss ich leider nein sagen. Ich habe erst mal versucht, die grundsätzlichen IT-Architekturfragen zu kären. Ich bleibe an dem Thema aber dran.

Gruss
Bernd

Ein Multigraphenbeispiel aus der Doku habe ich mal angehängt.

Hallo Bernd,
ich bin mal gespannt, was Deine Analysen ergeben :slight_smile:

Mir gefallen lokale Lösungen auch besser und ich arbeite mich peu-a-peu in JPGraph ein, wenn mal Zeit ist. Mal sehen, was daraus wird.

Ich habe mich nun ein wenig mit PHPlot beschäftigt.

Über die ersten experimentellen Versuche wollte ich kurz berichten. Die Installation in IPS ist relativ einfach. Es reicht, die PHPlot-ZIP-Datei mit Unterordner im IPS-Verzeichnis zu entpacken. Beim Konvertieren der durch AC_GET gelesenen Arrays in PHPlot-kompatible muss man etwas aufpassen (Im Beispielscript nicht sehr elegant). Das Darstellen der X-Achse mit Zeitwerten ist in meinem Beispiel noch mit falschen Strukturen.

<?php
// Define your objects
$SensorID = 57093 /*[Ethersex\Vorlauf]*/;
$output_file = IPS_GetKernelDir()."media/PHPlot.png"; # path to PNG output file

//Include the code
require_once (IPS_GetKernelDir()."phplot.php");

//Define the PHPlot object
$plot = new PHPlot(800,400,$output_file); # Image size
$PHPlotdata = array();
$plot->SetFileFormat("png");
$plot->SetIsInline(TRUE);

// Set basis format
$plot->SetImageBorderType('plain');
$plot->SetPlotType('linepoints');
$plot->SetDataType('data-data');
$plot->SetTitle('Temperaturverlauf');

# Formating XY and line
# $plot->SetXLabelType('time','%H:%M'); this is experimental!
$plot->SetXLabelType('data');
$plot->SetYLabelType('data');
$plot->SetLineWidths(2);
$plot->SetDataColors('SlateBlue');

# Read data from IPS-SQLite DB
$ArchivHandler = IPS_GetInstanceIDByName("Archive Handler", 0);
$buffer = AC_GetAggregatedValues($ArchivHandler,$SensorID,0,time()-3600*48,time(),50);

# Convert data from IPS-SQLite to PHPlot Array
$PHPlotdata = array();
$co = count($buffer);
for ($i=0;$i<$co;$i++)
     {
     $x = date("H:i",$buffer[$i]['TimeStamp']);
     $y = $buffer[$i]['Avg'];
     $PHPlotdata[] = array('', $co-$i, $x, $y);
     }

# Draw both grids and graph:
$plot->SetDrawXGrid(True);
$plot->SetDrawYGrid(True);
$plot->SetDataValues($PHPlotdata);
$plot->DrawGraph();
?>

In Summe muss ich sagen, dass mir pChart doch besser gefällt. Nur das ist ja in den kommerziellen Bereich gewandert.

Gruss
Bernd

PHPlot_5.3.1.zip (243 KB)

Woran erkennt man, daß pChart kommerziell ist?
Wenn ich die Lizenzbedingungen lese, hätte ich gedacht, für die Anwendung in Verbindung mit einem IPS-Home-Server wäre das free.
Gruß Jens

Hallo Jens,

wenn es Dein eigener IPS-Homeserver ist und Du damit kein Geld verdienst (GNU GPL V3) ist es for free (Licensing pchart2). Dürfte wohl für viele von uns kein Problem sein. Ich war halt auf der Suche nach einer Lösung, die keine solchen Einschränkungen hat. Ähnlich wie es Steiner und paresy mit der SQLite-DB gemacht haben.

Aber vom optischen und vom Funktionsumfang gefallen mir vor allem die neuen pCharts 2 besser als PHPLot.

Gruss
Bernd