Ich hab in der kurzen Freizeit mal angefangen, mein Heizungsraum mit 1Wire Sensoren auszustatten.
Randbedingung:
- KEIN LAN vorhanden -> WLAN nötig
- 1-Wire Sensoren sollen angeschlossen werden (ca. 30 - 40 Stück)
30 - 40 Stück Tempsensoren (für FBH, VL, RL, Speichertemp, Puffertemp, usw.)
1x Eservice Luftgütesensor - CanBus soll angeschlossen werden können
Stiebel Eltron WPL 13 Cool vorhanden
(Original CoCo PC / Gatewaylösung unverschämt teuer)
Auslesen der WErte nun mit Abfrageskripten von juerg54.ch - die gesamte Lösung soll in ein kleines Hutschienengehäuse passen
- Stromverbrauch minimal
-> Lösung:
Raspberry PI B+ im Hutschienengehäuse
1 Wire Stromverteiler (von eservice)
1 Wire DS9490r in Verbindung mit Stromverteiler (war noch übrig)
CanberryPi V2 Steckkarte mit Raspi (industrialberry.com)
Die Verbindung vom 1 Wire Stromverteiler erfolgt per RJ45 Patchkabel bis zu den Sensoren hin, dort habe ich den RJ45 Stecker abgeknipst und den ersten Stecker aufgelötet.
Dabei habe ich immer zwei Adernpaare zusammen genommen!.
Die TempSensoren selbst habe ich auf eine Platine gelötet, samt steckbarer Leiste, Stützkondensator 100nF.
Die Sensoren sind per Kabelbinder an das Fussbodenheizungsrohr angeklemmt
Die Abfrage der 1 Wire Sensoren erfolgt auf dem Raspi.
D.h. dort ist OWFS installiert + IPS.
Mit folgendem Skript frage ich zyklisch die Temp-werte ab, trage Sie in IPS ein.
Mein Windows IPS kann die Daten dann vom Raspi IPS abrufen,
Bin natürlich bei weitem noch nicht fertig.
Es fehlen noch viele weitere Temp-Sensoren… aber das kommt so Stück für Stück nach.
Die Montageplatte mit der Hutschiene muss noch in das Gehäuse rein…
Sieht noch ein wenig durcheinander aus… Mir war es aber wichtig, dass alles aufgeräumt an einer Stelle ist.
Hier ein paar Bilder:
Hier das Skript zur Anlage der Tempsensoren Kategorien + Werte auf dem Raspi IPS:
(ist hier aus dem Forum) - leicht angepasst, dass meine Sensoren mit der ID „28“ beginnen.
if ($handle = opendir('/mnt/1wire'))
{
// Verzeichnis durchlaufen
while (false !== ($file = readdir($handle)))
{
If ((strlen($file) == 15) and (substr($file, 2, 1) == "."))
{
// Basiskategorie anlegen
$CatID = CreateCategoryByName(0, "1-Wire");
If (substr($file, 0, 2) == "28")
{
$uCatID = CreateCategoryByName($CatID, "DS18B20 - ".$file);
$varid = CreateVariableByName($uCatID, "address", 3);
SetValueString($varid, exec("cat /mnt/1wire/$file/address"));
$varid = CreateVariableByName($uCatID, "type", 3);
SetValueString($varid, exec("cat /mnt/1wire/$file/type"));
$varid = CreateVariableByName($uCatID, "temperature", 2, "~Temperature");
SetValueFloat($varid, (float)exec("cat /mnt/1wire/uncached/$file/temperature"));
$varid = CreateVariableByName($uCatID, "alias", 3);
SetValueString($varid, exec("cat /mnt/1wire/$file/alias"));
}
elseif (substr($file, 0, 2) == "81")
{
$uCatID = CreateCategoryByName($CatID, "DS1420 - ".$file);
$varid = CreateVariableByName($uCatID, "address", 3);
SetValueString($varid, exec("cat /mnt/1wire/$file/address"));
$varid = CreateVariableByName($uCatID, "type", 3);
SetValueString($varid, exec("cat /mnt/1wire/$file/type"));
$varid = CreateVariableByName($uCatID, "alias", 3);
SetValueString($varid, exec("cat /mnt/1wire/$file/alias"));
}
elseif (substr($file, 0, 2) == "3A")
{
$uCatID = CreateCategoryByName($CatID, "DS2413 - ".$file);
$varid = CreateVariableByName($uCatID, "address", 3);
SetValueString($varid, exec("cat /mnt/1wire/$file/address"));
$varid = CreateVariableByName($uCatID, "type", 3);
SetValueString($varid, exec("cat /mnt/1wire/$file/type"));
$varid = CreateVariableByName($uCatID, "alias", 3);
SetValueString($varid, exec("cat /mnt/1wire/$file/alias"));
$varid = CreateVariableByName($uCatID, "PIO.A", 0);
SetValueBoolean($varid, IdentTrueFalse(exec("cat /mnt/1wire/uncached/$file/PIO.A")));
$varid = CreateVariableByName($varid, "use_PIO.A", 0);
$varid = CreateVariableByName($uCatID, "PIO.B", 0);
SetValueBoolean($varid, IdentTrueFalse(exec("cat /mnt/1wire/uncached/$file/PIO.B")));
$varid = CreateVariableByName($varid, "use_PIO.B", 0);
$varid = CreateVariableByName($uCatID, "sensed.A", 0);
SetValueBoolean($varid, IdentTrueFalse(exec("cat /mnt/1wire/uncached/$file/sensed.A")));
$varid = CreateVariableByName($varid, "use_sensed.A", 0);
$varid = CreateVariableByName($uCatID, "sensed.B", 0);
SetValueBoolean($varid, IdentTrueFalse(exec("cat /mnt/1wire/uncached/$file/sensed.B")));
$varid = CreateVariableByName($varid, "use_sensed.B", 0);
}
elseif (substr($file, 0, 2) == "26")
{
$uCatID = CreateCategoryByName($CatID, "DS2438 - ".$file);
$varid = CreateVariableByName($uCatID, "address", 3);
SetValueString($varid, exec("cat /mnt/1wire/$file/address"));
$varid = CreateVariableByName($uCatID, "type", 3);
SetValueString($varid, exec("cat /mnt/1wire/$file/type"));
$varid = CreateVariableByName($uCatID, "temperature", 2, "~Temperature");
SetValueFloat($varid, (float)exec("cat /mnt/1wire/uncached/$file/temperature"));
$varid = CreateVariableByName($uCatID, "VAD", 2);
SetValueFloat($varid, (float)exec("cat /mnt/1wire/uncached/$file/VAD"));
$varid = CreateVariableByName($varid, "use_VAD", 0);
$varid = CreateVariableByName($uCatID, "VDD", 2);
SetValueFloat($varid, (float)exec("cat /mnt/1wire/uncached/$file/VDD"));
$varid = CreateVariableByName($varid, "use_VDD", 0);
$varid = CreateVariableByName($uCatID, "alias", 3);
SetValueString($varid, exec("cat /mnt/1wire/$file/alias"));
}
}
}
closedir($handle);
}
return;
function CreateVariableByName($fatid, $name, $type, $profile = "")
{
$vid = @IPS_GetVariableIDByName($name, $fatid);
if($vid === false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $fatid);
IPS_SetName($vid, $name);
if($profile !== "")
{
IPS_SetVariableCustomProfile($vid, $profile);
}
}
return $vid;
}
function CreateCategoryByName($fatid, $name)
{
$CatID = @IPS_GetCategoryIDByName($name, $fatid);
if($CatID === false)
{
$CatID = IPS_CreateCategory(); // Kategorie anlegen
IPS_SetName($CatID, $name); // Kategorie benennen
IPS_SetParent($CatID, $fatid);
}
return $CatID;
}
function IdentTrueFalse($Value)
{
if($Value == "0")
{
$result = false;
}
else
{
$result = true;
}
return $result;
}
Die Einrichtung von OWFS / OWHTTP… habe ich wie hier beschrieben vorgenommen:
https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=27379