Quali sono i componenti principali di una piattaforma per la ricezione e l’elaborazione di dati provenienti da soluzioni connesse? Quali sono i principali protocolli? Quali linguaggi e piattaforme devo imparare per entrare in questo interessante mondo?
Proviamo a vedere qualche soluzione open source che può dare ottimi spunti di partenza per la costruzione di una piattaforma IoT e per imparare i principi di base di questo nuovo mondo. Le soluzioni che guarderemo velocemente sono le seguenti:
- RabbitMQ – broker per i protocolli publish subscribe MQTT/STOMP/AMQP che agisce come bus unificante connettendo in maniera efficiente il livello hardware con i vari livelli di elaborazione software,
- Node-RED – piattaforma web con cui è possibile orchestrare il flusso di informazioni e costruire logiche di funzionamento complesse,
- EmonCMS – soluzione per il monitoraggio, la storicizzazzione e la rappresentazione di variabili tempovarianti,
- Freeboard – software per la costruzione di accattivanti cruscotti riepilogativi.
Ovviamente ci sono molte altre soluzioni che possono essere utilizzate/testate/integrate ma per ora questo set consente di creare una base più che sufficiente per i primi test.
RabbitMQ/MQTT – https://www.rabbitmq.com/
RabbitMQ è un interessante broker per i messaggi AMQP ma capace anche di supportare MQTT e STOMP.
Può essere installato su Rasberry Pi aggiungendo il repository al file /etc/apt/sources.list
1 |
deb http://www.rabbitmq.com/debian/ testing main |
fatto ciò è possibile installare l’ultima versione con i comandi
1 2 3 4 |
wget http://www.rabbitmq.com/rabbitmq-signing-key-public.asc apt-key add rabbitmq-signing-key-public.asc apt-get update apt-get install rabbitmq-server |
ed abilitare i plugin di management e il broker MQTT
1 2 3 |
rabbitmq-plugins enable rabbitmq_management rabbitmq-plugins enable rabbitmq_mqtt /etc/init.d/rabbitmq-server restart |
Abilitando il plugin di management è possibile visualizzare il funzionamento mediante un sito web di controllo disponibile all’indirizzo http://localhost:15672. Le credenziali di default sono guest/guest.
Il plug-in installato consente di collegare device MQTT con la versione 3.1 del protocollo, per usufruire della più innovativa versione 3.1.1 di MQTT è invece necessario installare un broker ad-hoc quale Mosquitto.
Node-RED – http://nodered.org/
Node-RED è la piattaforma con cui implementare la logica associata al funzionamento della piattaforma, come MQTT è un prodotto dei laboratori di IBM distribuita con una licenza Open Source (ma anche integrata nella piattaforma cloud IBM Bluemix!!!) .
Basata sul server Node.js e sul linguaggio Javascript è anche disponibile tramite il sistema di pacchettizzazione NPM.
Installiamo Node.js (sempre ipotizzando di lavorare su un Raspberry Pi)
1 2 |
wget http://node-arm.herokuapp.com/node_0.10.36_armhf.deb dpkg -i node_0.10.36_armhf.deb |
Installiamo ora Node-RED e qualche nodo aggiuntivo con i seguenti comandi.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
npm install -g node-red ### node red nodes npm install -g node-red-node-wordpos npm install -g node-red-node-badwords npm install -g node-red-node-smooth npm install -g node-red-node-beaglebone npm install -g node-red-node-piface npm install -g node-red-node-pibrella npm install -g node-red-node-piliter npm install -g node-red-node-blinkstick npm install -g node-red-node-blink1 npm install -g node-red-node-ledborg npm install -g node-red-node-digirgb npm install -g node-red-node-wemo npm install -g node-red-node-makeymakey npm install -g node-red-node-sensortag npm install -g node-red-node-stomp npm install -g node-red-node-wol npm install -g node-red-node-ping npm install -g node-red-node-emoncms npm install -g node-red-node-twilio npm install -g node-red-node-dweetio npm install -g node-red-node-nma npm install -g node-red-node-notify npm install -g node-red-node-prowl npm install -g node-red-node-pushbullet npm install -g node-red-node-pushover npm install -g node-red-node-xmpp npm install -g node-red-node-leveldb npm install -g node-red-node-mysql npm install -g node-red-node-sqlite npm install -g node-red-node-suncalc npm install -g node-red-node-exif npm install -g node-red-node-daemon ### node red web nodes npm install -g node-red-node-aws npm install -g node-red-node-box npm install -g node-red-node-delicious npm install -g node-red-node-dropbox npm install -g node-red-node-fitbit npm install -g node-red-node-flickr npm install -g node-red-node-forecastio npm install -g node-red-node-foursquare npm install -g node-red-node-google npm install -g node-red-node-instagram npm install -g node-red-node-jawboneup npm install -g node-red-node-openweathermap npm install -g node-red-node-pinboard npm install -g node-red-node-strava npm install -g node-red-node-tfl npm install -g node-red-node-weather-underground ### other nodes npm install -g node-red-contrib-dht-sensor npm install -g node-red-contrib-geonames npm install -g node-red-contrib-route-parser npm install -g node-red-contrib-timeseries npm install -g node-red-contrib-collectd npm install -g node-red-node-smooth npm install -g node-red-node-rbe npm install -g node-red-contrib-noble npm install -g node-red-contrib-batcher npm install -g node-red-vis |
Ed utilizziamo pm2 per far partire in automatico Node-RED all’avvio del sistema.
1 2 3 4 5 6 |
npm install -g pm2 pm2 start /usr/bin/node-red -- -v pm2 save pm2 startup # oppure per i sistemi linux che usano systemd pm2 startup systemd |
L’interfaccia di Node-RED è disponibile all’indirizzo http://localhost:1883.
EmonCMS – http://emoncms.org/
Basata su Mysql e sul linguaggio PHP richiede una serie di pacchetti software normalmente non installati sul Raspberry Pi.
1 2 3 4 5 6 7 8 |
sudo apt-get install apache2 mysql-server mysql-client php5 libapache2-mod-php5 php5-mysql php5-curl php-pear php5-dev php5-mcrypt php5-json git-core redis-server build-essential ufw ntp sudo pear channel-discover pear.swiftmailer.org sudo pecl install channel://pecl.php.net/dio-0.0.6 redis swift/swift sudo sh -c 'echo "extension=dio.so" > /etc/php5/apache2/conf.d/20-dio.ini' sudo sh -c 'echo "extension=dio.so" > /etc/php5/cli/conf.d/20-dio.ini' sudo sh -c 'echo "extension=redis.so" > /etc/php5/apache2/conf.d/20-redis.ini' sudo sh -c 'echo "extension=redis.so" > /etc/php5/cli/conf.d/20-redis.ini' sudo a2enmod rewrite |
Il codice dell’applicazione può essere installato direttamente da GitHub con i comandi:
1 2 |
cd /var/www/emoncms sudo git clone https://github.com/emoncms/emoncms.git |
Il database può essere creato con i comandi:
1 2 3 4 5 6 7 |
mysql -u root -p </code><code>mysql> CREATE DATABASE emoncms; </code><code>mysql> CREATE USER 'emoncms'@'localhost' IDENTIFIED BY 'metti_qui_la_tua_password'; mysql> GRANT ALL ON emoncms.* TO 'emoncms'@'localhost'; mysql> flush privileges; </code><code>mysql> exit; |
Al primo accesso EmonCMS costruirà le tabelle e le popolerà con i dati appropriati, occorre creare anche le directory per la memorizzazione dei dati.
1 2 3 4 5 6 |
sudo mkdir /var/lib/phpfiwa sudo mkdir /var/lib/phpfina sudo mkdir /var/lib/phptimeseries sudo chown www-data:root /var/lib/phpfiwa sudo chown www-data:root /var/lib/phpfina sudo chown www-data:root /var/lib/phptimeseries |
La piattaforma è accessibile all’indirizzo http://localhost/emoncms.
Freeboard – https://freeboard.io/
La piattaforma di visualizzazione va installata in una directory servita da Apache e può essere scaricata da GitHub con il comando:
1 |
sudo git clone https://github.com/Freeboard/freeboard.git |
Dalla medesima directory è accessibile (e configurabile) l’interfaccia di Freeboard.
I dati possono essere veicolati mediante un file JSON servito da Node-RED … ma questo lo vedremo in un prossimo articolo!!!