Cherry
An extensible hub for home automation/Internet of Things.
Overview
Cherry acts as a hub for your house and allows any connected component to communicate with each other. Cherry's power comes from its plugin system. Connected devices can talk to each other. Adding a new component to the system is as simple as writing a few lines of code (Node.js module).
As an example, let's say you have a Philips Hue light and you want to turn it on by pressing a button. You just need a few lines of code:
module { console; cherry;}
See this blog post for more background: https://wit.ai/blog/2014/09/12/office-automation-with-raspberry-pi.
Using
npm install -g cherry-core# you may install additional plugins through npm # npm install -g cherry-wit cherry-spotify cherry-hue cherry path/to/config.json
config.json
looks something like that (cf. config.json.sample):
Using existing plugins
In your config.json
file, you specify the list of plugins you want to use.
Each item can either be:
- the name of a globally or locally installed npm package, e.g.
cherry-spotify
- a path to a Javascript file, e.g.
./examples/lightswitch.js
- a CoffeeScript file
Creating a plugin
We've focused on making it really simple and easy to write a plugin for Cherry.
You can check the examples
directory, cherry-spotify, cherry-hue or below:
mkdir cherry-loggernpm init cat > index.js <<EOFmodule.exports = function (cherry) { // listen for chat messages and turn lights on or play next song cherry.handle({ chat: function (msg) { var plugins = cherry.plugins(); if (msg === 'next song') { plugins.spop('next'); } else if (msg === 'lights on') { plugins.hue({on: true}); } } });}EOF npm publish
Built-in plugins
You can configure plugins through a config.json
file.
HipChat
Note: this will be extracted into a cherry-hipchat
plugin pretty soon.
Produces: "from: chat"
"hipchat_jid": "88888_8888888@chat.hipchat.com",
"hipchat_pwd": "mypassword",
"hipchat_room": "88888_yay@conf.hipchat.com/My Username",
Dev
cp config.json.sample config.jsonlein cljsbuild autonode dist/cherry.js config.json
Cambridge
We use cherry everyday at the office and have put together a small script that should get everything up and running from a Raspberry Pi:
curl -s https://raw.githubusercontent.com/wit-ai/cherry/master/cambridge.sh | sudo -E sh
TODO
- figure out how to allow CLJS plugins