PyS60 blackout alarm


(english translation follows – segue testo in inglese )

Ci sono applicazioni che richiedono un controllo costante dello stato della linea elettrica, per segnalare eventuali interruzioni. Può trattarsi di sistemi di ricarica per l’industria o, più semplicemente, della linea elettrica domestica dei nonni dai quali correre in aiuto in caso di blackout.

È davvero semplice realizzare un "allarme blackout" via SMS utilizzando un vecchio terminale Series 60 e Python. Io ho utilizzato un glorioso Nokia 6630, che appartiene alla Series 60 2nd Edition Feature Pack 2.

6630_pyblackout.jpg

Prima di tutto è necessario installare il runtime PyS60 per il terminale in uso. I file di installazione aggiornati si possono scaricare dalla pagina del progetto su sourceforge, mentre consiglio un ottimo tutorial sull’installazione del runtime e sulla programmazione Python su Series 60 scritto da Jurgen Scheible.

Il vantaggio nell’utilizzare un Series 60 2nd Edition rispetto ad uno più recente appartenente alla 3rd Edition è nella maggiore facilità di installazione degli script. Mentre nella terza edizione occorre creare una cartella "Python" della memory card e copiarvi gli script all’interno utilizzando OBEX FTP (purtroppo non supportato nativamente dai driver Bluetooth di Windows XP), il runtime della 2nd Edition consente di inviare gli script via OBEX Push e di installarli direttamente dalla message box.

Un vecchio terminale 2nd Edition con il suo caricatore, Python for S60 e poche linee di codice sono sufficienti a creare questa applicazione. L’idea è banale: il telefono è connesso al caricabatterie, che a sua volta è connesso alla rete elettrica domenistica; poichè via software è possibile sapere lo stato del caricatore (connesso, non connesso, in carica, scarico…), se quest’ultimo appare disconnesso (ovvero la batteria non è mantenuta in carica) significa che "manca la corrente" e dunque c’è un blackout.

Python consente di scrivere in poche righe questa applicazione: lo script comincia chiedendo all’utente il numero di telefono el destinatario del messaggio d’allarme, dunque provvede a controllare lo stato del charger ogni 10 secondi. Non appena il caricatore risulta non connesso, l’applicazione manda un SMS al numero di telefono indicato all’inizio. Finito!

Prima di poter eseguire il codice sul terminale, è necessario installare la libreria sysagent, che permette di accedere ad alcune funzioni a basso livello dell’hardware e del sistema operativo. Occorre inoltre installare lo script esysagent come libreria; questo script fornisce le costanti numeriche utilizzate da sysagent.

È possibile scaricare questi due file dal sito Cyke64 (link diretti: sysagentesysagent). Su questo interessante sito potete trovare anche uno script d’esempio che mostra come utilizzare le funzioni di sysagent.

L’installazione può avvenire trasferendo via Bluetooth i due file sul telefono e selezionando "Install as lib" quando richiesto:

sysagent_py.png

A questo punto il runtime PyS60 possiede tutto ciò che serve a fare questo allarme blackout:


import e32, messaging, appuifw
import sysagent, esysagent

recipient = appuifw.query(u"Recipient:", "text")

print "Checking power line..."

while True:
    print "Sleeping..."
    e32.ao_sleep(10)
    print "Checking status"
    if sysagent.charger_status() != esysagent.ESAChargerConnected:
        print "Powerline is down!"
        messaging.sms_send(recipient, u"Powerline is down!")
        break

print "Bye bye..."

Lo script comincia importando alcuni moduli: e32 (per la gestione dei thread), messaging (per l’invio del messaggio d’allarme), appuifw (per visualizzare una popup) e la coppia sysagent-esysagent (per leggere lo stato del caricatoe). La prima istruzione visualizza la popup dove digitare il numero del destinatario::


recipient = appuifw.query(u"Recipient:", "text")

pyblackout_recipient.png

Un ciclo while() infinito controlla ogni 10 secondi lo stato del caricatore. In realta’ il ciclo parte aspettando 10 secondi prima di fare il controllo, dando cosi’ il tempo di connettere il caricatore al cellulare e alla linea elettrica. Scaduta la sleep(), viene invocata la funzione sysagent.charger_status(), che restituisce lo stato del caricatore (connected, disconnected, not charging). Se il caricatore non e’ connesso:


sysagent.charger_status() != esysagent.ESAChargerConnected

lo script invia il messaggio. That’s all!

pyblackout_start.png

There are some applications which require to verify powerline status and to report any power down event. It could be a industrial recharging system and, simpler, the domestic line of your grandparents (that may get in panic in case of blackout).

It is very easy to build an SMS-based "blackout alarm system" using an old Series 60 device and Python. I used a Nokia 6630, which belongs to Series 60 2nd Edition Feature Pack 2.

6630_pyblackout.jpg

First of all you need to get and install the PyS60 runtime tailored for your device. You can find all files at sourceforge and get read detailed installation instructions at Jurgen Scheible’s tutorial. Main advantage of 2nd Edition compared to the 3rd Edition is the easier installation process of Python scripts. While on the latter you have to create a "Python" forlder on memory card and trasfer files using OBEX FTP, the 2nd Edition lets you install applications simply (OBEX) pushing scripts to the messaging box.

An old 2nd Edition device with its charger, Python for S60 and a few lines of code are enough to build a (very) simple blackout alarm system. The idea is simple. The phone is connected to its charger, which is connected to powerline: if the charger seems to be disconnected (the battery is not charging), it means that powerline is down and the phone has to send an alarm message.

Python code is straightforward: it starts querying the telephone number to receive alarm messages, then checks the charger status every 10 seconds. When the charger status is not connected, it sends an SMS to the telephone number previously specified. That’s all!

Before writing the code, you need to install the sysagent library, which provides interface to some lowlevel hw & os routines. You have also to install the esysagent script, which defines names for numeric constants used by sysagent.

You can download these files from Cyke64 web site (direct links: sysagentesysagent). On this site, you can find also a sample script that shows how to use sysagent routines.

You can install both by simply pushing them via Bluetooth and clicking on "Install as lib" when prompted:

sysagent_py.png

Now the PyS60 runtime has all the stuff required to read charger status. Here’s the code:


import e32, messaging, appuifw
import sysagent, esysagent

recipient = appuifw.query(u"Recipient:", "text")

print "Checking power line..."

while True:
    print "Sleeping..."
    e32.ao_sleep(10)
    print "Checking status"
    if sysagent.charger_status() != esysagent.ESAChargerConnected:
        print "Powerline is down!"
        messaging.sms_send(recipient, u"Powerline is down!")
        break

print "Bye bye..."

The application stars importing some modules: e32 (for thread sleeping), messaging (for sending alarm messages), appuifw (to display the initial query popup) and sysagent-esysagent pair (to read charger status). The first instruction displays a popup where to type the phone number receiving alarm messages:


recipient = appuifw.query(u"Recipient:", "text")

pyblackout_recipient.png

An infinite while block checks every 10 seconds the status of powerline. The cycle starts pausing the application for 10 seconds (you have time to connect the handset to the charger, if it is still untethered). Then, it invokes the sysagent.charger_status() method, which returns the status of charger (connected, disconnected, not charging). If the charger appears not to be connected (sysagent.charger_status() != esysagent.ESAChargerConnected), the script sends a message to the recipient provided at startup.

pyblackout_start.png

Un nuovo toolkit grafico per MIDP: LWUIT


È stato appena pubblicato il toolkit grafico LWUIT (Lightweight UI Toolkit) realizzato da Sun Microsystems e destinato ai terminali MIDP. LWUIT supera i limiti della libreria LCDUI di componenti nativi del Mobile Information Device Profile, offrendo un approccio simile a Swing ma evidentemente semplificato, ma allo stesso tempo ricco di componenti e funzionalità

In attesa di poterlo provare e valutare in maniera più dettagliata, una breve carrellata delle funzionalità permette di cogliere l’importante di questo progetto. Tra i componenti sono disponibili i pulsanti, liste, menu, checkbox, radio button e dialog (FINALMENTE!). I componenti possono essere organizzati attraverso layout complessi e animati con effetti quali scorrimenti, rotazioni, gradienti e così via. È presente una estesa gestione dei font e dei temi, che consentono di cambiare al volo il look dell’applicazione.

L’ho provato su un Nokia 6120 (Series 60 3rd Edition) e su un Sony-Ericsson W910i (JP-8) e l’effetto è davvero molto gradevole. Sul Sony-Ericsson è leggermente più veloce, mentre sul Nokia le animazioni appaiono in qualche modo più gradevoli (anche se talvolta troppo lente).

Sono già disponibili i binari della libreria, il javadoc e un tutorial: puntate i browser su https://lwuit.dev.java.net/.

Ecco qualche snapshot dell’applicazione demo, eseguita sul Nokia 6120c:

grid.png

components.png

cell.png

font.png

layout_1.png

layout_2.png

layout_3.png

layout_4.png

theme_java.png

theme_business.png

theme_star.png

theme_ocean1.png

Il pesciolino del tema Ocen (l’ultimo qui sopra) sguazza tranquillo, proprio come se si trattasse di uno degli ormai diffusi temi realizzati in Flash. Chissà se avrà più successo il LWUIT o il progetto Capuchin di Sony-Ericsson, che mira all’integrazione di Java e Flash Lite. Staremo a vedere. Il 2008 è sempre più interessante….

Ogni tanto ci provano…


Ma chi sarà mai l’amico così amico da mandarmi un SMS Hot da ascoltare a pagamento?

ci_provano.png

Ma non faceva prima a mandarmi un’email? Forse non è un amico… ma allora chi gli ha dato il mio numero? Ed è solo lunedì…

Ancora tu?


Vi ricordate il simpaticone che con il suo Tuareg occupava due parcheggi?

parcheggio_feb2008.jpg

Giustamente qualcuno sospettò si trattasse di un caso, che in realtà non avesse avuto possibilità di parcheggiare meglio (io continuo a chiedermi perchè non si fosse spostato tutto sulla destra). Ad ogni modo, la storia si ripete e anche stavolta stessa macchina stesso stile:

ancora_tu_small.jpg

Anche stavolta è stato un caso? Anche stavolta è colpa degli altri che hanno parcheggiato prima di lui? Ha un grande pregio, senza dubbio: è coerente!

Arduino: interaction design e non solo


È un prodotto orgogliosamente MADE IN ITALY, eppure sembra che in Italia sia poco conosciuto (così dice Google…). Sto parlando di Arduino, una piattaforma (hardware + software) totalmente open source per la realizzazione di prototipi di Interaction Design.

arduino_on_mac_small.jpg

Arduino è stato ideato e realizzato da Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino e David A. Mellis. Progettato attorno ad un microcontrollore Atmel ATmega168, dispone di 14 porte I/O digitali, 6 ingressi analogici, una porta seriale a livello TTL ed è programmabile attraverso una porta USB che provvede anche ad alimentarne la scheda quando connessa al computer (senza la necessità, dunque, di disporre di un programmatore per MCU ATmega). Il software per il piccolo Arduino può contare su appena 16KB di Flash (anzi, 14 per la precisione) per i "programmi utente", 1KB di RAM e ben 512B (si cinquecentododici byte) di persistenza per i dati. Malgrado l’aspetto lillipuziano, Arduino è estremamente flessibile e la facilità di utilizzo lo rende lo strumento ideale per i laboratori di Interaction Design, in cui gli allievi non devono possedere specifiche competenze di programmazione o componentistica elettronica, ma sono totalmente orientati alla trasformazione di scenari di interazione in prototipi funzionanti. In tal senso, dunque, l’importante è avere uno strumento che traduca le idee in realtà! Arduino fa proprio al caso!

ardino_usb_small.jpg

Arduino deriva dai progetti Wiring e Processing, dai quali eredita rispettivamente parte del linguaggio di programmazione (simile al C) e l’ambiente di sviluppo.

Venduto a poche decine di euro, consente di realizzare in modulo facile ed economico prototipi di oggetti interattivi, in grado di acquisire dati attravero i più disparati sensori (accelerometri, fotoresistenze, sensori di temperatura, GPS, igrometri…) e comandare dispositivi quali motori (tradizionali, servo e step), display LCD o buzzer. La Rete è di esempi di applicazioni, sarebbe impossibile elencarli tutti qui! Apposite schede di espansione consentono l’interfacciamento ai moduli XBee Maxstream (ora Digi) per la rete ZigBee.

arduino_xbee_small.jpg

La variante Bluetooth sostituisce la porta USB basata sul driver FTDI con un modulo RFCOMM server che consente sia la programmazione remota che la connessione wireless alla scheda.

arduino_bluetooth_small.jpg

Quasi spontaneo pensare fare un paragone con i Sun SPOT, ma sarebbe totalmente fuori luogo.

arduino_sunspot_small.jpg

La complessità dei Sun SPOT li rende degli oggetti quasi insuperabili e adatti a qualsiasi contesto applicativo, anche computazionalmente complesso. Lo stesso dicasi per le capacità di interfacciamento con periferiche. D’altro canto, però Arduino è estremamente economico e consente sperimentazione a bassissimo costo (a patto, ovviamente, di non voler pretendere troppo dal suo kilobyte di RAM!).

Pù che guardarli sotto l’ottica della competizione, sarebbe interessante, invece, valutarne una possibile interoperabilità, utilizzando i Sun SPOT per i compiti più gravosi dal punto di vista della logica e dell’elaborazione dei dati rilevati dai sensori, delegando ad Arduino "il lavoro sporco di interfacciamento con questi ultimi", grazie anche al fatto che, essendo così economico, può essere utilizzato a cuor leggero anche laddove c’è il rischio di un crash hardware (se si rompesse un Sun SPOT… sarebbero dolori!).

Per chi volesse saperne di più:

http://www.arduino.cc

Nokia N810 WiMax!


Nokia ha appena annunciato un nuovo dispositivo portatile dotato di connessione WiMax. Si chiama Nokia N810 WiMax ed è basato sul sistema operativo Linux denominato Internet Tablet OS 2008 Edition.

n810wimax.jpg

Mi sembra un buon segnale di concretezza del WiMax. Chissà se poi le tariffe saranno vantaggiose o, come l’UMTS, rimarrà uno strumento quasi esclusivamente per l’utenza business o geek.

Un pizzico di amarezza…


Più volte in questo blog ho segnalato la dilagante indifferenza che regna nel mondo ICT per l’Europa. iPhone (sia il device che il programma sviluppatori), Sun SPOT, i BUG e un’innumerevole serie di altri prodotti arrivano tardi nel vecchio continente. Tra gli esclusi, gli italiani hanno ulteriori discriminazioni, come quella dell’esclusione dal concorso di Google per la nuova piattaforma Android. Ora ne arriva un’altra, più silenziosa ma non meno amara: il concorso riservato ai blogger che proveranno e scriveranno della beta di Netbeans 6.1.

61blog-contest-logo-trans.gif

Iniziativa interessante, ma leggendo il regolamento si legge quanto segue:

The winner will be chosen by a panel of experts. Blogs will be accepted in the following languages:
English
Chinese (Simplified)
Spanish
Portuguese
Russian
Japanese
French
Polish

Si tratta senza dubbio delle lingue più parlate in tutto il pianeta, anche se (nella mia ignoranza) mi vien difficile credere che il polacco sia più parlato dell’italiano!!! Non vorrei essere frainteso: ben venga la presenza del polacco, ma proprio non mi spiego l’assenza dell’italiano, parlato da una nazione che conta una popolazione quasi doppia rispetto alla Polonia. Davvero nel mondo ICT nessuno si accorge di noi? Che amarezza!

Eppure nel mondo Java siamo apprezzati, come dimostra la presenza dell’ottimo Fabrizio Gianneschi nel board dei Community Leader dei JUG e del brillante Fabrizio Giudici nel Netbeans Dream Team.

Bonta’ di casa


Dopo tante foto di ristoranti, è arrivato il momento di rendere omaggio alla cucina di casa, nel vero senso della parola. Le vacanze (si fa per dire) di Pasqua sono l’occasione. Toccata e fuga sull’Isola, giusto il tempo di scambiarsi gli auguri e… gustare le prelibatezze introvabili altrove. Purtroppo il mio telefonino s’è scaricato e ho dovuto affidarmi ad un Samsung di fortuna con fotocamera VGA, troppo povera per rendere giustizia alla Burrida a sa casteddaia:

burrida.jpg

(gattuccio condito con salsa di noci, fegatini e buon aceto), alle frittelline di asparagi selvatici:

frit_asparagi.jpg

e al primo quarto di proceddu appena tagliato:

quarto_porcello.jpg

Raddoppio il giorno dopo a gustare la pasta ai ricci di mia suocera, troppo buona perchè una foto possa renderle onore, ma soprattutto troppo distratto io dal profumo per ricordarmi di prendere la macchina fotografica prima che fosse finita…