Various notes about home automation that I’m keeping so I don’t lose things.
UPNP is kind of a beast, but it’s incredibly interesting at the same time. The base specs are fairly readable (v2.0 is more readable than v1.0, but v2.0 is so new no one implements it).
The crux of UPNP is it’s a discovery protocol, and then SOAP for sending control messages. There is an eventing standard, which seems largely unused.
The most useful piece of Linux Software I found is ‘gssdp-discover’ in the gupnp-tools (available in the apt repo for Ubuntu). This will give you the ssdp messages on your network.
The vera home automation hub is kind of based on UPNP, except when they decide to wildly deviate for I’m sure good reasons. It means that writing a plugin for vera is basically some pidgin version of UPNP, specifying chunks of templates in the process.
The entire LUUP architecture mostly doesn’t make sense until you’ve read at least the overview for UPNP itself. All those S_, D_ xml files are their internal UPNPish equivalent to device and service discovery.
Vera announces every device over UPNP, but not over wifi (not sure why).
It turns out Yamaha uses UPNP vendor extensions (allowed in 1.0 spec) to specify their remote control mechanism – http://g33ksblog.blogspot.com/2013/08/yamaha-network-control.html has some details on mapping that into actual xml commands. I’ll probably just sniff the traffic off of the phone app to figure out exactly what these packets are looking like.