1
0
mirror of https://github.com/daniviga/bite.git synced 2024-11-23 05:16:13 +01:00
bite/README.md
Daniele Viganò 762605c5c4
Add testing suite (#18)
* Add some tests

* Add an example of NTP with encryption

* Enable TravisCI

* Run sims via Docker

* Improve simulators stage

* Final fix for travis

* Add README docs [skip ci]
2020-06-20 14:41:50 +02:00

4.2 KiB

BITE - Basic/IoT/Example

Playing with IoT

This project is for educational purposes only. It does not implement any authentication and/or encryption protocol, so it is not suitable for real production.

Installation

Requirements

  • docker-ce or moby
  • docker-compose

The project is compatible with Docker for Windows (using Linux executors), but it is advised to directly use a minimal Linux VM instead (via the preferred hypervisor).

The application stack is composed by the following components:

  • Django with Django REST framework web application (running via gunicorn in production mode)
    • mqtt-to-db custom daemon to dump telemetry into the timeseries database
    • telemetry payload is stored as json object (via PostgreSQL JSON data type)
  • Timescale DB, a PostgreSQL database with a timeseries extension
  • Mosquitto MQTT broker (see alternatives below)
  • Nginx as ingress for HTTP (see alternative below)
  • Chrony as NTP server (with optional MD5 encryption)

Deployment

Development

docker-compose -f docker/docker-compose.yml up -d [--scale {bite,mqtt-to-db)=N]

It exposes:

  • http://localhost:80 (HTTP)
  • tcp://localhost:1883 (MQTT)
  • udp://localhost:123 (NTP)

Django runs with DEBUG = True and SKIP_WHITELIST = True

Development with direct access to services

docker-compose -f docker/docker-compose.yml -f docker-compose.dev.yml up -d [--scale {bite,mqtt-to-db)=N]

It exposes:

  • http://localhost:80 (HTTP)
  • http://localhost:8080 (Django's runserver)
  • tcp://localhost:1883 (MQTT)
  • udp://localhost:123 (NTP)
  • tcp://localhost:5432 (PostgreSQL/Timescale)

Django runs with DEBUG = True and SKIP_WHITELIST = True

Production

docker-compose -f docker/docker-compose.yml -f docker-compose.prod.yml up -d [--scale {bite,mqtt-to-db)=N]

It exposes:

  • http://localhost:80 (HTTP)
  • tcp://localhost:1883 (MQTT)
  • udp://localhost:123 (NTP)

Django runs with DEBUG = False and SKIP_WHITELIST = False

Extra features

The project provides multiple modules that can be combined with the fore-mentioned configurations.

Traefik

To use Traefik instead of Nginx use:

docker-compose -f docker/docker-compose.yml up -f docker/ingress/docker-compose.traefik.yml -d

VerneMQ

A ~8x memory usage can be expected compared to Mosquitto.

To use VerneMQ instead of Mosquitto use:

docker-compose -f docker/docker-compose.yml up -f docker/mqtt/docker-compose.vernemq.yml -d

RabbitMQ

RabbitMQ does provides AMQP protocol too, but ingestion on the application side is not implemented yet. A ~10x memory usage can be expected compared to Mosquitto.

To use RabbitMQ (with the MQTT plugin enabled) instead of Mosquitto use:

docker-compose -f docker/docker-compose.yml up -f docker/mqtt/docker-compose.rabbitmq.yml -d

EDGE gateway simulation (via dind)

An EDGE gateway, with containers as modules, may be simulated via dind (docker-in-docker).

Start the EDGE

docker-compose -f docker/docker-compose.yml up -f docker/edge/docker-compose.edge.yml -d

Run the modules inside the EDGE

DOCKER_HOST='127.0.0.1:22375' docker-compose -f docker-compose.modules.yml up -d [--scale {device-http,device-mqtt}=N]

Ardunio

A simple Arduino UNO sketch is provided in the arduino/tempLightSensor folder. The sketch reads temperature and light from sensors. The simple schematic is:

tempLightSensor

The sketch does require an Ethernet shield and a bunch of libraries which are available as git submodules under arduino/libraries. Be advised that some libraries (notably the NTP one) are customized.

Configuration parameters are stored and retrieved from the EEPROM. An helper sketch to update the EEPROM is available under arduino/eeprom_prog

An ESP32 board (or similar Arduino) may be used, with some adaptions, too.