W1 therm

Från Temperatur.nu/m.nu Wiki
Hoppa till: navigering, sök

[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
Personliga verktyg