- 1-wire
1-wire är namnet på en kommunikations-bus som utvecklades av dåvarande Dallas Semiconducturs, numera Maxim. Sitt namn till trots behövs som minst två ledare till varje enhet. En är för signal (data) och den andra är till jord. En tredje ledare kan användas för 5V strömmatning. Det är det rekommenderade sättet, men så gör inte jag.
Om man bara anväder två ledare kallas det "parasite mode". Signalen är alltid hög med 5V, i mitt fall levererad från en rpi:s USB-port. När signalen ligger på laddar interna kondensatorer upp enheterna. När bussen sedan läses av svarar varje enhet med sitt unika id och mätvärde (om det är en sensor).
Det finns dock en uppsjö olika situationer där extra strömmatning behövs, t ex om man:
- Läser av enheterna oftare än var femte minut
- Använder långa kablar
- Har många enheter inkopplade
- Använder energislukande enheter som displayer
De ingående komponenterna i ett typiske 1-wire system är mycket billigare än många andra lösningar. Det behövs dock en dator för avläsning/styrning (raspberry?) och en USB-adapter som kostade mig 400:-. Å andra sidan kostade varje enskild temperaturgivare bara 30:- styck.
Jag har lagt mina givare i små plastlåtor från en lågprisbutik och kopplat ihop dem med en gammal telefonsladd.
Nackdelarna gentemot ett trådlöst system är i många fall uppenbara, men det här är en bra lösning om man vill ha sensorer på svåråtkomliga ställen, t ex inne i en frysbox dit signalen inte når eller på en vid där man inte vill byta batterier. En annan fördel är att även de billigaste sensorerna har väldigt stor noggrannhet.
## Mina sensorer ```
Carport:DS18B20 Garage: MS-TH Frysbox:DS18B20
+------------+ +---------------+ +------------+
Temperatur
Temperatur
Temperatur
Luftfuktighet
+------------+ +---------------+ +------------+
|| || ||
USB till _____________________+|_______________+|_______________+| +5V 1-wire ______________________+________________+________________+ GND ```
Det enklaste är att löda ihop kablar och givare, men det straffar sig den dagen man vill byta ut något eller göra förändringar. Den näst vanligaste metoden är att använda RJ11/RJ12 eller RJ45-kontakter. RJ11 känner man igen från telefonsladdar och RJ45 från ethernet-kablar. Köp en crimptång och eventuellt en kabeltestare för RJ11 eller RJ45.
Om man vill hålla isär sina sensorer från övrig nätverkskabel kan det vara en vits att använda RJ11 till kablarna. Visar det sig att man i framtiden vill köpa färdiga grejor så passar en RJ11-kontakt i en RJ45-anslutning.
Själv tyckte jag att det var enklast att köra med RJ11 och använda själva 1-wire i parasite mode så jag kopplade ihop ben 1 och 3 på temperaturgivaren enligt nedan:
```
_______
| Maxim | 1 2 3
| 18B20 | +-------+
| 1 2 3 | | - - - | <-- sett underifrån
+-------+ \_____/
| | | 1: GND
| | | 2: DQ
| | | 3: VDD
```
## Datorinstallation Nedanstående bygger på att man har en dator med linux (Debian/GNU eller Raspberry) installerad. En gammal Raspberry Pi är liten och strömsnål, en laptop har inbyggd UPS. Jag har använt mig av båda.
### Extrapaket ``` sudo apt-get install owfs libusb-dev ```
### Läsa av sensorerna Så snart all hårdvara var på plats skapade jag ett init script för att montera sensornätet mha owfs:
``` case "$1" in start)
/usr/bin/owfs -C -uall -m /mnt/1wire --allow_other
;;
stop)
umount /mnt/1wire
;;
*)
echo "Usage: $0 [start|stop"
exit 1
;;
esac ```
Det aktiverades med följande kommandon: ```
- update-rc.d temperature.sh defaults
- update-rc.d temperature.sh enable
```
Sedan är det bara att
- Välja databas/textfil
- Uppdatera textfil/databas med avläst sensordata
- Bygg grafer
Själv började jag med rrdtool och har sedan dess gått över till en sqlite3/matplotlib-kombination. Mitt uppdateringsscriptet läser av datat sensorvis under /mnt/1wire med ett cronjob som går var 5:e minut. Graferna genereras varje kvart. Ta-daa!