Matthew Garrett ([personal profile] mjg59) wrote2015-09-20 01:47 pm
Entry tags:

The Internet of Incompatible Things

I have an Amazon Echo. I also have a LIFX Smart Bulb. The Echo can integrate with Philips Hue devices, letting you control your lights by voice. It has no integration with LIFX. Worse, the Echo developer program is fairly limited - while the device's built in code supports communicating with devices on your local network, the third party developer interface only allows you to make calls to remote sites[1]. It seemed like I was going to have to put up with either controlling my bedroom light by phone or actually getting out of bed to hit the switch.

Then I found this article describing the implementation of a bridge between the Echo and Belkin Wemo switches, cunningly called Fauxmo. The Echo already supports controlling Wemo switches, and the code in question simply implements enough of the Wemo API to convince the Echo that there's a bunch of Wemo switches on your network. When the Echo sends a command to them asking them to turn on or off, the code executes an arbitrary callback that integrates with whatever API you want.

This seemed like a good starting point. There's a free implementation of the LIFX bulb API called Lazylights, and with a quick bit of hacking I could use the Echo to turn my bulb on or off. But the Echo's Hue support also allows dimming of lights, and that seemed like a nice feature to have. Tcpdump showed that asking the Echo to look for Hue devices resulted in similar UPnP discovery requests to it looking for Wemo devices, so extending the Fauxmo code seemed plausible. I signed up for the Philips developer program and then discovered that the terms and conditions explicitly forbade using any information on their site to implement any kind of Hue-compatible endpoint. So that was out. Thankfully enough people have written their own Hue code at various points that I could figure out enough of the protocol by searching Github instead, and now I have a branch of Fauxmo that supports searching for LIFX bulbs and presenting them as Hues[2].

Running this on a machine on my local network is enough to keep the Echo happy, and I can now dim my bedroom light in addition to turning it on or off. But it demonstrates a somewhat awkward situation. Right now vendors have no real incentive to offer any kind of compatibility with each other. Instead they're all trying to define their own ecosystems with their own incompatible protocols with the aim of forcing users to continue buying from them. Worse, they attempt to restrict developers from implementing any kind of compatibility layers. The inevitable outcome is going to be either stacks of discarded devices speaking abandoned protocols or a cottage industry of developers writing bridge code and trying to avoid DMCA takedowns.

The dystopian future we're heading towards isn't Gibsonian giant megacorporations engaging in physical warfare, it's one where buying a new toaster means replacing all your lightbulbs or discovering that the code making your home alarm system work is now considered a copyright infringement. Is there a market where I can invest in IP lawyers?

[1] It also requires an additional phrase at the beginning of a request to indicate which third party app you want your query to go to, so it's much more clumsy to make those requests compared to using a built-in app.
[2] I only have one bulb, so as yet I haven't added any support for groups.

Combining incompatible subsystems on a comnon surface

(Anonymous) 2015-09-21 11:24 am (UTC)(link)
I agree with what has been said, that this is a problem Smart Homes and therefore IoT are suffering from for decades now. For a long time, and still today, most engineers believe the only way to solve the problem is to write a new layer on top of the incompatible protocols / bus systems in order to integrate them. Unfortunately up till today many if not all of these approaches have suffered from the fact, that they usually end up with the smallest common denominator between these subsystem. So the more systems are integrated in a common layer the less functionality will be left that is useful. So by definition you either integrate just a few systems (typically two or three) with a reasonable set of features available or you have a larger number number of subsystems integrated and there is not much more left than turning devices on or off.
There is however a solution that may deal with that problem, which tackles thins from a slightly unusual angle: If you create a surface that shows subsystems in a modular and complete way to the end user and you make it possible to couple those systems you will get a surface that allows to monitor and control a large number of systems on one simple to use surface but you still can provide all the nitty gritty details each if those subsystems allows to do. So combining an infrared controlled TV set with a Philips Hue lamp and a door sensor from let's say Smarthings will become trivial just by arranging their visualization on the same surface. Now add to that the capability to «dock» these control elements to live exchange states and events and you are pretty close to a very practical solution to the problem described. And if you are looking for a system that provides the kind of surface described have a look at dizmo.com

Re: Combining incompatible subsystems on a comnon surface

[identity profile] smurfix.livejournal.com 2015-09-21 02:55 pm (UTC)(link)
dizmo is of course commercial and cloud-ish.
Control a whooping three devices for only $49!?!
(Or ten for $99.) Or $59/year if I want to actually develop something. WAT.

Nah. The overriding point of a smart home is that it's my freaking home. I want to be IN CONTROL in my own home.