The goal of this Hackaton is to become familiar with several LinkSmart components and at the same time, create something useful.
In the following steps we will setup the DHT Adafruit Library and LinkSmart Device Gateway on a Raspberry Pi 3 in order to read measurements from a DHT22 sensor and publish them in SenML format to a MQTT broker.
1) Setup the DHT Library
- Install the latest stable Docker for debian-stretch (armhf).
- Follow the instructions here (Tip: stretch>jessy>wheezy). Too lazy to follow instructions? Skip to step c.
Optional: Post-installation (Manage Docker as a non-root user), so that docker commands run without
- Click here to expand...
If you didn't go through steps a and b. Run the following commands:
Log out and log in. Then to verify that Docker CE is installed correctly, run the hello-world image. This command downloads a test image and runs it in a container. When the container runs, it prints an informational message and exits.
Create and enter the directory structure
Download Adafruit_DHT_SenML.py. This script reads temperature and humidity values from a DHT sensor and prints the measurements in SenML format. (You need appropriate drivers to run it)
Use the following command to download an image with DHT drivers and runs it once. The command tries to read from a
DHT22sensor with data pin connected to
GPIO 4and SenML basename
bn/. Remove these arguments to see usage instructions.
The SenML output should be similar to:
If you didn't get an output similar to that, go back and figure out what went wrong.
2) Deploy Device Gateway
We'll use the DHT library container (from previous step) to run Device Gateway. The goal is to execute the Python script that reads the measurements and expose the SenML output over networking protocols.
Download Device Gateway (
device-gateway-linux-arm) and make it executable. Deployment instructions on wiki: https://docs.linksmart.eu/display/DGW.
Configure Device Gateway:
Configure the DGW service. Modify (replace <device-name> with the device name e.g. linksmart-cyan and <mqtt-broker-uri> with the broker endpoint) and place in
Configure the device agent. Modify (replace <device-name>s with the device hostname, e.g. linksmart-cyan) and place in
With the following configuration, Device Gateway executes the Python script every 120 seconds and exposes the resulting data over two protocols:
MQTT: Publishes the sensor data to the given topic. The MQTT broker was configured in step a.
- REST: Exposes a REST endpoint to GET the latest collected data. The HTTP server was configured in the step a. E.g for getting data:
Run the container:
It should be in priviledged mode in order to access Raspberry Pi GPIO.
If there were no errors, make a container that starts after boot and runs in detached mode (background):
Refer to docker run reference to understand the given arguments.
3) Try it out
- Subscribe to the correct topic at the broker with the endpoint configured in DGW configuration.
- Get latest measurement from the REST endpoint. The path comes from the names in device agent configuration. e.g.