Markdown source

#Installazione Node-Red su RoadRunner

<abstract>
Appunti installazione Node-RED su scheda RoadRunner Acme Systems
</abstract>

### Testato su Debian Jessie Kernel 4.9.109-linux4sam_5.8++
### Installazione eseguita come utente root

<pre class="terminal">
apt-get install curl
apt-get install ntpdate
apt-get install sqlite
apt-get install npm

curl -sL https://deb.nodesource.com/setup_8.x | sudo bash -

apt-get install -y nodejs

curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
apt-get update && apt-get install yarn

npm install -g --unsafe-perm node-red
</pre>

Ora da terminale lanciare il comando:
<pre class="terminal">
node-red
</pre>

Dopo l'avvio CTRL+C - Verrà creata la directory dentro /root/.node-red. Ora dobbiamo creare un servizio per avviare Node Red automaticamente al boot della scheda:
<pre class="terminal">
nano /lib/systemd/system/node-red.service
</pre>

Inserire al suo interno:
<pre class="terminal">
[Unit]
Description=Node-RED 
After=syslog.target network.target

[Service]
ExecStart=/usr/bin/node-red 
WorkingDirectory=/root
User=root
Group=root
Nice=10
SyslogIdentifier=Node-RED
StandardOutput=syslog
Restart=on-failure
# Node-RED need a SIGINT to be notified to stop
KillSignal=SIGINT

[Install]
WantedBy=multi-user.target
</pre>

Aggiornare i servizi:
<pre class="terminal">
systemctl daemon-reload
systemctl enable node-red
systemctl start node-red
</pre>

Controllare la partenza del servizio Node Red
<pre class="terminal">
systemctl start node-red
</pre>

Eseguire un reboot e controllare l'avvio automatico di Node Red.<br><br>
Ora andiamo nella directory .node-red ed installiamo il pacchetto per gestire l'accesso con il browser in Node Red con utente e password.<br>
L'indirizzo è http://IP_RoadRunner:1880
<pre class="terminal">
npm install -g node-red-admin
</pre>

Esguire il comando per impostare utente e password di accesso
<pre class="terminal">
node-red-admin hash-pw
</pre>

<font color="blue">
Password: acmesystems<br>
Risultato: $2a$08$cdAk7WZqMq6Yu0Bh5U4LoeaVjv8GM.k5drbvjO8jyVkwxPo8RSvZi
</font>

Inserire utente e password dentro il file .node-red/settings.js

<pre class="terminal">
module.exports = {
    adminAuth: {
        type: "credentials",
        users: [{
            username: "acme",
            password: "$2a$08$cdAk7WZqMq6Yu0Bh5U4LoeaVjv8GM.k5drbvjO8jyVkwxPo8RSvZi",
            permissions: "*"
        }]
    },
</pre>

Riavviare il servizio:

<pre class="terminal">
systemctl restart node-red.service
</pre>

L'indirizzo per accedere a Node Red è http://IP_RoadRunner:1880<br><br>

Installiamo il necessario per vedere le porte seriali:

<pre class="terminal">
apt-get install python-pip
pip install pyserial
</pre>

Verifichiamo ora con il comando:
<pre class="terminal">
python -m serial.tools.list_ports
</pre>
Esempio di risultato ottenuto:<br>
/dev/ttyAMA0        
/dev/ttyUSB0        
/dev/ttyUSB1        
/dev/ttyUSB2        
/dev/ttyUSB3        
/dev/ttyUSB4        
/dev/ttyUSB5        
7 ports found

Ora installare i pacchetti in node red all'indirizzo http://indirizzo_ip_scheda:1880

<div class="alert alert-warning">
  <strong>Attenzione !</strong><br>
  <font color="red">
  Installare i pacchetti controllando con htop oppure top, attraverso il browser non si vede il termine dell'avvenuta installazione del pacchetto.
  </font>
</div>

Elenco pacchetti
<pre class="terminal">
node-red-contrib-config				# Configurazione variabili flusso e globali
node-red-contrib-contextbrowser		# Visualizza variabili flusso e globali	
node-red-contrib-cron				# Scheduler come cronjob Linux
node-red-contrib-file-function		# Lettura e scrittura file
node-red-contrib-file-upload		# Upload
node-red-contrib-modbus				# TCP / Modbus
node-red-contrib-mqtt-broker		# MQTT Broker
node-red-contrib-pythonshell		# Utilizzo con script python
node-red-contrib-splitter			# Funzioni stringhe
node-red-contrib-string				# Funzioni stringhe
node-red-dashboard					# Web Page Node Red	
node-red-node-rbe					# Report by Exception node - only passes on data if the payload has changed
node-red-contrib-roadrunner			# I/O scheda Roadrunner
node-red-node-serialport			# Comunicazione porte seriali
node-red-contrib-influxdb			# Database per utilizzo Grafana
node-red-contrib-serialport-rs485	# Comunicazioni RS 485
node-red-contrib-md5				# Hashing MD5
node-red-node-mysql					# Connect to  MySQL server
</pre>

Altri pacchetti interessanti
<pre>
node-red-contrib-light-scheduler	# Cron con schedulazione grafica
node-red-node-snmp					# SNMP Protocol
node-red-contrib-dht-sensor			# Sensori temperatura umidità DHT11 e DHT22
node-red-contrib-sensor-ds18b20		# Sensori temperatura
node-red-piervin-sensor-wired		# Comunicazione Wired
node-red-contrib-i2c				# Comunicazione 12c
</pre>

<pre class="terminal">
node-red-contrib-lcd20x4-i2c		# LCD su i2c 20X4

Questo pacchetto richiede:
sudo apt-get install python-smbus
sudo raspi-config
    Interfacing Options>I2C>Enable
</pre>

Se il nodo node-red-node-sqlite dovesse presentare problemi d'installazione eseguire in sequenza:

<pre class="terminal">
npm install node-gyp -g node-gyp
npm install sqlite3
npm outdated
npm update
apt-get install libsqlite3-dev
npm install sqlite3 --build-from-source --sqlite=/usr
npm audit fix
</pre>

Installare node-red-node-sqlite direttamente da console per problemi

Fermare prima il servizio:
<pre class="terminal">
systemctl stop node-red.service

cd .node-red

npm i --unsafe-perm node-red-node-sqlite
npm uninstall sqlite3
npm install --save sqlite3
npm rebuild
npm audit fix
</pre>

Altri pacchetti installati da http://IP_roadrunner:1880
<pre class="terminal">
node-red-contrib-roadrunner

reboot
</pre>

### In Node Red è possibile installare i paccheti anche da linea di comando come di seguito descritto:
<pre class="terminal">
cd .node-red

npm install node-red-contrib-config
npm install node-red-contrib-contextbrowser
npm install node-red-contrib-cron
npm install node-red-contrib-file-function
npm install node-red-contrib-file-upload
npm install node-red-contrib-modbus
npm install node-red-contrib-mqtt-broker
npm install node-red-contrib-pythonshell
npm install node-red-contrib-splitter
npm install node-red-contrib-string
npm install node-red-dashboard
npm install node-red-node-rbe
npm install node-red-contrib-roadrunner
npm install node-red-node-serialport
npm install node-red-contrib-influxdb
npm install node-red-contrib-serialport-rs485
npm install node-red-contrib-md5
npm install node-red-node-mysql
</pre>

Durante il processo d'installazione può esere richiesto di lanciare il comando: <b>npm audit fix</b><br>
Al termine dell'installazione dei pacchetti lanciare il comando : <b>systemctl restart nodered.service</b>

Alla pagina http://IP_roadrunner:1880/ui sono visibili i vari Dashboard creati.

## Links
* Appunti installazione Node Red su RoadRunner di Sergio Tanzilli <https://www.acmesystems.it/node-red>
* RoadRunner - System On Module <https://www.acmesystems.it/roadrunner>
* Berta D2 - Evaluation board for RoadRunner SoM <https://www.acmesystems.it/roadrunner_devkit>
* Documentazione Node Red <https://nodered.org/>
* Flows <https://flows.nodered.org>

@include='bio_mauro_tocci'