W1 therm
[redigera] Modul för linuxkärnan
Linuxsystem med nyare kärnor har stöd för modulen "w1_therm" direkt i kärnan, vilken stödjer följande sensorer:
- W1_THERM_DS18S20 (0x10)
- W1_THERM_DS1822 (0x22)
- W1_THERM_DS18B20 (0x28)
För att aktivera modulen kör man "sudo modprobe w1_therm". Då skapas en fil i varje underkatalog som motsvarar alla temperaturgivare som heter "w1_slave", den filen kan man läsa in med t.ex. php, perl eller python (eller helt enkelt med cat i bash). Temperaturen står i textformat efter strängen "t=" och är i milliCelcius, dvs måste delas med 1000 för att få Celcius.
[redigera] Exempel, läsa temp i BASH
På min maskin (en NSLU2 som kör debian 5.0) ser det ut som följer
:~$ ls -1 /sys/bus/w1/devices/ 10-00080184876f 10-000801848faa 10-000801849a73 81-0000002e89d9 w1_bus_master2
Temperaturgivarna är de som börjar på "10-", dvs tre stycken i mitt fall. Vill jag läsa temperaturen på den första kör jag helt enkelt:
:~$ cat /sys/bus/w1/devices/10-00080184876f/w1_slave 3f 00 4b 46 ff ff 08 10 2c : crc=2c YES 3f 00 4b 46 ff ff 08 10 2c t=31250 3f 00 4b 46 ff ff 07 10 34 : crc=34 YES 3f 00 4b 46 ff ff 07 10 34 t=31312
Temperaturen i Celcius är då värdet efter "t=" delat med 1000, dvs 31.3 grader i exemplet. Varför det kommer två temperaturer vet jag inte, är det möjligen kopplat till olika precision?
Med lite BASH-magi kan man få tempen i klartext med hjälp av sed och awk:
:~$ cat /sys/bus/w1/devices/10-00080184876f/w1_slave | sed -n '$p' | awk -F"=" '{print $2/1000}'
31.312