Skip to main content

This little pure python module provides a single class to get the temperature of a w1 sensor

Project description

W1ThermSensor

Gitter

Get the temperature from your w1 therm sensor in a single line of code!
It's designed to be used with the Rasperry Pi hardware but also works on a Beagle Bone and others.


Build Status codecov.io Code Climate Code Health PyPI version Code style: black

Raspberry Pi: this package is available in Raspbian as python-w1thermsensor and python3-w1thermsensor.

Supported devices

The following w1 therm sensor devices are supported:

  • DS18S20
  • DS1822
  • DS18B20
  • DS28EA00
  • DS1825/MAX31850K

Setup

The following hardware is needed:

  • w1 therm compatible sensor (some of them can be bought here: Adafruit: DS18B20)
  • wires to connect the sensor to your board (you might need a breadboard, too)
  • a board like the Raspberry Pi or the Beagle Bone)

On the Raspberry Pi, you will need to add dtoverlay=w1-gpio" (for regular connection) or dtoverlay=w1-gpio,pullup="y" (for parasitic connection) to your /boot/config.txt. The default data pin is GPIO4 (RaspPi connector pin 7), but that can be changed from 4 to x with dtoverlay=w1-gpio,gpiopin=x.

After that, don't forget to reboot.

Hardware-connection

Raspi VCC (3V3) Pin 1 -----------------------------   VCC    DS18B20
                                               |
                                               |
                                               R1 = 4k7 ...10k
                                               |
                                               |
Raspi GPIO 4    Pin 7 -----------------------------   Data   DS18B20


Raspi GND       Pin 6 -----------------------------   GND    DS18B20

Installation

From PIP

This possibility is supported on all distributions:

pip install w1thermsensor

Note: maybe root privileges are required

On Raspbian using apt-get

If you are using the w1thermsensor module on a Rasperry Pi running Raspbian you can install it from the official repository:

sudo apt-get install python3-w1thermsensor

Or if you are still using Python 2:

sudo apt-get install python-w1thermsensor

Note: For older versions of this package you might get the following error: ImportError: No module named 'pkg_resources' which indicates that you need to install python-setuptools or python3-setuptools respectively.

Note 2: The Python 2 package does not contain the CLI tool.

Manually build and install the debian package

debuild -us -uc
dpkg -i ../python3-w1thermsensor_*.deb

Usage as python package

The usage is very simple and the interface clean.. All examples are with the DS18B20 sensor - It works the same way for the other supported devices.

Basic usage with one sensor (implicit)

from w1thermsensor import W1ThermSensor

sensor = W1ThermSensor()
temperature_in_celsius = sensor.get_temperature()
temperature_in_fahrenheit = sensor.get_temperature(W1ThermSensor.DEGREES_F)
temperature_in_all_units = sensor.get_temperatures([
    W1ThermSensor.DEGREES_C,
    W1ThermSensor.DEGREES_F,
    W1ThermSensor.KELVIN])

The need kernel modules will be automatically loaded in the constructor of the W1ThermSensor class.
If something went wrong an exception is raised.

The first found sensor will be taken

Basic usage with one sensor (explicit)

The DS18B20 sensor with the ID 00000588806a will be taken.

from w1thermsensor import W1ThermSensor

sensor = W1ThermSensor(W1ThermSensor.THERM_SENSOR_DS18B20, "00000588806a")
temperature_in_celsius = sensor.get_temperature()

Multiple sensors

With the get_available_sensors class-method you can get the ids of all available sensors.

from w1thermsensor import W1ThermSensor

for sensor in W1ThermSensor.get_available_sensors():
    print("Sensor %s has temperature %.2f" % (sensor.id, sensor.get_temperature()))

Only sensors of a specific therm sensor type:

from w1thermsensor import W1ThermSensor

for sensor in W1ThermSensor.get_available_sensors([W1ThermSensor.THERM_SENSOR_DS18B20]):
    print("Sensor %s has temperature %.2f" % (sensor.id, sensor.get_temperature()))

Set sensor resolution

Some w1 therm sensors support changing the resolution for the temperature reads. w1thermsensor enables to do so with the W1ThermSensor.set_resolution() method:

sensor = W1ThermSensor(W1ThermSensor.THERM_SENSOR_DS18B20, "00000588806a")
sensor.set_resolution(9)

If the persist argument is set to False this value is "only" stored in the volatile SRAM, so it is reset when the sensor gets power-cycled.

If the persist argument is set to True the current set resolution is stored into the EEPROM. Since the EEPROM has a limited amount of writes (>50k), this command should be used wisely.

sensor = W1ThermSensor(W1ThermSensor.THERM_SENSOR_DS18B20, "00000588806a")
sensor.set_resolution(9, persist=True)

Note: this is supported since Linux Kernel 4.7

Disable kernel module auto loading

Upon import of the w1thermsensor package the w1-therm and w1-gpio kernel modules get loaded automatically. This requires the python process to run as root. Sometimes that's not what you want, thus you can disable the auto loading and load the kernel module yourself prior to talk to your sensors with w1thermsensor.

You can disable the auto loading feature by setting the W1THERMSENSOR_NO_KERNEL_MODULE environment variable to 1:

# set it globally for your shell so that sub-processes will inherit it.
export W1THERMSENSOR_NO_KERNEL_MODULE=1

# set it just for your Python process
W1THERMSENSOR_NO_KERNEL_MODULE=1 python my_awesome_thermsensor_script.py

Every other values assigned to W1THERMSENSOR_NO_KERNEL_MODULE will case w1thermsensor to load the kernel modules.

Note: the examples above also apply for the CLI tool usage. See below.

Usage as CLI tool

The w1thermsensor module can be used as CLI tool since version 0.3.0.
Please note that the CLI tool will only get installed with the Raspbian Python 3 package (sudo apt-get install python3-w1thermsensor)

List sensors

List all available sensors:

$ w1thermsensor ls
$ w1thermsensor ls --json  # show results in JSON format

List only sensors of a specific type:

$ w1thermsensor ls --type DS1822
$ w1thermsensor ls --type DS1822 --type MAX31850K  # specify multiple sensor types
$ w1thermsensor ls --type DS1822 --json  # show results in JSON format

Show temperatures

Show temperature of all available sensors: (Same synopsis as ls)

$ w1thermsensor all --type DS1822
$ w1thermsensor all --type DS1822 --type MAX31850K  # specify multiple sensor types
$ w1thermsensor all --type DS1822 --json  # show results in JSON format

Show temperature of a single sensor:

$ w1thermsensor get 1  # 1 is the id obtained by the ls command
$ w1thermsensor get --hwid 00000588806a --type DS18B20
$ w1thermsensor get 1  # show results in JSON format

Show temperature of a single sensor in the given resolution

$ w1thermsensor get 1 --resolution 10
$ w1thermsensor get --hwid 00000588806a --type DS18B20 --resolution 11

Change temperature read resolution and write to EEPROM

$ w1thermsensor resolution 10 1
$ w1thermsensor resolution --hwid 00000588806a --type DS18B20 11

Contribution

I'm happy about all types of contributions to this project! :beers:


This project is published under MIT.
A Timo Furrer project.
- :tada: -

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

w1thermsensor-1.3.0.tar.gz (23.5 kB view details)

Uploaded Source

Built Distribution

w1thermsensor-1.3.0-py2.py3-none-any.whl (14.2 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file w1thermsensor-1.3.0.tar.gz.

File metadata

  • Download URL: w1thermsensor-1.3.0.tar.gz
  • Upload date:
  • Size: 23.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.1.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.8.0

File hashes

Hashes for w1thermsensor-1.3.0.tar.gz
Algorithm Hash digest
SHA256 a53b339c8a99f4093d5da47c2295f571cbac9e5d72a0a1535f60f847b8c65df9
MD5 23f5c2d9629c7a0ecf6bea1fa2d57bd0
BLAKE2b-256 d9fc40aa1cd59faff8e371f066e4f9ddf0fc8d5242cd6e66e81d50203bac809a

See more details on using hashes here.

Provenance

File details

Details for the file w1thermsensor-1.3.0-py2.py3-none-any.whl.

File metadata

  • Download URL: w1thermsensor-1.3.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 14.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.1.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.8.0

File hashes

Hashes for w1thermsensor-1.3.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 845ab05199745009534f7612597a8c1cd4c9c53eab9de0504d039c339e852702
MD5 c8b1d2f37a675356771dfcfacb3a8065
BLAKE2b-256 e82611916c2a7bae63532d2868099d43eaf2994a2472a3079bfba81390086498

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page