Forse chi mi conosce sa gia’ di cosa parlero’…
ma per chi si trova di passaggio in questo blog la cosa potrebbe essere interessante..
Parlo di “TinaLaPiantina” ovvero il mio progetto, per ora in stallo, di dare “voce” ad una pianta con l’ausilio delle nuove tecnologie.
No, non ho scoperto il linguaggio delle piante, purtroppo, ne mi sono svegliato una mattina, all’indomani di un grande incidente magari, con il possesso di strani poteri quasi da medium.
Purtroppo no
La mia idea e’ partita da un semplice progetto di irrigazione… infatti mi sono chiesto, quando esattamente dovrei innaffiare una pianta?
I fattori che influenzano la “sete” di una pianta sono tanti: la temperatura ambientale, l’umidita’ dell’aria e del terreno, la presenza di giornate assolate o coperte, etc..
e poi avrei voluto che fosse un sistema automatico ad avvertirmi delle condizioni e volevo che lo facesse sui maggiori social networ (facebbok, twitter, etc…)
Io mi sono soffermato, per adesso, sul primo aspetto…
La temperatura ambientale
Trovare in rete degli schemi elettronici per fare un monitoring della temperatura e’ stato davvero facile.. non mi dilungo sul circuito perche’ potete trovare tutti i dettagli a questo indirizzo: http://www.instructables.com/id/Temperature-sensor–weatherstation/ (da notare l’uso di sensori a tecnologia 1-wire 😉 )
Invece forse risulta piu’ interessante il modo con cui TinaLaPiantina comunica con twitter (http://twitter.com/tinapiantina) e facebook(http://www.facebook.com/tinalapiantina):
Ho scritto tutto il codice in python e per la gestione dei post su twitter ho fatto uso della libreria “python-twitter” (http://code.google.com/p/python-twitter/)
per cui l’inserimento di un post risulta molto semplice:
import twitter
self.api=twitter.Api(username=self.name, password=self.passw)self.api.PostUpdate(message)
Davvero semplice…
Per quanto riguarda Facebook la cosa e’ piu’ complicata in quanto occorre creare una nuova applicazione facebook alla quale agganciarsi per poter postare dei messaggi nella bacheca dell’utente iscritto all’applicazione e consenziente..
A me di sviluppare una app faceook apposta non interessava, quindi mi sono appoggiato ad una app che da proprio questo servizio ed in piu’ offre delle API per postare sulla propria bacheca, si tratta di http://ping.fm/ che offre anche molti altri servizi (andate a curiosare il sito).
Tramite questo servizio occorre solo registrarsi ed usare questa sintassi:
from xml.etree import ElementTreeimport urllib,urllib2import sysAPIURL = ‘http://api.ping.fm/v1/’#EDIT THE NEXT 2 LINES ACCORDING TO YOUR ACCOUNT########################################################degug = 1 just dumps the XML…debug = 0class FbStatus():def __init__(self,apikey,userkey):self.APIKEY = apikey #Get this from http://ping.fm/developers/self.USERKEY = userkey #get this from http://ping.fm/keyfrom xml.etree import ElementTreeimport urllib,urllib2import sys
APIURL = ‘http://api.ping.fm/v1/’
#EDIT THE NEXT 2 LINES ACCORDING TO YOUR ACCOUNT
#######################################################
#degug = 1 just dumps the XML…debug = 0
class FbStatus(): def __init__(self,apikey,userkey):self.APIKEY = apikey #Get this from http://ping.fm/developers/
self.USERKEY = userkey #get this from http://ping.fm/key
def UpdateStatus(self,msg = None, service = “facebook”):
global debug
print “Status message to be updated: “+msg
if service is not None: print “Service to update: “+service
data_to_post = {‘api_key’:self.APIKEY,’user_app_key’:self.USERKEY,’post_method’:’default’,’body’: msg,’debug’: debug}
#If service is provided in the command line parameter, add that service in the data_to_post too…
if service is not None: data_to_post[‘service’] = service
#Encoding the data to send…
data_to_post = urllib.urlencode(data_to_post)
req = urllib2.Request(APIURL + ‘user.post’, data_to_post)
try:
response_page = urllib2.urlopen(req)
#We get the response in XML
responseXML = response_page.read()
#Parsinf the XML
result = ElementTree.XML(responseXML)
if result.attrib is not None:
if result.attrib[‘status’] == ‘OK’:
print ‘Your message has posted successfully!!!’;
else:
print ‘Error: ‘ + result[2].text
if debug: print responseXML
#Exception is handled
except urllib2.URLError, e:
if hasattr(e, ‘reason’):
print ‘Couldnt connect to server.’
print ‘Reason: ‘, e.reason
elif hasattr(e, ‘code’):
print ‘Error code: ‘, e.code
Per ora la creazione ed il supporto di tutti gli altri sensori e’ in standby… ma quando avro’ un po’ di tempo e voglia ho intenzione di finirlo… 😉
Purtroppo la tabatura non credo sia corretta… potete scaricare i sorgenti da qui 🙂
Grazie! 🙂
idea geniale!!! complimenti!!! 🙂