OneWire am Raspi in IPS einlesen

Hallo,

ich habe meinen Raspi über 1Wire mit 7xDS18S20 Temperatursensoren ausgestattet.

Zunächst habe ich das Verzeichnis /sys/devices/w1_bus_master1, in welchem der Raspi für jeden Sensor ein Verzeichnis mit dem Namen der ID anlegt, per Samba freigegeben.

In IPS habe ich für jeden Sensor eine Variable vom Typ FLOAT angelegt. Nun wurde das folgende Skript erstellt:

<?
$sensor=array("10-000802c68308","10-000802c664ba","10-000802c67237","10-000802c6602d","10-000802c675ad","10-000802c65e06","10-000802c67cdd");
$ips_variable=array("31090","35496","26455","42776","44667","13409","52989");

for($i = 0; $i < 7; $i++)
   {
   einlesen:
	$sensorpfad = "//NamedesRaspis/NamederFreigabe/".$sensor[$i]."/w1_slave";
	$sensorrohdaten = implode('', file($sensorpfad));
	if (strpos($sensorrohdaten, "YES")==false) goto einlesen;
	$sensorwert = substr($sensorrohdaten, strpos($sensorrohdaten, "t=") + 2);
	$temperatur = floatval(sprintf("%2.2f", $sensorwert / 1000));
	SetValueFloat(intval($ips_variable[$i]), $temperatur);
     }
?>

Hier werden zunächst Arrays mit den Sensor- und Variablen-ID’s definiert. Anschließend liest das Skript für jeden der Sensoren (in meinem Fall 7 Stück) den Wert aus und schreibt ihn in die jeweilige IPS-Variable.

Im Loop wird überprüft, ob die CRC-Prüfung des Temperatursensors ein ‚YES‘ ergeben hat - ansonsten wird neu ausgelesen.

Das Skript wird nun z. B. jede Viertelstunde aufgerufen und scheibt bei aktiviertem Datenlogging wunderschöne Graphen :slight_smile:

Moin…

… hast Du die Sensoren per GPIO’s oder einem Busmaster angeschlossen? Hast Du OWFS installiert?
Läuft deine Lösung stabil?

Gruß,
Peter