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>"; }