iot-distancemeter icon indicating copy to clipboard operation
iot-distancemeter copied to clipboard

Transmit sonic sensor data using RaspberryPi/Logstash/MQTT/Python

iot-distancemeter

This is an example project that demonstrates a ultra-sonic sensor HC-SR04 connected to a RaspberryPi. The original connection scheme and code are from http://www.tutorials-raspberrypi.de/gpio/entfernung-messen-mit-ultraschallsensor-hc-sr04/ adopted to sending the data to either Logstash/Elasticsearch/Kibana or via MQTT.

Either way, clone this repo on your RaspberryPi and your host where your server (Logstash or MQTT broker) is hosted.

$ git clone https://github.com/mp911de/iot-distancemeter.git

MQTT

MQTT is a machine to machine communication protocol in a pub/sub manner. To run the code you have to wire the ultrasonic sensor to your RaspberryPi and you need python with the paho-mqtt package.

First you need a MQTT broker. I used HiveMQ (execute it in the root path of this Git repo):

$ mkdir -p target
$ cd target
$ curl http://www.hivemq.com/wp-content/uploads/hivemq-2.2.1.zip > hivemq-2.2.1.zip
$ unzip hivemq-2.2.1.zip
$ cd hivemq-2.2.1/bin
$ chmod a+x *.sh
$ ./run.sh

Then continue on your RaspberryPi.

If you do not have the paho-mqtt package installed, execute (assuming you have pip installed):

$ sudo pip install paho-mqtt

Alternative using easy_install

$ sudo easy_install paho-mqtt

Adopt MQTT_HOST in distancemeter_mqtt.py to your environment and run it using

$ sudo python distancemeter_mqtt.py

Now the sensor performs measurement and publishes messages in the topic sensors/distancemeter.

To see something, you can start mqtt_consumer.py after adopting MQTT_HOST in the file.

$ python mqtt_consumer.py

You should see some output like:

Connected with result code 0
sensors/distancemeter {"distance": 104.49538230895996, "message": "distance 104.5 cm", "hostname": "iotberry"}
sensors/distancemeter {"distance": 103.15831899642944, "message": "distance 103.2 cm", "hostname": "iotberry"}
sensors/distancemeter {"distance": 103.20738554000854, "message": "distance 103.2 cm", "hostname": "iotberry"}

Logstash/Elasticsearch/Kibana

You can run this demo also using the ELK-Stack. This way you can visualize the data in a nice way.

Install the ELK Stack using (execute it in the root path of this Git repo, you should use a better host than a RaspberryPi since all components are hungry for Memory and CPU):

$ mkdir -p target
$ cd target
$ curl https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.2.zip > elasticsearch-1.3.2.zip
$ curl https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.zip > logstash-1.4.2.zip
$ unzip elasticsearch-1.3.2.zip
$ unzip logstash-1.4.2.zip
$ cd elasticsearch-1.3.2/bin
$ chmod a+x elasticsearch
$ ./elasticsearch &
$ cd ../..
$ cd logstash-1.4.2/bin
$ chmod a+x logstash
$ ./logstash agent -f ../../../logstash.conf &
$ ./logstash-web &
$ curl -XPUT 'http://localhost:9200/kibana-int/'
$ curl -XPUT --data-binary '@../../../dashboard-source.json' 'http://localhost:9200/kibana-int/dashboard/Sonic%20Distancemeter'

Now your server stack is running. Go to your RaspberryPi and adopt JSON_HOST in distancemeter_json.py so the Python script knows where to send the JSON objects using TCP. Then run:

$ sudo python distancemeter_json.py

Your RaspberryPi will send every 0.2sec a message over the line. At this point open your browser. Kibana runs on port 9292, so most likely you want to open:

http://localhost:9292/index.html#/dashboard/elasticsearch/Sonic%20Distancemeter

You should see something like:

Have fun!

License

  • [The MIT License (MIT)] (http://opensource.org/licenses/MIT)
  • Contains also code from http://www.tutorials-raspberrypi.de/gpio/entfernung-messen-mit-ultraschallsensor-hc-sr04/

Contributing

Github is for social coding: if you want to write code, I encourage contributions through pull requests from forks of this repository. Create Github tickets for bugs and new features and comment on the ones that you are interested in.