Tina la piantina, ovvero far parlare una pianta

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 ElementTree
import urllib,urllib2
import 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

from 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 🙂

2 risposte a “Tina la piantina, ovvero far parlare una pianta”

I commenti sono chiusi.