Smartthings
SmartThings home automation services, apps and devices
Install / Use
/learn @redloro/SmartthingsREADME
SmartThings 
Repository for all things related to SmartThings.
- SmartThing Node Proxy
- Envisalink Vista TPI Plugin
- AlarmDecoder AD2USB Plugin
- Russound RNET Plugin
- Monoprice 6-Zone Amplifier Plugin
- SmartThings SmartApps
- Honeywell Security
- Russound RNET
- Monoprice MPR6Z
- Blink Home Monitoring
- Yamaha Network Receiver
SmartThings Node Proxy
Node JS proxy service for connecting SmartThings apps and devices via local LAN to anything. Built the service as I needed to connect to a Russound multi-zone controller/amplifier via RS-232 and this seemed the easiest. Extended the service to connect to a Honeywell Ademco alarm system via Envisalink TPI all on local LAN. The service accepts inbound HTTP calls from your SmartThings apps and devices and is setup to support HTTP NOTIFY callbacks to SmartThings. This allows you to connect apps and devices to things asynchronously and not require refresh or polling from SmartThings to obtain status. This also allows you to setup local LAN communication between devices and forego the SmartThings cloud service for callbacks using OAUTH. Plugin support is available, allowing you to extend the functionality of the service.
Config
config.json
{
"port": 8080, // REQUIRED: SmartThings Node Proxy service port
"authCode": "secret-key" // REQUIRED: Auth code used to gain access to SmartThings Node Proxy
"notify": {
"address": "192.168.2.31", // OPTIONAL (will be set automatically): See /subscribe route below
"port": "39500" // OPTIONAL (will be set automatically): See /subscribe route below
}
}
Installation
- Install Node
- Download smartthings-nodeproxy to local folder
- Download and install all package dependencies:
cd ~/smartthings-nodeproxy
npm install
- Rename
config.json.sampletoconfig.json
- Set port
- Set authCode
- Create folder
~/smartthings-nodeproxy/plugins - Copy desired plugins in to
pluginsfolder - Download and install plugin dependencies:
npm run install:<plugin>
- Start the server:
npm run start
- Open a browser and test access:
http://<proxy-ip>:<port>
Usage
Routes
/
Default root which can be used to test if the service is up and running.
/subscribe/<host:port>
Called by the SmartThings app/device to set the callback/notify host address and port. This will usually be set to the SmartThings Hub IP and port. The notify host address and port will be saved to the config file.
Plugins
All plugins located in the ./plugins folder will be automatically loaded by the SmartThings Node Proxy.
- To include a plugin, place it in the
./pluginsfolder. - To exclude a plugin, remove it from the
./pluginsfolder.
Configuration data for the plugins is also stored in the config.json configuration file.
Callback / Notifications
A plugin can post data to the SmartThings Hub asynchronously via an HTTP NOTIFY. The notify() method is exposed to a plugin by the SmartThings Node Proxy, to be used for this purpose. The plugin can call the notify() method to post data back to the SmartThings Hub whenever an update or change of state is required. It is the responsibility of the corresponding SmartThings app/device to process the notification.
Generic Plugin
SmartThings Node Proxy sample plugin with corresponding SmartThings SmartApp and DeviceType. The Generic plugin was built to demonstrate how the system interacts with SmartThings and also provide a template for building new plugins, SmartApps and DeviceTypes that leverage the power of the SmartThings Node Proxy. The plugin itself, the SmartApp and DeviceType are considered barebones, with minimum functionality so highlight how the the pieces tie together. The plugin provides the following functionality, showing how the system integrates with SmartThings;
- Generic Plugin will listen at http://stnp_ip_address:port/plugins/generic/ AND echo back the message
- Generic SmartApp will route inbound messages to Generic Device AND route outbound messages to SmartThings Node Proxy
- Generic Device will submit a message to Generic SmartApp (parent app) to send to STNP AND update the tiles with any message received and flip the on/off switch
Envisalink Vista TPI Plugin / AlarmDecoder AD2USB
SmartThings Node Proxy plugin to connect over local lan to a Honeywell / Ademco Vista 20p alarm panel.
Supports the following zone types (Correct syntax to use in config.json is in quotes):
- Door, Window Contact ("contact")
- Motion Sensor ("motion")
- Smoke Detector ("smoke")
- Carbon Monoxide Detector ("carbonMonoxide") (Smart Home Monitor will only see it as a Smoke Detector)
- Water Leak Detector ("water")
Supports the following actions:
- Arm Away
- Arm Stay
- Arm Instant
- Disarm
- Chime
- Zone Bypass
Config
config.json
{
"envisalink": {
"address": "192.168.1.11", // OPTIONAL (can be set via SmartApp): Address of Envisalink Vista TPI module
"port": "4025", // OPTIONAL (can be set via SmartApp): Envisalink port - default is 4025
"password": "user", // OPTIONAL (can be set via SmartApp): Envisalink password - default is user
"securityCode": "1234", // OPTIONAL (can be set via SmartApp): Security code to arm/disarm the panel
"panelConfig": { // REQUIRED: Set this to define partitions and zones
"type": "discover",
"partitions": [
{"partition": 1, "name": "Security Panel"}
],
"zones": [
{"zone": 1, "type": "smoke", "name": "Smoke Detector"},
{"zone": 2, "type": "contact", "name": "Front Door"},
{"zone": 3, "type": "contact", "name": "Back Door"},
{"zone": 4, "type": "contact", "name": "Kitchen Door"},
{"zone": 5, "type": "contact", "name": "Kitchen Window"}
]
}
}
"ad2usb": {
"serialPort": "COM2", // RS-232 port connected to AD2USB
"securityCode": "1234", // OPTIONAL (can be set via SmartApp): Security code to arm/disarm the panel
"panelConfig": { // REQUIRED: Set this to define partitions and zones
"type": "discover",
"partitions": [
{"partition": 1, "name": "Security Panel"}
],
"zones": [
{"zone": 1, "type": "smoke", "name": "Smoke Detector"},
{"zone": 2, "type": "contact", "name": "Front Door"},
{"zone": 3, "type": "contact", "name": "Back Door"},
{"zone": 4, "type": "contact", "name": "Kitchen Door"},
{"zone": 5, "type": "contact", "name": "Kitchen Window"}
]
}
}
}
Installation
- Verify that Envisalink EVL is correctly configured and functional with EyezOn.
- Verify
envisalink.jsplugin is in./pluginsfolder - Edit
config.json
- Remove all comments
- Set envisalink configuration settings
- Restart the SmartThings Node Proxy service using the included script:
./restart.me
- Check log files to verify startup and connectivity to the Envisalink Vista TPI module
Russound RNET Plugin
SmartThings Node Proxy plugin to connect over RS-232 to Russound multi-zone controller such as CAA66, CAM66, CAV66, etc.
Supports by default 6 zones and 6 sources. The Russound multi-zone controller must support RNET over RS-232.
Supports the following actions:
- Zone ON/OFF
- Source assignment
- Volume level
- Bass level
- Treble level
- Loudness
- Balance
Config
config.json
{
"rnet": {
"serialPort": "/dev/usbser", // REQUIRED: RS-232 port connected to Russound controller
"sources": [ // REQUIRED: Set this to define sources
"Sonos",
"Airplay",
"Apple TV",
"Source 4",
"Source 5",
"Source 6"
],
"controllerConfig": { // REQUIRED: Set this to define zones
"type": "discover",
"zones": [
{"zone": 0, "name": "Family Room"},
{"zone": 1, "name": "Kitchen"},
{"zone": 2, "name": "Living Room"},
{"zone": 3, "name": "Patio"},
{"zone": 4, "name": "Dining Room"},
{"zone": 5, "name": "Office"}
]
}
}
}
Installation
- Verify
rnet.jsplugin is in./pluginsfolder - Edit
config.json
- Remove all comments
- Set rnet configuration settings
- Restart the SmartThings Node Proxy service using the included script:
./restart.me
- Check log files to verify startup and connectivity to the Russound controller. NOTE: if you do not know the name of the USB serial device, check the logs after service startup as the plugin will dump a list of known/detected USB serial devices for you to identify.
Monoprice 6-Zone Amplifier Plugin
SmartThings Node Proxy plugin to connect over RS-232 to Monoprice multi-zone controller such as MPR-SG6Z (10761).
Supports by default 6 zones and 6 sources. Zones are numbered with the controller ID (1) in the 10s position. Might work on stacks with controllers 2 and 3 for up to 18 zones.
Supports the following actions:
- Zone ON/OFF
- Source assignment
- Volume level
- Bass level
- Treble level
- Mute
- Balance
- Do Not Disturb
Config
config.json
{
"mpr6z": {
"serialPort": "/dev/usbser", // REQUIRED: RS-232 port connected to Monoprice controller
"baudRate": 9600, // REQUIRED: Baud rate supported by controller
"sources": [ // REQUIRED: Set this to define sources
"Sonos",
"Airplay",
"Apple TV",
"Source 4",
"Source 5",
"Source 6"
],
"controllerConfig": { // REQUIRED: Set this to define zones
"type": "discover",
"zones": [
{"zone": 11, "name": "Family Room"},
{"zone": 12, "name": "Kitchen"},
{"zone": 13, "name": "Living Room"},
{"
Related Skills
node-connect
341.6kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
341.6kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.6kCommit, push, and open a PR
