Perdete troppo tempo per scaricare le vostre foto, organizzarle, sistemarle? Lo sviluppatore Lou Kratz afferma di trascorrere molto tempo nel fine settimana a catturare le sue avventure con una fotocamera. Ma non sopporta tutto ciò che c’è dopo: la gestione delle foto. Per ridurre le perdite di tempo ha inventato PiPhoto, un piccolo automatismo che vi permette di sincronizzare le foto mentre ve ne state comodi sul letto.
PiPhoto, una scheda Micro-SD e una Raspi
Come potete osservare dal video sotto riportato, Lou ha creato una soluzione meravigliosamente semplice. Tutto quello che dovete fare è collegare la scheda SD alla Raspberry Pi e le foto vengono caricate automaticamente sul computer (o dove preferite voi).
Cosa fa PiPhoto? Cerchiamo di riepilogarne il comportamento.
La prima cosa da fare è montare automaticamente la scheda SD nel momento in cui viene inserita (dovreste vedere il LED verde che inizia a lampeggiare)
Per farlo inserite il comando sotto riportato nel file 99-mediastorage_card_instert_run.rules
e posizionatelo in /etc/udev/rules.d/. Esso impone al sistema di montare su /media
quando vede qualcosa inserito nella porta USB.
ACTION=="add", SUBSYSTEMS=="usb", SUBSYSTEM=="block", ENV{ID_FS_USAGE}=="filesystem", RUN{program}+="/usr/bin/systemd-mount --no-block --automount=no $devnode /media"
Una volta montata la scheda SD, bisogna attivare un comando che carichi le foto sul computer o sul cloud. Per farlo si crea un apposito service systemd:
[Unit]
Description=PiPhoto Trigger on Usb Mount
Requires=media.mount
After=media.mount
[Service]
ExecStart=/usr/local/bin/piphoto
Type=oneshot
[Install]
WantedBy=media.mount
che viene eseguito quando la directory /media
è montata.
Terminata la sincronizzazione bisogna smontare la scheda. Usare unmount
è sconsigliato perché andrebbe a killare piphoto.service
. Un possibile workaround consiste nel chiamare umount
in un processo separato:
[Service]
ExecStart=/usr/local/bin/piphoto
Type=oneshot
ExecStartPost=/bin/bash -c 'echo "systemd-umount /media" | at now'
A questo punto manca un feedback visivo per l’utente. Si può impostare il LED della Raspi inviando una stringa a /sys/class/leds/led{number}/trigger
. Ci sono una serie di diverse opzioni come il timer
per far lampeggiare il led oppure default-on
per mantenerlo acceso. Una buona scelta potrebbe essere quella di:
- far lampeggiare la luce verde durante il caricamento delle foto;
- se l’operazione va a buon fine il LED verde diventa fisso e non lampeggia più;
- al contrario, se l’operazione va male, lampeggia il LED rosso.
Questi i comandi:
# il led verde lampeggia
echo timer | tee /sys/class/leds/led0/trigger
# upload in corso
rsync -rav -e ssh /media ...
sync_status=$?
# Operazione OK o KO?
if [ $sync_status -eq 0 ] ; then
# sync successful
echo 'default-on' | tee /sys/class/leds/led0/trigger > /dev/null
else
# sync failure
echo 'none' | tee /sys/class/leds/led0/trigger > /dev/null
echo timer | tee /sys/class/leds/led1/trigger > /dev/null
fi
Fatto ciò solo la vostra fantasia può fermarvi: potete personalizzare il tutto come meglio preferite.
Come usarlo
Per i comuni mortali la procedura da seguire è abbastanza semplice. Scaricate dalla pagina GitHub ufficiale di PiPhoto il codice sorgente e lanciate l’installazione:
sudo ./install.sh
Create il seguente file di configurazione.
sudo cp config/piphoto.conf.example /etc/piphoto.conf
Modificatelo con un editor di testo a scelta settando le seguenti variabili:
- mount_point – Dove montare la scheda, deve corrispondere con la posizione specificata nel file
/etc/udev/rules/99-mediastorage_card_insert_run.rules
di cui vi parlavo sopra - run_as_user – L’utente che esegue la sync
- sync_command – Quale comando usare per sincronizzare le foto. Il più semplice è
rsync
.
Tutto chiaro? Se avete dubbi o domande scrivetemi nel box dei commenti, oppure consultate la pagina GitHub ufficiale dove trovate diversi consigli 😄😄
Seguiteci sul nostro canale Telegram, sulla nostra pagina Facebook e su Google News. Nel campo qui sotto è possibile commentare e creare spunti di discussione inerenti le tematiche trattate sul blog.