Come iniziare

Anche se questo e' il successore del progetto 100+100 potrebbe essere utile leggere la sua documentazione per capire il funzionamento alla base del progetto201. (a destra e' presente l'indice dei contenuti) Wiki del progetto 100+100

Se occorre operare su una rete con restrizioni e su computer con account senza diritti di amministratore consiglio di utilizzare un portatile connesso all'hotspot del proprio telefono: per installare software e per il processo di flash del sistema operativo occorre avere diritti di amministrazione.

Utilizzare dispositivi personali aggira molti problemi e spesso velocizza le operazioni.

Un'altra valida soluzione per i diritti di amministrazione consiste nell'utilizzare una macchina virtuale.

Nella guida quando viene indicato di modificare un file e' possibile utilizzare l'editor di testo "nano".

                
                    
                    
# Sostituire <percorso_file> con il percorso del file da modificare
nano <percorso_file>
                
            

Per salvare il file premere Ctrl + X per uscire e specificare di salvare le modifiche digitando "y" e premendo invio.

Nella guida quando viene indicato di copiare un file utilizzare il comando "cp".

                
                    
                    
# Sostituire <orig> con il percorso del file da copiare e
# <dest> con il percorso della cartella di destinazione
cp <orig> <dest>
                
            

Per copiare le cartelle usare il comando "cp" con la flag "-r" (recursive, ricorsivo)

                
                    
                    
# Sostituire <orig> con il percorso della cartella da copiare e
# <dest> con il percorso della cartella di destinazione
cp -r <orig> <dest>
                
            
Indice dei contenuti:




  1. Raspbian

    Installare Raspbian/Raspberry Pi OS su Raspberry Pi (la centralina), configurarlo e aggiornarlo.

    Videoguida:
    Guida testuale:
    • Ci sono due metodi per caricare il sistema operativo sulla scheda SD:

      Entrambe i metodi cancellano tutto il contenuto della periferica per installarci il sistema operativo, essere sicuri di selezionare la scheda SD corretta e di non avere file importarti sopra.
      Entrambe i software citati qui sotto (Etcher e Raspberry Pi Imager) effettuano prima il processo di flash e poi eseguono una verifica per assicurarsi che l'immagine sia stata caricata correttamente sulla scheda SD.

      Primo metodo: Scaricare dal sito ufficiale l'immagine del sistema operativo (Link)

      Pagina download Raspbian

      Se si desidera utilizzare un monitor collegato a Raspberry Pi per visualizzare l'interfaccia: installare "Raspberry Pi OS (32-bit) with desktop and recommended software" che include il desktop e altri software utili (ad esempio il browser chromium).

      Se si desidera affidare la responsabilita' di visualizzare l'interfaccia ad un altro dispositivo e utilizzare Raspberry Pi come puro server (e installarci sopra solamente il software necessario) si consiglia di installare "Raspberry Pi OS (32-bit) Lite"

      e utilizzare un software per eseguire il flash sulla scheda SD (tipo etcher, link )

      Consiglio di scompattare il file zip e di eseguire il flash direttamente con l'immagine al suo interno poiche' diverse volte che ho provato a flashare il file zip il flash falliva o il sistema operativo non si avviava...
      Raspberry Pi Imager

      Premere su "Select Image" e selezionare il file immagine del sistema operativo, cliccare su "Select target" e selezionare la scheda SD di destinazione e infine premere "Flash!" per iniziare il processo.


      Secondo metodo: utilizzare Raspberry Pi Imager, il software consigliato dalla Raspberry Pi foundation ( Link). Con questo metodo non occorre neppure scaricare l'immagine, ci pensa il software.

      Raspberry Pi Imager

      Premere su "CHOOSE OS" per scegliere il sistema operativo da installare. Selezionare "Raspberry Pi OS (Other)", perche' la prima opzione include il desktop ma senza software aggiuntivo, e scegliere "Raspberry Pi OS (lite)" per installare il sistema operativo senza interfaccia (server puro) oppure "Raspberry Pi OS (full)" per installare il sistema operativo con interfaccia e software aggiuntivo (Raspberry Pi visualizzera' l'interfaccia grafica su un monitor via HDMI).

      Premere su "CHOOSE SD CARD" per scegliere la scheda SD su cui installare il sistema operativo e premere "WRITE" per iniziare il processo di flash.

      Verra' chiesto se si e' sicuri di cancellare il contenuto della periferica per installare il sistema, premere "YES"

      Se il processo di flash fallisce provare a formattare la scheda SD, per Windows consiglio il software "SD card formatter":

      Andare nella pagina download cliccando qui

      Sotto a "SD Memory Card Formatter Download for Windows/Mac" cliccare su "For Windows", andare in fondo alla pagina e cliccare "Accept".

      Estrarre l'eseguibile dal file zip e installare il software.

      SD Card Formatter

      Per utilizzare il software scegliere la scheda SD cliccando su "Select card", scegliere un nome qualsiasi del volume sotto a "Volume label" e cliccare su "Format".

    • Consiglio fin da subito di collegare Raspberry alla rete locale con il cavo Ethernet e non con il Wi-Fi poiche' nel momento in cui si creera' la rete Wi-Fi con Hostapd l'interfaccia wireless sara' occupata e non sara' possibile utilizzarla per installare altri software, cercare online soluzioni di problemi, controllare Raspberry via SSH, ...
      Se si e' scelto di installare il sistema operativo senza GUI consiglio di lavorare su Raspberry da "remoto" utilizzando SSH in modo da poter copiare e incollare i comandi da questa pagina. Per abilitarlo subito al primo avvio creare un file chiamato "ssh" (senza estensione, anche vuoto) e inserirlo nella root della scheda SD (il volume si chiama "boot" ed e' formattato in FAT32).
      Se il computer non permette di accedere al volume della scheda SD disconnettere la periferica e reinserirla nel computer.

      Per connettersi via SSH occorre conoscere l'indirizzo IP del raspberry e la password.

      Se si cerca di connettersi da un computer sulla rete locale (come in questo caso, dobbiamo ancora configurare Raspberry per creare la rete Wi-Fi), utilizzare l'IP del Raspberry sulla rete locale, altrimenti se si e' collegati alla rete di Hostapd utilizzare l'IP del Raspberry della rete Hostapd
      Rete del progetto201

      Se l'indirizzo IP del raspberry e' da impostare staticamente allora si conosce gia' l'IP del raspberry.

      Per impostare l'indirizzo IP eseguire da terminale il comando:

                                      
                                          
                                          
      # se non dovesse funzionare provare "ip a add <ip>/<subnet_mask> dev <interface>"
      # > Sostituire <ip> con l'ip, <subnet_mask> con la subnet mask e <interface> con l'interfaccia ("eth0", "wlan0", ...)
      ifconfig <interface> <ip> netmask <subnet_mask>
                                      
                                  

      Se occorre impostare l'indirizzo IP potrebbe essere necessario anche impostare il gateway, utilizzare il comando:

                                      
                                          
                                          
      # Sostituire <ip_gateway> con l'IP del gateway, <interface> con l'interfaccia ("eth0")
      sudo route add default gw <ip_gateway> <interface>
                                      
                                  

      E potrebbe essere necessario impostare i server DNS, per fare questo occorre modificare il file "/etc/resolv.conf".

      Per ogni server DNS da impostare aggiungere una riga come la seguente:

                                      
                                          
                                          
      # Sostituire <ip_dns> con l'IP del server DNS
      nameserver <ip_dns>
                                      
                                  

      Il modo piu' semplice per sapere se e' necessario impostare qualcosa e' guardare alle impostazioni dei computer gia' presenti nella rete locale:

      su Windows provare a guardare su "Impostazioni Rete e Internet -> Opzioni scheda -> tasto destro sulla interfaccia Ethernet (puo' avere altri nomi), Proprieta' -> clicca su 'Protocollo Internet versione 4' e poi su Proprieta". Da qui e' possibile vedere il "gateway predefinito" e gli IP dei server DNS. (se presenti, impostarli con i comandi qua sopra)

      Se l'indirizzo IP e' assegnato dinamicamente sul terminale digitare il seguente comando per visualizzare l'IP delle interfacce:

                                  
                                      
                                      
      # se non dovesse funzionare provare "ip a"
      ifconfig
                                  
                              

      L'utente e' "pi" e la password di default e' "raspberry".

      A questo punto utilizzare un client SSH tipo putty (link) per connettersi a Raspberry Pi via SSH.
      Putty

      Inserire l'indirizzo IP sotto a "Hostname (or IP address)" e assicurarsi che "Port", la porta del servizio SSH, sia 22.

      Premere su "Open", scrivere "pi" per "Login as", dare invio e poi inserire la password "raspberry" e premere invio.

    • Se si e' scelto di installare il sistema operativo con la GUI seguire la wizard per la configurazione iniziale che fara' configurare Wi-Fi, password di root, layout della tastiera, ... e infine far aggiornare il software e far riavviare il raspberry.
      Per non collegarsi alla rete Wi-Fi premere su "skip" quando viene richiesto su quale rete si desidera collegarsi.
      Anche se il sistema operativo ha la GUI puo' comunque risultare piu' comodo utilizzare SSH per controllare il Raspberry Pi perche' non e' piu' necessario collegare monitor, mouse e tastiera.
  2. AUTOINSTALL

    Utilizzare AUTOINSTALL per installare e configurare automaticamente (quasi) tutto quello che serve. Il Raspberry si riavviera' automaticamente un paio di volte

    Videoguida:
    Nel video, dopo aver abilitato VNC, si vede l'utilizzo del terminale come se si fosse davanti al desktop del Raspberry ma tutti i comandi sono riproducibili anche sulla shell remota via SSH.
    Per scaricare AUTOINSTALL e' stato utilizzato il comando git ma e' possibile anche andare sul repository Github di AUTOINSTALL, scaricare lo zip ed estrarlo da interfaccia grafica.
    Guida testuale:
    • Leggere la documentazione e scaricare AUTOINSTALL dal repository qui

      La documentazione contiene alcuni dei possibili errori e le relative soluzioni e quindi e' consigliato leggerla poiche' potrebbe essere necessario eseguire debugging/throubleshooting
      La documentazione e' anche utile a capire se ha senso installare e configurare tutti i software... Ad esempio commentare o cancellare le istruzioni che installano i seguenti software e eventualmente eseguirli successivamente manualmente:
      1. internalfunctions.sh installa Unclutter, che rende difficile lavorare su raspberry poiche' nasconde il cursore del mouse (utile in ambiente di produzione se si usa uno schermo touch)
      2. internalfunctions.sh imposta il wallpaper del 100+100, se il comando da errore ignorarlo/decommentarlo poiche' il wallpaper non e' fondamentale
      3. internalfunctions.sh importa il database del 100+100, e' possibile saltare l'import e eseguirlo dopo con il database del progetto201
      4. automysql.sh modifica il metodo di accesso all'account root di MySQL: se eseguito prima della importazione l'importazione fallira'
      5. internalfunctions.sh scarica dal repository del 100+100 e posiziona nella cartella "/var/www/html" i file che Apache restituira' ai client web (browser)
      6. Valutare se e' necessario "correre al debugging" per errori di PHPMyAdmin: ad esempio se qualcosa va storto durante la sua installazione e' consigliabile saltarla e permettere allo script di installare e configurare servizi piu' importanti prima di cercare di risolvere il problema di PHPMyAdmin. PHPMyAdmin NON e' mission critical.

      Se un comando da errore e' anche possibile commentare tutte le righe precedenti per evitare di ripetere l'intera esecuzione dello script

      Ogni script richiamato da AUTOINSTALL ha la sua documentazione
    • Aprire lo script "autoinstall.sh" e modificare a piacere i valori delle variabili sotto a "# -- VARIABLES"

      SUGGERIMENTO: le variabili piu' importanti sono:
      1. devmode: true installa PHPMyAdmin per avere una UI per gestire i database, false installa Unclutter, software che nasconde il mouse (adatto per schermi touch screen)
      2. mysqlpass: password dell'utente root di MySQL. Verra' utilizzata da PHP per eseguire operazioni sul database del progetto, nome del database: "db100_100"
      3. hostapd_ssid: SSID della rete Wi-Fi generata da Raspberry Pi (identifica la rete)
      4. hostapd_password: password della rete Wi-Fi

      Le altre possono essere lasciate a valori di default

      ESEMPIO: anche se vengono create piu' reti wireless con lo stesso range di indirizzi non c'e' pericolo di conflitti di IP... Le reti non si vedono perche' Raspberry si comporta da NAT (IP Masquerade) e quindi l'unico indirizzo IP che puo' andare in conflitto con altri indirizzi e' l'indirizzo dell'interfaccia ethernet "eth0" (rete cablata).

      MIGLIORAMENTO: disattivare, per motivi di sicurezza (riduciamo i diritti dei dispositivi al minimo), il masquerade per isolare i nodi nelle comunicazioni verso l'esterno (verso Internet e rete sulla eth0): link documentazione ufficiale

    • Salvare e eseguire lo script da terminale con il comando
                                  
                                      
                                      
      # posizionarsi prima con il terminale nella cartella dello script
      ./autoinstall.sh
                                  
                              



    Se si desidera uscire dall'interfaccia visualizzata con chromium occorre chiuderlo premendo alt + f4

    Se si desidera fermare unclutter per visualizzare di nuovo il cursore fino al prossimo riavvio occorre conoscere il PID, numero identificativo del processo.

    Con il seguente comando e' possibile conoscere il PID di unclutter:

                            
                                
                                
    # top visualizza i processi e "| grep" serve per vedere
    # se l'output del comando precedente contiene "unclutter"
    # > occorre attendere qualche secondo, quando appare premere Ctrl + C per terminare il comando
    top | grep unclutter
                            
                        

    Il primo numero e' il PID. Eseguire il seguente comando per terminare il processo:

                            
                                
                                
    # Sostituire <pid> con il PID di unclutter
    kill <pid>
                            
                        

    Come specificato precedentemente, lo script autoinstall.sh installa di default i vecchi file del progetto 100+100 e per questo motivo ha senso scaricare e modificare manualmente lo script.

    In futuro sara' possibile automatizzare anche il download con i seguenti comandi (modificare i valori delle variabili prima di eseguire i comandi):

    E' possibile eseguire i comandi anche adesso ma poi occorrera' cancellare i file in /var/www e il database del progetto 100+100.
                            
                                
                                
    # -- VARIABILI
    # booleans that differ the scripts result
    DEVMODE=false  # development mode
    DHCPDNS=true  # true = install and configure dnsmasq
    # mysql related
    MYSQLPASS="mysqlpassword"  # mysql password
    # chromium related
    TOUCHDEVICE="Virtual core XTEST pointer"  # touch device name
    # hostapd related
    HOSTAPD_ID="192.168.4.1/24"  # raspberry ip/cidr
    HOSTAPD_SSID="nameofnetwork"  # SSID of the access point
    HOSTAPD_PASSWORD="longerthan8charspassword"  # PWD of the access point
    # dnsmasq related
    DHCPRANGE_START="192.168.4.2" # first ip of dhcp range
    DHCPRANGE_STOP="192.168.4.20" # last ip of dhcp range
    DHCPRANGE_SUBMASK="255.255.255.0" # subnet mask for dhcp
    DOMAIN="progetto201.com" # domain name
    DNSMASQ_CONF="/etc/dnsmasq.conf" # dnsmasq's config file
    DNSMASQ_DNSFILE="/etc/hosts-dns" # dnsmasq's hosts file
    # -- DOWNLOAD
    cd /home/pi/Documents/
    git clone https://github.com/progetto201/progetto201-autoinstall.git
    cd progetto201-autoinstall
    # -- MODIFICA FILE
    sed -i autoinstall.sh -e "s|devmode=false|devmode='${DEVMODE}'|g" \
    -e "s|dhcpdns=true|dhcpdns='${DHCPDNS}'|g" \
    -e "s|mysqlpass=\"mysqlpassword\"|mysqlpass='${MYSQLPASS}'|g" \
    -e "s|touchdevice=\"Virtual core XTEST pointer\"|touchdevice='${TOUCHDEVICE}'|g" \
    -e "s|hostapd_ip=\"192.168.4.1/24\"|hostapd_ip='${HOSTAPD_ID}'|g" \
    -e "s|hostapd_ssid=\"nameofnetwork\"|hostapd_ssid='${HOSTAPD_SSID}'|g" \
    -e "s|hostapd_password=\"longerthan8charspassword\"|hostapd_password='${HOSTAPD_PASSWORD}'|g" \
    -e "s|dhcprange_start=\"192.168.4.2\"|dhcprange_start='${DHCPRANGE_START}'|g" \
    -e "s|dhcprange_stop=\"192.168.4.20\"|dhcprange_stop='${DHCPRANGE_STOP}'|g" \
    -e "s|dhcprange_submask=\"255.255.255.0\"|dhcprange_submask='${DHCPRANGE_SUBMASK}'|g" \
    -e "s|domain=\"progetto201.com\"|domain='${DOMAIN}'|g" \
    -e "s|dnsmasq_conf=\"/etc/dnsmasq.conf\"|dnsmasq_conf='${DNSMASQ_CONF}'|g" \
    -e "s|dnsmasq_dnsfile=\"/etc/hosts-dns\"|dnsmasq_dnsfile='${DNSMASQ_DNSFILE}'|g" \
    autoinstall.sh
    # -- ESEGUI LO SCRIPT
    ./autoinstall.sh
                            
                        

    ATTENZIONE: i comandi vengono memorizzati in una cronologia visibile con il comando "history" e quindi le password sono visibili in chiaro.

    Cancellare la cronologia dei comandi con il comando:

                            
                                
                                
    history -c
                            
                        
  3. Test di AUTOINSTALL

    A questo punto dovrebbero essere installati e configurati MySQL, Apache, PHP, dnsmasq, Hostapd.

    Verificare che tutto funzioni correttamente.

    Videoguida:
    Guida testuale:
    • Provare con un cellulare a collegarsi alla rete Wi-Fi creata da Raspberry: se funziona significa che Hostapd ha creato la rete ed e' possibile collegarsi senza problemi
    • Provare poi ad aprire il browser su Raspberry e andare sulla pagina "localhost": se viene visualizzata la pagina di benvenuto di Apache vuol dire che Apache riesce a rispondere alle richieste.
      Se e' stata restituita la pagina del progetto 100+100 vuol dire che prima di eseguire lo script AUTOINSTALL non sono state commentate quelle istruzioni di internalfunctions.sh che scaricavano i vecchi file. Se la pagina viene restituita vuol dire comunque che Apache funziona.
    • Provare a collegarsi da telefono con il browser alla pagina web restituita da Apache: se funziona vuol dire che Apache e' accessibile sulla rete locale creata da Raspberry ma soprattutto che dnsmasq (funzionante come server DHCP) ha fornito un IP automaticamente.
      Per accedere alla pagina web e' necessario sapere l'indirizzo IP del raspberry: in AUTOINSTALL era presente la variabile "hostapd_ip", se non e' stata modificata l'IP e' "192.168.4.1", altrimenti e' il valore della variabile. (Ignorando il CIDR, il numero che e' dopo la slash "/", slash compresa) E' possibile anche utilizzare il comando:
                                          
                                              
                                              
      # se non dovesse funzionare provare "ip a"
      ifconfig
                                          
                                      
      E controllare l'IP della "wlan0", l'interfaccia wireless del raspberry. Se si vuole provare a collegarsi da un computer sulla rete cablata inserire l'IP della interfaccia "eth0".
      E' possibile accertare il suo funzionamento anche andando da smartphone nella pagina per collegarsi alle reti Wi-Fi e cercare nei sotto menu' "Indirizzo IP". (provare a cliccare di nuovo sulla rete, provare a guardare nella sezione avanzate, ...)
    • Provare a creare in "/var/www/html", la cartella di Apache, un file PHP e inserire qualcosa di semplice tipo:

                                      
                                          
                                          
      <?php
      echo "hei! Questo e' un test! se vedi solo questa stringa (senza 'php' e i tag) vuol dire che PHP e' installato correttamente";
      ?>
                                      
                                  

      E dopo provare a richiederlo da browser: se appare il messaggio senza "<?php", "echo", ";" e "?>" vuol dire che PHP funziona.

      Se era apparsa la pagina del progetto 100+100 ed e' apparsa la planimetria vuol dire che PHP funziona (e anche MySQL).
    • Per testare dnsmasq come server DNS provare a collegarsi alla pagina web inserendo nella barra degli indirizzi "raspberry" e "raspberry.progetto201.com", dovrebbero funzionare entrambe.
    • Provare MySQL cercando di creare un database via PHPMyAdmin (se e' stato installato, e' possibile accedervi alla pagina "localhost/phpmyadmin" su raspberry) e poi importare il file SQL dalla sezione import:

      Pagina importazione


      Cliccare su "Importa", cliccare su "Scegli il file" e cercare sul computer il file .sql del progetto 201. Infine cliccare su "Esegui".




      oppure importando il file .sql del progetto 201 (presente nel repository progetto201-api) con il comando:
                                      
                                          
                                          
      # sostituisci <path> con il percorso del file sql
      sudo mysql < "<path>"
                                      
                                  
      E provare a eseguire una query:
                                      
                                          
                                          
      sudo mysql -e "SELECT * FROM db100_100.t_options"
                                      
                                  
      Dovrebbe apparire una tabella simile a questa:
                                      
                                          
                                          
      +----+--------------+---------------+---------------+-----------+
      | id | color_scheme | min_timestamp | max_timestamp | map       |
      +----+--------------+---------------+---------------+-----------+
      |  1 | red darken-2 |             0 |             0 | realistic |
      +----+--------------+---------------+---------------+-----------+
                                      
                                  
      Se non si ha i permessi apparira' un errore simile a questo:
                                          
                                              
                                              
      ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
                                          
                                      
      Se e' stato eseguito lo script AUTOINSTALL senza modifiche probabilmente automysql.sh ha modificato la password. Prima di eseguire i comandi occorre accedere con la nuova password, sostituire nei comandi "sudo mysql" con il seguente comando:
                                          
                                              
                                              
      # sostutisci <username> con il nome utente
      # > nota: non c'e' spazio tra il nome utente e la "-u"
      # > nota 2: dopo "-p" e' possibile aggiungere "-e" e poi una istruzione SQL per eseguirla
      # > nota 3: se si desidera eseguire istruzioni di un file sql dopo "-p"
      # > inserire "< <path>" dove <path> e' il percorso del file
      sudo mysql -u<username> -p
                                          
                                      

      Premere invio e verra' chiesta la password. E' possibile conoscere la password guardando la variabile "mysqlpass" in autoinstall.sh.

      Eseguire la query SQL per ottenere la tabella con i dati:

                                          
                                              
                                              
      SELECT * FROM db100_100.t_options;
                                          
                                      
      Dovrebbe apparire la tabella indicata sopra. Uscire dal client MySQL digitando "quit" e premendo invio.
  4. Modifica password MySQL

    Se fino ad ora non e' stata modificata la password di MySQL occorre modificarla per permettere a PHP di collegarsi al database.

    Ci sono due opzioni:

    Entrambe le opzioni fanno la stessa cosa, scegliere quella che in quel momento sembra la piu' veloce. E' possibile fare un copia incolla? Eseguire la query SQL e' molto probabilmente la soluzione piu' veloce.
    • Eseguire automysql.sh di AUTOINSTALL in questo modo:
                                  
                                      
                                      
      # posizionarsi prima con il terminale nella cartella dello script e
      # sostituire <pass> con la nuova password per l'utente root
      ./automysql.sh -mysqlpass <pass>
                                  
                              
    • Eseguire la query SQL senza automysql.sh:
                                  
                                      
                                      
      # sostituisci <pass> con la nuova password di MySQL dell'utente root
      sudo mysql -e "GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<pass>';FLUSH PRIVILEGES;"
                                  
                              
  5. Frontend e API

    Installare la frontend e l'api del progetto201.

    Prima di spostare/copiare i file del progetto201 cancellare i file in "/var/www/html" con il comando:

                            
                                
                                
    sudo rm -rf /var/www/html/*
                            
                        
    Videoguida:
    Guida testuale:
    • Scaricare la backend API dal suo repository: Clicca qui

      Posizionare il contenuto della cartella "www" in "/var/www": dovrebbe ora contenere la cartella "credentials" e "html". La cartella "credentials" contiene il file "credentials.ini" con le credenziali che verranno usate da PHP per accedere a MySQL e al database. La cartella "html" contiene i file accessibili dai browser che si collegano ad Apache.

      Modificare il file credentials.ini:

                                      
                                          
                                          
      DB_HOST=localhost
      DB_USER100=user
      DB_PASS100=pwd
                                      
                                  
      Sostituire "user" con lo username (se non sono stati creati altri account usare "root") e al posto di "pwd" digitare la password. Puo' essere utile cambiare "DB_HOST" solo se il database si trova su un altro server.
      Per verificare l'installazione dell'API provare ad accedere alla pagina "http://localhost/api/colors/usercolor.php" dal browser di raspberry. Se appare un JSON senza errori, simile a questo l'API funziona:
                                          
                                              
                                              
      {"errors":[],"data":{"id":"6","color_name":"red","color_hex":"#f44336"}}
                                          
                                      

    • Scaricare la frontend dal suo repository: Clicca qui

      Posizionare il contenuto della cartella "www" in "/var/www": adesso nella cartella "/var/www/html" dovrebbe essere presente un file, "index.html" e due cartelle, "static" e "api" (cartella dell'API)

      Per verificare l'installazione della frontend provare ad accedere alla pagina "localhost" dal browser di raspberry.

      Dovrebbe apparire una pagina simile a questa:

      Home del progetto201

  6. Mosquitto

    Installare mosquitto, broker MQTT per gestire i dati ricevuti via MQTT dai nodi e configurarlo per accettare solo nodi con username e password. Digita i seguenti comandi oppure copia e incolla.

    Videoguida:
    Guida testuale:
                        
                            
                            
    # Aggiorniamo i repository di sistema
    sudo apt-get update
    # Installiamo mosquitto
    sudo apt-get install mosquitto mosquitto-clients -y
    # Assicuriamoci che parta all'avvio del OS
    sudo systemctl enable mosquitto.service
    # Creiamo un utente e una password (sostituisci <user> con il nome utente desiderato).
    # Il terminale chiedera la password desiderata dopo aver premuto invio
    sudo mosquitto_passwd -c /etc/mosquitto/passwd <user>
    # Occorre configurare il file di configurazione di mosquitto:
    # opzione 1:
    #  digita:
    #
    #         sudo nano /etc/mosquitto/conf.d/default.conf"
    #
    #  e poi scrivi nel file:
    #
    #        allow_anonymous false
    #        password_file /etc/mosquitto/passwd
    #
    # opzione 2: digita questo comando che automatizza i passaggi descritti qui sopra:
    sudo printf "allow_anonymous false\npassword_file /etc/mosquitto/passwd" >> "/etc/mosquitto/conf.d/default.conf"
    # E riavvia mosquitto
    sudo systemctl restart mosquitto
                        
                    
  7. MQTT_MANAGER

    Scaricare lo script MQTT_MANAGER, configurarlo e abilitare la sua esecuzione all'avvio.

    Videoguida:
    Guida testuale:
    • Scaricare MQTT_MANAGER dal suo repository: Clicca qui
    • Installare le dipendenze del software (dopo essersi posizionati nella cartella di mqtt_manager) eseguendo questo comando:
                                  
                                      
                                      
      pip3 install -r requirements.txt
                                  
                              
    • Creare un file ini di configurazione con la seguente struttura:

                                  
                                      
                                      
      [Database]
      username = <username DB>
      password = <password DB>
      host = <dominio/IP DB>
      database = <nome DB>
      [MQTT broker]
      username = <username MQTT>
      password = <password MQTT>
      host = <dominio/IP MQTT>
      port = <porta MQTT>
                                  
                              

      Dove:

      • username, sezione "[Database]": nome utente per connettersi a MySQL ("root")
      • password, sezione "[Database]": password per connettersi a MySQL (la password configurata precedentemente)
      • host, sezione "[Database]": indirizzo IP o nome dominio del server MySQL ("localhost")
      • database, sezione "[Database]": nome del database ("db100_100")
      • username, sezione "[MQTT broker]": nome utente per connettersi al broker MQTT (in questo caso a mosquitto, scegliere il nome utente configurato precedentemente)
      • password, sezione "[MQTT broker]": password per connettersi al broker MQTT
      • host, sezione "[MQTT broker]": indirizzo IP o nome dominio del server con il broker MQTT ("localhost")
      • port, sezione "[MQTT broker]": porta in ascolto del broker MQTT ("1883", la porta di default di MQTT)

      Tra parentesi sono specificati i valori da utilizzare se si sta seguendo questa guida senza alcuna modifica.

      Se si desidera ad esempio spostare il database su un'altro server e' possibile modificare la relativa variabile.

    • Specificare allo script di Python il percorso della configurazione modificando la variabile chiamata "configfile_path".
      Meglio specificare il percorso completo, lo script verra' chiamato all'avvio e occorre avere la certezza che il file possa essere trovato indipendentemente dal percorso di esecuzione dello script.
      E' meglio anche modificare il percorso del file di log specificando il percorso completo: lo script apre il file nel punto in cui e' stato eseguito lo script e quindi dopo il reboot salva il file nella home dell'utente pi ("/home/pi").
    • Impostare l'esecuzione automatica dello script all'avvio del Raspberry Pi:
                                  
                                      
                                      
      # sostituire <path> con il percorso assoluto/completo dello script mqtt_manager.py
      sudo bash -c "echo @python3 <path>" | sudo cat - /etc/xdg/lxsession/LXDE-pi/autostart > temp && sudo mv temp /etc/xdg/lxsession/LXDE-pi/autostart
                                  
                              
      Il comando qui sopra inserisce nel file al percorso "/etc/xdg/lxsession/LXDE-pi/autostart" l'istruzione "@python3 <path>"
    • A questo punto quando il broker MQTT, mosquitto, riceve messaggi via MQTT lo script Python riceve il messaggio, intuisce dal topic ("path" della conversazione, simile alle sottocartelle all'interno degli URL) se si tratta di un nodo (e se e' appena stato aggiunto o no al sistema) o se si tratta di dati rilevati dai sensori. Python in base al tipo di dato decide cosa fare con il database. (aggiungere dati e nodi, aggiornare informazioni sul nodo, ...)
  8. Sketch Arduino

    Scaricare, configurare e caricare lo sketch arduino su un nodo per iniziare a rilevare dati.

    In questo caso verranno indicati i passi necessari per caricare lo sketch DATACLIENT-DHT22 (link allo sketch), che si occupa di rilevare temperatura e umidita' utilizzando il sensore DHT22, su un NodeMCU ma si daranno informazioni generali per possibili sketch futuri o per microcontrollori diversi dal ESP8266 (montato sul NodeMCU).

    Videoguida:
    Guida testuale:
    • Se non e' gia' installato, installare l'arduino IDE dal sito ufficiale: Clicca qui
    • Installare i driver dal sito del produttore della scheda su cui caricare lo sketch.

      Per il NodeMCU scaricare i driver da qui: Clicca qui

    • Indicare all'arduino IDE l'URL del repository che permette di gestire la scheda:
      • Aprire le impostazioni andando su "File -> Impostazioni":

        Apri impostazioni da file
      • Aggiungi questa riga in "Url aggiuntive per il gestore di schede":

                                            
                                                
                                                
        http://arduino.esp8266.com/stable/package_esp8266com_index.json
                                            
                                        
        Impostazioni
      • Chiudere la finestra, l'Arduino IDE e infine riaprire l'Arduino IDE.
        Questo permette all'Arduino IDE di scaricare le informazioni dall'URL
      • Vai in "Strumenti -> Scheda -> Gestore Schede" e cerca il pacchetto della scheda, per il NodeMCU cercare "esp8266 by ESP8266 Community"

        Apri gestore di schede

        Installa il pacchetto cliccando su "installa"

        Gestore di schede
      • Installare le librerie necessarie per lo sketch. Per cercare le librerie andare in "Sketch --> #Include libreria --> Gestione librerie":
        Apri gestione librerie

        Per il DATACLIENT-DHT22 sono necessarie le seguenti librerie:

        1. "ArduinoJson by Benoit Blanchon" per gestire oggetti JSON
        2. "Adafruit Unified Sensor by Adafruit", libreria necessaria per le altre librerie di sensori di Adafruit
        3. "DHT sensor library by Adafruit" per gestire il DHT22
        4. "PubSubClient by Nick O'Leary" per connettersi e inviare messaggi al broker MQTT
      • Modifica le variabili dello sketch. Per il DATACLIENT-DHT22 cambiare queste variabili:

        • "DHTPIN": pin dati del DHT22

          NOTA: il numero pin nello sketch e il numero sulla scheda non corrispondono

          Pinout NodeMCU
        • "mqttServer": stringa contenente IP/dominio del broker MQTT
        • "mqttPort": porta in ascolto del broker MQTT
        • "mqttUser": utente broker MQTT
        • "mqttPassword": password di mqttUser
        • "timeToWait": tempo tra le letture
        • "WIFI_SSID": SSID access point Wi-Fi
        • "WIFI_PASS": password access point Wi-Fi
      • Cambia la scheda corrente con la scheda su cui caricare lo sketch (per il NodeMCU: "Generic ESP8266 Module") dal menu strumenti.
      • In strumenti, seleziona le impostazioni consigliate dal produttore della scheda per poter caricare lo sketch.

        Per il NodeMCU selezionare queste impostazioni:

                                            
                                                
                                                
        Flash Mode = QIO
        Flash Frequency = 40MHz
        CPU Frequency = 80MHz
        Flash Size = 4M 1M SPIFFS
        Reset Method = nodemcu
        Upload Speed = 115200
                                            
                                        
      • Selezionare da Strumenti la porta a cui e' connessa la scheda e premere il pulsante Carica per caricare lo sketch.
  9. Location dei nodi

    Aggiungere location sul database e modificare la location del nodo.

    Attualmente non e' possibile fare queste operazioni da UI ma sarebbe fattibile.
    Videoguida:
    Guida testuale:
    • Aggiungere location nella tabella "t_locations".

      Con PHPMyAdmin e' possibile utilizzare la GUI per creare un nuovo record con il nome della location.

      Da linea di comando occorre eseguire una istruzione SQL:

                                  
                                      
                                      
      sudo mysql -u<username> -p -e "INSERT INTO db100_100.t_locations (description) VALUES ('<nome_location>');"
                                  
                              

      Sostituire <username> con lo username per connettersi a MySQL (se non impostato diversamente in precedenza e' "root").

      Sostituire '<nome_location>' con il nome della location (es. 'cucina', 'soggiorno', ...).

      Dopo aver premuto invio sara' richiesta la password di <username> per accedere a MySQL.

      Verificare che la nuova location sia stata inserita eseguendo il comando:

                                  
                                      
                                      
      sudo mysql -u<username> -p -e "SELECT * FROM db100_100.t_locations;"
                                  
                              
      Come prima specificare lo username, premere invio e inserire la password per MySQL.

      Dovrebbe apparire una tabella con la location "sconosciuta" e la nuova location.

      Ripetere l'istruzione INSERT per ogni location che si vuole aggiungere al sistema.

    • Modificare la location dei nodi.

      Dopo aver caricato lo sketch sul nodo MQTT_MANAGER dovrebbe aver ricevuto via MQTT le informazioni del nodo e queste informazioni sono state memorizzate sul database nella tabella "t_nodi". Tutti i nodi di default hanno la location impostata a "sconosciuta". (o meglio, id 0 delle location).

      Da PHPMyAdmin e' possibile modificare il valore del campo "location_id" per farlo corrispondere all'id della location del nodo.

      Da linea di comando:

                                  
                                      
                                      
      sudo mysql -u<username> -p -e "UPDATE db100_100.t_nodi SET location_id = <id_location> WHERE id = <id_nodo>;"
                                  
                              

      Sostituire <username> con lo username per connettersi a MySQL (se non impostato diversamente in precedenza e' "root").

      Sostituire <id_location> con l'id della location da impostare (id della location nella tabella t_locations)

      Sostituire <id_nodo> con l'id del nodo (id nella tabella t_nodi). Per identificare il nodo e' possibile utilizzare l'indirizzo MAC o l'indirizzo IP del nodo per riconoscere il nodo oppure caricare lo sketch arduino su un nodo alla volta.

  10. Planimetria personalizzata e label

    Aggiungere planimetrie e label alla planimetria.

    • Per la guida su come personalizzare/aggiungere planimetrie Clicca qui o clicca su "Personalizzare planimetria" nella sidenav a sinistra. (su smartphone occorre premere il pulsante hamburger menu a sinistra del titolo della pagina o eseguire uno swipe dal bordo a sinistra della pagina verso destra)
    • Videoguida:
      Guida testuale:

      Per aggiungere i label sulla planimetria per renderla interattiva occorre andare sulla pagina impostazioni del progetto201.

      Andare nella sezione "Dati planimetria":

      Label planimetria

      e cliccare su "AGGIUNGI" per aggiungere del testo, oppure "AGGIUNGI AREA" per creare una area cliccabile, oppure "AGGIUNGI LETTURA SENSORE" per visualizzare l'ultima rilevazione di un dato di uno specifico nodo.

      Tenere premuto l'elemento con il pulsante sinistro e muovere il mouse per trascinarlo. Posizionare l'elemento nella posizione desiderata.

      Sotto alla planimetria premere il pulsante "MODIFICA" per visualizzare altre impostazioni, "RIMUOVI" per cancellare il label e "SALVA" per salvare le modifiche.

      Se si preme sul pulsante "AGGIUNGI AREA", si clicca sull'area e poi si clicca su "MODIFICA" appariranno 4 impostazioni:
      • "Modifica id": permette di scegliere un identificativo facile da ricordare per l'elemento
      • "Modifica lunghezza": modifica la lunghezza dell'area. Per le aree si consiglia di aumentare la loro lunghezza per coprire una certa stanza o una certa area di una stanza.
      • "Modifica altezza": modifica l'altezza dell'area. Per le aree si consiglia di aumentare la loro altezza per coprire una certa stanza o una certa area di una stanza.
      • "Modifica identificativo nodo": permette di selezionare per quale nodo verranno visualizzati i grafici quando si preme sopra all'area dalla pagina principale.
        Il selettore visualizza id e indirizzo MAC del nodo, sarebbe piu' user friendly visualizzare anche il nome della location.

      Premere il pulsante "SALVA" per salvare le modifiche e aggiungere i nuovi label alla planimetria della pagina principale.




      Se si preme sul pulsante "AGGIUNGI LETTURA SENSORE", si clicca sull'elemento e poi si clicca su "MODIFICA" appariranno le seguenti impostazioni:
      • "Modifica testo": permette di scegliere un testo da visualizzare prima che il sistema abbia ottenuto dal database l'ultima rilevazione. Difficilmente sara' visibile.
      • "Modifica id": permette di scegliere un identificativo facile da ricordare per l'elemento
      • "Modifica lunghezza": modifica la lunghezza dell'elemento. Per le rilevazioni si consiglia di rendere l'elemento grande quanto basta per farci stare il valore da visualizzare.
      • "Modifica altezza": modifica l'altezza dell'elemento. Per le rilevazioni si consiglia di rendere l'elemento grande quanto basta per farci stare il valore da visualizzare.
      • "Modifica identificativo nodo": permette di selezionare per quale nodo verranno visualizzate le rilevazioni.
      • "Modifica dato desiderato dal nodo": permette di selezionare quale dato visualizzare del nodo. Questi nomi sono i nomi dei campi delle tabelle dati dei nodi.
        I nodi delle tabelle dati seguono questo standard: "t_type<id_tipo_nodo>_data" dove <id_tipo_nodo> e' l'identificativo del tipo di nodo (ad esempio il tipo 0 contiene i dati dai microcontrollori con lo sketch DATACLIENT-DHT22, quindi sono microcontrollori che rilevano temperatura e umidita' grazie ad un unico sensore, il DHT22)

      Premere il pulsante "SALVA" per salvare le modifiche e aggiungere i nuovi label alla planimetria della pagina principale.




      Se si preme sul pulsante "AGGIUNGI TESTO", si clicca sull'elemento e poi si clicca su "MODIFICA" appariranno le seguenti impostazioni:
      • "Modifica testo": permette di scegliere un testo da visualizzare. Potrebbe essere utile ad esempio per visualizzare "%" vicino alle umidita'.
        Se si riesce a far accettare gli unicode al sistema sarebbe possibile visualizzare "℃" vicino alle temperature.
      • "Modifica id": permette di scegliere un identificativo facile da ricordare per l'elemento
      • "Modifica lunghezza": modifica la lunghezza dell'elemento. Per i testi si consiglia di rendere l'elemento grande quanto basta per farci stare il testo da visualizzare.
      • "Modifica altezza": modifica l'altezza dell'elemento. Per i testi si consiglia di rendere l'elemento grande quanto basta per farci stare il testo da visualizzare.
      • "Modifica identificativo nodo": Non e' utilizzato, si potrebbe nascondere/rimuovere per i testi.

      Premere il pulsante "SALVA" per salvare le modifiche e aggiungere i nuovi label alla planimetria della pagina principale.




      Ora tornando alla pagina principale dovrebbe essere presente la planimetria con sopra i label.

      Provare a cliccare sulle aree per verificare che si apra la pagina dei grafici corretta e provare a vedere se le letture dei sensori si aggiornano con il passare del tempo.

      La sezione per la modifica delle proprieta' dei label non e' perfetta: puo' capitare che dopo aver cliccato un'area, cliccare una rilevazione visualizzi l'id impostato per l'area. Se succede salvare le modifiche, tornare alla pagina principale, ritornare alla pagina delle impostazioni e provare a impostare le proprieta' un'altra volta.