Hey Peter,
vielleicht hilft Dir das auch weiter. Habe das wie folgt gelöst…
// 1-Wire-Schnittstelle
// von Silberstreifen
// V2.1 vom 21.12.2014
// Anpassung auf Firmware 1.00
//________________________________________________________________
//----------------------------------------------------------------
// Variablen festlegen
//----------------------------------------------------------------
$Parent = IPS_GetParent($_IPS['SELF']);
if (!@IPS_GetObjectIDByName("Ersatz", $Parent)){
$variableid = IPS_CreateVariable(3);
IPS_SetName($variableid, "Ersatz");
IPS_SetParent($variableid, $Parent);
}
$Ersatz_ID = IPS_GetObjectIDByName("Ersatz", $Parent);
//----------------------------------------------------------------
// Auswertung
//----------------------------------------------------------------
$daten = explode (";", $_IPS['VALUE']);
$Adress = explode ("|", $daten[0])[0];
//----------------------------------------------------------------
// Neue Zuordnung erstellen
//----------------------------------------------------------------
if ($Adress == "1_READY"){
IPS_Sleep(2000);
RegVar_SendText($Parent, "SET,SYS,DATA,0\r");
IPS_Sleep(2000);
RegVar_SendText($Parent, "GET,OWB,LIST0\r");
return;
}
//----------------------------------------------------------------
// Neue Zuordnung erstellen
//----------------------------------------------------------------
if ($Adress == "1_LST0"){
//----------------------------------------------------------------
// Auswertung
//----------------------------------------------------------------
$Ergebnis = explode ("1_EVT", $_IPS['VALUE']);
$Ergebnis = explode ("1_", $Ergebnis[0]);
while (list ($key, $val) = each ($Ergebnis) ){
$data = explode ("|", $val);
if(substr($data[0],0,3)=="OWD"){
$Adresse = "1_".$data[0];
$ID = $data[1];
$find[] = $Adresse;
$replace[] = $ID;
}
}
//----------------------------------------------------------------
// Speichern
//----------------------------------------------------------------
$find = implode (",", $find);
$replace = implode (",", $replace);
SetValueString($Ersatz_ID, "$find;$replace");
return;
}
//----------------------------------------------------------------
// Zuordnung holen
//----------------------------------------------------------------
$Ersatz = explode (";", GetValueString($Ersatz_ID));
$find = explode (",",$Ersatz[0]);
$repl = explode (",",$Ersatz[1]);
//----------------------------------------------------------------
// Werte den IDs zuordnen
//----------------------------------------------------------------
while (list ($key, $data) = each ($daten) ){
$Ergebnis = explode ("|", $data);
if (count($Ergebnis) >1){
$Adress = $Ergebnis[0];
$Result = $Ergebnis[1];
//----------------------------------------------------------------
// Ergebnis fehlerhaft
//----------------------------------------------------------------
if ($Result == "22222"){
RegVar_SendText($Parent, "SET,SYS,RST,1\r");
return;
}
switch (substr($Adress, 0, 5)) {
case "1_OWD":
//----------------------------------------------------------------
// Adresse nicht bekannt
//----------------------------------------------------------------
if ($Adress == str_replace ($find, $repl, $Adress)){
RegVar_SendText($Parent, "SET,SYS,RST,1\r");
return;
}
$Adress = str_replace ($find, $repl, $Adress);
case "1_EVT":
if (!@IPS_GetObjectIDByName($Adress, $Parent)){
$variableid = IPS_CreateVariable(3);
IPS_SetName($variableid, $Adress);
IPS_SetParent($variableid, $Parent);
}
//----------------------------------------------------------------
// Werte schreiben
//----------------------------------------------------------------
SetValueString(IPS_GetObjectIDByName($Adress, $Parent), $Result);
break;
default:
break;
}
}
}
Das Script dann von der Registervariablen mit dem UDP-Socket als übergeordneter Instanz aufrufen lassen. Jetzt musst Du nur noch den Controller einmal vom Strom abziehen und wieder anstecken. Damit wird die Initialisierung ausgeführt.
Viel Spass damit
Silberstreifen
[21.12.14, 17:16] Script überarbeitet. Änderungen im 1-wire-Netz werden jetzt erkannt.
[24.13.14, 13:46] Script an Firmware V1.00 angepasst.