diff --git a/smartapps/fortrezz/fortrezz-mimo2-b-side.src/fortrezz-mimo2-b-side.groovy b/smartapps/fortrezz/fortrezz-mimo2-b-side.src/fortrezz-mimo2-b-side.groovy new file mode 100644 index 0000000..7dbe980 --- /dev/null +++ b/smartapps/fortrezz/fortrezz-mimo2-b-side.src/fortrezz-mimo2-b-side.groovy @@ -0,0 +1,131 @@ +/** + * FortrezZ MIMO2+ B-Side + * + * Copyright 2016 FortrezZ, LLC + * + * 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. + * + */ +definition( + name: "FortrezZ MIMO2+ B-Side", + namespace: "fortrezz", + author: "FortrezZ, LLC", + description: "Breaks the MIMO2 into two separate devices to allow automation on SIG2 and Relay 2.", + category: "Convenience", + iconUrl: "http://swiftlet.technology/wp-content/uploads/2016/05/logo-square-200-1.png", + iconX2Url: "http://swiftlet.technology/wp-content/uploads/2016/05/logo-square-500.png", + iconX3Url: "http://swiftlet.technology/wp-content/uploads/2016/05/logo-square.png", + singleInstance: true) + + +preferences { + section("Title") { + input(name: "devices", type: "capability.voltageMeasurement", title: "MIMO2 devices", description: null, required: true, submitOnChange: true, multiple: true) + } +} + +def installed() { + log.debug "Installed with settings: ${settings}" + + initialize() +} + +def updated() { + log.debug "Updated with settings: ${settings}" + + unsubscribe() + initialize() +} + +def initialize(){ + log.debug("Devices: ${settings.devices}") + settings.devices.each {//deviceId -> + subscribe(it, "powered", events) + subscribe(it, "switch2", events) + subscribe(it, "contact2", events) + subscribe(it, "voltage2", events) + subscribe(it, "relay2", events) + subscribe(it, "anaDig2", events) + + try { + def existingDevice = getChildDevice(it.id) + if(!existingDevice) { + log.debug("Device ID: ${existingDevice}") + def childDevice = addChildDevice("fortrezz", "FortrezZ MIMO2+ B-Side", it.id, null, [name: "Device.${it.id}", label: "${it.name} B-Side", completedSetup: true]) + } + } catch (e) { + log.error "Error creating device: ${e}" + } + } + + getChildDevices().each { + def test = it + def search = settings.devices.find { getChildDevice(it.id).id == test.id } + if(!search) { + removeChildDevices(test) + } + } +} + +def uninstalled() { + removeChildDevices(getChildDevices()) +} + +private removeChildDevices(delete) { + delete.each { + deleteChildDevice(it.deviceNetworkId) + } +} + +def on2(child) { + log.debug("on2") + def ret = child + settings.devices.each {//deviceId -> + def ch = getChildDevice(it.id) + if(child == ch.id) { + ret = "${child}, ${it.id}" + it.on2() + } + } + return ret +} + +def off2(child) { + log.debug("off2") + def ret = child + settings.devices.each {//deviceId -> + def ch = getChildDevice(it.id) + if(child == ch.id) { + ret = "${child}, ${it.id}" + it.off2() + } + } + return ret +} + +def refresh2(child) { + log.debug("refresh2") + def ret = child + settings.devices.each {//deviceId -> + def ch = getChildDevice(it.id) + if(child == ch.id) { + ret = "${child}, ${it.id}" + it.refresh() + } + } + return ret +} + +def events(evt) { + def ch = getChildDevice(evt.device.id) + ch.eventParse(evt); + log.debug("${evt.device.id} triggered ${evt.name}") +} +// TODO: implement event handlers \ No newline at end of file