WeMo Hacking part two!
In short! It works! miranda, with some tweaks and fixes is a good tool for tinkering with your Belkin WeMo switch with Python. I'd suggest starting with my toolkit here: https://github.com/issackelly/wemo
The WeMo is communicating over pretty standard UPnP, though like anything else, it has some quirks.
It wanted a very specific namespace string for the SOAP envelope that contained a trailing slash and Miranda wasn't sending that.
I also added the same User-Agent that the mobile app uses for the HTTP (via UDP for UPnP) headers, and fixed the character encoding, and used consistent namespacing with the mobile app.
If you poke at Miranda you'll see that you should be able to figure out how to set schedules, and settings pragmatically through the SOAP interface, it's all there.
A simple session would go like this:
rivendell:~/P/p/wemo [master]
$ ./miranda.py
upnp> msearch
Entering discovery mode for 'upnp:rootdevice', Ctl+C to stop...
****************************************************************
SSDP reply message from 192.168.1.1:5431
XML file is located at http://192.168.1.1:5431/dyndev/uuid:0016-b639-af9e00408084
Device is running Custom/1.0 UPnP/1.0 Proc/Ver
****************************************************************
****************************************************************
SSDP reply message from 192.168.1.133:49153
XML file is located at http://192.168.1.133:49153/setup.xml
Device is running Linux/2.6.21, UPnP/1.0, Portable SDK for UPnP devices/1.6.6
****************************************************************
^CDiscover mode halted...
# You'll see that the first device found by miranda is my router, you can tell by the IP address, that leaves the other device as the WeMo
upnp> host get 1
Requesting device and service info for 192.168.1.133:49153 (this could take a few seconds)...
Host data enumeration complete!
upnp> host send 1 controllee ### tab completion is very nice in miranda!
WiFiSetup basicevent firmwareupdate metainfo remoteaccess rules timesync
upnp> host send 1 controllee basicevent GetSerialNo
SOAP request failed with error code: 500 Internal Server Error
SOAP error message: Action Failed
upnp> host send 1 controllee basicevent GetBinaryState
BinaryState : 1
upnp> host send 1 controllee basicevent SetBinaryState
Required argument:
Argument Name: BinaryState
Data Type: Boolean
Allowed Values: []
Set BinaryState value to: 2
upnp> host send 1 controllee basicevent SetBinaryState
Required argument:
Argument Name: BinaryState
Data Type: Boolean
Allowed Values: []
Set BinaryState value to: 1
upnp> host send 1 controllee basicevent SetBinaryState
Required argument:
Argument Name: BinaryState
Data Type: Boolean
Allowed Values: []
Set BinaryState value to: 0
If you want to use my utility on top of miranda, it should work for you. No promises Get it from github: https://github.com/issackelly/wemo/zipball/master
Open a shell and locate the wemo directory
$ cd ~/Downloads/
$ unzip issackelly-wemo-1afe45d.zip
$ cd wemo
$ python
>>> from wemo import on, off, get
>>> on()
True
>>> get()
True
>>> off()
True
>>> get()
False
Read through wemo.py to get a better understanding of scripting miranda. (again, start with my miranda.py, as it's tailored to the WeMo)
If you'd like to buy a WeMo, I'd certainly appreciate you using my referral link:
4th August 2012
I won't ever give out your email address. I don't publish comments but if you'd like to write to me then you could use this form.
I'm Issac. I live in Oakland. I make things for fun and money. I use electronics and computers and software. I manage teams and projects top to bottom. I've worked as a consultant, software engineer, hardware designer, artist, technology director and team lead. I do occasional fabrication in wood and plastic and metal. I run a boutique interactive agency with my brother Kasey and a roving cast of experts at Kelly Creative Tech. I was the Director of Technology for Nonchalance during the The Latitude Society project. I was the Lead Web Developer and then Technical Marketing Engineer at Nebula, which made an OpenStack Appliance. I've been building things on the web and in person since leaving Ohio State University's Electrical and Computer engineering program in 2007. Lots of other really dorky things happened to me before that, like dropping out of high school to go to university, getting an Eagle Scout award, and getting 6th in a state-wide algebra competition. I have an affinity for hopscotch.