Huginn is an open source IFTTT or Zapier clone written in RubyOnRails. Right now it's in the early phases, but it is easy to imagine this beginning to approach feature parity with those closed platforms.
What I really like about it is how easy it is to get up and running - a development copy is just a git clone and bundle away from functional.
To deploy it on a server, they've even provided Chef recipes.
Right now the architecture leaves a little bit to be desired - everything is based off of ActiveRecord and caters for many, many concerns - from publication, receiving events, generated UI from class metadata, configuration, and the actual setup of the various code to act on your behalf, all in the same model. If you put that aside; the surrounding framework is fantastic - it provides all of the robustness of a decent queuing or job management system, while being generic enough to execute any agents you choose.
The thing that is missing from my Ninjablocks or TheThingSystem is deep integration with a variety of webservices. Zapier or IFTTT doesn't integrate for example, but can do many useful things - how neat would it be to turn on lighting when I leave a foursquare place I've checked into?
The thing that is missing from either of the web platforms is really knowing much about my house and home automation setup. I don't really want a generic house or to control specific Wemo powerpoints from a web system, I want something to knows and discovers things within my local network - things behind the firewall.
TheThingSystem excels at this, and Ninjablocks speaking to a variety of 433mhz actuators (provided you have a big enough aerial) to switch on lamps = a cheap, decent way to get things done around your house.
To fix that, I've added in MQTT publish/subscribe support to Huginn.
Now any Huginn agent can publish their results to a broker, and vice versa.
How can you do the same?
Once you are hooked, you can look at the plans available or cook you own.
You'll need to take note of the URL, credentials and more.
In a few moments (or you can force it to run), your MQTT Agent in Huginn will execute and give you a nice nested JSON event to play with:
What I really like about it is how easy it is to get up and running - a development copy is just a git clone and bundle away from functional.
To deploy it on a server, they've even provided Chef recipes.
Right now the architecture leaves a little bit to be desired - everything is based off of ActiveRecord and caters for many, many concerns - from publication, receiving events, generated UI from class metadata, configuration, and the actual setup of the various code to act on your behalf, all in the same model. If you put that aside; the surrounding framework is fantastic - it provides all of the robustness of a decent queuing or job management system, while being generic enough to execute any agents you choose.
The thing that is missing from my Ninjablocks or TheThingSystem is deep integration with a variety of webservices. Zapier or IFTTT doesn't integrate for example, but can do many useful things - how neat would it be to turn on lighting when I leave a foursquare place I've checked into?
The thing that is missing from either of the web platforms is really knowing much about my house and home automation setup. I don't really want a generic house or to control specific Wemo powerpoints from a web system, I want something to knows and discovers things within my local network - things behind the firewall.
TheThingSystem excels at this, and Ninjablocks speaking to a variety of 433mhz actuators (provided you have a big enough aerial) to switch on lamps = a cheap, decent way to get things done around your house.
To fix that, I've added in MQTT publish/subscribe support to Huginn.
Now any Huginn agent can publish their results to a broker, and vice versa.
How can you do the same?
Get a MQTT Broker
You have two main options here, hosted or self hosted. I recommend CloudMQTT's free plan - 10 connections will go a long way, and it's literally a few clicks to spawn a new instance.Once you are hooked, you can look at the plans available or cook you own.
You'll need to take note of the URL, credentials and more.
Install Huginn
Pretty easy to do. Experienced ruby folks may want to use rbenv or rvm as suitable. Assumes ubuntu or debian:
Assuming https://github.com/cantino/huginn/pull/368 is merged:
git clone git://github.com/cantino/huginn.git
apt-get install ruby1.9.3 ruby1.9.1-dev rubygems mysql-server
cd huginn
gem install rake bundle
bundle
bundle exec rake db:create
bundle exec rake db:migrate
bundle exec rake db:seed
bundle exec foreman start
There's plenty more guidance here, but if the above has worked you can now visit http://127.0.0.1:3000/
Install Owntracks
Straight forward enough, simply visit http://owntracks.org/ and follow the links to the apt-store.
Configuration - Owntracks
Fire up the app, and under preferences, enable Advanced connection details. You probably want to tick 'start on boot' as well.
Next, configure the broker settings:
Don't forget to pick a snazzy name for your device, as it'll be your proxy on the map.
Hit connect, and everything should be all good.
Next, you'll want to define a waypoint (geofence). Particularly useful as you can choose when the event should fire - entering, leaving, or both.
That's it!
Configuration - Huginn
You'll want to do this last, as it'll make a whole lot of things start to happen.
- Add a new Agent
- Select MQTTAgent
- Populate the MQTT url from the details before.
It's like a http url
mqtt://user:pass@server:port/ - Choose what you are going to subscribe to. For now, I recommend adding a topic of:
/#
which boils down to "Give me everything!"
The big test
Now that you've done all of the configuration, in Owntracks, use the icon to force share your location if it hasn't run already.In a few moments (or you can force it to run), your MQTT Agent in Huginn will execute and give you a nice nested JSON event to play with:
There's plenty more you can do, now set up trigger agents to invoke other tasks; or deploy this as a service via chef.
No comments:
Post a Comment