Das ist ein Skript, vergleichbar mit meinem, welches die Fehler auslöst:
<?
/******************************************************************************1-Wire Hub, Auswerteskriptwww.eservice-online.de*******************************************************************************
Dieses Skript dient dazu die Spannungs- und Stromüberwachung für das1-Wire-Hub Modul von E-Service (eservice-online.de) weitgehenst automatischin IPS-Symcon einzurichten.
Erstellt von E-Service Online (http://www.eservice-online.de)Version 1.5, 14-08-2013, geändert von andrge
Nachfolgende fünf Schritte müßen Sie von Hand ausführen: Schritt 1: Kategorie für den 1-Wire-Hub anlegen. Name nach eigenen Wünschen
Schritt 2: Ein neues Skript unterhalb der Kategorie (aus Schritt 1) erstellen. Name nach eigenen Wünschen
Schritt 3: Eine Instanz für den DS2450 unterhalb dieser Kategorie (aus Schritt 1) anlegen.
!!! Wichtig !!! Der Name muß lauten: 1-Wire-Hub (case sensitive) andernfalls ist der Name in Zeile 67 zu ändern.
Schritt 4: Auswahl der 1-Wire Hub Version in Zeile 48: Die Version finden Sie auf dem Typenschild. Version 1 ist bis Mitte 2013, Version 2 ab ca. 6-2013 verfügbar. Angabe zur Version finden Sie auf dem Typenschild.
Schritt 5: Skript 1x per "Ausführen" starten
FERTIG !!!!!!!!
Ab jetzt wird das Skript bei einer Änderung der Variable 12V Strom (Port 0)getriggert.
*******************************************************************************///Auswahl der 1-Wire Hub Version$version = 2 ; //1 = 1-Wire Hub bis V1, 2 = 1-Wire Hub II V2 (ab 6-2013)
// Debug-Modus an=true / aus=false$debug = false;
$offset_Strom_5V = 20; // ist der Nullwertfehler für 5V Strom den der AD-Wandler ohne Last ausgibt$offset_Strom_12V = 20; // ist der Nullwertfehler für 12V Strom den der AD-Wandler ohne Last ausgibt
/********************************************************************************Ab hier nichts mehr ändern !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!********************************************************************************/
// Übergeordnete Kategorie ermitteln$parentID = IPS_GetObject($IPS_SELF);$parentID = $parentID['ParentID'];
// Manuelle Definition evtl. IDs$DS2450 = IPS_GetInstanceIDByName ( '1-Wire-Hub', $parentID ); //Name geändert!!
// Variablen zur Skriptverarbeitung einlesen und intern verfügbar machen$DS2450_Port0 = IPS_GetStatusVariableID($DS2450, "F20_Var0");$DS2450_Port1 = IPS_GetStatusVariableID($DS2450, "F20_Var1");$DS2450_Port2 = IPS_GetStatusVariableID($DS2450, "F20_Var2");$DS2450_Port3 = IPS_GetStatusVariableID($DS2450, "F20_Var3");if($debug) {echo $DS2450_Port0."
";}if($debug) {echo $DS2450_Port1."
";}if($debug) {echo $DS2450_Port2."
";}if($debug) {echo $DS2450_Port3."
";}
// Inhalt des benötigten Actionsskripts in Variable ablegen$actionScript = "<?if(\$IPS_SENDER == 'WebFront') { SetValue(\$IPS_VARIABLE, \$IPS_VALUE);}?>";
// ***************** Start Erstinitialisierung *********************************if($IPS_SENDER == "Execute") { // nur wenn bei "Ausführen" // Variablenprofil für Spannung anlegen if(!IPS_VariableProfileExists('Busspannung')) { IPS_CreateVariableProfile ('Busspannung',2); IPS_SetVariableProfileText('Busspannung','','V'); IPS_SetVariableProfileIcon ('Busspannung', 'Graph'); IPS_SetVariableProfileDigits('Busspannung', 2); if($debug) { echo "Variablenprofil angelegt
"; } } else { if($debug) {echo "Variableprofil Busspannung besteht bereits
"; } }
// Variablenprofil für Strom anlegen if(!IPS_VariableProfileExists('Busstrom')) { IPS_CreateVariableProfile ('Busstrom',2); IPS_SetVariableProfileText('Busstrom','','mA'); IPS_SetVariableProfileIcon ('Busstrom', 'Graph'); IPS_SetVariableProfileDigits('Busstrom', 1); if($debug) { echo "Variablenprofil angelegt
"; } } else { if($debug) {echo "Variableprofil Busstrom besteht bereits
"; } }
// Variablenprofil für Leistung anlegen if(!IPS_VariableProfileExists('Leistung-Summe')) { IPS_CreateVariableProfile ('Leistung-Summe',2); IPS_SetVariableProfileText('Leistung-Summe','','W'); IPS_SetVariableProfileIcon ('Leistung-Summe', 'Graph'); IPS_SetVariableProfileDigits('Leistung-Summe', 2); if($debug) {echo "Variablenprofil angelegt
";} } else { if($debug) {echo "Variableprofil Leistung-Summe besteht bereits
"; } }
// Skript verstecken IPS_SetHidden($IPS_SELF, true); IPS_SetPosition($IPS_SELF, 99);
// Actionskript erzeugen (siehe function) $ScriptID = CreateScriptByName("Aktionskript 1-Wire-Hub", $parentID, $actionScript); if($debug) { echo "Actionskript angelegt
"; }
// Variablen des DS2450 umbennen IPS_SetName($DS2450_Port0, "12V Strom, Status Port 0"); IPS_SetPosition($DS2450_Port0, 1); IPS_SetName($DS2450_Port1, "12V Spannung, Status Port 1"); IPS_SetPosition($DS2450_Port1, 2); IPS_SetName($DS2450_Port2, "5V Strom, Status Port 2"); IPS_SetPosition($DS2450_Port2, 3); IPS_SetName($DS2450_Port3, "5V Spannung, Status Port 3"); IPS_SetPosition($DS2450_Port3, 4); if($debug) { echo "DS2450 Variablen umbenannt
"; }
// DS2450 programmieren TMEX_SetF20Voltage($DS2450, 0, true); TMEX_SetF20PortType($DS2450, 0, true); TMEX_SetF20Resolution($DS2450, 0, 12);
TMEX_SetF20Voltage($DS2450, 1, true); TMEX_SetF20PortType($DS2450, 1, true); TMEX_SetF20Resolution($DS2450, 1, 12);
TMEX_SetF20Voltage($DS2450, 2, true); TMEX_SetF20PortType($DS2450, 2, true); TMEX_SetF20Resolution($DS2450, 2, 12);
TMEX_SetF20Voltage($DS2450, 3, true); TMEX_SetF20PortType($DS2450, 3, true); TMEX_SetF20Resolution($DS2450, 3, 12);
TMEX_SetInterval($DS2450, 5); if($debug) { echo "DS2450 Instanz programmiert
"; }
// Ereignis für Skript erstellen falls nicht vorhanden $EreignisID = @IPS_GetEventIDByName("Port0", $IPS_SELF); if ($EreignisID == 0) { $eid = IPS_CreateEvent(0); // Ausgelöstes Ereignis IPS_SetEventTrigger($eid, 0, $DS2450_Port0); // Bei Änderung von Variable IPS_SetParent($eid, $IPS_SELF); // Ereignis zuordnen IPS_SetName($eid, "Port0"); // Ereignis umbennen IPS_SetEventActive($eid, true); // Ereignis aktivieren } else { if($debug) {echo "Ereignis bereits erstellt"; } }
}// ****************** Ende Erstinitialisierung *********************************
// ******************* Start Berechnung ****************************************
// Variablen IDs zuweisen und gegebenenfalls anlegen$Spannung_OK = CreateVariableByName($parentID, "Busspannung OK", "OK");$Leistung_OK = CreateVariableByName($parentID, "Ueberlast", "OK");$Busspannung_5V = CreateVariableByName($parentID, "5V Busspannung", "Volt");$Busspannung_12V = CreateVariableByName($parentID, "12V Busspannung", "Volt");$Busstrom_5V = CreateVariableByName($parentID, "5V Strom", "mA");$Busstrom_12V = CreateVariableByName($parentID, "12V Strom", "mA");$Leistung_Summe = CreateVariableByName($parentID, "Leistung-Summe", "W");
// Grenzwerte für Gut-Erkennung$Grenzwert_5V = 4.50;$Grenzwert_12V = 11.5;
//Berechung Busspannungen//******************************************************************if ($version == 1) {$bereich = 5.12 ; }if ($version == 2) {$bereich = 5.0 ; }
// 5V Spannung Berechnung$Bus_5V_Wert = (($bereich / 4096) * 1.11) * GetValue($DS2450_Port3);// 12V Spannung Berechnung$Bus_12V_Wert = (($bereich/ 4096) * 2.63) * GetValue($DS2450_Port1);
// Errechneten Werte in Variable schreibenSetValue($Busspannung_5V, $Bus_5V_Wert);SetValue($Busspannung_12V, $Bus_12V_Wert);
//Stromberechung//******************************************************************$widerstand = 49; // ermittelter Faktor für 0,22 Ohm Shunt
//Ermittelter Faktor 5V und 0,22 Ohm Shunt$Busstrom_5V_1 = ($bereich / 4096) * (GetValue($DS2450_Port2) - $offset_Strom_5V) * $widerstand;//Ermittelter Faktor 12V und 0,22 Ohm Shunt$Busstrom_12V_1 = ($bereich / 4096) * (GetValue($DS2450_Port0) - $offset_Strom_12V) * $widerstand;
// Errechnete Werte in Variablen speichernSetValue($Busstrom_5V, $Busstrom_5V_1);SetValue($Busstrom_12V, $Busstrom_12V_1);
//Leisung Summenberechung//******************************************************************$Leistung = (($Busstrom_12V_1 * 0.001)* $Bus_12V_Wert) + (($Busstrom_5V_1 * 0.001) * $Bus_5V_Wert);SetValue($Leistung_Summe, $Leistung);
//Ueberlasterkennungif ($Leistung > 4.5) { SetValue($Leistung_OK, false); if($debug) { echo "Leistungsaufnahme ist kleiner 4,5W.
"; } //Ausgabe }else { SetValueBoolean($Leistung_OK, true); if($debug) { echo "Ueberlastung !!
"; } //Ausgabe }
//Ausgabe Status der Busüberwachung//******************************************************************if (($Bus_5V_Wert <= $Grenzwert_5V) or ($Bus_12V_Wert <= $Grenzwert_12V)) { SetValue($Spannung_OK, false); if($debug) { echo "Busspannung ist o.k.
"; } //Ausgabe }else { SetValueBoolean($Spannung_OK, true); if($debug) { echo "Busspannung ausserhalb des erlaubten Bereichs!!
"; } //Ausgabe }// Ende Berechnung// ****************************************************************************
// Funktionen// Variablen erstellen falls nicht vorhanden und ID entsprechend zuordnen// erstellt von IP-Symcon, angepasst von bbernhard und wgreiplfunction CreateVariableByName($id, $name, $type) { global $IPS_SELF; global $ScriptID; $vid = @IPS_GetVariableIDByName($name, $id); if($vid === false) { $vartype = 1; if ($type == 'Volt') $vartype = 2; if ($type == 'mA') $vartype = 2; if ($type == 'W') $vartype = 2; if ($type == 'OK') $vartype = 0;
$vid = IPS_CreateVariable($vartype); IPS_SetParent($vid, $id); IPS_SetName($vid, $name); IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
if ($type == 'Volt') { IPS_SetVariableCustomProfile ($vid, "Busspannung"); IPS_SetPosition($vid, 10); } if ($type == 'mA') { IPS_SetVariableCustomProfile ($vid, "Busstrom"); IPS_SetPosition($vid, 20); } if ($type == 'W') { IPS_SetVariableCustomProfile ($vid, "Leistung-Summe"); IPS_SetPosition($vid, 30); } if ($type == 'Ueberlast') { IPS_SetVariableCustomProfile ($vid, "~Alert.Reversed"); IPS_SetVariableCustomAction($vid, $ScriptID); IPS_SetPosition($vid, 5); } if ($type == 'OK') { IPS_SetVariableCustomProfile ($vid, "~Alert.Reversed"); IPS_SetVariableCustomAction($vid, $ScriptID); IPS_SetPosition($vid, 5); }
}return $vid;}
// Eine Function um ein Script im Script-Verzeichnis zu erzeugen// erstellt von hirschbrat, angepasst wgreiplfunction CreateScriptByName($ScriptNAME, $ParentID, $ScriptTEXT) { global $IPS_SELF; $ScriptID = @IPS_GetScriptIDByName($ScriptNAME, $ParentID); if ($ScriptID == 0){ $ScriptID = IPS_CreateScript(0); IPS_SetName($ScriptID, $ScriptNAME); IPS_SetParent($ScriptID, $ParentID); IPS_SetInfo($ScriptID, "This script was created by: #$IPS_SELF#"); $fh = fopen(IPS_GetKernelDir()."scripts\\".$ScriptID.".ips.php", 'w') or die("can't open file"); fwrite($fh, $ScriptTEXT); fclose($fh); $ScriptPath = $ScriptID.".ips.php"; //Skriptdatei IPS_SetScriptFile($ScriptID, $ScriptPath); IPS_SetHidden($ScriptID, true); IPS_SetPosition($ScriptID, 98); // echo "Die Skript-ID lautet: ". $ScriptID; }return $ScriptID;}
?>
EDIT: Habe jetzt mehrfach versucht, den Code halbwegs lesbar einzupasten, aber irgendwie erscheint der ohne vernünftige CRLFs. Sorry für die Lesbarkeit.