Hallo Leute,
ich habe einen Esera Controller 2 mit der SW18.43B und einen IButton DS 1990A am laufen. Im Config Tool3 von Esera zeigt der Ibutton sein KEY, jedoch nicht im Symcon. Das Symcon Skript legt auch autom. ein Gerät an, ich befürchte das dieses Gerät die falsche Variable hat( Integer) und nicht String, da der Key ja auch Buchstaben hat. Ich verstehe nicht wo ich im Skript etwas ändern muß, bzw. gibt es ein Workaround?
<?
$ArtNr = 11340 ;
// Zur Installation hier IP-Adresse und Port des 1-Wire Controllers eintragen:
// (nur Controller 1-Wire to Ethernet)
$IP = '192.168.2.150';
$Port = 5000;
// Zur Installation hier COM-Port eintragen:
// (nur Controller 1-Wire to RS232)
$COMPort = '';
// Hier die ID des 1-Wire Controllers eintragen:
// Diese muss mit der im Controller eingetragenen ID Übereinstimmen.
$ID_Controller =1;
// Wenn die Uhrzeit des 1-Wire Controllers täglich automatisch mit der Uhrzeit des PCs
// abgeglichen werden soll, hier TRUE eintragen, ansonsten FALSE
$AutoTime = false;
// Keep-Alive Meldungen des Controllers aktivieren:
$KeepAlive = true;
// Intervall der Keep-Alive Meldungen (möglicher Bereich 60-240 Sekunden):
$KeepAliveTime = 120;
// Typ der Datenausgabe
// OWD = Datenausgabe mit abstrahiertem Namen "OWD" (Standard)
// ID = Datenausgabe mit Seriennummer (Baustein ID)
$DataOut = "ID";
$varextend = ".exchange";
$Debug = true;
/*
Historie
*********************************************************************************
Version 1.0 15-01-2015
- Initiale Version für Controller Firmware 0.99
Version 1.01 30-01-2015
- Serielle Version des 1-Wire Controllers wird ab sofort unterstützt
Version 1.02 18-02-2015
- Unterstützung für Typ der Datenausgabe hinzugefügt.
Version 1.03 21-05-2015
- Unterstützung für Installation auf Raspberry Pi
- Fehlende Funktion: Support-Script wird zwar erstellt, funktioniert aber noch nicht.
Version 1.04 30-07-2015
- Cutter Funktion eingefügt
Version 1.05 27-10-2015
- Erstellt und getestet mit Controller Firmware 1.09 und IPS 3.4 #3778
- diverse Bugfixes
- Verhinderung Mehrfachausführung
Version 1.06 10-12-2015
- Bugfixes
- ERR wird nun als Variable angelegt
Version 1.07 05-04-2016
- Erstellt und getestet mit Controller Firmware 1.13 und IPS 4.0
- FIX: Support-Script funktioniert nun
Version 1.08 14.04.2016
- FIX: Bei Datenausgabe ID anstatt OWD werden nun korrekt Integer-Variablen angelegt.
- FIX: Beim Vorhandensein von mehreren Controllern gab es Probleme
*******************************************************************************/
// *******************************************************************************
// ab hier nichts mehr ändern !!!!
// *******************************************************************************
$Sender = $_IPS['SENDER'];
switch ($Sender){
case "RegisterVariable":
// Defaultwert für Variablenextension
$Parent = IPS_GetParent($_IPS['SELF']);
// es können mehrere Variablen in einem Stream geschickt werden aufgrund
// gleichzeitiger Ausführung des Senderscripts, daher Auftrennung der
// Datensätze
if ($Debug) IPS_LogMessage("1-Wire Controller", $_IPS['VALUE']);
$array1 = explode(chr(13), $_IPS['VALUE']); // den empfangenen String auftrennen
$array1length = count($array1);
for ($i = 0; $i < $array1length - 1; $i++ ){
$array2 = explode("|", $array1[$i]); // Feldtrenner innerhalb jedes Datensatzes ist "|"
$varname = $array2[0]; // Name der übergebenen Variable
$value = $array2[1]; // Daten der übergebenen Variable
$type = SubStr($varname,2,3); // Welcher Typ wird gesendet (OWD, KAL, EVT, INF)
if(SubStr($varname,18,1) == '_' || StrLen($varname) == 18){
$type = 'OWDID';
}
if ($type == 'ART' || $type == 'SER' || $type == 'INF' || $type == 'DEB' || $type == 'COU'){
$type = SubStr($varname,2,5); // Welcher Typ wird gesendet (ARTNO, SERNO, CONTNO, DEBUG, COUNT)
}
if ($type == 'CON'){
$type = SubStr($varname,2,6); // Welcher Typ wird gesendet (FW, HW)
}
if ($type == 'FW' || $type == 'HW'){
$type = SubStr($varname,2,2); // Welcher Typ wird gesendet (FW, HW)
}
if ($type == 'DAT' || $type == 'TIM'){
$type = SubStr($varname,2,4); // Welcher Typ wird gesendet (DATASEND, DATASENDTIME)
}
if ($type == 'DS2'){
$type = SubStr($varname,2,9); // Welcher Typ wird gesendet (DS2408INV)
}
if ($Debug) IPS_LogMessage("1-Wire Controller", "Name Variable: " . $varname);
if ($Debug) IPS_LogMessage("1-Wire Controller", "Wert: " . $value);
if ($Debug) IPS_LogMessage("1-Wire Controller", "Type: " . $type);
$VarID = @IPS_GetVariableIDByName($varname.$varextend, $Parent);
if ($Debug) IPS_LogMessage("1-Wire Controller", $VarID);
switch($type){
case 'OWD':
case 'SYS':
case 'KAL':
case 'ARTNO':
case 'CONTNO':
case 'DATA':
case 'DEBUG':
case 'COUNT':
case 'DS2408INV':
case 'ERR':
if ($Debug) IPS_LogMessage("1-Wire Controller", "OWD/KAL");
// Variable anlegen, falls nicht vorhanden
if ($VarID == FALSE){
$VarID = IPS_CreateVariable(1);
IPS_SetName($VarID,$varname.$varextend);
IPS_SetParent($VarID, $Parent);
}
SetValue($VarID , $value);
break;
case 'EVT':
case 'HW':
case 'SERNO':
case 'FW':
case 'DATE':
case 'TIME':
if ($Debug) IPS_LogMessage("1-Wire Controller", "EVT");
// Variable anlegen, falls nicht vorhanden
if ($VarID == FALSE){
$VarID = IPS_CreateVariable(3);
IPS_SetName($VarID,$varname.$varextend);
IPS_SetParent($VarID, $Parent);
}
SetValue($VarID , $value);
break;
case 'OWDID':
if ($Debug) IPS_LogMessage("1-Wire Controller", "OWDID");
// Variable anlegen, falls nicht vorhanden
if ($VarID == FALSE){
$VarID = IPS_CreateVariable(1);
IPS_SetName($VarID,$varname.$varextend);
IPS_SetParent($VarID, $Parent);
IPS_SetIdent($VarID, $varname);
}
$VarID = IPS_GetObjectIDByIdent($varname, $Parent);
SetValue($VarID , $value);
break;
default:
if ($Debug) IPS_LogMessage("1-Wire Controller", "Datensatz ist: " . SubStr($varname,2,3));
} // end switch $type
} // end for
break; // end case RegisterVariable
case "Execute":
$ControllerID = @IPS_GetObjectIDByIdent("1WireController" . $ID_Controller, 0);
if ($ControllerID != ""){
echo "1-Wire Controller mit der ID " . $ID_Controller . " ist bereits im System vorhanden!
";
echo "Dieses Script wird nur einmalig zur Installation ausgeführt.";
break;
}
// Kategorie anlegen
$ID_Category = IPS_CreateCategory();
IPS_SetName($ID_Category, "1-Wire Controller E-Service Online " . $ID_Controller);
switch($ArtNr){
case 10:
// Client Socket anlegen
$ID_ClientSocket = IPS_CreateInstance("{3CFF0FD9-E306-41DB-9B5A-9D06D38576C3}");
IPS_SetProperty($ID_ClientSocket, "Host", $IP);
IPS_SetProperty($ID_ClientSocket, "Port", $Port);
IPS_SetProperty($ID_ClientSocket, "Open", TRUE);
IPS_SetName($ID_ClientSocket, "1-Wire Controller ETH " . $ID_Controller);
IPS_SetIdent($ID_ClientSocket, "1WireController" . $ID_Controller);
IPS_ApplyChanges($ID_ClientSocket);
IPS_SLEEP(1000);
break;
case 20:
// Seriellen Port anlegen
$ID_SerialPort = IPS_CreateInstance ("{6DC3D946-0D31-450F-A8C6-C42DB8D7D4F1}");
IPS_SetProperty($ID_SerialPort, "Port", $COMPort);
IPS_SetProperty($ID_SerialPort, "BaudRate", "19200");
IPS_SetProperty($ID_SerialPort, "DataBits", "8");
IPS_SetProperty($ID_SerialPort, "StopBits", "1");
IPS_SetProperty($ID_SerialPort, "Parity", "None");
IPS_SetProperty($ID_SerialPort, "Open", 1);
IPS_SetParent($ID_SerialPort, $ID_Category);
IPS_SetName($ID_SerialPort, "1-Wire Controller Seriell " . $ID_Controller);
IPS_SetIdent($ID_SerialPort, "1WireController" . $ID_Controller);
IPS_ApplyChanges($ID_SerialPort);
break;
} // end switch $ArtNr
// ZielScript für RegisterVariable erzeugen
$ScriptName = "1-Wire-Controller.ips.php";
IPS_SetParent($_IPS['SELF'], $ID_Category);
IPS_SetName($_IPS['SELF'], "1-Wire Controller E-Service Online " . $ID_Controller);
// Cutter anlegen
$ID_CutterVariable = IPS_CreateInstance("{AC6C6E74-C797-40B3-BA82-F135D941D1A2}");
IPS_SetParent($ID_CutterVariable, $ID_Category);
IPS_SetName($ID_CutterVariable, "Cutter 1-Wire Controller " . $ID_Controller); //Namen zuweisen
IPS_SetProperty($ID_CutterVariable, "RightCutChar", chr(0x0A)); //Cutter Zeichen setzen 10 = LF
//IPS_SetProperty(51527, 'RightCutChar',chr(0x0D).chr(0x0A));
switch($ArtNr){
case 10:
IPS_ConnectInstance($ID_CutterVariable, $ID_ClientSocket); //Cutter mit Socket verbinden
break;
case 20:
IPS_ConnectInstance($ID_CutterVariable, $ID_SerialPort); //Cutter mit seriellem Port verbinden
break;
}// end Switch $ArtNr
IPS_ApplyChanges($ID_CutterVariable);
IPS_Sleep(500);
// Register Variable anlegen
$ID_RegisterVariable = IPS_CreateInstance("{F3855B3C-7CD6-47CA-97AB-E66D346C037F}");
IPS_SetParent($ID_RegisterVariable, $ID_Category);
IPS_SetName($ID_RegisterVariable, "RegisterVariable 1-Wire Controller " . $ID_Controller);
IPS_SetProperty($ID_RegisterVariable, "RXObjectID", $_IPS['SELF']);
IPS_ConnectInstance($ID_RegisterVariable, $ID_CutterVariable);
IPS_ApplyChanges($ID_RegisterVariable);
IPS_Sleep(3000);
// Script zum automatischen Stellen der Uhrzeit anlegen
$TimeScript = IPS_CreateScript(0);
$ScriptPath = $TimeScript . ".ips.php";
IPS_SetParent($TimeScript, $ID_Category);
IPS_SetName($TimeScript, "Uhrzeit 1-Wire Controller automatisch");
$Script1="<?"."
";
$Script1.="/*"."
";
$Script1.="// Uhrzeit des Eservice 1-Wire Controller automatisch stellen" ."
";
$Script1.="*/"."
";
$Script1.="RegVar_SendText(" . $ID_RegisterVariable . ", \"GET,SYS,INFO\" . chr(13));
";
$Script1.="IPS_SLEEP(1000);
";
$Script1.="\$now = time();
";
$Script1.="\$Parent = IPS_GetParent(\$_IPS['SELF']);
";
$Script1.="\$DateController = GetValue(IPS_GetVariableIDByName(\"1_DATE" . $varextend . "\", \$Parent));
";
$Script1.="\$TimeController = GetValue(IPS_GetVariableIDByName(\"1_TIME" . $varextend . "\", \$Parent));
";
$Script1.="\$Hour = SubStr(\$TimeController,0,2);
";
$Script1.="\$Minute = SubStr(\$TimeController,3,2);
";
$Script1.="\$Second = SubStr(\$TimeController,6,2);
";
$Script1.="\$TimeStampController = mktime(\$Hour, \$Minute, \$Second);
";
$Script1.="\$Difference = \$TimeStampController - \$now;
";
$Script1.="
";
$Script1.="if (\$Difference > 300 || \$Difference < 0){
";
$Script1.=" \$NewTime = date('H.i.s');
";
$Script1.=" RegVar_SendText(" . $ID_RegisterVariable . " , \"SET,SYS,TIME,\" . \$NewTime . chr(13));
";
$Script1.=" IPS_LogMessage(\"1-Wire Controller\", \"Uhrzeit 1-Wire Controller wurde angepasst. Differenz: \" . \$Difference . \" Sekunden\");
";
$Script1.="}
";
$Script1.="else{
";
$Script1.=" IPS_LogMessage(\"1-Wire Controller\", \"Uhrzeit 1-Wire Controller stimmt. Keine Änderungen vorgenommen.\");
";
$Script1.="}
";
$Script1.="
";
$Script1.="
" . "?>"."
";
$FileName = IPS_GetKernelDir()."scripts/".$TimeScript.".ips.php";
$FileHandle = fopen($FileName,"w");
fwrite($FileHandle,$Script1);
fclose($FileHandle);
IPS_SetScriptFile($TimeScript, $ScriptPath);
$Event1 = IPS_CreateEvent(1);
IPS_SetParent($Event1, $TimeScript);
IPS_SetEventCyclic($Event1, 2, 1, 0, 0, 0, 0);
IPS_SetEventCyclicTimeFrom($Event1, 5, 30, 0);
IPS_SetEventActive($Event1, $AutoTime);
// Support-Script anlegen
$SupportScript = IPS_CreateScript(0);
$ScriptPath = $SupportScript . ".ips.php";
IPS_SetParent($SupportScript, $ID_Category);
IPS_SetName($SupportScript, "Support-Informationen zusammenstellen");
$Script2="<?"."
";
$Script2.="/*"."
";
$Script2.="// Dieses Script stellt Informationen für den Support von Eservice-Online zusammen" ."
";
$Script2.="*/"."
";
$Script2.="\$Parent = " . $ID_Category . ";
";
$Script2.="RegVar_SendText(" . $ID_RegisterVariable . ", \"GET,SYS,SETTING\" . chr(13));
";
$Script2.="IPS_Sleep(3000);
";
$Script2.="RegVar_SendText(" . $ID_RegisterVariable . ", \"GET,SYS,INFO\" . chr(13));
";
$Script2.="IPS_Sleep(5000);
";
$Script2.="\$ARTNO = GetValue(IPS_GetVariableIDByName(\"" . $ID_Controller . "_ARTNO" . $varextend . "\", \$Parent));
";
$Script2.="\$CONTNO = GetValue(IPS_GetVariableIDByName(\"" . $ID_Controller . "_CONTNO" . $varextend . "\", \$Parent));
";
$Script2.="\$COUNT = GetValue(IPS_GetVariableIDByName(\"" . $ID_Controller . "_COUNT" . $varextend . "\", \$Parent));
";
$Script2.="\$DATASEND = GetValue(IPS_GetVariableIDByName(\"" . $ID_Controller . "_DATASEND" . $varextend . "\", \$Parent));
";
$Script2.="\$DATASENDTIME = GetValue(IPS_GetVariableIDByName(\"" . $ID_Controller . "_DATASENDTIME" . $varextend . "\", \$Parent));
";
$Script2.="\$DATE = GetValue(IPS_GetVariableIDByName(\"" . $ID_Controller . "_DATE" . $varextend . "\", \$Parent));
";
$Script2.="\$DEBUG = GetValue(IPS_GetVariableIDByName(\"" . $ID_Controller . "_DEBUG" . $varextend . "\", \$Parent));
";
$Script2.="\$FW = GetValue(IPS_GetVariableIDByName(\"" . $ID_Controller . "_FW" . $varextend . "\", \$Parent));
";
$Script2.="\$HW = GetValue(IPS_GetVariableIDByName(\"" . $ID_Controller . "_HW" . $varextend . "\", \$Parent));
";
$Script2.="\$KAL = GetValue(IPS_GetVariableIDByName(\"" . $ID_Controller . "_KAL" . $varextend . "\", \$Parent));
";
$Script2.="\$KALREC = GetValue(IPS_GetVariableIDByName(\"" . $ID_Controller . "_KALREC" . $varextend . "\", \$Parent));
";
$Script2.="\$KALRECTIME = GetValue(IPS_GetVariableIDByName(\"" . $ID_Controller . "_KALRECTIME" . $varextend . "\", \$Parent));
";
$Script2.="\$KALSEND = GetValue(IPS_GetVariableIDByName(\"" . $ID_Controller . "_KALSEND" . $varextend . "\", \$Parent));
";
$Script2.="\$KALSENDTIME = GetValue(IPS_GetVariableIDByName(\"" . $ID_Controller . "_KALSENDTIME" . $varextend . "\", \$Parent));
";
$Script2.="\$SERNO = GetValue(IPS_GetVariableIDByName(\"" . $ID_Controller . "_SERNO" . $varextend . "\", \$Parent));
";
$Script2.="\$TIME = GetValue(IPS_GetVariableIDByName(\"" . $ID_Controller . "_TIME" . $varextend . "\", \$Parent));
";
$Script2.="\$OWDID = GetValue(IPS_GetVariableIDByName(\"" . $ID_Controller . "_OWDID" . $varextend . "\", \$Parent));
";
$Script2.="
";
$Script2.="// Script für Support-Informationen anlegen
";
$Script2.="\$InfoScript = IPS_CreateScript(0);
";
$Script2.="\$ScriptPath = \$InfoScript . \".ips.php\";
";
$Script2.="IPS_SetParent(\$InfoScript, \$Parent);
";
$Script2.="IPS_SetName(\$InfoScript, \"Support-Informationen\");
";
$Script2.="
";
$Script2.="\$Script3=\"<?\".\"\
\";
";
$Script2.="\$Script3.=\"/*\".\"\
\";
";
$Script2.="\$Script3.=\"// Support-Informationen 1-Wire Controller\" .\"\
\";
";
$Script2.="\$Script3.=\"// Bitte senden Sie den Inhalt dieses Scriptes nach vorheriger Rücksprache an info@eservice-online.de\" .\"\
\";
";
$Script2.="\$Script3.=\"*/\".\"\
\
\";
";
$Script2.="\$Script3.=\"/*\" . \"\
\";
";
$Script2.="\$Script3.=\"Parameter des 1-Wire Controllers: \
\";
";
$Script2.="\$Script3.=\"ARTNO: \" . \$ARTNO . \"\
\";
";
$Script2.="\$Script3.=\"CONTNO: \" . \$CONTNO . \"\
\";
";
$Script2.="\$Script3.=\"COUNT: \" . \$COUNT . \"\
\";
";
$Script2.="\$Script3.=\"DATASEND: \" . \$DATASEND . \"\
\";
";
$Script2.="\$Script3.=\"DATASENDTIME: \" . \$DATASENDTIME . \"\
\";
";
$Script2.="\$Script3.=\"DATE: \" . \$DATE . \"\
\";
";
$Script2.="\$Script3.=\"DEBUG: \" . \$DEBUG . \"\
\";
";
$Script2.="\$Script3.=\"FW: \" . \$FW . \"\
\";
";
$Script2.="\$Script3.=\"HW: \" . \$HW . \"\
\";
";
$Script2.="\$Script3.=\"KAL: \" . \$KAL . \"\
\";
";
$Script2.="\$Script3.=\"KALREC: \" . \$KALREC . \"\
\";
";
$Script2.="\$Script3.=\"KALRECTIME: \" . \$KALRECTIME . \"\
\";
";
$Script2.="\$Script3.=\"KALSEND: \" . \$KALSEND . \"\
\";
";
$Script2.="\$Script3.=\"KALSENDTIME: \" . \$KALSENDTIME . \"\
\";
";
$Script2.="\$Script3.=\"SERNO: \" . \$SERNO . \"\
\";
";
$Script2.="\$Script3.=\"TIME: \" . \$TIME . \"\
\";
";
$Script2.="\$Script3.=\"OWDID: \" . \$OWDID . \"\
\";
";
$Script2.="\$Script3.=\"\
\
\";
";
$Script2.="\$Script3.=\"Dieses Script wurde erstellt am \" . date('d.m.Y') . \" um \" . date('H:i:s') . \"\
\";
";
$Script2.="\$Script3.=\"*/\";
";
$Script2.="\$Script3.=\"?>\";
";
$Script2.="\$FileName = IPS_GetKernelDir().\"scripts/\".\$InfoScript.\".ips.php\";
";
$Script2.="\$FileHandle = fopen(\$FileName,\"w\");
";
$Script2.="fwrite(\$FileHandle,\$Script3);
";
$Script2.="fclose(\$FileHandle);
";
$Script2.="IPS_SetScriptFile(\$InfoScript, \$ScriptPath);
";
$Script2.="
";
$Script2.="
" . "?>"."
";
$FileName = IPS_GetKernelDir()."scripts/".$SupportScript.".ips.php";
$FileHandle = fopen($FileName,"w");
fwrite($FileHandle,$Script2);
fclose($FileHandle);
IPS_SetScriptFile($SupportScript, $ScriptPath);
// Keep-Alive Meldungen konfigurieren
if ($KeepAlive){
RegVar_SendText($ID_RegisterVariable, "GET,SYS,KALSEND,1" . chr(13));
IPS_SLEEP(1000);
RegVar_SendText($ID_RegisterVariable, "GET,SYS,KALSENDTIME, $KeepAliveTime" . chr(13));
IPS_SLEEP(1000);
}
// Typ der Datenausgabe konfigurieren
switch ($DataOut){
case 'OWD':
RegVar_SendText($ID_RegisterVariable, "SET,OWB,OWDID,0" . chr(13));
break;
case 'ID':
RegVar_SendText($ID_RegisterVariable, "SET,OWB,OWDID,1" . chr(13));
break;
} // end switch $DataOut
// INFO und SETTING abfragen
RegVar_SendText($ID_RegisterVariable, "GET,SYS,SETTING" . chr(13));
IPS_SLEEP(1000);
RegVar_SendText($ID_RegisterVariable, "GET,SYS,INFO" . chr(13));
IPS_SLEEP(1000);
// gefundene 1-Wire Bauteile speichern
RegVar_SendText($ID_RegisterVariable, "SET,OWB,SAVE" . chr(13));
break; // end case Execute
} // end switch $Sender
?>
Wäre cool wenn mir jemand helfen könnte.
LG Izack