Problem mit erstellen der amcharts Grafiken...

Hi,

Als erstes: Ich bin PHP Neuling und versuche mich einzuarbeiten.
Seid bitte gnädig…:smiley:

Was ich möchte:
Ich würde gerne für die Statistiken amcharts nutzen und diese dann durch manuelles Aufrufen des Scripts auslesen und anzeigen lassen.
Der Vorteil wäre, dass die Statistiken im Graph komplett angezeigt werden und man zeitlich in den Graph zoomen kann.
Im Moment wäre das eine Auswertung meines Stromzählers über einen 1-Wire S0-Zaehler.

Was ich bisher getan habe:
Ich habe mir via PHP eine Funktion zum Auslesen aller Werte der Object-ID aus der MySQL Datenbank geschrieben.
Diese Werte werden dann in die Datei „Zaehler-S0.csv“ im IPS Verzeichnis „Scripts“ schreiben lassen.
Das sieht dann ungefähr so aus:
2010-02-03 13:20:01;67111;
2010-02-03 13:25:01;67124;
2010-02-03 13:30:01;67138;
usw…
Ich habe mir von amcharts die „amline“ datei gezogen und den Inhalt in den IPS web Ordner entpackt.
Nun dachte ich mir, dass ich die Beispiel Settingsdatei von amline und die CSV Datei nutze und mir amcharts ein nettes Bild generiert

Das Problem:
Beim Ausführen des Scriptes in Symcon sehe ich den Output im Textfeld
„You need to upgrade your Flash Player“

Im HTML Fenster sehe ich die Meldung
„amcharts … Error in Data File“

Und im Webront Fenster ein weiters Fenster aufgehen mit der Meldung
„You need to upgrade your Flash Player“

Was kann das sein?

Hier der Code meines ersten Programms und ganz unten als Anhang das Settings-File:


<?php

$host="localhost";
$user="symcon";
$password="symcon";
$database="wiips";

// connect to database
mysql_connect($host, $user, $password)
or die ('Unable to connect to server.');

mysql_select_db($database)
or die ('Unable to select database.');

// select last 20 entries
$query = "SELECT * FROM `wiips`.`rrdticks` WHERE instanz = 45889";
$res = mysql_query($query);

$fp = fopen("Zaehler-S0.csv", "w"); /* Textdatei zum Schreiben öffnen und löschen */

// echo data
while($obj = mysql_fetch_object($res)){
  $timestamp = $obj->timestamp;
  $wert =  $obj->wert;

fwrite($fp, "$timestamp;$wert;
");
// Auskommentiert !!! echo "$timestamp;$wert
";
}
fclose($fp); /* Textdatei schliessen */
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>test amline</title>
</head>
<body>
<!-- saved from url=(0013)about:internet -->
<!-- amline script-->
  <script type="text/javascript" src="C:/IP-Symcon/web/amline/swfobject.js"></script>
	<div id="flashcontent">
		<strong>You need to upgrade your Flash Player</strong>
	</div>

	<script type="text/javascript">
		// <![CDATA[
		var so = new SWFObject("C:/IP-Symcon/web/amline/amline.swf", "amline", "100%", "100%", "8", "#FFFFFF");
		so.addVariable("path", "C:/IP-Symcon/web/amline/");
		so.addVariable("settings_file", encodeURIComponent("C:/IP-Symcon/web/amline/amline_settings.xml"));
		so.addVariable("data_file", encodeURIComponent("C:/IP-Symcon/scripts/Zaehler-S0.csv"));
		so.write("flashcontent");
		// ]]>
	</script>
<!-- end of amline script -->
</body>
</html>

Danke im Voraus !!!

Michael

amline_settings.xml (45.9 KB)

Hi,

Ich habe entsetzt festgestellt, dass direkt in der ersten Zeile der Settings xml anstatt CSV als Dateityp angezeigt wird. Habe es nun auf CSV geändert und bekomme nun im HTML Fenster des IPS Editors nach dem ausführen einen Graph angezeigt. Allerdings nicht im Webfront. Da erscheint immernoch „You need to upgrade your Flash Player“

Jemand eine Idee ???

Du rufst über einen Webserver C:\ auf. Das solltest Du korrekt auf eine richtige URL anpassen.

Hi,
Ich hatte das schonmal geändert und anstatt C:\ den pfad eingetragen.

anstatt
C:/IP-Symcon/web/amline/swfobject.js

hatte ich
…/web/amline/swfobject.js

eigetragen, da ich das Skript im Verzeichnis „scripts“ stehen habe gehe ich davon aus, dass es auch sein Stammverzeichnis ist.
Also ein Verzeichnis höher wechseln ins IP-Symcon und dann ins „web/amline“ Verzeichnis.
Wenn ich das allerdings eintrage sagt mir eine Fehlermeldung, dass „swfobject.js“ undefiniert ist. Das heisst für mich er findet es nicht.
Mit dem kompletten Pfad geht es, aber wird nur im Editor HTML Fenster angezeigt, nicht aber im Browser.

Hallo,

Meine Verzeichnisse sind folgende:
Webroot: c:\programme\ip-symcon\html
Logdateien: c:\programme\ip-symcon\html\ips-logging
Amline: c:\programme\ip-symcon\html\amline\amline\xyz.html

Der Logfileaufruf sieht so aus:

so.addVariable("data_file", encodeURIComponent("../ips-logging/photodiode/2010-02-05-diode-kurve.log"));

und der setting path:

so.addVariable("path", "amline/");
so.addVariable("settings_file", encodeURIComponent("amline/amline_settings2.xml"));                

Vielleicht hilft es dir.

Schöne Grüße
Thomas

Danke Euch, aber ich glaube nicht, dass es an den Pfaden liegt, da das Chart ja im IPS Editor in der HTML Ausgabe angezeigt wird.
Nun ist die Frage…Wieso kann der Browser in IPS anzeigen aber nicht der IExplorer, Opera etc???

Browser blocken Cross-Site-Requests, weil böse Webseiten dann Daten von der lokalen Festplatte per JavaScript lesen und zurücksenden könnten.

Webserver-Instanzen in IPS machen nur Dateien unterhalb des eingestellten Root-Verzeichnisses verfügbar. Ist Dein Root-Verzeichnis C:\IP-Symcon\web, dann kannst Du nicht in C:\IP-Symcon\scripts gelangen. Das dient der Sicherheit, damit niemand „http://server/../Dokumente und Einstellungen/woytkem/Eigene Dateien/Kontodaten.txt“ aufrufen kann. Du musst die CSV-Datei daher unter C:\IP-Symcon\web verfügbar machen.

Der Skripteditor arbeitet nicht auf dem Webserver und macht daher für den Browser kein Cross-Site-Request.

Hallo,

verstehe ich dich richtig, du hast den Amline Code in der IPS Console eingegeben?
Amline ist eine unabhängige Software, die mit IPS nichts zu tun hat, sondern sich nur die Logfiles aus einen Verzeichniss holt in welches IPS schreibt.
lege das amline einfach mal so wie es runtergeladen wird in dein Webverzeichness und rufe die amline.html im Webbrowser auf z.B.:
http//192.168.0.X/amline/amline.html
Dann soltest du was sehen.

Schöne Grüße
Thomas

Wie kann ich das nur erklären…
AMCHART habe ich runter geladen und in den web Ordner entpackt.
Das passt alles.
Ich kann das Skript auch in Symcon erstellen.
Man kann es doch dort auch ausführen lassen und sich das Ergebnis als Text oder HTML anzeigen lassen.
Alles in IPS im Script Editor.
Da sieht alles gut aus. Im HTML bekomme ich den Graphen angezeigt und im Text Ausgabe Fenster nicht…passt.
Nun lasse ich das Script nicht im IPS Editor ausführen, sondern im IExplorer und da kommt eben „flash update“ Dingsbumbs…
Ich weis nicht wie ich es besser erklären kann.

Hallo,

vielleicht hast du im IE Java abgeschaltet, könnte auch passieren wenn du die Sicherheitseinstellungen strenger als Standard eingestellt hast.
Ober mal auf der Adobe Flash Seite nachsehen ob dein Flash noch aktuell ist.

Schöne Grüße
Thomas

Danke für den Hinweis.
Leider ist die Version aktuell, und bei allen Browsern das Gleiche…„ou need to upgrade your Flash Player“
Auf dem IPS PC ist auch der aktuelle Flash Player installiert.

Warum zeigt er es im IPS HTML Ausgabefenster an und nicht im Browser?

Habe ich doch geschrieben: Der Skripteditor arbeitet nicht auf dem Webserver und macht daher für den Browser kein Cross-Site-Request.

Hi Horst,
Den Eintrag hatte ich übersehen.
Danke schonmal dafür. Werde es mal ausprobieren.
Danke !!!

Ich möchte ein/zwei Fragen einwerfen, da ich grade dabei bin, etwas nicht zu verstehen :rolleyes:

Es handelt sich um eine Grundsatzfrage about HTML + Java. @woytkem hat hier einen scipt gepostet, der etwas gleich hat, wie das was ich wohl brauche. Genaugenommen handelt es sich um folgendes…

Wie ist das zu verstehen das in einer PHP-Datei oben der <php …> source ist, und dann unten der HTML - Source kommt?
Mir ist klar, das der HTML Teil der sichtbare Teil im IExplorer sein wird.

Wie wird aber eine solche Datei abgearbeitet? Vorallem dann, wenn ich im HTML Bereich ein Eingabefeld habe. Dann will ich ja den oberen PHP-Code erst ausführen, wenn der Benutzer einen Wert im Eingabefenster eingegeben hat. Dann drückt dieser die Entertaste oder einen Schalter der sich im HTML Bereich befindet.

was passiert dann? wie kommt der wert des feldes nach eingabe in den oberen PHP Code?
ihr seht schon, es handelt sich definitiv um eine sehr grundlegende Frage. Bitte nicht gleich todlachen :slight_smile:

Hallo,

der aus dem HTLM kommt nichts mehr in den PHP bereich.
PHP funktioniert nur zwischen <? und ?>.
Aber man kann per php eine Javascript Variable Setzen und wahrscheinlich auch umgekehrt.
Ich habe für so etwas wie du es willst 2 Dateien eine HTML und diese ruft dann die php Datei auf.
Auf meinen Webserver mache ich das so, klicke ich auf eine Lampe geht ein Fenster auf, dort steht dann in HTML EIN / AUS.
Klicke ich dort auf einen Befehl wird die PHP Datei mit Parameter aufgerufen, z.B. schalten.php?befehl=ein.

Schöne Grüße
Thomas

Okay, solange es geduldet wird, frage ich einfach mal weiter…
Wie kann ich nun wenn ich ein js. Eingabefeld habe, dessen wert in php Teil empfangen, also in einer Variable? beim Test mit $_REQUEST klappt es bei mir nicht, kein Wunder, stell ich mich an als wäre ich Zuckerbäcker erstmals vorm PC. (PS: nichts gegen alle mitlesenden Zuckerbäcker ;))

Hallo,

die genauen Befehle kenne ich jetzt nicht und weiß auch nicht wo du besser bist php oder Java, aber die schritte währen z.B.:
Java Eingabefeld schreibt in Java Variable.

Java schreibt die Variable in eine PHP Variable
oder
PHP holt sich die Variable aus dem Java

Dann hast du deine PHP Variable und kannst damit machen was du willst.
Mal im Web nach „javascript variable an php übergeben“ suchen.

Schöne Grüße
Thomas

danke thomas

PHP wird vom Server ausgeführt, JavaScript(JS) vom Client im Browser. In dem geposteten Beispiel wir erst der PHP-Teil ausgeführt, der auf dem Server eine CSV-Datei anlegt, die dann über einen HTML-Aufruf dazugeladen werden kann.
Man bekommt Daten aus PHP nach JavaScript, indem man das Javascript von PHP generieren läßt

echo "<script> var=".$var.";</script>";

und dann zusammen mit dem HTML-Code ausliefert. Somit bekommt der Browser das JS mit schon fertigen und vorbelegten Variablen.

Von JS nach PHP bedeutet die Daten zurück an den Server senden. Das geht über AJAX oder ganz simple über ein Formular, welches von JS an die PHP-Seite abgeschickt wird. Daraufhin kann PHP auf dem Webserver mittels $_REQUEST die Variablen abfragen.

HTH
Tommi

Vielen Dank Tommi, das klingt sehr aufschlußreich :slight_smile: