Una MeteoCam con componenti di recupero

In questo blog erano presenti 2 WebCam con relative “mini stazioni meteo” basate su arduino. Queste inviavano le immagini dello stretto di Messina e le relative condizioni atmosferiche. Il tutto era tenuto vivo da una connettività trasportata da una Hiperlan che purtroppo non e’ più attiva.
Dovevo trovare un sistema per riattivare (anche in maniera “altalenante”) il servizio… e trovare il modo di fare tutto con componenti di recupero e attrezzi non proprio nati per l’elettronica.

Avete presente i lavori fatti male? Ecco, questo e’ il mio “miglior lavoro fatto male” 🙂
Nessun attrezzo a mia disposizione (sono in villeggiatura) andava bene per lo scopo….ma alla fine il tutto funziona…e funziona anche bene!

L’idea era quella di eliminare la sezione già presente con arduino e concentrare tutto su una raspberry pi che facesse il lavoro di acquisizione/elaborazione dati meteo, photo editing dell’immagine acquisita della IP CAM e trasferimento file sul mio blog via FTP.

Il tutto………..senza connettività!
Anzi…con la connettività “concessa” dal mio cellulare impostato in modalità hotspot quando c’e’ necessità di andare su internet per lavoro o divertimento.

Iniziamo…
Trovo una raspberry pi “primo modello”, una chiavetta usb wifi e un sensore di temperatura/pressione/umidità modello BM280 che comunica via i2c.
Comincio con l’installazione del sistema operativo Raspbian e tutto il software necessario :

  • ffmpeg : per intercettare lo stream rstp proveniente dalla IP Cam e catturare un solo fotogramma
  • python : per interrogare il sensore BM280 con qualche script
  • imagemagik : per realizzare la Jpeg finale con immagine (quasi) panoramica e overlay dei dati atmosferici.
  • ncftp : per automatizzare l’upload del file jpeg sul blog.

Mi scontro subito con il primo problema….la temperatura! La raspberry nel suo contenitore raggiungeva i 79°C di giorno!!!!


Non sono certo sia normale….ma non ho ventole funzionanti a 5v….recupero solo una ventolina a 12v e con l’aiuto di un convertitore step-up cerco di prelevare i 5v dell’usb per portarli ai 10-12 sufficienti per raggiungere un regime adeguato.


Bene….devo pero’ adattare il contenitore della raspberry….forare, creare finestre e prese d’aria. Che ho usato? Uno scalpello, un cacciavite a croce e un martello.

Si capisce che i fori sono fatti con il cacciavite? 🙂

Un vecchio cavetto usb mi permette di prelevare la tensione da una delle prese presenti e portare al convertitore step-up.

Mi procuro un saldatore, dello stagno di dimensioni non proprio adeguate e inizio a saldare (di notte) il connettore del sensore per comunicare con la raspberry.

Inizio prima di tutto a controllare le temperature della CPU e regolando la tensione di uscita a 10v ottengo un giusto compromesso tra flusso d’aria e rumorosità…e i dati me lo confermano.


Andiamo avanti…

con il tool raspi-config abilito la comunicazione i2c e effettuo un lieve overclock della povera raspberry (solo 100Mhz in più).

Il sensore e’ connesso cosi :

PIN 1 -> +3,3v
PIN 6 -> GND
PIN 3 -> SDA
PIN 5 -> SCL

con il comando i2cdetect controllo che sia tutto funzionante e l’indirizzo per la comunicazione

Funziona tutto, scarico uno dei millemila tool in python per interrogare il sensore BM280 e con la “malleabilità” di linux butto tutto su un file di testo. Passiamo alle immagini!

La cam in mio possesso usa una connessione ethernet via cavo. Uso la scheda di rete della raspberry, imposto indirizzi ip fissi ad entrambi i device e controllo la comunicazione. Tutto ok!

con FFMPEG riesco a intercettare il flusso rstp e da quello salvo un solo frame con la seguente stringa

ffmpeg -rtsp_transport tcp -i rtsp://IP_DELLA_CAM -y -f image2 -qscale 0 -frames 1 NOME_IMMAGINE.jpg

Ho i dati armosferici….ho l’immagine….come unisco il tutto? Con Imagemagik !!!!
Tramite questo potentissimo software dico alla raspberry di prendere il frame appena salvato da ffmpeg , creare una maschera ombreggiata per leggere meglio il testo e inserire dentro tutto il testo proveniente dal file testo.txt (contenente i dati meteo)

Più precisamente :

convert FOTO_DA_FFMPEG.jpg  -fill '#000a' -draw 'rectangle 2,510,400,712' -pointsize 20 -font Helvetica -fill black -annotate +10+540 @testo.txt -fill yellow -annotate +9+539 @testo.txt NOME_FOTO_OUT.jpg

Ora devo fare l’upload via ftp della foto processata sovrascrivendo quella precedente. Per far questo ho trovato un tool chiamato “ncftpput” appartenente alla suite ncftp ….. che fa proprio al caso mio!

ncftpput -u USER -p PASSWORD FTP.URL_FTP.XX /DIRECTORY_REMOTA/ FOTO_DA_INVIARE.jpg

Metto tutto in uno script che farò eseguire dal mio crontab ogni 5 min.

Passiamo all’installazione….
Salgo in terrazza e cerco di montare il tutto con quello che mi ritrovo (nulla).

Un tappo di una bomboletta di vernice appositamente forato (sempre con il cacciavite) mi fa da protezione esterna per il sensore

e poi c’era da sistemare la raspberry….come? Con un chiodo e fil di ferro!!!!!!

Controllo i collegamenti…avvio l’hotspot e la luce verde sulla scheda usb mi dice che c’e’ connessione.
Connesso via ssh effettuo gli ultimi ritocchi e ottengo questo risultato :

Funziona tutto…..o quasi!

Come ho già detto la connessione non e’ fissa…viene data dal mio cellulare non appena viene messo in modalità hotspot.
Succedeva quindi che ….dopo un lungo periodo di assenza di connettività la raspberry entrasse in modalità di letargo non so bene se da ricondurre alla scheda di rete o all’intero sistema.

Per risolvere il problema alla base e in maniera grossolana inserisco un riavvio programmato dell’intera raspberry ogni ora in crontab e ogni 2 minuti un check della connettività con un simpatico script trovato online.
La procedura fa un ping ai dns di google 8.8.8.8 …. se il ping va a buon fine non fa nulla….se da errore riavvia la scheda di rete!

#!/bin/bash

# keep wifi alive
echo "................................................"
date "+%Y.%m.%d %H:%M:%S"
echo " "
ping -c2 8.8.8.8 

 
if [ $? != 0 ] 
then 
  
  echo "No network connection, restarting wlan0"
  
  sudo ifconfig wlan0 down
  sleep 30
  sudo ifconfig wlan0 up
  
else
   cat /proc/net/wireless
fi
echo "................................................"
echo " "

Dopo queste modifiche funziona benissimo da un paio di giorni….

Eccola!

Lazzaro Live!

Spero entro la fine dell’estate di poter ristabilire la connettività flat in modo da avere un dato più continuativo.

Alla prossima…….

E invece no!!!!
…….dopo un paio di ore dalla fine della stesura di questo articolo…..la raspberry ha deciso di passare a miglior vita!

Probabilmente l’eccessivo calore era già un segno premonitore e due giorni di piena attività, overcloccata, con una ventola e un antenna wifi sulle porte USB hanno dato il colpo di grazia.

E che si fa ora? Al mare? Come risolvo?

Ne ho ipotizzate mille ma non ero intenzionato a fare acquisti, dovevo risolvere con ciò che avevo in casa.

Tra le millemila scatole, trovo una raspberry primissssimo modello datata 2011 che utilizzavo con XBMC come lettore multimediale connesso alla televisione.

Smonto, sostituisco la SD e avvio….attendo…si connette alla rete…vado in SSH e risponde!

Ci siamo…tutto risolto! O quasi…

Il sensore non viene letto! Penso prima a problemi di connessione….ma non e’ cosi.
Dopo mille controlli, scopro che la versione di raspberry e’ talmente vecchia da dover interrogare le componenti comunicanti in i2c in maniera diversa.

Dal Bus 1….devo cercare i dati sul Bus 0.

Modifico qualche file di configurazione e …. tah dahhhh! funziona tutto!
Le temperature della CPU sono molto più basse e decido di eliminare anche il lieve overclock effettuato. Giusto per non gravare sul carico di corrente decido di alimentare la ventola con un alimentatorino a parte. Insomma tutto più scarico.

Ma non finisce qui….

Ho un problema di privacy!

Nell’inquadratura si vede in primo piano il balcone di una villetta adiacente.


Per quando le immagini non sono in tempo reale, non sono nemmeno schedulate (visto che la connessione non e’ flat)…ma potrebbe coincidere la presenza degli abitanti della casa sul balcone e la pubblicazione della foto sul web.
Non va bene….dobbiamo in qualche modo risolvere il problema.

Ci torna in aiuto il caro Imagemagik.
Con qualche coordinata e una texture “fogliare” ho fatto “grossolanamente” continuare la vegetazione presente (in basso) su tutto il balcone.

Aggiungo alla fine della stringa di imagemagik la riga seguente….creo un file “texture.jpg”

-fill texture.jpg -draw "polygon 894,391 807,449 816,524 1147,595 1265,592 1266,532 1268,415"

ed ecco il risultato

Non e’ bellissimo….ma risolve il problema privacy e mi permette di lasciare l’immagine senza crop sulla villa.

 

Di notte poi e’ bruttttisssssimo……ma ipotizzo che l’utilizzo sia maggiormente diurno che notturno!

Potrei schedulare l’utilizzo di una texture diurna e una notturna….ma chisssenefrega lasciamo le foglie 24ore su 24 🙂

Adesso “forse” ci siamo…..

Alla prossimaa…speriamo 🙂

4 thoughts on “Una MeteoCam con componenti di recupero

  1. Ciao Gianvito, sicuramente il progetto non porta ad avere dati “previsioni meteo”. E’ un progettino per avere l’idea delle condizioni climatiche….fa caldo-fa freddo 🙂

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *