Skip to main content

A Raspberry Pi tool to send multiple sensor data to an influxdb Database

Project description

* Introduction
A program to read different sensor's data connected to for example a raspberry pi and send it to an influxdb.

* Installation
It might be needed to install the dependencies for =opencv-python-headless=:
#+begin_src shell eval no
sudo apt install libaom0 libatlas3-base libavcodec58 libavformat58 libavutil56 libbluray2 libcairo2 libchromaprint1 libcodec2-0.8.1 libcroco3 libdatrie1 libdrm2 libfontconfig1 libgdk-pixbuf2.0-0 libgfortran5 libgme0 libgraphite2-3 libgsm1 libharfbuzz0b libjbig0 libmp3lame0 libmpg123-0 libogg0 libopenjp2-7 libopenmpt0 libopus0 libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpixman-1-0 librsvg2-2 libshine3 libsnappy1v5 libsoxr0 libspeex1 libssh-gcrypt-4 libswresample3 libswscale5 libthai0 libtheora0 libtiff5 libtwolame0 libva-drm2 libva-x11-2 libva2 libvdpau1 libvorbis0a libvorbisenc2 libvorbisfile3 libvpx5 libwavpack1 libwebp6 libwebpmux3 libx264-155 libx265-165 libxcb-render0 libxcb-shm0 libxfixes3 libxrender1 libxvidcore4 libzvbi0
#+end_src

* Configuration
All configuration is done in the config.edn file.
If you add a sensor here, it will automatically be read by the program and added to the measurement.
InfluxDB data also has to be set up in here it defaults to a local installation on the same raspberry pi without any authentication. To use a remote InfluxDB, change the URL in the config file.

The configuration is written in edn. This works similar to a python dictionary. Keywords and values are separated by whitespace.
You have to provide the keywords =:influxdb= and =:sensors= with your data. An example config.edn would look like this:
#+begin_src clojure :eval no
;; This is just an example config.edn file, you have to manually change the data.
{:influxdb {:url "http://localhost:8086"
:db "test1"}

:sensors {:cam ;; name of the sensor
{:type "camera" ;; type of the sensor. check supported types
:rotate true} ;; some further possible options depending on sensor
:ds18b20_1
{:type "ds18b20"}
:dht11_inside
{:type "dht11"
:pin 26}
"TSL2591 upside down" ;; the sensor names can also just be strings
{:type "tsl2591"}

:bme280
{:type "bme280"
:address 0x76
:protocol "i2c"}
:bmp280_0
{:type "bmp280"
:protocol "spi"
:pin "18"}
:bmp280_1
{:type "bmp280"
:protocol "spi"
:pin "12"}}}
#+end_src
* Supported sensors
Currently the following sensors are supported. Their implementations can be found in the sensorpi/sensors folder.

- Camera (Integrating histogram)
- DHT11
- DS18B20
- TSL2591
- BMP280 (I2C, SPI)
- BME280 (I2C, SPI)

Multiple sensors should work if different addresses (I2C) or pins (SPI) are used.

** Camera
type ="camera"=
The camera can be used as a sensor. The camera can save an image to a path and integrate the picture's histogram. This integral value is then saved to the database if the keyword =:hist= is true. The image can be rotated by 180° (not imporant for histogram). Example camera config:

The folder where the image should be saved to needs to exist already.
#+begin_src clojure :eval no
:sensors {:cam
{:type "camera"
:rotate true
:hist true ;; can also be false if you only need the image
:save ;; if the :save keyword does not exist, only a histogram is calculated
{:path "/home/pi/measurement1/cam.png" ;; saves image to the folder
:timestamp true}}} ;; Adds a timestamp to the image before ".png"
#+end_src

A nice trick is to save the image to =/usr/share/grafana/public/img/= so you can access it from a grafana text panel and little html/js (or maybe just symlink it): https://gist.github.com/weidtn/d1171a896483899b606ec9663925147f

** BMP/BME 280
type ="bme280"= & ="bmp280"=
You have to specify a protocol for accessing the sensor and the address (I2C) or CS-Pin (SPI) in your config file:
#+begin_src clojure :eval no
:sensors {:bme280
{:type "bme280"
:protocol "i2c"
:address 0x76}
:bmp280_0
{:type "bmp280"
:protocol "spi"
:pin "18"}}
#+end_src

** TSL2591
type ="tsl5281"=
The TSL2591 sensor has no further options.

** DHT11
type ="dht11"=
You have to provide the pin of the sensor like this:
#+begin_src clojure :eval no
:sensors {:dht11
{:type "dht11"
:pin 26}}
#+end_src

** DS18B20
type ="ds18b20"=
The DS18B20 sensor has no further options:
#+begin_src clojure :eval no
:sensors {:DS18B20
{:type "ds18b20"}}
#+end_src

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

sensorpi-0.1.0.tar.gz (16.8 kB view details)

Uploaded Source

Built Distribution

sensorpi-0.1.0-py3-none-any.whl (18.8 kB view details)

Uploaded Python 3

File details

Details for the file sensorpi-0.1.0.tar.gz.

File metadata

  • Download URL: sensorpi-0.1.0.tar.gz
  • Upload date:
  • Size: 16.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.12 CPython/3.9.2 Linux/5.10.92-v7+

File hashes

Hashes for sensorpi-0.1.0.tar.gz
Algorithm Hash digest
SHA256 00bd6f90fdf6a86dbf43a2d33a7cde4a9479c9eeae68bbff53ca701ca5b37e4d
MD5 7adff91363af6b856f0e97fd5539c098
BLAKE2b-256 889621390b8d0a8eb37ce75a16f67c6a4de2d5ab03ea164eb6b0b1ecb8b40049

See more details on using hashes here.

File details

Details for the file sensorpi-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: sensorpi-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 18.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.12 CPython/3.9.2 Linux/5.10.92-v7+

File hashes

Hashes for sensorpi-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3db07131cdfbb252f38c0ead758db962e13f3d34b23a3068148c3494f50e172d
MD5 e34e8468e88e499c1051e6b5ccdcf20b
BLAKE2b-256 9948c9842b198a4ad65dff081367d8006262d395d415138cc19cd43baae96806

See more details on using hashes here.

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