Labs GrovePi
1. Description
La carte d'extension grovepi permet de faciliter la connexion de composants électroniques de prise de mesure et d'interaction utilisateur avec un Raspberry Pi B (GrovePi+) ou Rasperry Pi Zero (GrovePi Zero). Elle fonctionne avec un contrôleur ATmega328 qui embarque nativement un convertisseur analogique / digital (A/D) 6 canaux. Elle existe aussi pour Arduino (Seeduino) et sans contrôleur à interfacer directement avec Arduino. Les composants sont disponibles sous forme de modules facilement enfichables sur la carte.
Sources :
- https://www.dexterindustries.com/grovepi/
- http://www.dexterindustries.com/grovepi-tutorials-documentation/
- https://www.dexterindustries.com/GrovePi/engineering/port-description/
- http://wiki.seeedstudio.com/GrovePi_Plus/
Descriptif :
- 7 Ports digitaux
- 3 Ports analogiques
- 3 Ports I2C
- 1 Port Serial (GrovePi)
- 1 Port Serial (Raspberry Pi)
2. Super capteur
Source
Ports | Capteurs | Image | ||
---|---|---|---|---|
A0 | Air Quality Sensor | |||
A1 | Light Sensor | |||
A2 | Sound Sensor | |||
D4 | Green LED | |||
D8 | Buzzer | |||
D7 | Temperature & Humidity Sensor | |||
I2C-1 | Barometer (High Accuracy)) | |||
I2C-2 | LCD RGB |
Mise en place
Commencer Labs Raspberry Pi : Mise en place
Ne pas installer la carte.
sudo apt-get update && apt-get -y upgrade
sudo apt-get install emacs git -y
cd /home/pi/Desktop
sudo git clone https://github.com/DexterInd/GrovePi
cd /home/pi/Desktop/GrovePi/Script
sudo chmod +x install.sh
sudo ./install.sh
sudo reboot
Le script install.sh
offre le message suivant :
_____ _
| __ \ | |
| | | | _____ _| |_ ___ _ __
| | | |/ _ \ \/ / __/ _ \ '__|
| |__| | __/> <| || __/ |
|_____/ \___/_/\_\__\___|_| _ _
|_ _| | | | | (_)
| | _ __ __| |_ _ ___| |_ _ __ _ ___ ___
| | | '_ \ / _` | | | / __| __| '__| |/ _ \/ __|
_| |_| | | | (_| | |_| \__ \ |_| | | | __/\__ \
|_____|_| |_|\__,_|\__,_|___/\__|_| |_|\___||___/
Welcome to GrovePi Installer.
Requirements:
1) Must be connected to the internet
2) This script must be run as root user
Steps:
1) Installs package dependencies:
- python-pip alternative Python package installer
- git fast, scalable, distributed revision control system
- libi2c-dev userspace I2C programming library development files
- python-serial pyserial - module encapsulating access for the serial port
- python-rpi.gpio Python GPIO module for Raspberry Pi
- i2c-tools This Python module allows SMBus access through the I2C /dev
- python-smbus Python bindings for Linux SMBus access through i2c-dev
- python3-smbus Python3 bindings for Linux SMBus access through i2c-dev
- arduino AVR development board IDE and built-in libraries
- minicom friendly menu driven serial communication program
2) Clone, build wiringPi in GrovePi/Script and install it
3) Removes I2C and SPI from modprobe blacklist /etc/modprobe.d/raspi-blacklist.conf
4) Adds I2C-dev, i2c-bcm2708 and spi-dev to /etc/modules
5) Installs gertboard avrdude_5.10-4_armhf.deb package
6) Runs gertboard setup
- configures avrdude
- downloads gertboard known boards and programmers
- replaces avrsetup with gertboards version
- in /etc/inittab comments out lines containing AMA0
- in /boot/cmdline.txt removes: console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1
- in /usr/share/arduino/hardware/arduino creates backup of boards.txt
- in /usr/share/arduino/hardware/arduino creates backup of programmers.txt
Special thanks to Joe Sanford at Tufts University. This script was derived from his work. Thank you Joe!
Raspberry Pi wil reboot after completion.
Et puis, une mise à jour de l'installation.
bash /home/pi/Desktop/GrovePi/Script/update_grovepi.sh
Une mise à jour du firmware de la carte
cd /home/pi/Desktop/GrovePi/Firmware
sudo ./firmware_update.sh
Redémarrer et installer les librairies.
sudo pip install grovepi
sudo shutdown -h now
Placer la carte sur le Raspberry Pi et alimenter.
sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: 03 04 -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- 62 -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
Node Red
Pour installer ou mettre à jour en utilisant la commande de script de mise à niveau Node-RED.
bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)
sudo systemctl enable nodered.service
Installation des noeuds GrovePi
cd ~/.node-red
npm install node-red-contrib-grovepi
npm install node-red-grovepi-nodes
Redémarrage du système.
sudo reboot
Scripts Python
Script air.py
#!/usr/bin/env python
import time
import grovepi
# Connect the Grove Air Quality Sensor to analog port A0
# SIG,NC,VCC,GND
air_sensor = 0
grovepi.pinMode(air_sensor,"INPUT")
while True:
try:
# Get sensor value
sensor_value = grovepi.analogRead(air_sensor)
if sensor_value > 700:
print ("High pollution")
elif sensor_value > 300:
print ("Low pollution")
else:
print ("Air fresh")
print("sensor_value =", sensor_value)
time.sleep(.5)
except IOError:
print ("Error")
Script baro.py
, à condition de copier le module python à côté du script cp /home/pi/Desktop/GrovePi/Software/Python/grove_barometer_sensors/high_accuracy_hp206c_barometer/hp206c.py ./
.
#!/usr/bin/env python
import hp206c
h= hp206c.hp206c()
temp=h.ReadTemperature()
pressure=h.ReadPressure()
altitude=h.ReadAltitude()
print('{"temperature":%.2f,"pressure":%.2f,"altitude":%.2f}' %(temp,pressure,altitude))
Script dht.py
#!/usr/bin/env python
import grovepi
import math
while True:
try:
[temp,humidity] = grovepi.dht(7,0)
if math.isnan(temp) == False and math.isnan(humidity) == False:
print("temp = %.02f C humidity =%.02f%%"%(temp, humidity))
break
except IOError:
print ("Error")
Script light.py
#!/usr/bin/env python
import time
import grovepi
# Connect the Grove Light Sensor to analog port A0
# SIG,NC,VCC,GND
light_sensor = 1
# Connect the LED to digital port D4
# SIG,NC,VCC,GND
led = 4
# Turn on LED once sensor exceeds threshold resistance
threshold = 10
grovepi.pinMode(light_sensor,"INPUT")
grovepi.pinMode(led,"OUTPUT")
while True:
try:
# Get sensor value
sensor_value = grovepi.analogRead(light_sensor)
# Calculate resistance of sensor in K
resistance = (float)(1023 - sensor_value) * 10 / sensor_value
if resistance > threshold:
# Send HIGH to switch on LED
grovepi.digitalWrite(led,1)
else:
# Send LOW to switch off LED
grovepi.digitalWrite(led,0)
print("sensor_value = %d resistance = %.2f" %(sensor_value, resistance))
time.sleep(.5)
except IOError:
print ("Error")
Node-RED
Créer un dossier de travail /home/pi/grove-sensors
et y copier la librairie python qui permet d'exploiter la puce HP206C du baromètre.
cd
pwd
mkdir grove-sensors
cd grove-sensors
cp /home/pi/Desktop/GrovePi/Software/Python/grove_barometer_sensors/high_accuracy_hp206c_barometer/hp206c.py ./
Pour exploiter les différents capteurs, on peut passer un script python qui rend un message formaté en json. On nomme ce script sensors.py
.
#!/usr/bin/env python
import hp206c
h= hp206c.hp206c()
import grovepi
temperature=h.ReadTemperature()
pressure=h.ReadPressure()
altitude=h.ReadAltitude()
[temp,humidity] = grovepi.dht(7,0)
grovepi.pinMode(0,"INPUT")
air = grovepi.analogRead(0)
print('{"temperature": %.2f,"pressure": %.2f,"altitude": %.2f,"humidity": %.2f,"air": %.2f}' %(temperature,pressure,altitude,humidity,air))
Toutes les dix secondes, le script /home/pi/grove-sensors/sensors.py
est appelé pour générer une charge (msg.payload) formatée en JSON en tant que ligne de texte (string), le noeud JSON le transforme en objet nodejs que l'on manipule avec le noeud change (par exemle, msg.payload.temperature
remplace le msg.payload
final).
[{"id":"fcfdb194.824ff","type":"exec","z":"fa434de1.2acb7","command":"sudo python /home/pi/grove-sensors/sensors.py","addpay":true,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":290,"y":440,"wires":[["e8a85407.929048"],[],[]]},{"id":"ed247023.9e707","type":"debug","z":"fa434de1.2acb7","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1070,"y":80,"wires":[]},{"id":"e8a85407.929048","type":"json","z":"fa434de1.2acb7","name":"","property":"payload","action":"obj","pretty":false,"x":390,"y":220,"wires":[["9e8bc0be.a9bc3","f6c8dc7f.8a2da","edc9bbba.127cd8","1444df5e.611781","b579a0ba.dc1de","9adc05b9.6e2b48"]]},{"id":"9e8bc0be.a9bc3","type":"change","z":"fa434de1.2acb7","name":"temperature","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.temperature","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":850,"y":80,"wires":[["ed247023.9e707"]]},{"id":"f6c8dc7f.8a2da","type":"change","z":"fa434de1.2acb7","name":"humidity","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.humidity","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":840,"y":180,"wires":[["43f5f3e8.52d2dc"]]},{"id":"43f5f3e8.52d2dc","type":"debug","z":"fa434de1.2acb7","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1070,"y":180,"wires":[]},{"id":"edc9bbba.127cd8","type":"change","z":"fa434de1.2acb7","name":"altitude","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.altitude","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":840,"y":280,"wires":[["d35a2bae.c08498"]]},{"id":"d35a2bae.c08498","type":"debug","z":"fa434de1.2acb7","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1070,"y":280,"wires":[]},{"id":"1444df5e.611781","type":"change","z":"fa434de1.2acb7","name":"pressure","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.pressure","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":840,"y":380,"wires":[["a4ec38ce.02e228"]]},{"id":"a4ec38ce.02e228","type":"debug","z":"fa434de1.2acb7","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1070,"y":380,"wires":[]},{"id":"83db99e7.fb8e08","type":"inject","z":"fa434de1.2acb7","name":"","topic":"","payload":"","payloadType":"date","repeat":"10","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":220,"wires":[["fcfdb194.824ff"]]},{"id":"b579a0ba.dc1de","type":"change","z":"fa434de1.2acb7","name":"air","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.air","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":830,"y":480,"wires":[["c4cf7399.524d2"]]},{"id":"c4cf7399.524d2","type":"debug","z":"fa434de1.2acb7","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1070,"y":480,"wires":[]},{"id":"9adc05b9.6e2b48","type":"debug","z":"fa434de1.2acb7","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":630,"y":60,"wires":[]}]
MQTT (+ Dashboard)
Dashboard Node-RED.
cd ~/.node-red
npm install node-red-dashboard
cd
systemctl restart nodered
Voir Protocole MQTT
MQTT Broker gratuit : https://github.com/mqtt/mqtt.github.io/wiki/public_brokers
- address test.mosquitto.org
- port 1883, 8883 (SSL), 8884 (SSL), 80 (WebSockets)
- type mosquitto
Installation des clients MQTT (Rpi).
sudo apt-get update && sudo apt-get -y upgrade
sudo apt-get -y install mosquitto mosquitto-clients
MQTT Publisher
[{"id":"e819c6c.6c0dd38","type":"ui_button","z":"c7685c61.851e6","name":"","group":"9f2bafea.b8a12","order":0,"width":"2","height":"2","passthru":false,"label":"On","color":"","bgcolor":"green","icon":"","payload":"1","payloadType":"num","topic":"","x":160,"y":120,"wires":[["ceecf606.6f0798"]]},{"id":"7d2871b2.48632","type":"ui_button","z":"c7685c61.851e6","name":"","group":"9f2bafea.b8a12","order":0,"width":"2","height":"2","passthru":false,"label":"Off","color":"","bgcolor":"red","icon":"","payload":"0","payloadType":"num","topic":"","x":170,"y":200,"wires":[["ceecf606.6f0798"]]},{"id":"ceecf606.6f0798","type":"mqtt out","z":"c7685c61.851e6","name":"","topic":"feg/rix/office/led","qos":"","retain":"","broker":"a4abff2a.b8d37","x":410,"y":160,"wires":[]},{"id":"ddc8cdd5.188e4","type":"debug","z":"c7685c61.851e6","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":400,"y":120,"wires":[]},{"id":"ce110a6e.207358","type":"mqtt out","z":"c7685c61.851e6","name":"","topic":"feg/rix/office/temperature","qos":"","retain":"","broker":"a4abff2a.b8d37","x":1050,"y":340,"wires":[]},{"id":"4cef2e63.6beae","type":"mqtt out","z":"c7685c61.851e6","name":"","topic":"feg/rix/office/humidity","qos":"","retain":"","broker":"a4abff2a.b8d37","x":1040,"y":440,"wires":[]},{"id":"f95602cf.53896","type":"mqtt out","z":"c7685c61.851e6","name":"","topic":"feg/rix/office/altitude","qos":"","retain":"","broker":"a4abff2a.b8d37","x":1040,"y":540,"wires":[]},{"id":"8752d248.fbdce","type":"mqtt out","z":"c7685c61.851e6","name":"","topic":"feg/rix/office/pressure","qos":"","retain":"","broker":"a4abff2a.b8d37","x":1040,"y":640,"wires":[]},{"id":"64d89a7a.ad6a64","type":"exec","z":"c7685c61.851e6","command":"sudo python /home/pi/grove-sensors/sensors.py","addpay":true,"append":"","useSpawn":"false","timer":"","oldrc":true,"name":"","x":370,"y":320,"wires":[["a3d59b20.ad1e28"],[],[]]},{"id":"234c8292.76fdce","type":"inject","z":"c7685c61.851e6","name":"","topic":"","payload":"1","payloadType":"num","repeat":"10","crontab":"","once":false,"onceDelay":0.1,"x":90,"y":320,"wires":[["64d89a7a.ad6a64"]]},{"id":"593f1b39.c5c6c4","type":"debug","z":"c7685c61.851e6","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1010,"y":400,"wires":[]},{"id":"a3d59b20.ad1e28","type":"json","z":"c7685c61.851e6","name":"","property":"payload","action":"obj","pretty":false,"x":570,"y":540,"wires":[["5233f0da.27bde","3727d9f2.d2faf6","d2649992.613898","aec8ab5f.d93be8","ebaf2496.495118"]]},{"id":"650819bc.aa7408","type":"debug","z":"c7685c61.851e6","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1010,"y":500,"wires":[]},{"id":"f9035163.38563","type":"debug","z":"c7685c61.851e6","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1010,"y":600,"wires":[]},{"id":"6e0c3221.ab287c","type":"debug","z":"c7685c61.851e6","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1010,"y":700,"wires":[]},{"id":"ced00baf.63f158","type":"debug","z":"c7685c61.851e6","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1010,"y":800,"wires":[]},{"id":"861ddccb.427d6","type":"mqtt out","z":"c7685c61.851e6","name":"","topic":"feg/rix/office/air","qos":"","retain":"","broker":"a4abff2a.b8d37","x":1020,"y":740,"wires":[]},{"id":"5233f0da.27bde","type":"change","z":"c7685c61.851e6","name":"temperature","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.temperature","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":770,"y":400,"wires":[["ce110a6e.207358"]]},{"id":"3727d9f2.d2faf6","type":"change","z":"c7685c61.851e6","name":"humidity","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.humidity","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":760,"y":500,"wires":[["4cef2e63.6beae"]]},{"id":"d2649992.613898","type":"change","z":"c7685c61.851e6","name":"altitude","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.altitude","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":760,"y":600,"wires":[["f95602cf.53896"]]},{"id":"aec8ab5f.d93be8","type":"change","z":"c7685c61.851e6","name":"pressure","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.pressure","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":760,"y":700,"wires":[["8752d248.fbdce"]]},{"id":"ebaf2496.495118","type":"change","z":"c7685c61.851e6","name":"air","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.air","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":750,"y":800,"wires":[["861ddccb.427d6"]]},{"id":"9f2bafea.b8a12","type":"ui_group","z":"","name":"LED","tab":"ecf36f3d.f281","disp":true,"width":"3","collapse":false},{"id":"a4abff2a.b8d37","type":"mqtt-broker","z":"","name":"","broker":"test.mosquitto.org","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""},{"id":"ecf36f3d.f281","type":"ui_tab","z":"","name":"Office","icon":"dashboard"}]
MQTT Subscriber
[{"id":"482a1d7c.38fcd4","type":"grove digital output","z":"9ba6dc7c.f8c9","name":"","board":"a733887b.bf2b58","pin":"4","x":550,"y":120,"wires":[]},{"id":"856c46f9.8ba2d8","type":"mqtt in","z":"9ba6dc7c.f8c9","name":"","topic":"feg/rix/office/led","qos":"2","broker":"a4abff2a.b8d37","x":230,"y":120,"wires":[["482a1d7c.38fcd4"]]},{"id":"47731099.a6ec6","type":"mqtt in","z":"9ba6dc7c.f8c9","name":"","topic":"feg/rix/office/temperature","qos":"2","broker":"a4abff2a.b8d37","x":250,"y":380,"wires":[["75c4bf25.a0ad7","c5b599b.0804768","a22a4e5c.97bc7"]]},{"id":"75c4bf25.a0ad7","type":"debug","z":"9ba6dc7c.f8c9","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":530,"y":320,"wires":[]},{"id":"a1074724.69b8d8","type":"mqtt in","z":"9ba6dc7c.f8c9","name":"","topic":"feg/rix/office/humidity","qos":"2","broker":"a4abff2a.b8d37","x":240,"y":460,"wires":[["a20a030f.779cf","ae6254a2.a94d78","520679df.e2cb18"]]},{"id":"a20a030f.779cf","type":"debug","z":"9ba6dc7c.f8c9","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":530,"y":460,"wires":[]},{"id":"2306fc43.c869a4","type":"mqtt in","z":"9ba6dc7c.f8c9","name":"","topic":"feg/rix/office/temperature","qos":"2","broker":"a4abff2a.b8d37","x":250,"y":540,"wires":[["1fc47543.0bd4bb"]]},{"id":"1fc47543.0bd4bb","type":"debug","z":"9ba6dc7c.f8c9","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":530,"y":540,"wires":[]},{"id":"e8848635.ed3288","type":"mqtt in","z":"9ba6dc7c.f8c9","name":"","topic":"feg/rix/office/temperature","qos":"2","broker":"a4abff2a.b8d37","x":250,"y":600,"wires":[["a55bf2b5.b3f7c"]]},{"id":"a55bf2b5.b3f7c","type":"debug","z":"9ba6dc7c.f8c9","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":530,"y":600,"wires":[]},{"id":"19c156ba.a676c9","type":"mqtt in","z":"9ba6dc7c.f8c9","name":"","topic":"feg/rix/office/air","qos":"2","broker":"a4abff2a.b8d37","x":220,"y":680,"wires":[["556b5c39.38f1f4"]]},{"id":"556b5c39.38f1f4","type":"debug","z":"9ba6dc7c.f8c9","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":530,"y":680,"wires":[]},{"id":"c5b599b.0804768","type":"ui_chart","z":"9ba6dc7c.f8c9","name":"","group":"ddc5be14.690cb","order":0,"width":0,"height":0,"label":"Temperature graph 12h °C","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":true,"ymin":"","ymax":"","removeOlder":"36","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":580,"y":280,"wires":[[],[]]},{"id":"a22a4e5c.97bc7","type":"ui_gauge","z":"9ba6dc7c.f8c9","name":"","group":"ddc5be14.690cb","order":0,"width":0,"height":0,"gtype":"gage","title":"Temperature gauge","label":"°C","format":"{{value}}","min":"-20","max":"50","colors":["#0040b5","#47e603","#ca5800"],"seg1":"0","seg2":"25","x":550,"y":220,"wires":[]},{"id":"520679df.e2cb18","type":"ui_chart","z":"9ba6dc7c.f8c9","name":"","group":"a6a5a120.a71a3","order":0,"width":0,"height":0,"label":"Humidity graph 12h %","chartType":"line","legend":"true","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":true,"ymin":"","ymax":"","removeOlder":"36","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":560,"y":420,"wires":[[],[]]},{"id":"ae6254a2.a94d78","type":"ui_gauge","z":"9ba6dc7c.f8c9","name":"","group":"a6a5a120.a71a3","order":0,"width":0,"height":0,"gtype":"gage","title":"Humidity gauge","label":"%","format":"{{value}}","min":"0","max":"100","colors":["#b5b019","#47e603","#ca5800"],"seg1":"0","seg2":"25","x":540,"y":380,"wires":[]},{"id":"a733887b.bf2b58","type":"board-config","z":"","board":"GrovePi"},{"id":"a4abff2a.b8d37","type":"mqtt-broker","z":"","name":"","broker":"test.mosquitto.org","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""},{"id":"ddc5be14.690cb","type":"ui_group","z":"","name":"Temperature","tab":"ecf36f3d.f281","disp":true,"width":"12","collapse":false},{"id":"a6a5a120.a71a3","type":"ui_group","z":"","name":"Humidity","tab":"ecf36f3d.f281","disp":true,"width":"12","collapse":false},{"id":"ecf36f3d.f281","type":"ui_tab","z":"","name":"Office","icon":"dashboard"}]
Dashboard sur http://<ip_address>:1880/ui/
.
Questions / Améliorations
Format de publication MQTT
- Correction envoyer les charges MQTT en JSON
Consommation de ressources
- Communication de données
- Stockage des données
- charge (autonomie)
Sécurité
- confidentialité
- authentification
Qualité de service
Filtrage des Topics MQTT
Notes
Report et graphes sur Initialstate
- https://initialstate.com/
- https://github.com/InitialState/pi-health-dashboard
- https://github.com/InitialState/grovepi
Bluemix
- http://thethingbox.io/docs/Bluemix.html
- https://github.com/TheThingBox/iot-nodered
- https://www.ibm.com/blogs/research/2016/05/building-weather-app-watson-bluemix/
Emoncms
- https://blog.openenergymonitor.org/2015/10/emonpi-nodered-and-mqtt/
- https://blog.openenergymonitor.org/2016/02/outdoor-temperature-data-from-weather/
- https://github.com/emoncms/emoncms/blob/master/docs/RaspberryPi/readme.md
- http://thethingbox.io/docs/BtcEmonCms.html
- http://thethingbox.io/docs/BtcXively.html
Plateformes IoT
Voir Ressources.