Rss, WordPress e Gpio le notifiche in stile Raspberry Pi


Informatica / sabato, Gennaio 18th, 2020

Ciò che rende speciale il RaspberryPi sono anche le porte GPIO (General Purpose Input/Output) che gli permettono di interagire con il mondo reale (d’altronde la realtà è ciò che percepiamo con i nostri limitati sensori/sensi), quindi è divertente sfruttarle il più possibile, anche perché la Cina ci fornisce tutti i sensi per il nostro micro computer a prezzi veramente alla portata di tutti, il mio negozio preferito è GearBest seguito da AliExpress, ma se ho fretta Amazon è sempre il top.

L’idea di oggi è più che altro un esercizio per provare le comodissime librerie gpiozero e feedparser, in sostanza faremo questo:, leggeremo un feed RSS a nostra scelta, in questo caso opterò per i feed del blog WordPress di RaspberryItaly; analizzeremo i dati dell’ultimo articolo, e in base all’autore facciamo lampeggiare un LED o qualsiasi altra cosa ci venga in mente di fare.

Partiamo dai requisiti Hardware:

  • RaspberryPi, io lo uso con Raspbian Lite
  • LED, valuta se serve una resistenza in serie per limitare la corrente, in base ai dati del LED, io uso sempre LED ad alta luminosità da 3.2-3.4v
  • LED RGBLED RGB
  • Pulsante

Requisiti Software:

Aggiorniamo:

sudo apt-get update

Installiamo pip per Python3:
Attenzione Python3 e Python2 non sono pienamente compatibili, non confonderli

sudo apt-get install python3-pip

Installiamo feedparser:

pip3 install feedparser

feedparser è uno dei software in grado di leggere i feed RSS ed ATOM. Nota che è pip3 e non pip
Installiamo le librerie gpiozero (già preinstallate su qualche versione di Raspbian, ma dare il comando male non fa):

sudo apt-get install python3-gpiozero

Controlliamo che si siano installate:

pip3 list

Preparazione dello Script:

Creiamo un file notificherss.py e rendiamo eseguibile con

sudo chmod +x notificherss.py

Precisiamo che deve usare Python3

#!/usr/bin/python3

Importiamo il modulo feedparser

import feedparser

Importiamo un LED RGB (red,green,blu) per distinguere gli autori

from gpiozero import RGBLED

Importiamo il LED normale per segnalare l’attività lettura/attesa, uso PWMLED per abilitare la funzione pulse

from gpiozero import PWMLED

Importiamo il pulsante per disabilitare la notifica dopo averla vista

from gpiozero import Button

Impostiamo il pulsante sul PIN GPIO 23

btn_letto = Button(23)

Impostiamo il LED RGB sui pin (rosso:21,verde:20,blu:16,False) False solo nel caso tu avessi il quarto pin collegato ai 3.3v

rgb = RGBLED(21,20,16,False)

Impostiamo il LED normale sul pin 12 e acceso all’avvio dello script

led_attivita = PWMLED(12,initial_value=True)

i LED RGB si usano impostando l’accensione dei tre LED che li compongono (rosso,verde,blu) così da dare i vari colori usando la combinazione di valori compresi tra zero (cioè spento) ed uno (cioè acceso). Per semplificarci la vita incolliamo questa stringa, cosi al posto di scrivere, ad esempio, (1,0,0) basterà scrivere “verde”.

1rosso, verde, blu , bianco, giallo, viola, azzurro, nero = (1,0,0), (0,1,0), (0,0,1), (1,1,1), (1,1,0), (1,0,1), (0,1,1), (0,0,0)
while True: #iniziamo un loop infinito 
    led_attivita.blink(0.1,0.1) #il led lampeggia per segnalare che sta leggendo i feed 
    notizie = feedparser.parse('https://www.raspberryitaly.com/feed') #imposta le variabili con il feed completo 
    data = notizie.entries[0].published #la data del feed più recente [0] 
    titolo = notizie.entries[0].title 
    autore = notizie.entries[0].author 
    sommario = notizie.entries[0].summary  
    if notizie.entries[0].id != id: #se l'id univoco del feed più recente è diverso dal precendente prosegue 
        if 'Zzed' in autore: #se dentro la variabile autore c'è la parola Zzed allora 
            rgb.pulse(on_color=giallo,fade_in_time=1,fade_out_time=2) #il LED RGB pulsa di giallo 
        elif 'Gabriele' in autore:                 
            rgb.pulse(on_color=blu,fade_in_time=1,fade_out_time=2) 
        elif 'Ivan' in autore:                 
            rgb.pulse(on_color=rosso,fade_in_time=1,fade_out_time=2) 
        elif 'Bob' in autore: 
            rgb.pulse(on_color=verde,fade_in_time=1,fade_out_time=2) 
        elif 'Enrico' in autore: 
            rgb.pulse(on_color=azzurro,fade_in_time=1,fade_out_time=2) 
        id = notizie.entries[0].id # aggiorna la variabile id 
        print('Autore:', autore) #scrive l'autore 
        print("id:",id) led_attivita.off() 
        btn_letto.wait_for_press() #lampeggia finchè non viene premuto il pulsante 
        rgb.off() led_attivita.pulse() # il led pulsa per segnalare che è in standby 
        sleep(600) #aspetta 600 secondi 
        else: led_attivita.pulse() sleep(600)
        sleep(600)

Programmare l’avvio

Personalizzare, salvare e schedulare qb.
Per eseguirlo all’avvio

sudo crontab -e
@reboot /usr/bin/python3 /home/pi/notificherss.py &

Conclusione

Questo è un esempio semplicissimo, in un feed ci sono molte informazioni, aprilo con un browser e vedrai tutti i dati che puoi usare, leggi la documentazione di feedparser e poi espandilo con tutte le modifiche che ti vengono in mente.

Spero di esserti stato utile, alla prossima.

Riferimenti utili:

Feed interessanti: