diff --git a/devicetypes/smartthings/11aeon-home-energy-meter.src/11aeon-home-energy-meter.groovy b/devicetypes/smartthings/11aeon-home-energy-meter.src/11aeon-home-energy-meter.groovy new file mode 100644 index 0000000..fecadc8 --- /dev/null +++ b/devicetypes/smartthings/11aeon-home-energy-meter.src/11aeon-home-energy-meter.groovy @@ -0,0 +1,118 @@ +/** + * Copyright 2015 SmartThings + * + * 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. + * + * Aeon Home Energy Meter + * + * Author: SmartThings + * + * Date: 2013-05-30 + */ +metadata { + definition (name: "11Aeon Home Energy Meter", namespace: "smartthings", author: "SmartThings") { + capability "Energy Meter" + capability "Power Meter" + capability "Configuration" + capability "Sensor" + + command "reset" + + fingerprint deviceId: "0x2101", inClusters: " 0x70,0x31,0x72,0x86,0x32,0x80,0x85,0x60" + } + + // simulator metadata + simulator { + for (int i = 0; i <= 10000; i += 1000) { + status "power ${i} W": new physicalgraph.zwave.Zwave().meterV1.meterReport( + scaledMeterValue: i, precision: 3, meterType: 4, scale: 2, size: 4).incomingMessage() + } + for (int i = 0; i <= 100; i += 10) { + status "energy ${i} kWh": new physicalgraph.zwave.Zwave().meterV1.meterReport( + scaledMeterValue: i, precision: 3, meterType: 0, scale: 0, size: 4).incomingMessage() + } + } + + // tile definitions + tiles { + valueTile("power", "device.power", decoration: "flat") { + state "default", label:'${currentValue} W' + } + valueTile("energy", "device.energy", decoration: "flat") { + state "default", label:'${currentValue} kWh' + } + standardTile("reset", "device.energy", inactiveLabel: false, decoration: "flat") { + state "default", label:'reset kWh', action:"reset" + } + standardTile("refresh", "device.power", inactiveLabel: false, decoration: "flat") { + state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh" + } + standardTile("configure", "device.power", inactiveLabel: false, decoration: "flat") { + state "configure", label:'', action:"configuration.configure", icon:"st.secondary.configure" + } + + main (["power","energy"]) + details(["power","energy", "reset","refresh", "configure"]) + } +} + +def parse(String description) { + def result = null + def cmd = zwave.parse(description, [0x31: 1, 0x32: 1, 0x60: 3]) + if (cmd) { + result = createEvent(zwaveEvent(cmd)) + } + log.debug "Parse returned ${result?.descriptionText}" + return result +} + +def zwaveEvent(physicalgraph.zwave.commands.meterv1.MeterReport cmd) { + if (cmd.scale == 0) { + [name: "energy", value: cmd.scaledMeterValue, unit: "kWh"] + } else if (cmd.scale == 1) { + [name: "energy", value: cmd.scaledMeterValue, unit: "kVAh"] + } + else { + [name: "power", value: Math.round(cmd.scaledMeterValue), unit: "W"] + } +} + +def zwaveEvent(physicalgraph.zwave.Command cmd) { + // Handles all Z-Wave commands we aren't interested in + [:] +} + +def refresh() { + delayBetween([ + zwave.meterV2.meterGet(scale: 0).format(), + zwave.meterV2.meterGet(scale: 2).format() + ]) +} + +def reset() { + // No V1 available + return [ + zwave.meterV2.meterReset().format(), + zwave.meterV2.meterGet(scale: 0).format() + ] +} + +def configure() { + def cmd = delayBetween([ + zwave.configurationV1.configurationSet(parameterNumber: 101, size: 4, scaledConfigurationValue: 4).format(), // combined power in watts + zwave.configurationV1.configurationSet(parameterNumber: 111, size: 4, scaledConfigurationValue: 300).format(), // every 5 min + zwave.configurationV1.configurationSet(parameterNumber: 102, size: 4, scaledConfigurationValue: 8).format(), // combined energy in kWh + zwave.configurationV1.configurationSet(parameterNumber: 112, size: 4, scaledConfigurationValue: 300).format(), // every 5 min + zwave.configurationV1.configurationSet(parameterNumber: 103, size: 4, scaledConfigurationValue: 0).format(), // no third report + zwave.configurationV1.configurationSet(parameterNumber: 113, size: 4, scaledConfigurationValue: 300).format() // every 5 min + ]) + log.debug cmd + cmd +} \ No newline at end of file diff --git a/smartapps/smartthings/-turn-it-on-for-5-minutes.src/-turn-it-on-for-5-minutes.groovy b/smartapps/smartthings/-turn-it-on-for-5-minutes.src/-turn-it-on-for-5-minutes.groovy new file mode 100644 index 0000000..d966fb1 --- /dev/null +++ b/smartapps/smartthings/-turn-it-on-for-5-minutes.src/-turn-it-on-for-5-minutes.groovy @@ -0,0 +1,56 @@ +/** + * Copyright 2015 SmartThings + * + * 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. + * + * Turn It On For 5 Minutes + * Turn on a switch when a contact sensor opens and then turn it back off 5 minutes later. + * + * Author: SmartThings + */ +definition( + name: "은Turn It On For 5 Minutes", + namespace: "smartthings", + author: "SmartThings", + description: "When a SmartSense Multi is opened, a switch will be turned on, and then turned off after 5 minutes.", + category: "Safety & Security", + iconUrl: "https://s3.amazonaws.com/smartapp-icons/Meta/light_contact-outlet.png", + iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Meta/light_contact-outlet@2x.png" +) + +preferences { + section("When it opens..."){ + input "contact1", "capability.contactSensor" + } + section("Turn on a switch for 5 minutes..."){ + input "switch1", "capability.switch" + } +} + +def installed() { + log.debug "Installed with settings: ${settings}" + subscribe(contact1, "contact.open", contactOpenHandler) +} + +def updated(settings) { + log.debug "Updated with settings: ${settings}" + unsubscribe() + subscribe(contact1, "contact.open", contactOpenHandler) +} + +def contactOpenHandler(evt) { + switch1.on() + def fiveMinuteDelay = 60 * 5 + runIn(fiveMinuteDelay, turnOffSwitch) +} + +def turnOffSwitch() { + switch1.off() +} \ No newline at end of file