OW Server

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 :slight_smile:


<?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

Vielen Dank für das Skript, werde das mal testen.

Oliver

Um welche Hardware geht es hier?
Gruß Jens

Um diese 1-Wire server
http://www.embeddeddatasystems.com/OW-SERVER-1-Wire-to-Ethernet-Server-Revision-2_p_152.html

Oli

So
habe das Skript auf meine Anforderungen angepasst, und es läuft reibungslos. Vielen Dank nochmal

oliver

Na, das freut mich !

Viel Spaß !

Flipper

Ich muss das mal wieder ausgraben :wink:

Das Script bietet die Möglichkeit zum Auslesen der angeschlossenen Sensoren. Wie ist das aber, wenn man z.b. einen DS2408 schalten möchte, also nicht lesen sondern senden will ?
Unterstützt das der OW-Server-Enet ?

Gruß
Jens

schreiben auf den OW-Server ist schon möglich. Hierfür gibt eine Java Anwendung (OpenSource)

http://short.eds.bz/writer-ow-count

müsste man dann halt auf php umsetzen.

Oliver

Geht auch per Http-Befehl

OK , Danke für den Hinweis.
Kannst Du mal ein Beispiel posten.

Danke

Oli

Siehe Anleitung

Writing Data to 1-Wire Devices
To write data to a connected 1-Wire device that supports control commands simply make a request of devices.htm with the appropriate URL parameters. Below is an example:
devices.htm?rom=4300000200AD1928&variable=UserByte1&value=75
The URL parameters in the example are as follows:
• rom—the ROM ID of the device to modify, alpha characters must be upper case
• variable—the name of the variable to modify. The name is the same as the XML field
name, only XML fields with attributes of ‘Writable=”True”’ may be written, (e.g., <UserByte…)
• value—the new decimal value to write to the 1-Wire device