Noch eine kleine Frage zum Thema,
habe jetzt DUGTool installiert. DB loggt Daten mit und ich kann mir sofort einen Graphen zeichnen lassen.
Nur die automatische Aktualisierung klappt nicht. Ich bekomme im Script „DBupdate…“ auch folgende Fehler, mit denen ich
mit meinen rudimentären Kentnissen leider nicht viel anfangen kann:
Notice: Undefined index: IPS_VARIABLE in C:\IP-Symcon\scripts\DBupdate.php on line 21
Warning: Variable #0 existiert nicht in C:\IP-Symcon\scripts\DBupdate.php on line 23
Notice: Undefined index: IPS_VALUE in C:\IP-Symcon\scripts\DBupdate.php on line 27
Warning: sqlite_query() [function.sqlite-query]: near " ": syntax error in C:\IP-Symcon\scripts\DBupdate.php on line 36
Warning: sqlite_fetch_array() expects parameter 1 to be resource, boolean given in C:\IP-Symcon\scripts\DBupdate.php on line 37
Warning: sqlite_query() [function.sqlite-query]: column IPSID is not unique in C:\IP-Symcon\scripts\DBupdate.php on line 56
Warning: sqlite_query() [function.sqlite-query]: near " ": syntax error in C:\IP-Symcon\scripts\DBupdate.php on line 63
Warning: sqlite_fetch_array() expects parameter 1 to be resource, boolean given in C:\IP-Symcon\scripts\DBupdate.php on line 64
Das Script sieht wie folgt aus:
<?
//==================================================================================
// Datei.......: DBupdate.php
// Beschreibung: speichert Variablenänderungen der Variablen, die dieses Script aufruft in der Datenbank
//
// DUG Version.....: V1.6
// SVN Revisionsnr: $Revision: 40 $
// zuletzt geändert : $Date: 2009-05-29 15:53:44 +0200 (Fr, 29 Mai 2009) $
// Author: $Author: tobias $
//==================================================================================
unset($_SERVER['argv']);
unset($_SERVER['argc']);
$logall = true;
include ("DUGToolbasis.php");
include ($DUGTOOLPFAD."sqlitebasis.php");
$dblink = dbopen();
$IPS_VarID = $_SERVER["IPS_VARIABLE"];
//Variablentyp abfragen (Boolean, Integery, Float, String)
$thisvar = IPS_GetVariable($IPS_VarID);
$varType = $thisvar['VariableValue']['ValueType'];
if ($varType == 0)
{
$varValue = (int)$_SERVER["IPS_VALUE"];
}
else
{
$varValue = $_SERVER["IPS_VALUE"];
}
//die IPS Variable in der DB suchen
$select = "SELECT * FROM Variable WHERE IPSID = ".$IPS_VarID;
$result = sqlite_query($dblink, $select);
$varindb = sqlite_fetch_array($result);
//Wenn sie noch nicht in der DB ist, muss sie angelegt werden
if (!isset($varindb['ID']))
{
//für später mal. evtl aus dem Zusatztext die Einheit extrahieren ( nur ne Idee)
$obj = IPS_GetObject($IPS_VarID);
$varName = $obj['ObjectName'];
$varText = $obj['ObjectInfo'];
$varEinheit = "unbekannt";
$varPfad = IPS_GetLocation($IPS_VarID);
if ($logall) {IPS_LogMessage("DUG Tool DB Update", "Die Variable ".$varName." mit der ID ".$IPS_VarID." ist noch nicht in der DB vorhanden.");}
//Variable in der DB neu anlegen
//als name der Variable, wird der Pfad mit dem Namen der Variablen eingetragen. Der DB Eintrag Name wird
//auch in der Legende des Graphen benutzt.
//Der Eintrag Name soll später mal veränderbar sein, während Pfad immer zur Variable gehört
$select = "INSERT INTO Variable (IPSID, Name, Typ, Einheit, MaxIntervallZeit, MaxAnzahl) VALUES ('".$IPS_VarID."','".$varPfad."','".$varType."','".$varEinheit."', 0, 0);";
sqlite_query($dblink, $select);
if ($logall) {IPS_LogMessage("DUG Tool DB Update", "Die Variable ".$varName." mit der ID ".$IPS_VarID." wurde in der DB '".$dbpfad."' angelegt.");}
}
//alle Informationen über die Variable aus der DB holen
$select = "SELECT * FROM Variable WHERE IPSID = ".$IPS_VarID;
$result = sqlite_query($dblink, $select);
$varindb = sqlite_fetch_array($result);
$override = false;
//falls eine maximale Anzahl an zu speichernden Datensätzen angegeben ist, überprüfe, ob dieses Limit schon erreicht worden ist
//falls die maximale Anazhal errreicht worden ist, wird override auf true gesetzt
//dann soll der älteste Wert neu überschrieben werden
if ((isset($varindb['MaxAnzahl'])) && ($varindb['MaxAnzahl'] != 0))
{
//abfragen wie viele Datensätze dieser Variable schon gespeichert sind
$select = "SELECT COUNT(ID) as Anzahl FROM VarEreignis WHERE VarID = '".$varindb['ID']."';";
$countresult = sqlite_query($dblink, $select);
$varcount = sqlite_fetch_array($countresult);
if ($varcount['Anzahl'] >= $varindb['MaxAnzahl']) {$override = true;}
}
if (((isset($varindb['MaxIntervallZeit']))&&($varindb['MaxIntervallZeit'] != 0)) || $override)
{
//suche den ältesten Datensatz raus
$select = "SELECT * FROM VarEreignis WHERE VarID = '".$varindb['ID']."' ORDER BY DatumZeit ASC LIMIT 1;";
$oldvarresult = sqlite_query($dblink, $select);
$varoldest = sqlite_fetch_array($oldvarresult);
if (($varindb['MaxIntervallZeit'] != 0)&&($varoldest['DatumZeit'] < (time()-$varindb['MaxIntervallZeit']))) {$override = true;}
$overrideme = $varoldest;
}
if ($override)
{
$select = "UPDATE VarEreignis SET 'DatumZeit' = '".$_SERVER["REQUEST_TIME"]."', Wert = '".$varValue."' WHERE ID ='".$overrideme['ID']."'; ";
}
else
{
$select = "INSERT INTO VarEreignis (DatumZeit, Wert, VarID) VALUES (".$_SERVER["REQUEST_TIME"].", '".$varValue."','".$varindb['ID']."'); ";
}
$result = sqlite_query($dblink, $select);
if (($result != null)&&($logall))
{
IPS_LogMessage("DUG Tool DB Update", "Variable ".$IPS_VarID." (".$varindb['ID'].") wurde in der DB '".$dbpfad."' aktualisiert.");
} else
{
IPS_LogMessage("DUG Tool DB Update", "Variable ".$IPS_VarID." (".$varindb['ID'].") konnte in der DB '".$dbpfad."' nicht aktualisiert werden.");
}
sqlite_close($dblink);
?>
Ich danke für die Mühe
Lieschen