Nadszedł czas na przetestowanie tego, co moduły "wzmacniające" sieć 1-wire potrafią. Zakupiłem sporą paczkę czujników i zabrałem sie do pracy. Jako że montaż czujników w obudowach łączników ściennych miałem już przećwiczony, wszystko poszło całkiem sprawnie. Oto kilka zdjęć i szczegółów...
Jakko że wszystkie skrętki z puszek na łączniki ścienne zbiegają się w jednym puntkcie, moja sieć 1-wire ma kształt nierekomendowanej gwiazdy. Oznacza to że z każdym podłączonym czunikiem spada zdolność poprawnego odczytu. Do pojedynczej 'dzurki'/magistrali DS2482-800 udało mi się podłączyć maksymalnie 11 czujników. Nie jest to wynik w żaden sposób miarodajny dla kogokolwiek - nie mam jak zmierzyć długości każdej skrętki, ani zastanawiać się nad zakłóceniami pochodzącymi z przebiegających równolegle przewodów na 230V. Ostatecznie nie jest to ważne. DS2482-800 obsłuuje 8 niezależnych kanałów. W moim module dostępne jest 6. To spory zapas....
Obecnie do mojego RPi podłączonych jest 16 szt. DS18B20 i jeden czujnik intensywności oświetlenia. Zajęte są 3 dziurki - czujnik oświetlenia, jako urządzenie zewnętrzne, podpiąłem osobno. Nadal mam duży zapas na dalszą zabawę.
Kilka słów o skryptach. W katalogu /var/www umieściłem 2 pliki:
1. sensors.csv, w którym przechowuję nazwy/opisy podłączonych czujników, i który wypełniam stopniowo, po podłączeniu każdego nowegu czujnika:
28.F471B0040000;Salon - przy oknie; 28.B2B3A1040000;Sypialnia - drzwi; 28.87E9A0040000;Salon - kominek; 28.914CA1040000;Pokój Dzieci - drzwi; ...
2. sensors.php, który można wywołać z przeglądarki:
<?php
echo "<p>Update of: ".date('Y-m-d H:i:s')."</p>";
if ($MainDir = opendir('/mnt/1wire')) {
$SensorFile = file("sensors.csv");
if (!$SensorFile) {
echo "Opening file with sensor names failed";
}
else {
foreach ($SensorFile as $line){
$SensorData = explode (";", $line);
$SensorNumbers[]=$SensorData[0];
$SensorNames[]=$SensorData[1];
}
}
echo "<ol>";
while (false !==($MainDirItem = readdir($MainDir))){
if (preg_match('/[0-9]{2}./', $MainDirItem)) {
$key = array_search($MainDirItem, $SensorNumbers);
echo "<li>";
if (false !==$key){
echo $SensorNames[$key]." : ";
}
else{
echo $MainDirItem." - no name assigned : ";
}
$TempFile = fopen("/mnt/1wire/$MainDirItem/temperature", "r");
if (!$TempFile) {
echo "...some problems with temp. file opening...";
}
else {
$Temperature = fgets($TempFile);
echo $Temperature."°C<br>";
}
echo "</li>";
}
}
echo "</ol>";
}