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.
Abbiamo già visto come installare la piattaforma in un articolo precedente, vediamo ora qualche semplice esercizio per prendere confidenza con la piattaforma.
ESERCIZIO 1
Il nodo Inject consente di iniettare messaggi all’interno di un flusso cliccando sul bottone o con altre logiche (all’avvio, a scadenze regolari, ecc).
Per aggiungere il nodo basta cercarlo nella paletta dei nodi e tenendolo cliccato spostarlo sullo spazio di lavoro. Sulla barra di destra possono essere viste tutte le informazioni riguardanti il nodo selezionato (tab Info) mentre un doppio click consente di accedere alla configurazione del nodo stesso.
Il nodo Debug consente di visualizzare ogni messaggio (o parte di esso) sulla barra di destra nel tag Debug; normalmente viene visualizzato solo il payload del messaggio ma è possibile visualizzare un ulteriore campo o addirittura tutto il messaggio.
Aggiungiamo un nodo allo spazio di lavoro.
Non resta ora che connettere i nodi aggiunti ovvero connettere il morsetto di uscita (a destra del nodo) dell’Inject con il morsetto di ingresso (a sinistra del nodo) del Debug, per far ciò non serve altro che cliccare sul nodo di uscita e, tenendo premuto il tasto del mouse, spostarsi sul morsetto di ingresso, in questa maniera al rilascio verrà disegnato un connettore tra questi due morsetti.
Proviamo ora a rendere questa informazione più leggibile, per farlo aggiungiamo un nodo function che ci permette di manipolare il contenuto del messaggio mediante del codice JavaScript.
Aggiungiamo quindi un nodo Function selezionandolo dal tab edit e configuriamolo (mediante doppio click) aggiungendo il codice di seguito riportato.
1 2 3 4 5 6 |
// Creiamo in oggetto Date dal contenuto del payload var date = new Date(msg.payload); // Modifichiamo il payload scrivendoci la stringa contenete la data formattata msg.payload = date.toString(); // Ritorniamo il messaggio (che equivale a lasciarlo fluire sui morsetti di uscita del nodo) return msg; |
Clickkiamo Ok per chiudere la finestra di editing, colleghiamo la funzione tra Inject e Debug e procediamo al deployment tramite il bottone di deploy.
Facile! Ora si possono guardare tutti gli altri nodi già presenti in Node-RED e quelli che possono essere installati da http://flows.nodered.org/ e perdere qualche nottata giocando con questa potente piattaforma.
Permalink
Hello Valerio,
I’m hoping you can help me a little as I feel im going crazy now 🙂
I have been stuck the pass days using your “Phant” Node-Red node.
I have a json string that looks like this:
{
“gw_id”: “1234567890”,
“payload”: “QCsSASaABAABSSVFeHBjkQ==”,
“f_cnt”: 4,
“lora”: {
“spreading_factor”: 7,
“bandwidth”: 125,
“air_time”: 51456000
},
“coding_rate”: “4/5”,
“timestamp”: “2017-10-28T07:32:20.087Z”,
“rssi”: -33,
“snr”: 9.8,
“dev_addr”: “1234567890”,
“frequency”: 868100000
}
When I put this object into connection node of the example you have provided, like so:
var object = {
“gw_id”: “1234567890”,
“payload”: “QCsSASaABAABSSVFeHBjkQ==”,
“f_cnt”: 4,
“lora”: {
“spreading_factor”: 7,
“bandwidth”: 125,
“air_time”: 51456000
},
“coding_rate”: “4/5”,
“timestamp”: “2017-10-28T07:32:20.087Z”,
“rssi”: -33,
“snr”: 9.8,
“dev_addr”: “1234567890”,
“frequency”: 868100000
}
msg.object = object;
msg.object.timestamp = msg.payload;
return msg;
I get the following error when I hit deploy…
28 Oct 11:12:45 – [red] Uncaught Exception:
28 Oct 11:12:45 – TypeError: Cannot read property ‘fields’ of null
at Phant.add (/Users/development/.node-red/node_modules/phant-client/phant.js:308:27)
at /Users/development/.node-red/node_modules/node-red-contrib-phant/phant/phant.js:70:17
at /Users/development/.node-red/node_modules/phant-client/phant.js:146:21
at Request.handleRequestResponse [as _callback] (/Users/development/.node-red/node_modules/unirest/index.js:461:25)
at Request.self.callback (/Users/development/.node-red/node_modules/request/request.js:373:22)
at emitTwo (events.js:106:13)
at Request.emit (events.js:191:7)
at Request.<anonymous> (/Users/development/.node-red/node_modules/request/request.js:1318:14)
at emitOne (events.js:101:20)
at Request.emit (events.js:188:7)
Ling-MBP:.node-red development$
all nodes are found in the flow ok.
Thanks in advance for any help you can provide me with.
Ling
Permalink
Some notes:
1. msg.payload is the object that the node push on phant so you will need
2. Try to make linear your JSON like:
var object = {
“gw_id”: “1234567890”,
“payload”: “QCsSASaABAABSSVFeHBjkQ==”,
“f_cnt”: 4,
“lora_spreading_factor”: 7,
“lora_bandwidth”: 125,
“lora_air_time”: 51456000,
“coding_rate”: “4/5”,
“timestamp”: “2017-10-28T07:32:20.087Z”,
“rssi”: -33,
“snr”: 9.8,
“dev_addr”: “1234567890”,
“frequency”: 868100000
}
3. what lora board are you using????? I’m curious as a monkey about new technologies!
Permalink
Also where is it you specify please the ip of where phant/spark is running?
there is only fields for keys.
Thanks in advance for help!
Ling
Permalink
Actually works with public https://data.sparkfun.com/ but if you check the code on phant.js (https://github.com/valerio-vaccaro/node-red-contrib-phant/blob/master/phant/phant.js) lines 40-42 you can see:
manageUrl: “https://data.sparkfun.com/streams/” + this.publicKey,
outputUrl: “https://data.sparkfun.com/output/” + this.publicKey,
inputUrl: “https://data.sparkfun.com/input/” + this.publicKey,
so if you update this url it will work for your local installation.
If you do programmatically please consider to release your code on github!
Permalink
I have changed the “connection” node URL = ip to my server
instead of
Now I see…
node: 78b7c71b.8e2658
Any ideas please Sir,
Ling