A volte serve un database un poco più moderno di *Sql per gestire i propri dati. Un'alternativa è evidentemente MongoDB, ma se siete interessati a raccogliere serie temporali di dati probabilmente InfluxDB è la scelta migliore. Io lo sto sperimentando raccogliendo i dati raccolti da una rete di PIC-WL-Sen.
In questa pagina è descritto come installare InfluxDB 1.x su Raspberry Pi (o su Debian a 32 bit in generale). Se disponete di un server a 64 bit, meglio InfluxDB 2.x e Grafana.
Pur essendo presente nel repository ufficiale Raspbian, ho deciso di installare dal sito ufficiale, per avere una versione più aggiornata (nota 1). I primi due passaggi potrebbero non essere necessari.
pi@rpi-audi:~ $ sudo apt-get install apt-transport-https
pi@rpi-audi:~ $ sudo apt-get install curl
pi@rpi-audi:~ $ curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
pi@rpi-audi:~ $ echo "deb https://repos.influxdata.com/debian stretch stable" | sudo tee
/etc/apt/sources.list.d/influxdb.list
pi@rpi-audi:~ $ sudo apt-get update
pi@rpi-audi:~ $ sudo apt-get install influxdb
Per visualizzare i dati via browser ho usato Grafana, anche questo installato senza usare il repository ufficiale Raspbian (nota 1):
pi@rpi-audi:~ $ curl https://bintray.com/user/downloadSubjectPublicKey?username=bintray
| sudo apt-key add -
pi@rpi-audi:~ $ echo "deb https://dl.bintray.com/fg2it/deb stretch main" |
sudo tee -a /etc/apt/sources.list.d/grafana.list
pi@rpi-audi:~ $ sudo aptitude update
pi@rpi-audi:~ $ sudo aptitude install grafana
pi@rpi-audi:~ $ sudo /bin/systemctl daemon-reload
pi@rpi-audi:~ $ sudo /bin/systemctl enable grafana-server
pi@rpi-audi:~ $ sudo /bin/systemctl start grafana-server
Il primo test può essere eseguito in locale, direttamente da linea di comando:
pi@rpi-audi:~ $ influx -execute 'create database PROVA'
pi@rpi-audi:~ $ influx -database 'PROVA' -execute 'insert mysensor
Temperatura=21,Pressione=1.001'
pi@rpi-audi:~ $ influx -database 'PROVA' -execute 'SELECT * FROM mysensor'
name: mysensor
time Pressione Temperatura
---- --------- -----------
1512916365274491145 1.001 21
In alternativa, sempre in locale, è possibile usare curl:
pi@rpi-audi:~ $ curl -i -XPOST 'http://localhost:8086/write?db=PROVA'
--data-binary 'mysensor Temperatura=22,Pressione=1.002'
HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: cfc615ee-ddb7-11e7-9963-000000000000
pi@rpi-audi:~ $ influx -database 'PROVA' -execute 'SELECT * FROM mysensor'
name: mysensor
time Pressione Temperatura
---- --------- -----------
1512816365274491145 1.001 21
1512816719270947960 1.002 22
Qualche esempio di comandi alla pagina InfluxDB 1 tips.
curl è perfetto per aggiornare un database remoto:
vv@vv-inspiron:~$ curl -i -XPOST 'http://rpi-audi.local:8086/write?db=PROVA'
--data-binary 'mysensor Temperatura=23,Pressione=1.003'
HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: 76d3dfc7-ddb8-11e7-9cea-000000000000
pi@rpi-audi:~ $ influx -database 'PROVA' -execute 'SELECT * FROM mysensor'
name: mysensor
time Pressione Temperatura
---- --------- -----------
1512816365274491145 1.001 21
1512816719270947960 1.002 22
1512816999540817119 1.003 23
Quanto mostrato ha il grave problema di non essere né autenticato né cifrato, cose essenziali se pensate di usare una macchina esposta su internet. La strada più semplice da percorrere, anche in vista di aggiornamenti da programma del database e dell'installazione del firewall, è quella di utilizzare un tunnel SSH: (nota 2 e nota 3).
Due alternative possibili:
vv@vv-inspiron:~$ ssh -L 9000:localhost:8086 pi@rpi-audi.local
vv@vv-inspiron:~$ curl -i -XPOST 'http://localhost:9000/write?db=PROVA' --data-binary 'mysensor Temperatura=24,Pressione=1.004'
È bene che il tunnel venga creato automaticamente con l'avvio della macchina e riavviato nel caso di caduta. Se usate Raspbian con installato systemd (default) la cosa è semplice:
pi@RPi-vv1:~ $ sudo nano /etc/systemd/system/sshtunnel.service
[Unit]
Description=SSH Tunnel
After=network.target
[Service]
Restart=always
RestartSec=20
User=pi
ExecStart=/usr/bin/ssh -NT -o ServerAliveInterval=60 -L 9000:localhost:8086
pi@rpi-audi.local
[Install]
WantedBy=multi-user.target
pi@RPi-vv1:~ $ sudo systemctl enable sshtunnel
Quindi riavviare il Rasperry Pi (o usare sudo systemctl start sshtunnel).
Questo metodo può essere evidentemente utilizzato per avviare automaticamente al boot qualunque programma eseguibile.
Se la macchina che ospita InfluxDB è connessa ad internet, è buona cosa configurare il firewall:
pi@rpi-audi:~ $ cat firewall.sh
#!/bin/sh
iptables -F
iptables -t mangle -F
iptables -t nat -F
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
ip6tables -F
ip6tables -X
ip6tables -t mangle -F
ip6tables -t mangle -X
ip6tables -P INPUT DROP
ip6tables -P OUTPUT DROP
ip6tables -P FORWARD DROP
# Generale
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 128:65535 -j
DROP
# Traffico locale
iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -i lo -j ACCEPT
#ssh
iptables -A INPUT -p TCP --dport ssh -j ACCEPT
# Grafana
iptables -A INPUT -p TCP --dport 3000 -j ACCEPT
Dopo i test (DOPO i test), la configurazione del firewall può essere resa permanente:
root@athena:~# aptitude install iptables-persistent
Oppure dpkg-reconfigure iptables-persistent
Pagina creata nel dicembre 2017
Ultima modifica di questa pagina: 13 dicembre 2017
Il taccuino tecnico - Permanentemente in fase di
riscrittura
Copyright 2013-2024, Vincenzo Villa (https://www.vincenzov.net)
Quest'opera è stata rilasciata con licenza Creative Commons | Attribuzione 4.0 Internazionale (CC BY 4.0)