Cronotermostato settimanale

Da raspibo.
2018/01/07 08:35

Temperatura: 
          20.761
Umidita`: 43.102

Relay:    off
SetPoint: 15

Cronotermostato settimanale
Device lettura temperatura/umidita`, controllo riscaldamento, visualizzazione su display lcd
Repository: https://github.com/raspibo/cronotermostato

Indice

Descrizione

gpio -v
Raspberry Pi Details:
Type: Model A+, Revision: 01, Memory: 256MB, Maker: Sony
  * Device tree is enabled.
  *--> Raspberry Pi Model A Plus Rev 1.1
  * This Raspberry Pi supports user-level GPIO access.

E` il tipo di Raspberry Pi utilizzato.

lsusb
  .. Ralink Technology, Corp. RT5370 Wireless Adapter

E` la chiave wifi TP-LINK_TL-WN727N usata.

Legge temperatura e umidita` dal sensore SHT20
Visualizza su un piccolo display lcd 128x128 pixel (8 righe 16 colonne)
Trasmette i valori via MQTT alla Centralina livello 1
Gestisce un'uscita per comando riscaldamento

La particolarita` di questo progetto, e` che la programmazione delle temperature non ha vincoli e puo` essere anche prevista al minuto (per esempio si puo` scrivere nell'orario: "09:23" (il programma guarda che ore sono e che temperatura era impostata nell'orario inferiore all'attuale).


Tranne la chiave wifi, tutto il resto dei componenti dovrebbe essere indicato nel ..

Circuito elettrico/elettronico

File:Rpi2dev tmp.pdf

Il sensore SHT20 richiede resistenze di pull-up sul collegamento I2C (SDA, SCL), non ci sono perche` sono gia` presenti nel Raspberry Pi.

Al momento in cui scrivo il circuito e` completo di annotazioni per la fase di test (in corso).
(Terminata questa, la seconda sara` di effettuare rilievi di funzionamento dell'attuale cronotermostato, solo successivamente, terza e ultima fase, andra` a sostituirlo)


Software

Come noterete dal repository dei files, e` scritto in "bash".

cronotermostato.sh
Programma principale, e` l'unico da eseguire, gli altri sono di contorno ed utilizzati da questo.
cronotermostato.conf
File di configurazione (parametrizzazione) dello script principale, e` possibile:
Selezionare se inviare dati a Centralina livello 1
Cambiare tempi
Cambiare identificatori
.. e altro (credo sia abbastanza commentato).
help.sh
Ho voluto mantenere separato dal programma principale le visualizzazioni di aiuto (perche` le modifico/avo spesso)
program7d.txt
File di programma settimanale, contiene le programmazioni giornaliere/orarie del termostato.
cecho.sh
mvcursor.sh
Sono script di controllo della visualizzazione in console, il primo si coccupa della colorazione dei testi (ma non funziona su tutte), il secondo degli spostamenti cursore.
sht20_rh.sh
sht20_t.sh
Umidita` relativa e Temperatura, questi si occupano di leggere il sensore SHT20 (i2c), ho preferito mantenerli indipendenti dal tutto il resto.

Install

Per il Raspberry Pi ho utilizzato la Raspbian Stretch Lite (Minimal image based on Debian Stretch), non sto` a spiegare come si installa, e` gia` spiegato ovunque in rete, credo anche in questo wiki, da qualche parte.

Per installare il programma del cronotermostato in oggetto e` sufficiente scaricarlo (sul proprio Raspberry Pi), oppure clonare il repository git (git clone https://github.com/raspibo/cronotermostato.git), nella directory che preferite.

Nel Raspberry Pi dovremo sistemare alcune cose prima di eseguire il programma:

  • Attivare SPI
  • Attivare I2C

Potete farlo eseguendo (da utente root, oppure fate precedere il comando da "sudo"):

sudo raspi-config

selezionate l'opzione 5, poi P4, poi P5 (dovrete ricominciare da capo perche` ad ogni selezione sarete rimandati alla prima pagina di scelta).
Se volte farlo a mano, abilitate le righe:

dtparam=i2c_arm=on
dtparam=spi=on

nel file "/boot/config.txt".

Nel mio caso (Raspbian Lite) ho dovuto installare qualche pacchetto software accessorio (spero di non averne dimenticati):

Necessari
apt-get install bc i2c-tools mosquitto-clients wiringpi fbset
Opzionali
apt-get install git
Sicuramente non necessari
apt-get install fim fbi tio python3-serial imagemagick tput cadubi screen tmux figlet toilet aria2 fbterm
Potrebbero servire per visualizzazioni immagini sul display lcd e trasmissioni/letture seriali
Note
Ho aggiunto lo user "pi" al gruppo "tty", per scrivere da qualsiasi terminale sulla tty0 (es.: echo "testo" >> /dev/tty0 ).
fbi, fim, visualizzano immagini tramite framebuffer
imagemagick, pensavo di usarlo per convertire il testo in immagini ... (poi ho preferito, per ora, non usare immagini)

Configurazione wifi

Modificato "/etc/network/interfaces":

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

#allow-hotplug eth0
#iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf


allow-hotplug wlan1
iface wlan1 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Trovate due "wlan" perche` per accelerare le sperimentazioni (install e setup) ho usato un Raspberry Pi Versione 3, potete omettere le righe che riguardano la seconda "wlan" (wlan1), o lasciatele, male non fanno.

Aggiunto/modificato "/etc/wpa_supplicant/wpa_supplicant.conf", ricordateVi di mettere la vostra rete e password dove indicato:

country=IT
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="<VOSTRO IDENTIFICATIVO RETE WIFI>"
    psk="<VOSTRA PASSWORD RETE WIFI>"
    key_mgmt=WPA-PSK
}


Configurazione display

Ho scelto la via piu` breve, usare il file "/etc/rc.local", cui ho aggiunto le seguenti righe, prima dell'ultima "exit 0":

# Carica il display LCD, non so come, ma finisce in "fb1"
modprobe fbtft_device custom name=s6d02a1 gpios=reset:25,dc:24,led:23 width=128 height=128 rotate=270
#dmesg | tail -10 # Check messages
# Ritardo 3 secondi per il caricamento di "fb device" ..
#sleep 3
#con2fbmap 1 1 # Mappa la console 1 sul framebuffer 1

# Disable savescreen
/usr/bin/setterm -blank 0 -powerdown 0 -powersave off

Notare la disattivazione dello screen saver e del power off, perche` il display lo tengo sempre acceso (ho fatto testi che si visualizzano a colorazione random).

Configurazione autologin

Ho creato il file "/etc/systemd/system/getty@tty1.service.d/override.conf", con questo contenuto:

[Service]
ExecStart=
ExecStart=-/sbin/agetty -a pi --noclear %I $TERM
Type=idle

Configurazione autostart cronotermostato

Nella directory utente ("pi" ovviamente), ho modificato il file ".profile", aggiungendo le righe seguenti:

# Start cronotermostato
CTPRG=cronotermostato
CTPATH="/home/pi/projects/cronotermostato"
PATH="$PATH:$CTPATH"

PID=`ps -e -o pid,cmd | grep "$CTPRG[.]sh" | awk '{ print $1 }'`
if [ $PID ]
        then
                echo "Non si e\` avviato \"$CTPRG\", oppure era gia\` avviato:"
                echo "Actual PID is: $PID"
        else
                echo "Avvio $CTPRG"
                cd $CTPATH
                # La linea seguente e` messa fuori dal IF, perche` finche` faccio prove ..
                #PATH="$PATH:`pwd`" # oppure potevo metterlo/farlo cosi`: PATH="$PATH:$CTPATH"
                ./$CTPRG.sh
                # Non e` installato e da decidere se e come usarlo.
                #redis-cli -h centred hmset msg:alert:level1:$(date +\%Y\%m\%d\%H\%M\%S) type "alert" desc "Avvio $CTPRG" value "on" um "" date "$(date +\%Y/\%m/\%d\ \%H:\%M:\%S)"
                cd /
fi

[Opzionale] Disattivare lo swapfile

Per far durare di piu` la SD Card.

Raspberry_PI-Raspbian-Personalizzazioni#Swapfile


Promemoria Chiavi/Codici

Topic (mqtt)

Chiavi e codici, esempi da ultimo device

Riferimenti

Strumenti personali
Namespace

Varianti
Azioni
Navigazione
Strumenti