Uno degli utilizzi più comuni di Raspberry Pi è senza dubbio quello di utilizzarlo come Web Server casalingo, per ospitare e testare i propri progetti Web in fase di sviluppo. Nel mio caso il progetto Web in questione è legato alla domotica e mira a controllare diverse cose di casa a distanza tramite il Web.
Fin qui tutto bellissimo ma ovviamente perchè il progetto abbia senso è necessario che vi sia la possibilità di accedere alle pagine ospitate sul nostro server Web da qualsiasi punto noi ci troviamo, non solo all’interno della casa. Per fare ciò è necessario aprire la porta che il nostro Web server apache utilizza (di default è la porta 80).
Una volta aperto il traffico dall’esterno verso il nostro web server ci sarà sufficiente conoscere l’indirizzo ip di casa nostra per accedervi. Da qui nasce però un altro problema: o abbiamo un ip statico fornitoci dal nostro ISP o altrimenti dovremo avere qualcuno che ogni volta ci comunica l’indirizzo Ip. Ebbene con il nostro Raspberry (ma in realtà con qualsiasi altro web server basato su linux) possiamo risolvere il problema. Vediamo come ..
Sarà sufficiente scrivere uno script python che verifica ogni x minuti o ore l’indirizzo ip e in caso che questo sia variato ci avvisa tramite mail. Vi basterà avere un account gmail e impostare lo script ogni x minuti tramite Crontab ( http://www.adminschoice.com/crontab-quick-reference )
In questo modo è come se avessimo un ip statico dato che siamo sempre informati sulle sue variazioni. Vi sono anche dei servizi che forniscono in automatico lo stesso servizio mantenendo un dns sempre fisso ma non avendo trovato nessun servizio gratuito e valido ho optato per questa soluzione.
Magari potrà tornare utile anche a qualcunaltro.
Vi copio di seguito lo script che ho realizzato:
#!/usr/bin/env python2.7
import urllib2
import MySQLdb as mdb
import sys
con = mdb.connect('localhost', 'username', 'pass', 'Database');
#import MySQLdb
import smtplib, string, subprocess
# Settings
fromaddr = 'yourmail@gmail.com'
toaddr = 'yourmailordestinatary@gmail.com'
# Googlemail login details
username = 'yourusername'
password = 'yourpass'
output_if = subprocess.Popen(['ifconfig'], stdout=subprocess.PIPE).communicate()[0]
output_cpu = open('/proc/cpuinfo', 'r').read()
my_ip = urllib2.urlopen('http://ip.42.pl/raw').read()
with con:
cur = con.cursor()
cur.execute("SELECT Ip FROM Tabledb")
ip= cur.fetchone()
print ip[0]
if my_ip == ip[0]:
print 'uguale'
else:
with con:
cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS Tabledb")
cur.execute("CREATE TABLE Tabledb(Id INT PRIMARY KEY AUTO_INCREMENT, \
Name VARCHAR(25), Ip TEXT, Time TIMESTAMP)")
cur.execute("INSERT INTO Srv(Ip) VALUES('%s')" %(my_ip))
print my_ip
BODY = string.join((
"From: %s" % fromaddr,
"To: %s" % toaddr,
"Subject: Indirizzo Ip Server variato",
"",
"http://%s" % my_ip,
), "\r\n")
# send the email
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddr, BODY)
server.quit()
Non ho python2.7 e si blocca, ho provato a mettere python2.6 alla prima riga e mi da errore alla riga cur=cron.cursor. Cosa posso fare?
Hai installato la libreria MySQLdb??
Prova a dare un occhio qui..
http://mysql-python.sourceforge.net/MySQLdb.html
ho difficoltà nel farlo funzionare.
potrebbe darmi dei suggerimenti per cortesia ?
——————-
pi@raspy:/home/pi/paolo$ ./my_ip3.py
Traceback (most recent call last):
File “./my_ip3.py”, line 31, in
print ip[0]
TypeError: ‘NoneType’ object has no attribute ‘__getitem__’
pi@raspy:/home/pi/paolo$
———————