Purchased a Russound CAA66 multi-zone audio controller a while back to manage all the audio zones in the house. Does the job and works great, especially with the various inputs I have setup. Wanted to tie this into something bigger so jumped on ST v2 with the hopes that it would be supported. Got the hub and quickly realized there was no good integration option… so set out to get this done myself. This is my first device integration and I’m hooked.
Provides integration over RS-232 to Russound (or Monoprice) multi-zone controller (CAA66, CAM66, CAV66, etc) with the following features:
- Supports default 6 zones and 6 sources
- Ability to view the status of all zones
- Ability to turn zones ON/OFF
- Ability to activate/assign a source to a zone
- Ability to set volume level in a zone
- Ability to set bass and treble level in a zone
- Ability to set loudness option in a zone
- Ability to control multiple zones with Party Mode
- Ability to turn off all zones
And the following requirements / dependencies:
- Russound (or Monoprice) controller must support RNET over RS-232
- Compatible USB to serial cable; FTDI cable seems to work well with Mac/Linux; I bought this one and it works fine: amazon.com/gp/product/B004WM1WUY
- Installed and configured SmartThings Node Proxy: https://github.com/redloro/smartthings/#smartthings-node-proxy
- Added support for C-series Russound controllers, including the MCA-C3, MCA-C5, etc.
Connecting to a Serial Device
Realized that I needed a good framework to offer outside integration with SmartThings, so decided to write a proxy service in Node, making local LAN integration with SmartThings easier, offering async update support, as well as the flexibility to connect to devices via USB, serial, etc which are not natively supported by SmartThings. Connectivity to the Russound multi-zone controller is provided by a plugin to the proxy service (SmartThings Node Proxy) - basic schematic of how this is wired together is provided below. Mode details on the proxy service, how to get it installed and configured in under 5 mins is available here: github.com/redloro/smartthings#smartthings-node-proxy
SmartThings Hub <-> SmartThings Node Proxy <-> Russound RNET plugin <-> RS-232 serial <-> Russound controller
Since the Russound RNET SmartApp communicates with the audio controller via the SmartThings Node Proxy, make sure that you have the proxy and the Russound RNET plugin installed and working before adding the SmartApp and Devices to SmartThings.
- SmartThings Node Proxy + Russound RNET plugin installed and configured on a machine; machine is connected with RS-232 serial cable to Russound controller
- Create a new SmartApp and use this code: https://github.com/redloro/smartthings/blob/master/smartapps/redloro-smartthings/russound-rnet.src/russound-rnet.groovy
- Create a new Device Handler and use this code: https://github.com/redloro/smartthings/blob/master/devicetypes/redloro-smartthings/russound-zone.src/russound-zone.groovy
- Add the Russound RNET SmartApp from the SmartThings marketplace
- Configure the SmartApp
- SmartThings Hub: REQUIRED
- SmartThings Node Proxy: REQUIRED to connect to the SmarThings Node Proxy
- Done! Note that all the zones defined in config.json will be loaded 10 seconds after the SmartApp is configured and all the devices should show up under your Things. If the zones/devices do not show up, simply open the SmartApp again and hit done to force a refresh of the zones/devices.
Going to cover a couple questions here to hopefully aid others in their quest to get this setup.
Do you have an installation video?
Why as a matter of fact I do… https://www.youtube.com/watch?v=XC2X8Qiyxqs
What the heck is Node?
Node is awesome! https://nodejs.org
What the heck is JSON?
JSON… pronounced like the name Jason (JAY-sun) is also awesome… http://www.json.org/
Why do I need SmartThings Node Proxy?
If you want to direct connect your Russound to SmartThings you need STNP. It connects to the Russound with a RS232/serial cable and establishes a bi-directional link with the SmartThings Hub. So all traffic stays on your local LAN and communications between your Russound and the Hub happen in near-realtime.
How does SmartThings Node Proxy connect with the Russound and the SmartThings Hub?
What do I need to do to get this running?
- Forget about SmartThings for a second… we’ll come back to that.
- First things first, let’s get SmartThings Node Proxy installed, configured and working.
- Identify a host machine on your network that can run NodeJS
- Download and install NodeJS from here: https://nodejs.org
- Download SmartThings Node Proxy and place in a target folder on your machine (ie.
- Create a subfolder called plugins (ie.
- Move rnet.js from
avail_pluginsto your new
- Copy the contents of
config.json.sampleand paste them here: http://jsonmate.com/
- Edit the document so that it matches your configuration… remove all comments (anthing starting with
//) and then click “Beautify”.
- Create a new file named
config.jsonin your SmartThings Node Proxy folder
- Copy the contents of the json document into
- Install dependencies by running:
npm run install:rnet-OR-
npm run install:mpr-sg6z
- Fire up the server by typing:
npm run start
- Make sure that it connects with the Russound and you should see a connection message; if you have existing keypads you will also see events as you control your Russound from the keypads
- Now we can move on to setting up the SmartApp and Devices in SmartThings…
- How do I know it’s running?
When you start SmartThings Node Proxy you should see something like the following:
$ node server.js SmartThings Node Proxy listening at http://:::8080 Loaded plugin: rnet Connected to RNET: /dev/cu.usbserial-A102MMGZ
What’s all this nonsense about restart.me and forever??
You can honestly ignore all that if it doesn’t work or you are having issues getting it run.
restart.meis a script that I created to make starting/restarting the service easy, but it may only run on specific operating systems.
foreveris a Node module that allows you run a Node application continuously… sort of like a service.
But how do I run SmartThings Node Proxy unattended or guarantee that it runs on startup?
While I don’t have a solution to that here, there are many solutions available online for wrapping a Node app into a service that auto-starts, etc. and it all depends on your host operating system. Google is your friend: http://bfy.tw/8Qp9. For Windows users, the simplest is to probably create a shortcut to “node server.js” and put that in your startup folder.
What are all these password and code fields in the config.json?
Good question and I’m often left wondering the same… like what the heck was I thinking when I wrote this?? But here it is…
authCodeis a passcode you set for the SmartThings Node Proxy to prevent unauthorized access to SmartThings Node Proxy from anybody/anything who could be snooping around your local network and happen to stumble upon SmartThings Node Proxy listening on port 8080. It’s not Ft Knox but it’s not meant to be… just a basic passcode to keep everyone out. NOTE: this is the passcode you have to use during the SmartApp configuration to allow the SmartApp to communicate with SmartThings Node Proxy.