Guten Abend,
da ich per PM darauf angesprochen wurde wie ich meinen OW-Server eingebunden habe möchte ich das hier gerne kurz beschreiben. Vielleicht ist das auch noch für andere interessant…
Mein 1-Wire Server hängt über WLAN in meinem Netz, ist also über seine IP-Adresse zu erreichen (Hinweise zur Einbindung gibt die Anleitung).
Die Sensoren werden automatisch vom Server zyklisch abgefragt, die gemessenen Daten werden über eine HTML Seite angezeigt, oder auf Anfrage als XML Datei übertragen. Über diese XML Datei greife ich mit einem Skript zu.
Bei mir ist der Server unter http://192.168.2.11/ zu erreichen.
Die Hardware-IDs der Sensoren sind im Quelltext hinterlegt, so dass die gemessenen Temperaturen in die einzelnen Variablen geschrieben werden können.
An dem Code-Style hab ich mich nicht verbraucht, sieht ja keiner ausser mir
<?php
$start = microtime(true);
$ctx = stream_context_create(array(
'http' => array(
'timeout' => 25
)
)
);
$xmlstr = @file_get_contents("http://192.168.2.11/details.xml",0,$ctx);
if (false == $xmlstr ) {
SetValueFloat(49321 /*[Hardware\OW Server\LoopTime]*/, 0.0);
SetValueInteger(17512 /*[Hardware\OW Server\Anzahl Sensoren]*/, 0);
return;
}
$xml = new SimpleXMLElement($xmlstr);
/*
echo $xml->DevicesConnected, " Sensoren angeschlossen
";
echo $xml->LoopTime, " s Looptime
";
echo "Sensor ID : ", $xml->owd_DS18B20[0]->ROMId, "
" ;
echo "Temperatur : ", $xml->owd_DS18B20[0]->Temperature, "
" ;
echo "Health : " ,$xml->owd_DS18B20[0]->Health, "
" ;
echo "
";
echo "Sensor ID : ", $xml->owd_DS18B20[1]->ROMId, "
" ;
echo "Temperatur : ", $xml->owd_DS18B20[1]->Temperature, "
" ;
echo "Health : " ,$xml->owd_DS18B20[1]->Health, "
" ;
*/
// Zuordnung der ROMId zur Messtelle
SetValueFloat(49321 /*[Hardware\OW Server\LoopTime]*/, (float)$xml->LoopTime);
SetValueInteger(17512 /*[Hardware\OW Server\Anzahl Sensoren]*/, (int)$xml->DevicesConnected);
SetValueString(28596 /*[Hardware\OW Server\lastConnect]*/,date(DATE_RFC822));
// Zuordnung der Sensor IDs zu meinen Variablen IDs
//HK1
$table["4B0000039BEB0228"] = 25380 /*[Hardware\OW Server\Heizkreis 1\Vorlauf]*/;
$table["0D0000039BDCA828"] = 47404 /*[Hardware\OW Server\Heizkreis 1\Rücklauf]*/;
//HK2
$table["990000039BE3B728"] = 44598 /*[Hardware\OW Server\Heizkreis 2\Vorlauf]*/;
$table["5C0000039BF27228"] = 34608 /*[Hardware\OW Server\Heizkreis 2\Rücklauf]*/;
//HK3
$table["E30000039BE13928"] = 30245 /*[Hardware\OW Server\Heizkreis 3\Vorlauf]*/;
$table["3A0000039BE6D128"] = 51696 /*[Hardware\OW Server\Heizkreis 3\Rücklauf]*/;
//Atelier
$table["960000039BE63628"] = 13248 /*[Hardware\OW Server\Atellier\Vorlauf]*/;
$table["DD0000039BF63728"] = 52213 /*[Hardware\OW Server\Atellier\Rücklauf]*/;
//FBH Küche
$table["9D0000039BD54528"] = 44856 /*[Hardware\OW Server\FBH Küche\Rücklauf]*/;
$table["510000039BE67028"] = 13403 /*[Hardware\OW Server\FBH Küche\Vorlauf]*/;
// die sieht der OW-Server gerade
$anzahlSensoren = $xml->DevicesConnected;
// alle Sensoren durchgehen und auswerten
foreach ($xml->owd_DS18B20 as $sensor) {
$theSensorID = $sensor->ROMId;
$theVarID = $table["$theSensorID"];
$theValue = (float) $sensor->Temperature;
// echo $theSensorID, " in " , $theVarID, " Wert: ", $theValue , "
" ;
SetValueFloat( $theVarID , $theValue);
}
$finish = microtime(true);
SetValueFloat(37044 /*[Hardware\OW Server\Laufzeit Script]*/,1000*($finish-$start));
?>
Das Skript wird zyklisch ausgeführt, bei mir alle 30 Sekunden, da einmal alle Sensoren abfragen durch den OW-Server 10 Sekunden dauert macht das Sinn, belastet IPS so gut wie garnicht, das Skript läuft incl. XML-Transfer 260ms.
Bei Nachfragen: gerne !
Gruß, Flipper