martedì 23 Aprile 2024
Home / Domotica / RPirrigate, rimossa la necessità di PIGPIOD

RPirrigate, rimossa la necessità di PIGPIOD

Ciao ragazzi della Community, oggi vi parlo di una modifica che ho fatto a RPirrigate.

 

Oggi avevo un po’ di tempo libero e ho fatto una cosa che era da tempo che dovevo fare.

Per chi non lo sapesse, RPirrigate è un software per l’irrigazione per Raspberry Pi (qui l’articolo).

Il problema qual’era?

La sicurezza mi costringeva a perdere punti in performance.

Ma vediamo il problema più nel dettaglio.

Il software si basa su un demone (costantemente in esecuzione sul Raspberry) e un interfaccia web in php (quindi eseguita quando l’utente visita le pagine).

Il problema è che per gli aggiornamenti (modifiche, impostazioni,…) l’interfaccia web comunica con il demone usando segnali UNIX, ma per fare ciò interfaccia web e demone devono essere eseguiti dallo stesso utente.

E dov’è il problema? Nessuno, se non fosse che per agire sulle GPIO (scopo finale del demone) servono i privilegi di root!

Quindi le scelte erano due: eseguire l’interfaccia web da root (ho i brividi solo a scrivere questa cosa!) oppure trovare un “qualcosa” in ascolto eseguito da root, ma che potesse essere comandato da chiunque.

E così è stato: ho trovato PIGPIO, una libreria che dispone di un demone che ascolta su una porta TCP. L’ho implementato e usato per un po’, ma poi ho notato che faceva un uso eccessivo di CPU, il 10% in idle. Non potevo tollerare una cosa così!

La soluzione

Ho implementato un altro demone (eseguito da root) che semplicemente ascolta su un socket UNIX messaggi del tipo “chiudi la GPIO 4”, “apri la GPIO 8” e cambiato la logica della “GPIOClass” per usare questo nuovo socket.

Siccome sono bravo e ho scritto codice modulare, la modifica è stata indolore praticamente, e la guida di installazione è perfino più snella di prima!

 

Come applicare la modifica

Per quanto riguarda l’update per chi usa già il sistema è semplice. Dovete semplicemente

  1. eseguire il download dell’ultimo zip da GitHub
  2. sostituire il file /etc/init.d/rpirrigate con quello presente in install/init.d.erb
  3. sostituire il file /srv/rpirrigate/daemon/RPirrigate-maind.py con l’omonimo nello zip
  4. eseguire la stessa operazione per /srv/rpirrigate/daemon/GPIOClass.py
  5. copiare il file dallo zip daemon/RPirrigate-gpiod.py in /srv/rpirrigate/daemon/RPirrigate-gpiod.py
  6. Ora dovete disattivare PIGPIO:
    1. sudo insserv -r pigpiod
    2. sudo rm /etc/init.d/pigpiod

Questo è quanto. Come sempre resto disponibile (tempo permettendo) sul forum per tutte le domande del caso.
Buona domenica!

A proposito di Bob

Studente, maker, programmatore, RPi lover

Vedi Anche

MagPi 135 doppia pagina

MagPi in Italiano! Raspberry Pi 5 Speciale Lancio!

Estratto, tradotto in italiano, di The MagPi N°135, la rivista ufficiale della Fondazione Raspberry Pi.

Powered by themekiller.com