PM2M Docker

From air
Jump to: navigation, search

1) Installer Docker sur votre machine


2) Installer les clients Mosquitto pour souscrire et publier sur les sujets (ie topics)

sudo apt install -y mosquitto-clients

BROKER=test.mosquitto.org
mosquitto_sub -h $BROKER -t "iot_pm2m/1718/groupe1/#" -v
mosquitto_pub -h $BROKER -t "iot_pm2m/1718/groupe1/fridge123" -v -m 'temp=20.0;hum=10;open=true'
mosquitto_pub -h $BROKER -t "iot_pm2m/1718/groupe1" -v -m 'deveui=fridge123;temp=20.0;hum=10;open=true'
mosquitto_pub -h $BROKER -t "iot_pm2m/1718/groupe1" -v -m '{"deveui":"fridge123","temp":20.0,"hum":10,"open":true}'


BROKER=localhost
mosquitto_sub -h $BROKER -t "iot_pm2m/1718/groupe1/#" -v
mosquitto_pub -h $BROKER -t "iot_pm2m/1718/groupe1/fridge123" -v -m 'temp=20.0;hum=10;open=true'
mosquitto_pub -h $BROKER -t "iot_pm2m/1718/groupe1" -v -m 'deveui=fridge123;temp=20.0;hum=10;open=true'
mosquitto_pub -h $BROKER -t "iot_pm2m/1718/groupe1" -v -m '{"deveui":"fridge123","temp":20.0,"hum":10,"open":true}'

Lancer le client Web MQTT HiveMQ ou MQTT Lens.


3) Lancer les containers Docker suivant

# NodeRED app for collect sensors data

name_to_ipaddress(){
  ifconfig | grep "inet " |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' | grep -v "127.0.0.1" | head -1
}

NODERED_WEB_PORT=1880
NODERED_ADMIN_PASSWORD="MUST_BE_CHANGED"
# Note : Password can be crypt and set into settings.js with node-red-admin hash-pw

GF_PORT=3600
GF_PASSWORD="MUST_BE_CHANGED"

MQTT_BROKER_1=mqtt01
MQTT_BROKER_2=mqtt02
MQTT_BROKER_1=test.mosquitto.org
MQTT_BROKER_2=test.mosquitto.org
LOCAL_HOST=$(name_to_ipaddress localhost)
echo $LOCAL_HOST


# -------------------------------
# Clean
# -------------------------------

docker rm -f mosquitto_for_iot
docker rm -f influxdb_for_iot
docker rm -f mongodb_for_iot
docker rm -f nodered_for_iot
docker rm -f grafana_for_iot
docker rm -f chronograf_for_iot

rm -fr influxdb mongo grafana chronograf
rm -f lib/flows/*



# -------------------------------
# Mosquitto
# -------------------------------
docker pull eclipse-mosquitto
docker run -d --name nodered_for_iot \
      -p 1883:1883 -p 9001:9001 \
      mosquitto_for_iot


# -------------------------------
# Influx DB
# -------------------------------
mkdir influxdb
docker pull influxdb
docker run -d --name influxdb_for_iot \
      -p 8086:8086 \
      -p 8083:8083 \
      -v influxdb:/var/lib/influxdb \
      influxdb

# -------------------------------
# MongoDB
# -------------------------------
docker run -d --name mongodb_for_iot \
      -p 27017:27017 \
      mongo

# -------------------------------
# NodeRED
# -------------------------------
docker pull nodered/node-red-docker

LOCALDIR=$(pwd)
docker run -d --name nodered_for_iot \
      -v $LOCALDIR:/data \
      -p $NODERED_WEB_PORT:1880  \
      -p 1680:1680/udp  \
      -p 7080:8080  \
      --add-host=influxdb-1:$LOCAL_HOST  \
      --add-host=mongodb-1:$LOCAL_HOST  \
      -e FLOWS=lora.flow.json \
      -e NODE_OPTIONS="--max_old_space_size=128" \
      nodered/node-red-docker

npm install node-red-contrib-influxdb
npm install node-red-node-mongodb
npm install node-red-contrib-pubnub
npm install node-red-contrib-ifttt
npm install node-red-contrib-kafka-node
npm install node-red-contrib-web-worldmap
npm install node-red/node-red-dashboard


npm install -g node-red-admin
node-red-admin target http://localhost:$PORT
node-red-admin list
node-red-admin install node-red-contrib-influxdb

# -------------------------------
# Grafana
# -------------------------------

docker run -d --name grafana_for_iot \
  -p $GF_PORT:3000 \
  --add-host=influxdb-1:$LOCAL_HOST  \
  -e "GF_SECURITY_ADMIN_PASSWORD=$GF_PASSWORD" \
  grafana/grafana


# -------------------------------
# Chronograf
# -------------------------------

mkdir chronograf
docker run -d --name chronograf_for_iot \
      -p 18888:8888 \
      --add-host=influxdb-1:$LOCAL_HOST  \
      -v chronograf:/var/lib/chronograf \
      chronograf


# -------------------------------
# Huginn https://github.com/huginn/huginn
# -------------------------------
echo Browse http://localhost:3000
echo Log in to your Huginn instance using the username admin and password password

docker run -d --name huginn_for_iot \
       --hostname huginn \
       -p 3000:3000 \
       huginn/huginn

docker logs --follow huginn_for_iot
^C

# -------------------------------
# Nifi https://nifi.apache.org/
# -------------------------------
docker run --name nifi_for_iot \
  -p 9090:9090 \
  -d \
  -e NIFI_WEB_HTTP_PORT='9090' \
  apache/nifi:latest


# -------------------------------
# Logs
# -------------------------------
docker logs --follow nodered_for_iot
tail -f logfile.txt

# -------------------------------
# Stop then Start
# -------------------------------

docker stop mosquitto_for_iot
docker stop influxdb_for_iot
docker stop mongodb_for_iot
docker stop nodered_for_iot
docker stop grafana_for_iot
docker stop chronograf_for_iot
docker stop huginn_for_iot
docker stop nifi_for_iot

docker start mosquitto_for_iot
docker start influxdb_for_iot
docker start mongodb_for_iot
docker start nodered_for_iot
docker start grafana_for_iot
docker start chronograf_for_iot
docker start huginn_for_iot
docker start nifi_for_iot

4) Visualiser

5) Ecrire et tester un fichier iot_mashup.yml pour Docker Compose

Bonus track