Continuing the discussion from Announcing the "ST_Anything" Arduino/ThingShield Project:
Hello Dan
Thanks for that, I have another question, I 've been trying to modify your project to have just 4 relays, so far everything is working well, I have control of each relay and the push buttons work perfectly even if the hub is down. Nevertheless, I tried to create an app to turn on the relays when motion my sensor detects that the door is open and the app doesn’t work any idea what could be the problem. I am wondering if I’m able to use other devices to trigger the relays
this the groovy smart app
/**
- ST_Anything_Relays Multiplexer - ST_Anything_Relays_Multiplexer.smartapp.groovy
- Copyright 2015 Daniel Ogorchock
- Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except
- in compliance with the License. You may obtain a copy of the License at:
-
http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
- on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
- for the specific language governing permissions and limitations under the License.
- Change History:
- Date Who What
-
- 2015-03-27 Dan Ogorchock Original Creation
*/
definition(
name: “ST_Anything_Relays Multiplexer”,
namespace: “ogiewon”,
author: “Daniel Ogorchock”,
description: “Virtual Switches to Arduino Relays Multiplexer/Demultiplexer”,
category: “My Apps”,
iconUrl: “https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience.png”,
iconX2Url: “https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience@2x.png”,
iconX3Url: “https://s3.amazonaws.com/smartapp-icons/Convenience/Cat-Convenience@2x.png”)
preferences {
section(“Select the Relays (Virtual Switch devices)”) {
input “virtual_switch_1”, title: “Virtual Switch for Relay 1”, “capability.switch”, required: true
input “virtual_switch_2”, title: “Virtual Switch for Relay 2”, “capability.switch”, required: false
input “virtual_switch_3”, title: “Virtual Switch for Relay 3”, “capability.switch”, required: false
input “virtual_switch_4”, title: “Virtual Switch for Relay 4”, “capability.switch”, required: false
}
section("Select the Arduino ST_Anything_Relays device") {
input "arduino", "capability.switch", required: true
}
}
def installed() {
log.debug “Installed with settings: ${settings}”
subscribe()
}
def updated() {
log.debug “Updated with settings: ${settings}”
unsubscribe()
subscribe()
}
def subscribe() {
subscribe(arduino, "switch1.on", switch1on)
subscribe(arduino, "switch1.off", switch1off)
subscribe(virtual_switch_1, "switch.on", relay1on)
subscribe(virtual_switch_1, "switch.off", relay1off)
if (virtual_switch_2) {
subscribe(arduino, "switch2.on", switch2on)
subscribe(arduino, "switch2.off", switch2off)
subscribe(virtual_switch_2, "switch.on", relay2on)
subscribe(virtual_switch_2, "switch.off", relay2off)
}
if (virtual_switch_3) {
subscribe(arduino, "switch3.on", switch3on)
subscribe(arduino, "switch3.off", switch3off)
subscribe(virtual_switch_3, "switch.on", relay3on)
subscribe(virtual_switch_3, "switch.off", relay3off)
}
if (virtual_switch_4) {
subscribe(arduino, "switch4.on", switch4on)
subscribe(arduino, "switch4.off", switch4off)
subscribe(virtual_switch_4, "switch.on", relay4on)
subscribe(virtual_switch_4, "switch.off", relay4off)
}
if (virtual_switch_5) {
subscribe(arduino, "switch5.on", switch5on)
subscribe(arduino, "switch5.off", switch5off)
subscribe(virtual_switch_5, "switch.on", relay5on)
subscribe(virtual_switch_5, "switch.off", relay5off)
}
if (virtual_switch_6) {
subscribe(arduino, "switch6.on", switch6on)
subscribe(arduino, "switch6.off", switch6off)
subscribe(virtual_switch_6, "switch.on", relay6on)
subscribe(virtual_switch_6, "switch.off", relay6off)
}
if (virtual_switch_7) {
subscribe(arduino, "switch7.on", switch7on)
subscribe(arduino, "switch7.off", switch7off)
subscribe(virtual_switch_7, "switch.on", relay7on)
subscribe(virtual_switch_7, "switch.off", relay7off)
}
if (virtual_switch_8) {
subscribe(arduino, "switch8.on", switch8on)
subscribe(arduino, "switch8.off", switch8off)
subscribe(virtual_switch_8, "switch.on", relay8on)
subscribe(virtual_switch_8, "switch.off", relay8off)
}
if (virtual_switch_9) {
subscribe(arduino, "switch9.on", switch9on)
subscribe(arduino, "switch9.off", switch9off)
subscribe(virtual_switch_9, "switch.on", relay9on)
subscribe(virtual_switch_9, "switch.off", relay9off)
}
if (virtual_switch_10) {
subscribe(arduino, "switch10.on", switch10on)
subscribe(arduino, "switch10.off", switch10off)
subscribe(virtual_switch_10, "switch.on", relay10on)
subscribe(virtual_switch_10, "switch.off", relay10off)
}
if (virtual_switch_11) {
subscribe(arduino, "switch11.on", switch11on)
subscribe(arduino, "switch11.off", switch11off)
subscribe(virtual_switch_11, "switch.on", relay11on)
subscribe(virtual_switch_11, "switch.off", relay11off)
}
if (virtual_switch_12) {
subscribe(arduino, "switch12.on", switch12on)
subscribe(arduino, "switch12.off", switch2off)
subscribe(virtual_switch_12, "switch.on", relay12on)
subscribe(virtual_switch_12, "switch.off", relay12off)
}
if (virtual_switch_13) {
subscribe(arduino, "switch13.on", switch13on)
subscribe(arduino, "switch13.off", switch13off)
subscribe(virtual_switch_13, "switch.on", relay13on)
subscribe(virtual_switch_13, "switch.off", relay13off)
}
if (virtual_switch_14) {
subscribe(arduino, "switch14.on", switch14on)
subscribe(arduino, "switch14.off", switch14off)
subscribe(virtual_switch_14, "switch.on", relay14on)
subscribe(virtual_switch_14, "switch.off", relay14off)
}
if (virtual_switch_15) {
subscribe(arduino, "switch15.on", switch15on)
subscribe(arduino, "switch15.off", switch15off)
subscribe(virtual_switch_15, "switch.on", relay15on)
subscribe(virtual_switch_15, "switch.off", relay15off)
}
if (virtual_switch_16) {
subscribe(arduino, "switch16.on", switch16on)
subscribe(arduino, "switch16.off", switch16off)
subscribe(virtual_switch_16, "switch.on", relay16on)
subscribe(virtual_switch_16, "switch.off", relay16off)
}
}
//--------------- Relay 1 handlers ---------------
def switch1on(evt)
{
if (virtual_switch_1.currentValue(“switch”) != “on”) {
log.debug “arduinoevent($evt.name: $evt.value: $evt.deviceId)”
log.debug “Flipping On Virtual Switch to match Arduino”
virtual_switch_1.on()
}
}
def switch1off(evt)
{
if (virtual_switch_1.currentValue(“switch”) != “off”) {
log.debug “arduinoevent($evt.name: $evt.value: $evt.deviceId)”
log.debug “Flipping Off Virtual Switch to match Arduino”
virtual_switch_1.off()
}
}
def relay1on(evt)
{
if (arduino.currentValue(“switch1”) != “on”) {
log.debug “relay1event($evt.name: $evt.value: $evt.deviceId)”
log.debug “Turning On Arduino Relay to match Virtual Switch”
arduino.switch1on()
}
}
def relay1off(evt)
{
if (arduino.currentValue(“switch1”) != “off”) {
log.debug “relay1event($evt.name: $evt.value: $evt.deviceId)”
log.debug “Turning Off Arduino Relay to match Virtual Switch”
arduino.switch1off()
}
}
//--------------- Relay 2 handlers ---------------
def switch2on(evt)
{
if (virtual_switch_2.currentValue(“switch”) != “on”) {
log.debug “arduinoevent($evt.name: $evt.value: $evt.deviceId)”
log.debug “Flipping On Virtual Switch to match Arduino”
virtual_switch_2.on()
}
}
def switch2off(evt)
{
if (virtual_switch_2.currentValue(“switch”) != “off”) {
log.debug “arduinoevent($evt.name: $evt.value: $evt.deviceId)”
log.debug “Flipping Off Virtual Switch to match Arduino”
virtual_switch_2.off()
}
}
def relay2on(evt)
{
if (arduino.currentValue(“switch2”) != “on”) {
log.debug “relay2event($evt.name: $evt.value: $evt.deviceId)”
log.debug “Turning On Arduino Relay to match Virtual Switch”
arduino.switch2on()
}
}
def relay2off(evt)
{
if (arduino.currentValue(“switch2”) != “off”) {
log.debug “relay2event($evt.name: $evt.value: $evt.deviceId)”
log.debug “Turning Off Arduino Relay to match Virtual Switch”
arduino.switch2off()
}
}
//--------------- Relay 3 handlers ---------------
def switch3on(evt)
{
if (virtual_switch_3.currentValue(“switch”) != “on”) {
log.debug “arduinoevent($evt.name: $evt.value: $evt.deviceId)”
log.debug “Flipping On Virtual Switch to match Arduino”
virtual_switch_3.on()
}
}
def switch3off(evt)
{
if (virtual_switch_3.currentValue(“switch”) != “off”) {
log.debug “arduinoevent($evt.name: $evt.value: $evt.deviceId)”
log.debug “Flipping Off Virtual Switch to match Arduino”
virtual_switch_3.off()
}
}
def relay3on(evt)
{
if (arduino.currentValue(“switch3”) != “on”) {
log.debug “relay3event($evt.name: $evt.value: $evt.deviceId)”
log.debug “Turning On Arduino Relay to match Virtual Switch”
arduino.switch3on()
}
}
def relay3off(evt)
{
if (arduino.currentValue(“switch3”) != “off”) {
log.debug “relay3event($evt.name: $evt.value: $evt.deviceId)”
log.debug “Turning Off Arduino Relay to match Virtual Switch”
arduino.switch3off()
}
}
//--------------- Relay 4 handlers ---------------
def switch4on(evt)
{
if (virtual_switch_4.currentValue(“switch”) != “on”) {
log.debug “arduinoevent($evt.name: $evt.value: $evt.deviceId)”
log.debug “Flipping On Virtual Switch to match Arduino”
virtual_switch_4.on()
}
}
def switch4off(evt)
{
if (virtual_switch_4.currentValue(“switch”) != “off”) {
log.debug “arduinoevent($evt.name: $evt.value: $evt.deviceId)”
log.debug “Flipping Off Virtual Switch to match Arduino”
virtual_switch_4.off()
}
}
def relay4on(evt)
{
if (arduino.currentValue(“switch4”) != “on”) {
log.debug “relay4event($evt.name: $evt.value: $evt.deviceId)”
log.debug “Turning On Arduino Relay to match Virtual Switch”
arduino.switch4on()
}
}
def relay4off(evt)
{
if (arduino.currentValue(“switch4”) != “off”) {
log.debug “relay4event($evt.name: $evt.value: $evt.deviceId)”
log.debug “Turning Off Arduino Relay to match Virtual Switch”
arduino.switch4off()
}
}
AND THIS IS THE DEVICE HANDLER
/**
- ST_Anything_Relays - ST_Anything_Relays.device.groovy
- Copyright 2015 Daniel Ogorchock
- Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except
- in compliance with the License. You may obtain a copy of the License at:
-
http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
- on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
- for the specific language governing permissions and limitations under the License.
- Change History:
- Date Who What
-
- 2015-03-27 Dan Ogorchock Original Creation
*/
metadata {
definition (name: “ST_Anything_Relays”, namespace: “ogiewon”, author: “Daniel Ogorchock”) {
capability “Actuator”
capability “Switch”
attribute "switch1", "string"
attribute "switch2", "string"
attribute "switch3", "string"
attribute "switch4", "string"
command "switch1on"
command "switch1off"
command "switch2on"
command "switch2off"
command "switch3on"
command "switch3off"
command "switch4on"
command "switch4off"
}
simulator {
}
// tile definitions
tiles {
standardTile("switch1", "device.switch1", width: 1, height: 1, canChangeIcon: true) {
state "off", label: '${name}', action: "switch1on", icon: "st.switches.switch.off", backgroundColor: "#ffffff"
state "on", label: '${name}', action: "switch1off", icon: "st.switches.switch.on", backgroundColor: "#79b821"
}
standardTile("switch2", "device.switch2", width: 1, height: 1, canChangeIcon: true) {
state "off", label: '${name}', action: "switch2on", icon: "st.switches.switch.off", backgroundColor: "#ffffff"
state "on", label: '${name}', action: "switch2off", icon: "st.switches.switch.on", backgroundColor: "#79b821"
}
standardTile("switch3", "device.switch3", width: 1, height: 1, canChangeIcon: true) {
state "off", label: '${name}', action: "switch3on", icon: "st.switches.switch.off", backgroundColor: "#ffffff"
state "on", label: '${name}', action: "switch3off", icon: "st.switches.switch.on", backgroundColor: "#79b821"
}
standardTile("switch4", "device.switch4", width: 1, height: 1, canChangeIcon: true) {
state "off", label: '${name}', action: "switch4on", icon: "st.switches.switch.off", backgroundColor: "#ffffff"
state "on", label: '${name}', action: "switch4off", icon: "st.switches.switch.on", backgroundColor: "#79b821"
}
main (["switch1"])
details (["switch1","switch2","switch3","switch4"])
}
}
//Map parse(String description) {
def parse(String description) {
def msg = zigbee.parse(description)?.text
log.debug “Parse got ‘${msg}’”
def parts = msg.split(" ")
def name = parts.length>0?parts[0].trim():null
def value = parts.length>1?parts[1].trim():null
name = value != "ping" ? name : null
def result = createEvent(name: name, value: value, isStateChange: true)
log.debug result
return result
}
def switch1on() {
log.debug “Executing ‘switch1on’ = ‘switch1 on’”
zigbee.smartShield(text: “switch1 on”).format()
}
def switch1off() {
log.debug “Executing ‘switch1off’ = ‘switch1 off’”
zigbee.smartShield(text: “switch1 off”).format()
}
def switch2on() {
log.debug “Executing ‘switch2on’ = ‘switch2 on’”
zigbee.smartShield(text: “switch2 on”).format()
}
def switch2off() {
log.debug “Executing ‘switch2off’ = ‘switch2 off’”
zigbee.smartShield(text: “switch2 off”).format()
}
def switch3on() {
log.debug “Executing ‘switch3on’ = ‘switch3 on’”
zigbee.smartShield(text: “switch3 on”).format()
}
def switch3off() {
log.debug “Executing ‘switch3off’ = ‘switch3 off’”
zigbee.smartShield(text: “switch3 off”).format()
}
def switch4on() {
log.debug “Executing ‘switch4on’ = ‘switch4 on’”
zigbee.smartShield(text: “switch4 on”).format()
}
def switch4off() {
log.debug “Executing ‘switch4off’ = ‘switch4 off’”
zigbee.smartShield(text: “switch4 off”).format()
}
THANKS