/The-SENSIOT-Framework

A generalization of a Sensor Monitoring Framework for the Internet-of-Things.

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

The SENSIOT Framework

CircleCI License

Docker Stars Docker Pulls

Generalization of a Sensor Monitoring Framework for the Internet-of-Things (Bachelor Thesis)

Based on: Environmental Monitoring of Libraries with MonTreAL

An ever-increasing amount of devices connected over the Internet pave the road towards the realization of the ‘Internet of Things’ (IoT) idea. With IoT, endangered infrastructures can easily be enriched with low-cost, energy-efficient monitoring solutions, thus alerting is possible before severe damage occurs. With the SENSIOT Framework, a sensor monitoring framework which runs on commodity single board computers. In addition, our primary objectives are to enable flexible data collection among a computing cluster by migrating virtualization approaches of data centers to IoT infrastructures.

Repository Structure

Beside the source code this repository automatically builds and pushes new versions to the registry and it includes the swarm setup, which contains the whole procedure to deploy the SENSIOT Framework.

Supported Architectures

This multiarch image supports amd64, i386, arm32v6, arm64v8, and ppc64le on Linux.

How to use

Test Setup (amd64)

Mostly for testing purposes this repository contains a docker compose file to just run the SENSIOT Framework out of the box with a sensor mock as sensor.

docker-compose -p sensiot up -d

Run the SENSIOT Framework (amd64/arm)

This repository contains the whole procedure to start the SENSIOT Framework in swarm mode.

docker swarm init
cd swarm-setup
make

Sensor devices can be added afterwards. Files in swarm-setup/ can be adjusted to get an individual setup.

Flow

                           o- NsqReader - InfluxDBWriter   - InfluxDB   -o- Chronograf, (Kapacitor)
                           |                                              \
                           |                                               o- Grafana
        USB                |                                              /
         |                 o- NsqReader - PrometheusWriter - Prometheus -o- (Alertmanager)
       Sensor              |
         |                 o- NsqReader - SensorList -o
    SocketWriter           |                          |- memcached - Web
         |                 o- NsqReader - SensorData -o
        [|]                |
         |                 o- NsqAdmin, NsqCli, etc.
    SocketReader           |
         |                 |\
  MetaDataAppender         | NsqLookup
         |                 |/
      NsqWriter --------- Nsq

                                                        (____): not implemented yet

Sensor Configuration

Notice: only the following sensor drivers are currently implemented

Temperature And Humidity

Sensor Mock

"mock": {
  "service": "temperature_humidity_sensor",
  "type": "mock",
  "image": "unibaub/sensiot",
  "device": [],
  "command": "",
  "configuration": {
    "sensor_count": <int>,
    "temperature": <float>,
    "humidity": <float>,
    "interval": <int>
  }
}
"ash2200": {
  "service": "temperature_humidity_sensor",
  "type": "ash2200",
  "image": "unibaub/sensiot",
  "device": ["/dev/ttyUSB0"],
  "command": "",
  "configuration": {
    "device": "/dev/ttyUSB0",
    "baudrate": "9600",
    "timeout": <int>
  }
}
"dht": {
  "service": "temperature_humidity_sensor",
  "type": "dht",
  "image": "unibaub/sensiot",
  "devices": ["/dev/mem"],
  "command": "",
  "configuration": {
    "id": <int>,
    "gpio": <int>,
    "short_type": <11 or 22>,
    "interval": <int>
  }
}
"open_weather_map": {
  "service": "temperature_humidity_sensor",
  "type": "openweathermap",
  "image": "unibaub/sensiot",
  "devices": [],
  "command": "",
  "configuration": {
    "id": <int>,
    "key": <string>,
    "city": <string>,
    "country": <string>,
    "interval": <int>
  }
}