/** * **************** Echo Speaks Alexa Connectors **************** * * Usage: * This was designed to control up to five virtual Dimmers from Hubitat using the speak text command in Echo Speaks App to control Alexa dimmers * c. 2023 cburgess **/ definition ( name: "Echo Speaks Alexa Dimmer Connectors", namespace: "Hubitat", author: "CBurgess", description: "Controller for Alexa connected dimmer devices from Hubitat using Echo Speaks Text as Command feature", category: "My Apps", iconUrl: "", iconX2Url: "" ) preferences { page name: "mainPage", title: "", install: true, uninstall: true } def mainPage() { dynamicPage(name: "mainPage") { section("Echo Device for Commands") { input ( name: "echoDevice", type: "capability.speechSynthesis", title: "Select Echo Device to use to send commands", required: true, multiple: false ) } section("Virtual Dimmer Device") { input ( name: "virtualSwitch", type: "capability.switchLevel", title: "Select Virtual Dimmer Device", required: true, multiple: false, submitOnChange: true ) } section("Add More Devices") { input ( name: "selectController", type: "bool", title: "Turn on to add more devices", required: true, multiple: false, submitOnChange: true ) if (settings.selectController) { state.more1 = true } else { state.more1 = false } } if (state.more1) { section("Virtual Dimmer Device 2") { input ( name: "virtualSwitch2", type: "capability.switchLevel", title: "Select Virtual Dimmer Device", required: true, multiple: false, submitOnChange: true ) } section("Add More Devices") { input ( name: "selectController2", type: "bool", title: "Turn on to add more devices", required: true, multiple: false, submitOnChange: true ) if (settings.selectController2) { state.more2 = true } else { state.more2 = false } } if (state.more2) { section("Virtual Dimmer Device 3") { input ( name: "virtualSwitch3", type: "capability.switchLevel", title: "Select Virtual Dimmer 3 Device", required: true, multiple: false, submitOnChange: true ) } section("Add More Devices") { input ( name: "selectController3", type: "bool", title: "Turn on to add more devices", required: true, multiple: false, submitOnChange: true ) if (settings.selectController3) { state.more3 = true } else { state.more3 = false } } if (state.more3) { section("Virtual Dimmer Device 4") { input ( name: "virtualSwitch4", type: "capability.switchLevel", title: "Select Virtual Dimmer 4 Device", required: true, multiple: false, submitOnChange: true ) if (virtualSwitch4) { input ( name: "trackVirtualSwitch4", type: "bool", title: "Track Virtual Switch4 Changes", required: true, defaultValue: "true" ) } } section("Add More Devices") { input ( name: "selectController4", type: "bool", title: "Turn on to add more devices", required: true, multiple: false, submitOnChange: true ) if (settings.selectController3) { state.more4 = true } else { state.more4 = false } } if (state.more4) { section("Virtual Dimmer Device 5") { input ( name: "virtualSwitch5", type: "capability.switchLevel", title: "Select Virtual Dimmer 5 Device", required: true, multiple: false, submitOnChange: true ) if (virtualSwitch4) { input ( name: "trackVirtualSwitch5", type: "bool", title: "Track Virtual Switch4 Changes", required: true, defaultValue: "true" ) } } } // end more 4 } // end more 3 } // end more 2 } // end more 1 section("") { input ( name: "debugMode", type: "bool", title: "Enable logging", required: true, defaultValue: false ) } } } def installed() { initialize() } def updated() { initialize() } def initialize() { subscribe(virtualSwitch, "switch", switchHandler) subscribe(virtualSwitch, "level", switchHandler) if (state.more1) { subscribe(virtualSwitch2, "switch", switchHandler2) subscribe(virtualSwitch2, "level", switchHandler2) } if (state.more2) { subscribe(virtualSwitch3, "switch", switchHandler3) subscribe(virtualSwitch3, "level", switchHandler3) } if (state.more3) { subscribe(virtualSwitch4, "switch", switchHandler4) subscribe(virtualSwitch4, "level", switchHandler4) } if (state.more4) { subscribe(virtualSwitch5, "switch", switchHandler5) subscribe(virtualSwitch5, "level", switchHandler5) } } def switchHandler(evt) { state.switch1 = evt.value logDebug("Switch Event = $state.switch1") if (evt.value == "on" || evt.value == "off") { def cmd = "Turn " + evt.value + " " + virtualSwitch.getName() + " A" logDebug("cmd = $cmd") echoDevice.voiceCmdAsText(cmd) } else { def cmd = "Set " + virtualSwitch.getName() + " A " + evt.value + " percent" logDebug("cmd = $cmd") echoDevice.voiceCmdAsText(cmd) } } def switchHandler2(evt) { state.switch2 = evt.value logDebug("Switch2 Event = $state.switch2") if (evt.value == "on" || evt.value == "off") { def cmd = "Turn " + evt.value + " " + virtualSwitch2.getName() + " A" logDebug("cmd = $cmd") echoDevice.voiceCmdAsText(cmd) } else { def cmd = "Set " + virtualSwitch2.getName() + " A " + evt.value + " percent" logDebug("cmd = $cmd") echoDevice.voiceCmdAsText(cmd) } } def switchHandler3(evt) { state.switch3 = evt.value logDebug("Switch3 Event = $state.switch3") if (evt.value == "on" || evt.value == "off") { def cmd = "Turn " + evt.value + " " + virtualSwitch3.getName() + " A" logDebug("cmd = $cmd") echoDevice.voiceCmdAsText(cmd) } else { def cmd = "Set " + virtualSwitch3.getName() + " A " + evt.value + " percent" logDebug("cmd = $cmd") echoDevice.voiceCmdAsText(cmd) } } def switchHandler4(evt) { state.switch4 = evt.value logDebug("Switch4 Event = $state.switch4") if (evt.value == "on" || evt.value == "off") { def cmd = "Turn " + evt.value + " " + virtualSwitch4.getName() + " A" logDebug("cmd = $cmd") echoDevice.voiceCmdAsText(cmd) } else { def cmd = "Set " + virtualSwitch4.getName() + " A " + evt.value + " percent" logDebug("cmd = $cmd") echoDevice.voiceCmdAsText(cmd) } } def switchHandler5(evt) { state.switch5 = evt.value logDebug("Switch5 Event = $state.switch5") if (evt.value == "on" || evt.value == "off") { def cmd = "Turn " + evt.value + " " + virtualSwitch5.getName() + " A" logDebug("cmd = $cmd") echoDevice.voiceCmdAsText(cmd) } else { def cmd = "Set " + virtualSwitch5.getName() + " A " + evt.value + " percent" logDebug("cmd = $cmd") echoDevice.voiceCmdAsText(cmd) } } def logDebug(txt){ try { if (settings.debugMode) { log.debug("${app.label} - ${txt}") } } catch(ex) { log.error("bad debug message") } }