Well today I broke it while preparing to move house (and use it in it’s intended situation!), which was bad news. Listen to your GND markings, people!
But a moment’s search for a replacement strategy yielded another idea. Nothing original by any means, but something new to my programming adventures thus far: Get the IP address by e-mail on boot!
Looking at a Raspberry Pi as it boots you will see the Ethernet port is initialized pretty early on in the boot procedure. A quick Google search revealed the existence of the ‘smtplib‘ module included with Python, which I leveraged to make this happen. Here is the final code (get_ip_address() found here):
import smtplib import struct import socket import fcntl msg = "From RPi Python" def get_ip_address(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl( s.fileno(), 0x8915, # SIOCGIFADDR struct.pack('256s', ifname[:15]) )[20:24]) fromaddr = <from address> toaddr = <to address> msg = """RPi IP is %s""" % get_ip_address('eth0') username = <username> password = <password> print("Sending IP: %s to %s" % (get_ip_address('eth0'), toaddr)) print("Opening connection...") server = smtplib.SMTP('smtp.gmail.com:587') server.ehlo() server.starttls() server.ehlo() print("Logging in...") server.login(username, password) print("Sending message: %s" % msg) server.sendmail(fromaddr, toaddr, msg) print("Closing connection...") server.close() print("Sent.")
The next step is to make it run on boot, which only involved writing this script (called ipmailboot.sh):
#!/usr/bin/python sudo python ~/python/ipmail.py
Then changing the permissions for execution:
sudo chmod 755 ipmailboot.sh
And then registering it to run on boot using
update-rc.d ipmailboot.sh defaults.
So, nothing revolutionary, but when I move house and find the router is nowhere near a TV, all I’ll have to do is connect it to the network with an Ethernet cable, power on and wait for the email to arrive (on my Pebble watch, no less!)