MySQLData V2 für IPS V2

Hallo Thorsten,

habe MySQLData erfolgreich im Einsatz. :slight_smile: Da dies mein erster Beitrag hier im Forum ist zunächst mal großes Lob an alle.

Nachdem ich heute weitere Poller ergänzt habe, fand plötzlich keine Aufzeichnung mehr statt. Folgendes ist passiert:

Beim Anlegen eines Pollers habe ich versehentlich eine Variable ausgewählt, die bereits in einem anderen Poller hinterlegt war.

Danach habe ich diesen Poller wieder gelöscht. Mit dem Erfolg, dass die entsprechende Tabellenspalte in der DB gelöscht wurde und damit das Script MySQLDataExport keine Daten mehr eintragen konnte, denn eine Pollerkonfiguration für die Variable war ja immer noch vorhanden.

Da das ganze zu sehr ärgerlichen Effekten führen kann (keine Aufzeichnung mehr, Datenverlust einer bereits seit längerem aufgezeichneten Variable) werde ich mal nach einer Lösung suchen. Oder ist dieses Problem schon bekannt?

Viele Grüße
(auch) Thorsten

Hallo, hier kommt gleich meine Lösung:

  1. Löschen der Spalte in ‚data‘ wird aus varconfdel.php herausgenommen
  2. Überprüfung und ggf. löschen übernimmt jetzt MySQLDataExport

Vorteil:

  • Damit können Spalten nicht mehr gelöscht werden solange ein Poller mit dieser Variable definiert ist.
  • Dennoch fehlende Spalten werden ignoriert: Damit läuft die Aufzeichnung weiter, gleichzeitig kann eine Fehlermeldung ausgegeben werden.

zu 1.

<<?
include ("./mysql.php");
$link=dbopen();

$IDS=split(",",$_REQUEST["fpkeys"]);
$ID = 0;
while ($ID < (count($IDS)-1)) {
$tempvar = "fdelete_".$IDS[$ID]; $delete=""; $delete=@$_REQUEST[$tempvar];
if ($delete == "on"){
 
 //ThoKar: löschen der Spalte wird jetzt über MySQLDataExport vorgenommen
 //$select = "SELECT * FROM dataconf where id='".$IDS[$ID]."'";
 //$query = mysql_query($select);
 //$row = mysql_fetch_array($query);
 //$delete="ALTER TABLE data DROP COLUMN `".$row['ipsvar']."`";
 //$tempvar = mysql_query($delete);
 $delete="DELETE from dataconf where id='".$IDS[$ID]."'";
 $tempvar = mysql_query($delete);	

}
 $ID=$ID+1;
}
mysql_close($link);
?>

zu 2.

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : MySQLDataExport.ips.php
Trigger  :
Interval :
*/

define("VarMySQLDataCounter", 25563 /*[Zentral\MySQL\MySQLDataExport\MySQLDataCounter]*/, true);
$MySQLHost = GetValueString(14998 /*[Zentral\MySQL\Host]*/);
$username  = GetValueString(20048 /*[Zentral\MySQL\User]*/);
$password  = GetValueString(55384 /*[Zentral\MySQL\Passwort]*/);

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

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

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

//ThoKar: Alle Spalten von Variablen in data abrufen
$show="show columns from data WHERE Field <= '99999'";
$vartest = mysql_query($show);

while ($row = mysql_fetch_array($vartest)) {
	$varArray[] = $row['Field'];
}
//ThoKar: Ende Spalten abrufen

while ($row = mysql_fetch_array($vardat)) {
	$feldArray[] =$row['ipsvar'];
   If (in_array($row['ipsvar'],$varArray)){ //ThoKar: Prüfen ob Spalte vorhanden
		$insert = $insert.", `".$row['ipsvar']."`='".GetVarValue($row['ipsvar'], $row['vartype'])."'";
	}
	else{ //ThoKar: Fehlermeldung, alternativ könnte hier die Spalte auch angelegt werden
	   echo "Spalte: ".$row['ipsvar']." nicht vorhanden".chr(13);
	}
}
$query = mysql_query($insert);

//ThoKar: Überflüssige Spalten ermitteln und eliminieren
foreach ($varArray as $var) {
    If (in_array($var,$feldArray)==false){ //ThoKar: Spalte ist nicht in Definitionen vorhanden
      echo $var." ist nicht vorhanden und wird gelöscht; ";
      $delete="ALTER TABLE data DROP COLUMN `".$var."`";
		$tempvar = mysql_query($delete);
    }
}
//ThoKar: Ende Überflüssige Spalten

mysql_close($link);



function GetVarValue($var, $vartype){

	if (IPS_VariableExists((int)$var)) {
		$value = GetValue((int)$var);
		if ($vartype == "Boolean") {
			return ($value ? 1 : 0);
		} else {
			return $value;
		}
	}
	IPS_LogMessage("MySQLDataExport","Die IPS Variable #'".$var."' existiert nicht mehr. Bitte aus der Poller Konfiguration entfernen ! Es wurde eine 0 in die Datenbank geschrieben");
	return 0;
}
?>

Habe meine Änderungen jeweils kommentiert.

Viele Grüße
Thorsten

Hallo ThoKar,

danke für die Anpassung des Skriptes.

@bruns8234: Vielleicht kannst Du es in das Gesamtpaket aufnehmen.

Hallo,

das Problem das wenn eine Variable zweimal zum Loggen konfiguriert wird, nichts mehr geloggt wird, ist bekannt. Abhilfe bringt hier in der Tabelle dataconf das Feld ipsvar auf „unique“ zu setzen. Ich habe das glaube schon geschrieben bei den Trends mit amcharts. Zusätzlich habe ich noch das Script so geändert, das nur noch Variablen angezeigt werden die noch nicht in der DB stehen. Dies ist aber alles für die V1, V2 ist in der Mache, dauert aber noch wegen akutem Zeitmangel.

Gruß
Thomas

Hallo,
habe versucht MySQLData zu installieren und erhalte nach Start der install.php folgende Fehlermeldung:
Warning: mysql_connect() [function.mysql-connect]: Unknown MySQL server host ‚{192.168.0.10}‘ (11001) in D:\IP-Symcon\web\mySQLData2.0.2\install.php on line 8
Keine Verbindung möglich!

meine Frage ist, wo bzw. wie kann ich den MYSQL-Server installieren bzw. geht das ganze auf WINDOWS XP Home???

Gruß
Rayk

Hallo enra,

Für mysql entweder den offiziellen Installer nehmen (MySQL :: MySQL 5.1 Downloads ? Generally Available (GA) release for production use) oder xampp benutzen (apache friends - xampp für windows).
Ich bevorzuge xampp, da sich da alles bequem veschieben/sichern lässt und ein apache mit phpmyadmin zur Konfiguration der Datenbanken gleich dabei ist. Das wird zwar der eine oder andere für Overkill halten, aber den apache kann man ja auch wieder bequem deaktivieren.
Und ja, läuft unter XP Home.

Horst

Hi Horst,

installiert der nicht auch gleich PHP mit??

Gibt es da keine Probleme, da wir ja momentan bei IPS mit der Version 5.1.6 (glaub ich) arbeiten und der evtl. eine andere rüberbügelt?

mfg

Bernd

Jop, da läuft PHP auf dem Apache. Und sogar nach dem selben Prinzip wie bei IP-Symcon: dll-Einbindung. Und da beide ihre eigene dll haben stören die sich auch nicht. Man sollte nur drauf achten, dass nicht in IP-Symcon ein Webserver den selben Port (standardmäßig 80) hat wie der Apache beim xampp. WebFront wird aus diesem Grund ja auch standardmäßig auf Port 82 gestartet ;).
Beim Umziehen von xampp reicht das Ausführen der setup_xampp.bat und schon läuft alles wieder. Server können alle einzeln per xampp-control.exe per GUI gestartet/gestoppt werden und dort auch gleich die passenden Dienste installiert/deinstalliert werden. Meine xampp-Installation ist hier schon diverse Jahre alt. Dann und wann aktualisiere ich aber auch mal. Bisher alles problemlos.

Horst

Jo,
aber mit welcher Version arbeitet dann die MYSQL? Datenbank, welche wir ja einbinden.
In der Installationsanleitung von Bruns8234 werden gezielt die richtigen dll´s mit eingebunden.
Oder hat die Datenbank keine eigenen PHP Routinen?, ich bin diesbezüglich eher Softwaredummi mit ´ner riesigen Bildungslücke und frag vorsichtshalber Profi´s, bevor ich tagelang nach selbst produzierten Bug´s suche.
Der Informatik-Betriebswirt in mir sagt zwar: „PHP ist eine Webserver Erweiterung“, aber der Techniker rät zur Vorsicht: „denk an Murphy´s Law´s“

Den Apache hab ich bewußt nicht mit eingebunden weil mir der aus der IPS Umgebung vollkommen ausreicht.

mfg
BerndJ

PS: ich hatte die gleichen Probleme beim Einrichten, da dieser Punkt der Einrichtung in der Anleitung ruhig etwas für Leute wie mich, sprich PCDummies erweitert werden könnte

Hallo Bernd,

mySQL ist eine Datenbank, welche mittels Client-Bibliotheken angesprochen wird. Genauso koennten wir also mit SAPDB, MSSQL oder einer anderen wie SQLite arbeiten. PHP hat nichts an dieser Stelle (innerhalb der Datenbank) mit dieser zu tun.

ABER: Die entsprechende PHP-Version muss die entsprechende Clientbibliothek fuer die gewuenschte Datenbank enthalten. Sonst gibt es naemlich in PHP nicht die benoetigten Datenbank Befehle.

Ich hoffe, es ist jetzt klar.

Hallo Torro,

jepp, Bildungslücke soeben geschlossen. Der Informatiker in mir jubelte.

mfg
Bernd

Hallo MySQL Profis,

ich erhalte beim Aufrufen von Tages- oder Stundengraphen die Fehlermeldung das JpGraph fehlt. Siehe als Anlage den Screenshot.

Meine Fragen nun, was hab ich bei der Einrichtung falsch gemacht? Muß ich das JpGraph nach installieren?

Für ein paar Tips wäre ich sehr dankbar.

Grüße
Andrge
P.s.: Die MySQL Datenbank ist eine tolle Sache!

Hallo andrge,

die php gd2.dll ist nicht eingebunden im IP-Symcon Verzeichniss.
Diese muss auch in die php.ini.



```php

extension_dir = "C:\IP-Symcon\"
extension = "php_gd2.dll"

extension = php_mysql.dll

php_gd2.zip (400 KB)

Hallo Rainer,

die extension = „php_gd2.dll“ hatte ich in der PHP.ini aber das gd2 File nicht im IPS verzeichnis. So kann´s ja nicht gehen :rolleyes:

Nun hab ich die Diagramme!!

Danke für den Support!

Grüße
Andrge

Hallo!

Nach langer (dienstlich bedingter) Abwesenheit kann ich nun endlich die aktuelle Version von MySQL-Data freigeben:

Version V2.0.3 steht ab sofort zum Download bereit.
[SIZE=2]Der Downloadlink im ersten Posting ist entsprechend angepasst.
[/SIZE]
(Link zum Download-Posting: http://www.ip-symcon.de/forum/50515-post1.html)

Grundsätzlich hat sich nicht viel verändert, jedoch möchte ich allen empfehlen auf die neue Version umzusteigen, da die Dateien in Vorbereitung zum nächsten Major-Release angepasst und mit Versionsheadern versehen wurden. Unter anderem wird der nächste Major-Release dann eine Update-Routine enthalten, die alle geänderten Dateien alleine aktualisiert.

Für den Umstieg von V2.0.1 auf V2.0.3 sollten also alle Skriptdateien ausgetauscht werden (das bzw. die IPS-Skripte nicht vergessen)!
Nach dem Austausch die notwendigen Anpassungen in mysql.php, MySQLDataExport.ips.php und MySQLDataCleanup.ips.php nicht vergessen!

Was hat sich geändert:

  • Die Pollerkonfiguration bietet nur noch Variablen an, die bisher nicht konfiguriert sind.
  • Das Aufräumskript (MySQLDataCleanup) ist jetzt teil des Pakets und die Installation entsprechen in der Installationsanleitung beschrieben.
  • Im Paket ist jetzt eine ChangeLog.txt vorhanden, die alle Änderungen dokumentiert. Ich werde zukünftig nur noch Versionsnummer, Datum und Link im ersten Posting anpassen.

Hallo Thorsten,

bist du dir sicher das der Link richtig ist ? (mysqldata2.0.2.zip)

Gruß Michael

PS: Kann auch die „MySQLDataCleanup“ nicht finden. :confused:

Nimm DEN.

mfg

BerndJ

Danke.:slight_smile:

Gruss Michael

Hallo,

nochwas, beim aufruf der Poller Konfig kommt folgender fehler in der (varconf.php Zeile 51) "parse error, unexpected T_DOUBLE_ARROW ".

Nach ein bischen recherche im Netz habe ich (PHP-Neuling:D) folgendes gefunden.

Zeile 51:

$usedvars[$row['ipsvar']] => $row['id'];

ändern in

$usedvars[$row['ipsvar']] >= $row['id'];

also ändern von „gleich grösser“ in „grösser gleich“.

Gruss Michael

Hallo qs9000,

danke für die Hinweise bzgl. Link (habe ich korrigiert)
und Syntax-Fehler (habe ich auch korrigiert) :cool:

Ich weiß nicht wie der durch meine Prüfung geschlüpft ist :confused:, aber kann ja mal passieren.

Übrigens warst du mit deiner Fehleranalyse ganz dicht dran. Richtig muß die Zeile lauten

$usedvars[$row['ipsvar']] = $row['id'];

Der Zuweisungsoperator „=>“ ist für Hashs (assoziative Arrays), hier hat es aber nur ein einfaches Array, da wird einfach nur „=“ notiert.