MultiGraph mit GoogleChart

Hallo,

Vielen Dank Karlheinz für diese Skripte. So etwas habe ich seit ein paar Tagen gesucht. Vor allem die Möglichkeit, die von IPS geloggten Variablen richtig zu lesen da ich meine alten GD Skripte anpassen wollte :smiley:

Und soweit es vom Google Chart API unterstützt wird, ist fast alles möglich. Ich habe mir schon die Graph funktion angepasst, da ich wie ChristianS zwei unterschiedliche Y Axen brauche. Läuft prima.

Das einzige was mich stört, ist die ganzen Daten hin und her über das Netz zu senden. Daher werde ich wohl für die Graphen eine Library nutzen, die lokal laufen kann.

Aber wo kommen bei Dir die „amp“ Dinger her.

Die amps kodiert wohl php in das Output rein (ähnlich htmlspecialchars). Die urprüngliche Request war jedoch sicherlich richtig mit & und es sollte daher richtig laufen. Ich bekomme mit dem Link von motions (nach ersetzen der „amps“) einen Graph ohne Fehlermeldung. Nur die Datenwerte am Ende sehen komisch aus. Die lange „A“ Serie zeigt halt nur eine kontinuerliche 0 Linie an. War das so geplant?

Gruss

Zapp

Morgen Zapp,

Die Library wollte ich nicht. MultiGraph ohne viel Aufwand für den Benutzer.
Kein Laden von externen Library usw. einfach nur ein Skript.

die amp hatte ich noch nie, wie gesagt ich weis auch nicht woher sie kommen.
Also in meinem Skript sind die amp glaube ich nicht vorhanden:rolleyes:

Die AA… bedeutet im Graph einfach 0, deshalb ist die Linie einfach ganz unten.

Hallo Karlheinz,

super Arbeit. Vor allem das Framework, wie man aus der internen SQLite die Daten heraus kriegt, wie man sie für verschiedene Zeiträume zusammenstellt und dass am Schluss eine Bitmap heraus kommt, gefätt mir sehr gut.

Was mich aber stört, dass ich immer online mit Google verbunden sein muss und ich ihnen die kompletten Daten schicke. Die nachfolgenden Zeilen gefallen mir echt gar nicht.

$fp  = 'http://chart.apis.google.com/chart';
...
$fp1 = fopen($fp, "rb");
fpassthru($fp1);
fclose($fp1);

Eventuell bin ich da zu paranoid, aber einem amerikanischen Hoster traue ich keinen Milimeter über den weg. Man kann das Framework aber auch sehr gut für eine lokale Library wie z.B. JPGraph oder amcharts verwenden.

Gruss
Bernd

Guten morgen Karlheinz,

Eine externe Library in das Skript Verzeichniss zu kopieren ist fur mich genau so viel Aufwand. Und dann bleiben die Daten bei mir. Ist halt Geschmackssache (oder Sicherheitssache) ;). Verstehe mich nicht falsch denn dein Ansatz ist auch gut und ich kannte diese Google API nicht. Jedoch auch wenn z.B. Temperaturenprofile kein grosses Geheimnis sind, weis ich nicht was auf dem Server wo die API liegt damit gemacht wird. (Edit: ich sehe, dass ich da nicht der Einzige mit der Meinung bin ;). Ich nutze JpGraph und läuft super)

Was ich mit den „amps“ meinte ist, dass die nicht aus deinem Skript kommen. Wie gesagt, es wird wohl von PHP in die Output Meldungen kodiert. Dadurch lösen wir nicht mentions’ Problem, da sein Text korrekt aussieht und bei mir läuft.

Sonder- oder Leerzeichen im Filenamen oder Chart-Überschrift?

Sonder- oder Leerzeichen in der Chart kannst Du ermöglichen, in dem Du den Text vorher mit rawurlencode() aufbereitest, z.B. in deiner Graph funktion:


$fp .= '&chtt='.rawurlencode($Ueberschrift).'&chts=000000,15';

Gruss,

Zapp

Also mir gefallen die Google-Graphen, wobei ich das auch lieber lokal abhandeln würde.
Für Leute wie mich, mit wenig Skript Erfahrung, sind solche Sachen halt immer wieder interessant, kopieren und läuft. :slight_smile:

Woher kommt die Begrenzung auf 4 Datenlinien?
Ich würde gern acht Linen darstellen (i7).
Gruß Jens

Ich hätte da auch mal eine etwas „dumme“ Frage,
wie kann ich denn die Datei (Graph) in einem andren Verzeichnis als Ip-Symcon/media abspeichern? hab da nichts gefunden im script…
würde es gern zu den anderen dateien kopieren, welche ich über html box in ifront anzeigen kann, muss nicht unbedingt sein aber wäre schön.
Habe den Eindruck, dass die Grafik in iFront (html box,nicht im wlan) sehr viel schneller geladen wird als mit jpgraph. Bei intensiv geloggten Werten, kann das bei jpgraph schon mal etwas dauern…

im funktionen skript ca. Zeile 271

Danke, geht mittlerweile
Da hatte ich schon mal rumgespielt, hab nochmal alles neu geladen, läuft 1a.
selbst die Wochengraphen laufen recht flott im iFront

Hallo Jensen,

die 4 Linien kommen dadurch , das man nur eine bestimmte Anzahl an Daten zu GoogleChart senden kann.

Hallo thorsten76,
es gibt auch in IPS die Funktion link hinzufügen. Damit kannst du die Grafik in jeder Kategorie sehen.

Ich werde demnächst noch folgende Funktionen zu GoogleChart hinzufügen.

  • Auswahl eines bestimmten Zeitraumes z.B. Januar 2011
  • Auswahl des Speicherordners
  • Sonderzeichen (Danke zapp)
  • Beschriftung x-, y-Achse
  • BarChart

Und nochmal kurz warum GoogleChart.

  • frei verfügbar privat oder gewerblich
  • kein laden von Zusatzdaten für Graphenerstellung
  • der Graph ist in jedem Anzeigegeräte darstellbar. Ich hatte auch schon Amchart probiert geht leider nicht mit IPad

BarChart.png

Hi,

hast Du das Thema Variablenselektion auch auf das „Radar“ genommen ?

Gruss
b71

Überlegt ja.
weis nur nicht richtig wie ich es mach.:confused:

Man kann nicht alles haben…:slight_smile:

Gruss
B71

@meike0_0
Warum gehen in den Beispielen von Google mehr als 4 Datenlinien?
Ich kann nirgends was zu dieser Begrenzung finden?
Gruß Jens

Das hat warscheinlich mit der Beschränkung von GET-Parametern in den URLs zu tun.

Google sagt dazu selber:

Is there a limit on the URL length for the Google Chart API? What is the maximum URL length?
The maximum length of a URL is not determined by the Google Chart API, but rather by web browser and web server considerations. The longest URL that Google accepts in a chart GET request is 2048 characters in length, after URL-encoding (e.g., | becomes %7C). For POST, this limit is 16K.

Genau das ist das Problem, max. 2048 Zeichen.
4 Linien a 200 Werte = 4 * 400 Zeichen = 1600 Zeichen

  • etwas Graphenstyle
    Man könnte auch weniger Werte und mehr Linie nehmen, nur wird der Graph da nicht so schön.

Wie ists mit POST?

Muß ich mir anschauen. Wie es funktioniert.

Hallo Karl Heinz,

Na…wie sieht es aus… Bist Du schon etwas weiter gekommen ?

Habe gestern die Graphen bei meinem Kumpel installiert und finde die Lösung echt cool weil ich damit halt das leidige DUGTool ablösen könnte welches immer mal wieder Stress im Speicherbereich verursacht…

Ein Update zum Stand der Lage wäre echt toll…

Gruss
Bernd

Du wirst dir doch selber ein Auswahl Feld für die Graphen anlegen können.

Könnte so aussehen.

<?
if($IPS_SENDER == "WebFront")
{
    SetValue($IPS_VARIABLE, $IPS_VALUE);
}

$arrayID = IPS_GetVariableID("PchartArray");
$titelID = IPS_GetVariableID("PchartTitel");
$timestampID = IPS_GetVariableID("PchartTimestamp");
$dspValueID = IPS_GetVariableID("PchartDspValue");

switch($IPS_VALUE)
{
    case 0:
    $graphenID = "49915,22029 /*[Heizung\Buderus Logamatic 2107\HeizungRücklauf]*/,47699";
    SetValue($arrayID, $graphenID);
    SetValue($titelID, "Heizung");
    break;
    case 1:
    $graphenID = "35264,53646";
    SetValue($arrayID, $graphenID);
    SetValue($titelID, "Waschküche");
    break;
    case 2:
    $graphenID = "35017,32079 /*[Wetterstation\Nidda\relative Luftfeuchte]*/,25326,40266 /*[Wetterstation\Nidda\Luftdruck]*/,46552";
    SetValue($arrayID, $graphenID);
    SetValue($titelID, "Wetter");
    break;
    case 19:
    $graphenID = "35017";
    SetValue($arrayID, $graphenID);
    SetValue($titelID, "Außentemperatur");
    break;
    case 20:
    $graphenID = "32079";
    SetValue($arrayID, $graphenID);
    SetValue($titelID, "rel. Luftfeuchte");
    break;
    case 500:
    SetValue($timestampID, "43000");
    SetValue($dspValueID, true);
    return;
    break;
    case 510:
    SetValue($timestampID, "86000");
    SetValue($dspValueID, true);
    return;
    break;
    case 520:
    SetValue($timestampID, "604800");
    SetValue($dspValueID, false);
    return;
    break;
    case 530:
    SetValue($timestampID, "2666000");
    SetValue($dspValueID, false);
    return;
    break;
    case 540:
    SetValue($timestampID, "31536000");
    SetValue($dspValueID, false);
    return;
    break;
}
WFC_SwitchPage(43661 /*[WebFront Configurator]*/, "item4525");


?>

IntegerVariable mit Assoziationen, den Wert übergibst Du dem Script.

Update kommt, dauert aber noch ein bisschen.