/iot-kit

An IoT kit for open and great IoT demos

Primary LanguagePythonBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

An IoT Dashboard for open and great IoT demos

Available Demos

  • RIOT: You can find a permanent demo instance configured as a showroom for RIOT. This showroom is available at http://riot-demo.inria.fr.

  • IoT-LAB open A8 demo This demo automatically submits an experiment on IoT-LAB with two open A8 nodes. The first node is configured as a border router and the second node runs a firmware that integrates automatically in the RIOT Demo Dashboard described above.

             _____   ___   _____     ___           _____           _          _      ____
            |  ___| |_ _| |_   _|   |_ _|   ___   |_   _|         | |        / \    | __ )
            | |_     | |    | |      | |   / _ \    | |    _____  | |       / _ \   |  _ \
            |  _|    | |    | |      | |  | (_) |   | |   |_____| | |___   / ___ \  | |_) |
            |_|     |___|   |_|     |___|  \___/    |_|           |_____| /_/   \_\ |____/

Broker and Dashboard services for an IoT dashboard

The broker manages a list of alive sensor nodes by running it's own CoAP and WebSocket servers.

The Dashboard is a web page with some embeded javascript that displays the list of available nodes and their status. It also allows to interact with the nodes (LED control, Robot control, etc)

When a node starts, it notifies itself to the broker server by sending a CoAP post. The broker then starts a discovery of the ressources provided by the node (using the CoAP .well-known/core resource). Once the node available resources are known, the broker sends to each web/mobile clients notification messages so that they can update themselves.

To keep track of alive nodes, each node has to periodically send a notification message to the broker. If a sensor node has not sent this notification within 120s (default, but this is configurable), the broker automatically removes it from the list of alived nodes and notifies all web/mobile clients.

Installation procedure on a standalone system:

Here are the steps to install the IoT-Kit on a standalone system. The final setup will be as follows:

  • iot-broker and iot-dashboard running as systemd services
  • the iot-broker websocket server listening on port 8082
  • the iot-dashboard web application listening on port 8080. All served pages open a websocket client on the port 8082 of the broker

For a custom setup, please edit the Environment option of the iot-broker and iot-dashboard systemd service files before deploying. The broker port should be the same in both service files if you want the two to work together.

Here are the installation steps:

  1. Clone this repository
    $ git clone https://github.com/iot-lab/iot-kit.git
  1. Deploy the system (debian/raspbian/ubuntu):
    $ make deploy
  1. Verify that the services are correctly running:
    $ sudo systemctl status iot-broker.service
    ● iot-broker.service - IoT Broker Application
       Loaded: loaded (/lib/systemd/system/iot-broker.service; enabled)
       Active: active (running) since dim. 2016-12-18 14:59:56 CET; 35min ago
     Main PID: 32411 (python3)
       CGroup: /system.slice/riot-broker.service
               └─32411 /usr/bin/python3 /home/pi/demos/bin/iot-broker --port=8082 --debug
    [...]
    $ sudo systemctl status iot-dashboard.service
    ● iot-dashboard.service - IoT Dashboard Application
       Loaded: loaded (/lib/systemd/system/iot-dashboard.service; enabled)
       Active: active (running) since dim. 2016-12-18 14:52:29 CET; 41min ago
     Main PID: 32321 (python3)
       CGroup: /system.slice/iot-dashboard.service
               └─32321 /usr/bin/python3 /home/pi/demos/bin/iot-dashboard --port=8080 --broker-port=8082 --broker...
    [...]

You can also update Environment option in the services definition files after deployment as they are locate in /lib/systemd/system/iot-broker.service and /lib/systemd/system/iot-dashboard.service. In this case, you'all also need to reload the systemd daemon services and restart the iot-broker and iot-dashboard services:

    $ sudo systemctl daemon-reload
    $ sudo systemctl restart iot-broker
    $ sudo systemctl restart iot-dashboard

Example: Environments used in the online RIOT demo

  • iot-broker:
Environment='BROKER_PORT=8082'
  • iot-dashboard:
Environment='HTTP_PORT=8080' \
        'BROKER_PORT=80' \  # This is because the broker is behind an apache proxy
        'BROKER_HOST=riot-demo.inria.fr' \
        'APP_TITLE=RIOT Demo Dashboard' \
        'APP_LOGO=/static/assets/logo-riot.png' \
        'APP_FAVICON=/static/assets/favicon192.png'

Dashboard local development against an external IoT broker instance

Here we take as example the online demo available at http://riot-demo.inria.fr. The websocket server of the broker service is reachable on port 80. As the broker and the dashboard are decoupled in 2 distinct services, it's possible to run a local dashboard application serving dashboard web page that itself connects to the broker. This way your dashboard will display the available nodes on the online RIOT demo.

In this configuration, you don't need to install the iot-broker and iot-dashboard services but you still need to install the required development dependencies the first time:

    $ make install-dev

Then you can start the dashboard application:

    $ make run-dashboard

and open a web browser at http://localhost:8080. When the web page is loaded, thanks to its embedded javascript, it directly connects to the broker websocket server and starts to communicate with the nodes.

Of course you can set the environment variables at your needs: BROKER_PORT, BROKER_HOST, DASHBOARD_PORT, DASHBOARD_TITLE, DASHBOARD_LOGO, DASHBOARD_FAVICON, CAMERA_URL.

    $ BROKER_PORT=8082 BROKER_HOST=localhost make run-dashboard

Setting up a Raspberry PI with 802.15.4 as border router

A standalone IoT dashboard can run on a prepared raspberry pi:

  • Hardware requirements:

    • OpenLABS 802.15.4 module installed an configured. See this wiki page for more information.
    • A RPI Camera installed and configured (optional)
  • Software requirements:

2 useful commands to manage custom raspbian images from Linux:

  • Copy Raspberry PI SD to a compressed image on Linux:
    $ dd bs=4M if=/dev/mmcblk0 | gzip > custom_raspbian.img.gz
  • Dump the compressed images to the Raspberry PI
    $ gzip -dc custom_raspbian.img.gz | sudo dd bs=4M of=/dev/mmcblk0

Then follow the IoT Dashboard installation steps described above.