domenica 4 febbraio 2024

Nuovi progetti

Ritrovando un po' di voglia che avevo perso per diverse ragioni, mi sono concentrato su alcuni progetti, su cui poi scriverò in dettaglio nei prossimi posto, di automazione casalinga.

Li riporto giusto come traccia:

  • EnergyLamp - Piccola applicazione fatta con esp32 che usando una fila di neopixel mostra graficamente l'andamento dei consumi di casa. Motivo? Ho sempre cercato di coinvolgere la famiglia sui controlli dei consumi, ma senza successo mancando sempre la killerapp che la conivolgesse. Questo banale progetto fa in modo di rendere reale quello che non si vede attirando l'attenzione quando qualcosa cambia.
  • Motorizzare la scrivania ikea - Avendo fatto il braccino corto durante l'acquisto della scrivano standup per lavora da in piedi, volevo aggiungerci un poco di domotica per renderelo più adatto alle mie esigenze, sono in attesa dei pezzi mancanti dai nostri amici cinesi.
  • Piccolo progetto di controllo consumi del cancello condominiale - Progetto sempre fatto con esp e un piccolo bot telegram dove anche notifica quando il contatore rimane per troppo segno sopra una sogna di consumi, segno che qualcosa non sta funzionando. con il boto anche gli altri condomini possono essere avvisati e possono dargli un'occhiata

Per ora direi che va bene così ...stay tuned.

sabato 17 giugno 2023

Come ti moralizzo il gatto pt.2

Piccolo aggiornamento sulla eterna lotta tra me e i gatti.


Essendo il gatto un animale molto intelligente, ha trovato una soluzione creativa all'essere bagnato, di seguito una testimonianza fotografica


Questa "trovata" da parte del gatto da un brutto colpo al mio orgoglio e nella speranza che non lo vada a raccontare ai sui amici gatti, incasso con dignità e penso alla prossima mossa.


Stay tuned :-)

sabato 17 settembre 2022

Cosa uso per monitorare la casa

 Questa volta volevo darvi qualche dato sui componenti che uso da tempo per fare un pò di domotica spiccia in casa, nulla di professionale o di altamente ottimizzato e probabilmente sovradimensionato e sovra ingegnerizzato per lo scopo finale, ma va bene così, tanto mi gestisco tutto in casa (in tutti i sensi).

Allora per prima cosa perché ho tutto in casa e non in qualche cloud o soluzioni già pronte?

Bhe essenzialmente per 3 motivi:

  • Durabilità: Utilizzando servizi cloud o soluzioni già pronte se vengono chiuse o sostituite c'è il rischio di dover cambiare tutto o peggio ancora di avere dei bei sottobicchieri non più usabili (come descritto bene dal Francesco Tucci nel suo blog )
  • Costi: Tanto un nas sempre acceso ce l'ho già, perchè non usarlo anche per altro?
  • ultimo ma non ultimo, mi diverto un casino a trovare soluzioni a problemi che mi creo da solo 

Allora cominciamo...
questo un breve schema dei componenti principali







Partiamo dal cuore di tutto il sistema, per disaccoppiare i componenti utilizzo il protocollo MQTT con un semplicissimo broker (in realtà non proprio semplicissimo perchè uso Rabbit con un'estensione per MQTT, ma qua ricadiamo nel discorso sovra ingegnerizzato) che mi permette di disaccoppiare tutte le parti e poter integrare/sostituire  componenti senza stravolgere nulla.

Per consumi e produzione un fantastico shellyEM con 2 pinze amperometriche per misurare entrambi i valori che poi vengono letti e messi su un topic MQTT.

In ogni stanza della casa ho XIAOMI Mijia che mi permette di avere temperature e umidità.
Piccola pecca, non è possibile utilizzare il dispositivo direttamente perchè sarebbe necessario un hub XIAOMI (che ovviamente io non ho), ma girando per la rete, alcuni temerari si sono rifatti il firmware aggiungendo anche funzionalità e potendo utilizzare un qualsiasi hub BLE. Allo scopo ho usato un esp32 con tasmota come firmware (versione BLE) che poi mi rimanda i dati letti direttamente su un topic MQTT che poi viene letto e gestito.

Il giardino è comandato da un altro ESP32 con un paio di relè perchè deve comandare una elettrovalvola della Gardenia che avevo nel cassetto. Il come l'ho modificata, riadattata e resa comandabile lo scriverò in un altro post.

Poi a questo punto ho fatto un bot di telegram che permette un minimo di controllo dei vari componenti e di accendere/spegnere "cose".

Del "cat destroyer" ne ho già parlato in un post precedente ("Come ti moralizzo il gatto" ed è un microsistema di AI che riconosce i gatti da immagini di una telecamere e fa partire l'irrigazione con semplice comando sul topic MQTT (vedete che qua viene buono il disaccoppiamento :-) )

Poi per finire un po' di dashboard fatte con grafana su andamenti, metriche, statistiche prese da un db InfluxDB che faccio girare in un container Docker che sta sul NAS.

In realtà ho anche altri componenti, ma vene parlerò nei prossimi post.

giovedì 8 settembre 2022

Come scavalco il problema e trovo la soluzione

 Rieccoci a noi dopo un bel pò di tempo passato tra peripezie varie, l'altro giorno avevo un pò di tempo e un annoso problema da risolvere che mi affligge da un pò.

Per scopi che non sto qui a descrivere devo utilizzare un'app per controllare alcune informazioni scolastiche (non farò il nome per non creare scompiglio nel caso fortuito o sfortuito che qualcuno inciampasse in questo post) che ha dei comportamenti strani quando lo installo sul mio telefono, mentre su altri telefoni (anche dello stesso modello) tutto sembra filare correttamente.


In questi casi cosa si fà? come si capisce cosa sta facendo un'app senza avere il codice sorgente?

**** DISCLAIMER ****

Allora, premessa, questo non è un post di cybersecurity o penetration testing, ma solo due righe molto veloci su come si possano fare verifiche e controlli di come un'app comunica con l'esterno senza avere accesso al codice sorgente, quindi non vuole essere ne esaustivo e tanto meno completo.

**** FINE DISCLAIMER ****

Allora dicevo, come si fa?

Prima cosa proviamo ad applicare la tecnica "man in the middle" per capire a grandi linee come l'app comunica con l'esterno e se ci sono informazioni utili a risolvere la magagna.

Quindi provo subito con il mio fedele fiddler (classic ovviamente :-) ) e l'emulatore Android per windows, dove con qualche giro riesco a recuperare e installare l'apk della suddetta app e farla partire.


Ad un primo momento svariati errori di certificati, ma questo me lo aspettavo e nessun dato utile perchè l'app senza dare errori non effettuava chiamate, bloccate da Android per problemi di certificati self signed.


Quindi armato di santa pazienza cambio proxy e mi sposto su mitmproxy che non avevo mai usato, ma che sembra molto usato in questo genere di attività.

Armeggio un po' con questo proxy per prenderci confidenza e alla fine mi trovo sempre ad avere problemi di certificati, fino a che non trovo questo documento che mi spiega come installare nei Trusted Certified di Android il certificato di mimproxy.

Nel frattempo avevo fatto mille altre prove, cambiando sistema operativo e modalità di installazione di mimtproxy, ma nulla sempre problemi di certificati, fino a quando mi si accende la lampadina "vuoi vedere che ho installato i certificati sbagliati e quindi poi mitmproxy non si trova?", controllo ed effettivamente era così, avendo fatto dirverse prove, avevo installato in Android dei certificati (le chiavi pubbliche) di una installazione di mitmproxy che non stavo usando e dopo aver sistemato, boom!!! vedo le chiamate e mi si apre un mondo.



Superato l'entusiasmo iniziale ancora non capisco come mai, a parità di chiamate e risposte, l'app si comportava in modo diverso con telefoni diversi.
A questo punto provo ad andare un po' più a fondo decompilando l'app usando apk-mitm che fa anche altre cosine interessanti, ma che mi da modo di vedere i files che compongono l'app.

Apro la cartella dove ho scompattato l'apk e "oh bella, vedo dei files familiari"


ma vuoi vedere che l'hanno scritta con Xamarin?

Analizzo un po' ed effettivamente è scritta in Xamarin e allora mi dico "bene siamo a cavallo, da qua gioco in casa".

Apro il mio fedele IlSpy e inizio un po' a girovagare per il codice cercando di capire come mai ci fossero queste differenze.

Non vi tedio con tutte le prove e i giri che ho fatto, ma spoilero e arriviamo direttamente alla conclusione, guardando un po' le funzioni mi cade l'occhio su questo codice:




dove c'è un bel parse di una data da un formato stringa e mi chiedo "Vuoi vedere che dipende dalle impostazioni della lingua del telefono visto che lì non specificano il formato?"

Cambio la lingua di Android e la metto in Italiano e BINGO!! tutto funziona regolarmente!! e quindi metto fine a questo cruccio durato anni :-)


Poi visto che la fame viene mangiando, mi sono implementato nel mio bot il recupero di alcune informazioni che mi servivano, ma questa è storia per un'altro post.


giovedì 5 dicembre 2019

Come ti moralizzo il gatto (pt.1)

Io vivo in una casa con un piccolo giardino che negli ultimi periodi viene utilizzato da diversi gatti del circondario come toilette, obbligandomi, a intervalli regolari, a seppellire le varie deiezioni.
Ad un certo momento ho pensato, sono informatico, la tecnologia c'è, google pure e allora perché non pensare a qualche sistema non invasivo o pericoloso per scoraggiare i felini a non utilizzare abusivamente il mio giardino per i loro comodi?

Ed è così che nasce l'idea di moralizzare i gatti (avete presente Filippo Roma delle Iene?) per farli desistere dall'accedere alla mia proprietà. Ovviamente non volevo stare 24/7 a controllare che qualche gatto entrasse, ma volevo che un macchina lo facesse per me.

Quindi un giorno (ormai un anno fa) ho messo insieme un po' di tecnologie per creare quello che a tutt'oggi è un sistema abbastanza affidabile di riconoscimento degli oggetti.
Questo sistema si poteva fare anche usando meno tecnologie, ma volevo sperimentare e quindi ho abbondato :-)

Nella cassetta degli attrezzi ho messo:
Dopo vari tentativi di compilazione di OpenCV su Raspberry ho desistito in favore di una immagine docker (presa a caso dal web, ad esempio https://hub.docker.com/r/jjanzic/docker-python3-opencv).
Con questa funzionante ho scritto(o meglio ho copiato con stile) qualche riga di python proprio base che prendesse lo stream da una telecamera che avevo già installato e lo passasse a OpenCV per l'analisi. 
Come modello ho utilizzato YoloV3 che ormai è lo standard per questo genere di attività e dopo svariati tentativi ecco il risultato


Ed ecco che un inutile lunedì di ottobre si trasforma in una delle giornate informatiche più belle in assoluto. Il sistema funziona ed è stato domato :-)

I passaggi successivi sono stati abbastanza semplici perchè lo script in python mi scrive anche che oggetti ha trovato e li manda su un topic MQTT dove sta in ascolto un semplice demone fatto con DotNetCore che, sempre con un messaggio MQTT, avvia l'irrigazione e lo notifica su un bot telegram



Semplice funzionale e non distruttivo (soprattutto per i gatti :-) )

Un'altra cosa molto interessante è che con l'editor messo a disposizione da Yolo posso contribuire all'istruzione dell' AI specificando le immagini e insegnandogli che oggetti ci sono.

Ovviamente non manca di prendere delle cantonate bestiali, nel riquadro blu mi segna un ombrello :-)



Punti dolenti, essendo su un raspberry con docker la velocità lascia un po' a desiderare (per una immagine impiega circa 10 secondi) e l'architettura andrebbe un attimo rivista.

Il prossimo passo è la riscrittura della parte Python in DotnetCore e vediamo se è più veloce...stay tuned :-)



martedì 24 settembre 2019

[Archeologia Informatica]: Correva l'anno 1999...

...a quei tempi mi dilettavo molto con VB6.
Le linee ADSL erano solo un miraggio e si andava di modem facendo una luuuuunga telefonata.
C'era ancora in giro la rivista TGM che pubblicava software di indipendenti.
Io e il mio socio decidemmo di fare un tool che avrebbe cambiato la vita di tutti quelli che ricevevano bollette catastrofiche dell'allora SIP.
Il tool monitorava la/le connessione e appena sentiva che una di quelle RAS (mamma mia quanto andiamo indietro, siamo ai tempi di Win XP) partiva si attivava e iniziava a contare gli scatti.
Era personalizzabile in tutto: tariffe, impostazioni, colori e anche skin...si avete capito bene...skin.

Per differenziarci dagli altri avevamo introdotto al gestione della skin che permetteva di ritagliare qualsiasi tipo di immagine che si voleva per adattarla ai controlli della UI.












A corredo dell'installazione, fatta rigorosamente con InstallShield, c'era anche l'editor che permetteva agevolmente di creare le skin e spostare i controlli.



Da notare le tariffe di quei tempi


Purtroppo non ha avuto il meritato successo e non fu mai pubblicato da TGM :-(

domenica 15 settembre 2019

VSTS Agent su Raspberry PI

Da qualche tempo sto sviluppando e costruendo alcuni dispositivi per la domotica casalinga, nulla di particolarmente complicato o rivoluzionario, ma che mi semplificano la vita e che soprattutto tengono alto il WAF.
Brevemente, esiste un bot di telegram che fa un po' da integratore per i vari dispositivi che ho in casa ed era un po' che iniziava a scocciarmi il dover deployare tutto a mano, così una sera ho aggiunto la parte che mancava per poter finalmente vantarmi di fare Continuous Deployment con la domotica di casa :-).

Quindi parto, prendo il mio bel raspberry PI 3, scarico l'ultima iso disponibile, senza tanto guardare versioni o altro. Installo senza particolari problemi e inizio a scaricare l'agent di devops di microsoft confidente che tutto vada per il verso corretto.
Leggendo in giro sembra tutto abbastanza semplice ed infatti microsoft ha pensato anche a quelli che hanno raspberry con una bella compilazione già pronta dell'agent. 

Scarico e faccio partire il suo bel config.sh direttamente dalla cartella di installazione e boom, 
primo errore che recita un non ben definito errore "Not configured".
"Ok" dico, c'è google, ma nulla, alcuni consigliano di avviare installdependencies.sh che dovrebbe installare tutte le dipendenze.
"Fantastico", penso, avvio con grande fiducia, tutto bene per un po fino ad alcuni errori di dipendenze.

Ad esempio libicu57. Effettivamente per la versione di Debian che ho scaricato (la 10 denominata Buster) non esiste quella libreria. 
Penso "{sostituire con bestemmie varie}" e poi googlo un po' arrivando a un sito che consiglia di installarla manualmente prendendola dalle distribuzioni precedenti (in questo caso stretch).

"Fantastico" ripenso, installo, rifaccio andare e lo script termina senza errori
"Ci siamo" penso, avvio il config.sh presente nello zip che ho scaricato, ma aimè un bruttissimo "version `CURL_OPENSSL_3' not found (required by ./bin/System.Net.Http.Native.so)" mi blocca la strada.

"Ci risiamo {sostituire con bestemmie varie}" anche googlando un po' non trovo nulla, fino a che, a tarda notte, arrivo qua: https://blog.mjjames.co.uk/2019/07/running-tfs-build-agent-on-your.htmlhttps://blog.mjjames.co.uk/2019/07/running-tfs-build-agent-on-your.html e mi si aprono le porte del paradiso, trovando una soluzione facile quanto impossibile da trovare (al meno per me) che mi rimanda a un post più o meno anonimo di github https://github.com/Microsoft/azure-pipelines-agent/issues/1839.

La superficialità iniziale ora si paga e per la versione di debian 10 che ho usato c'è da fare un porkaround togliendo la libcurl4 e mettendo la libcurl3

A prima vista sembrava una di quelle soluzioni "sul pc è andato ma non so bene perchè", ma invece si rivela la carta vincente, faccio questo togli e rimetti e boom ora parte tutto magicamente

ed ora posso anch'io dire che faccio Continuous Deployment come quelli bravi