Reporting mit Graphen und MySQL on Demand

Hab die Datei angehängt.

info.php.zip (6.35 KB)

Hallo Klaus,

da fehlt der Bereich Mysql komplett.
Bist du sicher, dass du die Datei an den richtigen Ort kopiert und die php.ini richtig angepasst hast. Kann doch fast nicht sein, das die Datei nicht eingebunden wird. Hast du IPS neugestartet?

Liegt die Datei libmysql.dll im IPS-Ordner?
Manchmal ist ein kleiner Fehler an dem es letztendlich scheitert.

Gruss René

Die libmysql.dll liegt im MySQL Ordner.
Die php_mysql.dll liegt im IPS Stammordner.

PHP.ini habe ich einige Beiträge vorher veröffentlicht.

Gruß
Klaus

ES Läuft!!!

Es war die libmysql.dll die gefehlt hat.

Danke an alle, die mir geholfen haben. :smiley:

Gruß
ein glücklicher Klaus

(Mal sehen, wie lange ich für den Rest brauche :slight_smile:

So, ich bin ein wenig weiter.
Das Erstellen der Poller funktioniert.
Nur wenn ich unter IPS das Script MySQLDataExport in IPS starte erscheint folgende Fehlermeldung:

Fatal error: Cannot redeclare getvalue() in [MySQLDataExport] on line 55

Script:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : MySQLDataExport.ips.php
Trigger  :
Interval :
*/
$MySQLHost="localhost";
$username="root";
$password="passwort";

$link = mysql_connect($MySQLHost, $username, $password) or die("Keine Verbindung möglich!");
mysql_select_db("ipsdata") or die("Auswahl der Datenbank fehlgeschlagen");

$counter=GetValueInteger("MySQLDataCounter");
If ($counter >= 4 ) {
   $select="SELECT * FROM dataconf";
   SetValueInteger("MySQLDataCounter",0);
   $polltime=5;
   }
   else {
   $select="SELECT * FROM dataconf where polltime='1'";
   SetValueInteger("MySQLDataCounter",$counter+1);
   $polltime=1;
}

$vardat=mysql_query($select);
$insert = "INSERT INTO data SET date='".date("Ymd")."', time='".date("His")."', polltime='".$polltime."'";

while ($row = mysql_fetch_array($vardat)){
   $insert=$insert.", `".$row['ipsvar']."`='".GetValue($row['ipsvar'],$row['vartype'])."'";
}

//echo $insert;
$query = mysql_query($insert);
mysql_close($link);

function GetValue($var, $vartype){
 if (IPS_VariableExists($var)) {
  if ($vartype == "Boolean"){
    $help=GetValueBoolean($var);
    if (!$help) { return 0;} else {return 1;}
    }
  elseif ($vartype == "Float"){
    return GetValueFloat($var);
    }
  elseif ($vartype == "Integer"){
    return GetValueInteger($var);
    }
 }
IPS_LogMessage("MySQLDataExport Script","Die IPS Variable '".$var."' existiert nicht mehr. Bitte aus der Poller Konfiguration entfernen ! Es wurde eine 0 in die Datenbank geschrieben");
return 0;
}
?>

Zeile 55 ist die letzte geschweifte Klammer. Das Script ist 1 zu 1 übernommen.

Hat jemand eine Idee, was diesmal falsch ist?

Ach ja, die GD Libary muß ich auch noch installieren. Da werd ich mich morgen dran machen.

Gruß
Klaus

Die GD Libary ist eingebunden und läuft. Bleibt nur noch der Fehler mit der doppelt deklarierten Funktion.

Fatal error: Cannot redeclare getvalue() in [MySQLDataExport] on line 55

Die Funktion wird in dem Script doch nur einmal deklariert. Hat keiner eine Idee woran das liegen kann?

Gruß
Klaus

Hallo Klaus,

bekommst du diese Meldung auch wenn du mysqldata im Webbrowser ausführst, also DeinHomeserver:83/mysqldata/index.php ?
Gruß René

Hi,

wenn Du V2 verwendest , gibt es diese Funktion schon Standartmäßig.

Gruß

Ich dachte das Script hat schon unter der v2 gelaufen?

Ich habe die Funktion in getvalue2() umgetauft, nun bin ich einen Fehler weiter. :rolleyes:
Nun kommt für jede angegebene Variable folgender Fehler:
Warning: Wrong parameter type for ips_variableexists() in C:\Programme\IP-Symcon\scripts\16608.ips.php on line 41
gilt für folgende Zeile:

if (IPS_VariableExists($var)) {

Gruß
Klaus

Hallo Klaus,

dachte ich auch. Habe es auch schon in der V2 in der Testumgebung am laufen, das einzige was geändert werden muss ist in diesem Threadbeschrieben.

Ich werde es heute Abend nochmal unter V2 testen.

Hallo,
wenn die Zeile auf

if (IPS_VariableExists(intval($var))) {

geändert wird scheint es zu gehen.

(zumindest kommt keine Fehlermeldung mehr.)

Gruß
Klaus

Ich kann nach der Änderung für die V2, wie im Threat angegeben, jetzt zwar Poller konfigurieren. Das PHP Script schreibt aber immer noch den Variablennamen in die DB. Damit kann dann das IPS Script nichts anfangen. Es erwartet die ID.
Da beste wäre wohl, es wird gleich die ID in die Datenbank gespeichert.
Bis jetzt bin ich nicht durchgestiegen wo ich das ändern kann.

Was ich nicht verstehe ist warum es anderswo läuft. :confused:

Gruß
Klaus

Ich gebe jetzt in der varconf.php die ID ein. Ist nicht so komfortabel aber es läuft zumindest. Werde noch mal versuchen mir etwas anderes auszudenken.

Mich würde interessieren bei wem es original in der V2 läuft.
Was ist bei mir anders?

Gruß
Klaus

Ich habe jetzt versucht die chartautogen.php zum Laufen zu bringen.
Mit ‚chartautogen.php?fselect=43058‘ im Browser bekomme ich folgendes im Fenster angezeigt:

SetMargin(80,35,40,100); $graph->SetMarginColor('lightblue@0.4'); //$graph->SetAxisStyle(AXSTYLE_BOXIN);  // Daten an Graph uebergeben und min/max Wert abfragen incl. Design $line = new LinePlot($ydata[$f],$xdata[$f]);  $line->SetColor("red"); $line->SetWeight(0); list($xmin,$ymin) = $line->Min();  list($xmax,$ymax) = $line->Max(); // min/max manipulation für X-Achse und Uebergabe an Graphen zur Skalierung //$xmin = (strtotime($dstart." 00:00:00")+$toffset); //$xmax = (strtotime(date("Y",$xmax)."-".date("m",$xmax)."-".(date("d",$xmax)+1)." 00:00:00")+$toffset);  // min/max manipulation für Y-Achse und Uebergabe an Graphen zur Skalierung $graph->SetScale('datlin',($ymin-abs($ymin*0.45)),($ymax+abs($ymax*0.25)),$xmin,$xmax);  if ($ymin < 0) { // Zusaetzliche Null Line erzeugen $nullline = new LinePlot($ynull[$f],$xdata[$f]); $nullline->SetFastStroke(); $nullline->SetWeight(1); $graph->Add($nullline); }  // Ueberschrift erstellen  $chartdesc=$description[$f]."
 vom ".$fdstart." bis ".$fdstop;   $graph->title->SetFont(FF_ARIAL,FS_NORMAL,10); $graph->title->Set($chartdesc);  // Gitternetz im Graphen $graph->xgrid->Show(True); $graph->xgrid->SetWeight(1); $graph->xgrid->SetLineStyle('dashed'); $graph->ygrid->Show(True); $graph->ygrid->SetLineStyle('solid'); $graph->ygrid->SetFill(true,'#EFEFEF@0.5','#FFFFFF@0');  //$graph->xgrid->SetFill(true,'#000000' ,'#FFFFFF');   // Max und Min Wert im Graphen darstellen. $caption=new Text("Max: ".round($ymax,2)."  Min: ".round($ymin,2),5,20); $caption->SetFont(FF_ARIAL,FS_NORMAL,9); $graph->AddText($caption);   //Ausrichtung Beschriftung der X-Achse bestimmen. $graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8);  $graph->xaxis->SetLabelAngle(45); $graph->xaxis->SetLabelAlign('right','top'); $graph->xaxis->scale->SetTimeAlign(MINADJ_5); $graph->xaxis->SetPos('min');  //Schriftart und Beschriftung der Y-Achse $graph->yaxis->SetFont(FF_ARIAL,FS_NORMAL,8); $graph->yaxis->title->SetFont(FF_ARIAL,FS_NORMAL,8); $graph->yaxis->title->SetAngle(0); $graph->yaxis->title->SetAlign('left','top'); $graph->yaxis->title->Set($einheit[$f]);  // Mehr Y-Achsen Bespriftung bei Tagesreport  if (count($xdata[$f]) < 60 ) $graph->xaxis->SetTextLabelInterval(2);  // Design Verbesserung der Graphen if ($fdesign && $ymin >= 0){$line->SetFillGradient('red','yellow@0.2',70); }     else { $line->SetFillColor('yellow@0.7');}   $graph->Add($line); $graph->AddLine(new PlotLine(VERTICAL,1,"black",0)); $graph->Stroke("./tmp/".$chartvars[$f].".png"); ?> [IMG]file:///Y:/web/logging/tmp/%3C?echo%20$chartvars%5B$f%5D;?%3E.png[/IMG]

Das ist ein Teil der chartautogen.php.
Ich benutze Firefox.
Hat schon jemand ein ähnliches Problem gehabt? Die Graphenerstellung sonst funktioniert.

gruß
Klaus

Hat keiner eine Idee? :frowning:

Mist, da hab ich mich selbst überlistet.
Ich hab die Seiten mit Laufwerksangabe und nicht mit IP gestartet.
Nu geht’s.

Gruß
Klaus

Hallo

Nach Experimenten mit Datenerfassung und Auswertung bin ich final dann auch bei der Lösung mySQLData von elektrofreak gelandet.
Erst einmal ein dickes Lob an elektrofreak für diese Arbeit!.

Da ich IPS V2 nutze habe ich mich hingesetzt und die notwendigen Anpassungen vorgenommen, um die Funktionen vollständig V2-Kompatibel zu machen. Dabei habe ich folgendes verändert:

  1. Variablen werden in Form von ID’s in der mySQL-Datenbank abgelegt, im Userinterface werden die Namen angezeigt.
  2. Es wird neben dem Variablennamen auch die zugehörigen Kategorien angezeigt (war mit persönlich wichtig, da z.B. eine Variable Temperatur 12 mal vorhanden ist).
  3. Die Auswahlliste in der Poller-Konfiguration ist alphabetisch sortiert (durch die Einbeziehung der Kategorie sind alle Variablen eines Raumes hintereinander).

In der Originalinstallation von mySQLData V1.6.0 müssen die im Zip-File enthaltenen Dateien ausgetauscht werden.

Abschließen müssen im Skript mySQLDataExport.ips.php noch ein paar Anpassungen vorgenommen werden:

  1. Die ID der MySQLDataCounter-Variable muss angepasst werden
define("VarMySQLDataCounter", <Hier die Variablen-ID einfügen>, true);
  1. IP-Adresse, Username und Passwort für die mySQL-Datenbank müssen angepasst werden
$MySQLHost = "<IP-Adresse>";
$username  = "<Username>";
$password  = "<Passwort>";

Sollte jemand damit Probleme haben bitte bescheid sagen, ich sehe mir dass dann gerne an.

V2_Anpassungen.zip (6.07 KB)

Hallo Thorsten,

habe Deine Änderungen mal bei mir übernommen.
Funktioniert super. Vielen Dank dafür.

Gruss
Michael

Hallo bruns8234,

vielen Dank für die finalen Anpassungen von MySQLData.

Ich habe gerade die Skripte inkl. deiner Anpassung auf einer frischen V2 installiert. Klappte hervorragend.

Vielleicht sollte man noch erwähnen das man die ID der Integer-Variable in das MySQLDataExport-Skript zu Anfang bei der Zeile

define("VarMySQLDataCounter", 12345, true);

eintragen muss.

Ansonsten, saubere Arbeit.

Wenn Torro jetzt noch WIIPS V2 zum laufen bekommt und paresy das StartUp-Skript wieder in die V2 integriert dann kann ich endgültig auf die V2 umschalten.

Hallo Werner,

DU bist schon als Alpha-Tester vorgesehen, ich bin dabei. Muss aber noch einige grundsaetzliche Sachen erstmal daran machen.

Ich weiss nur noch nicht, ob ich die Daten in der V2 uebernehmen kann, im Moment sieht das noch nicht so ganz danach aus.