I run HomeSeer at home, so I’ll explain the steps for integrating with this. The same method could be used with any system that can receive messages over IP and has basic scripting.

At this point you should have installed SiriProxy by following the instructions in Part 1, or by downloading and configuring one of our pre-installed versions (guaranteed virus and spyware free).

The way I decided to tackle HomeSeer integration (phase 1) was by sending simple messages containing event names. I’d recently completed a similar integration with my URC system via Serial connection to the MSC-400. The only difference is that this would be over TCP instead of RS232.

As luck would have it, a HomeSeer developer called drule has already created a plug-in to receive IP or RS232 messages. All I needed was a way to send them. After 20 mins googling “IP messaging ” and “Executing Unix commands from Ruby”, I had a simple, but elegant solution.

I would add lines to the siriproxy-example.rb file for phrases that I wanted Siri to recognize and then run a Linux command to send the message (event name) to my HomeSeer server. On HomeSeer, the message is received, and if it matches an event name, the event is run. This could be done with a single entry in the siriproxy-example.rb file that would understand something like “HomeSeer Event ” and simply pass the event name to HS, but I wanted finer control and the ability to ask for confirmation or select choices on certain commands.

Process Flow

The flowchart below shows what’s (logically) happening. I’m not familiar enough with the intricate details to know the exact flow of messages. No return messaging to the phone or user is indicated either. My CS prof would have a nightmare if he looked at this flowchart too: with decisions having only one exit (and other flaws), but it’s not a CS assignment, so I won’t lose any sleep over it. (Click the image for a larger view.)

In this section we’ll give configuration details and examples.

(Unfortunately the vertical pipe character–even when using a named entity–played havoc with our CMS, so we had to include the remainder in a separate HTML document.)