senlib - Pure Python-based Sensor Library

Alexander Rüedlinger - - Sensors , I2C , Raspberry Pi , Python

A couple of months ago I started to write a small and straightforward sensor library for the I2C sensors that I already bought and used in my sensor-based projects at home.

The library ships two CLI scripts for retrieving and exposing sensor data. The first one allows one to retrieve sensor data via the terminal. The other one gives one the possibilty to launch a sensor node that exposes the sensor via an HTTP and a WebSocket interface.

As of today, the library provides support for the following popular I2C sensors:

  • am2315/am2321
  • bh1750
  • bmp280/bmp180/bmp85
  • bme280
  • hdc1008
  • lm75
  • mcp9808
  • mpl115a2
  • mpl311a2
  • sht31
  • si7021

The sourcecode of the project can be found on github.


Installing it is just a matter of executing the following commands:

git clone
cd senlib
./ install


Assumed you have a BME280 sensor and all what you need is a simple sensor node whose sensor data can be accessed over an HTTP or a WebSocket interface, then you can just use the CLI program sennnode. The listing below shows how a sensor node can be launched. The option -a takes the I2C address of the sensor, while the option -b takes the I2C bus number on which the sensor is connected to.

sennode bme280 -a 0x77 -b 1

Once started, the sensor data is exposed under the following URLs:

  • ws://

But there is more. If you like to use the MQTT protocol, then you can simply configure the sensor node to publish periodically sensor data to a MQTT broker.

As the listing below illustrates, you can provide the options --mqtt-address and --mqtt-port to indicate the URL of the MQTT broker and MQTT port, respectively. Last but not least, the option -i is used for specifying the periodic interval in seconds to publish the data and the option -t is used for indicating the MQTT topic under which the data is published.

sennode bme280 -a 0x77 -b 1 --mqtt-address ws://poseidon.local --mqtt-port 9001 -i 5 -t 'home/og1/bme280'

Next, we have the CLI program called senlib. The latter is just a basic script that allows one to retreive in a simple way sensor data.

For example, to poll the sensor periodically every second, we can take advantage of the command below. Just as before, we have the options -a and -b. Additonally, we have the option -i for specyfing the polling interval in seconds and the option -p to launch the program in polling mode.

senlib bme280 -a 0x77 -b 1 -p -i 1

That's it. So far this small library has been helpful for me in collecting temperature measurments and plotting them using matplotlib.