Při načítání teploty z DS18B20 připojeného přímo na 1-wire sběrnici RPi jsem se setkal s velkou nespolehlivostí -- teploty skákaly, čidla se občas ztratila a tak. Měl jsem připojená čtyři čidla dohromady na cca 6m drátu a bylo to dost hraniční. Nakonec jsem vytvořil dost obskurní skript v AWK, který nejen, že kontroluje CRC, ale i rozsah teplot a načítá opakovaně. Zjistil jsem totiž, že se občas stalo, že v souboru bylo napsáno, že kontrolní součet sedí, ale očividně se lišily a teploty skákaly o cca 8°C proti skutečnosti. Takže se vyplatí kontrolovat i ten součet.
Výsledek je ten, že jsem si pořídil převodník i2c na 1-wire, čidla pripojuji na něj a teploty vyčítám přes owfs. Je to spolehlivější, pokud potřebuješ připojit víc čidel na delší vzdálenost.
Skript je bez komentářů, páč jsem byl líný, obsahuje pár zbytečností zapomenutých díky jeho postupnému vývoji, ale fungoval spolehlivě. Na rozdíl od 1-wire implementace v jádře. Ke stažení je zde:
http://95.140.247.68:8088/nacti_teplotu.awkTaké bych Ti doporučil, abys neukládal hodnoty do plaintextu, ale použij třeba oblíbené RRD -- přidá Ti časové značky a grafy v ceně:
http://95.140.247.68:8088/cgi-bin/gen_stranku.cgi