Storage.googleapis.com



/** *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: * * * *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. * */metadata {definition (name: "Nue ZigBee 3.0 Dimmer", namespace: "3A", author: "Kevin X.", ocfDeviceType: "oic.d.light", runLocally: true, minHubCoreVersion: '000.019.00012', executeCommandsLocally: true, genericHandler: "Zigbee") {capability "Actuator"capability "Configuration"capability "Refresh"capability "Switch"capability "Switch Level"capability "Health Check"capability "Light"fingerprint profileId: "C05E", inClusters: "0000, 0003, 0004, 0005, 0006, 0008", outClusters: "0019", manufacturer: "3A Smart Home DE", model: "LXN56-DC27LX1.1", deviceJoinName: "3A Nue Inline Dimmer" fingerprint profileId: "C05E", inClusters: "0000, 0003, 0004, 0005, 0006, 0008", outClusters: "0019", manufacturer: "3A Smart Home DE", model: "LXN56-DS27LX1.1", deviceJoinName: "3A Nue Dimmer Switch" }tiles(scale: 2) {multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){tileAttribute ("device.switch", key: "PRIMARY_CONTROL") {attributeState "on", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#00A0DC", nextState:"turningOff"attributeState "off", label:'${name}', action:"switch.on", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn"attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.light.on", backgroundColor:"#00A0DC", nextState:"turningOff"attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.switches.light.off", backgroundColor:"#ffffff", nextState:"turningOn"}tileAttribute ("device.level", key: "SLIDER_CONTROL") {attributeState "level", action:"switch level.setLevel"}}standardTile("refresh", "device.refresh", inactiveLabel: false, decoration: "flat", width: 2, height: 2) {state "default", label:"", action:"refresh.refresh", icon:"st.secondary.refresh"}main "switch"details(["switch", "refresh"])}}// Parse incoming device messages to generate eventsdef parse(String description) {log.debug "description is $description"def event = zigbee.getEvent(description)if (event) {if (event.name=="level" && event.value==0) {}else {sendEvent(event)}} else {def descMap = zigbee.parseDescriptionAsMap(description)if (descMap && descMap.clusterInt == 0x0006 && mandInt == 0x07) {if (descMap.data[0] == "00") {log.debug "ON/OFF REPORTING CONFIG RESPONSE: " + clustersendEvent(name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])} else {log.warn "ON/OFF REPORTING CONFIG FAILED- error code:${cluster.data[0]}"}} else if (device.getDataValue("manufacturer") == "sengled" && descMap && descMap.clusterInt == 0x0008 && descMap.attrInt == 0x0000) {// This is being done because the sengled element touch/classic incorrectly uses the value 0xFF for the max level.// Per the ZCL spec for the UINT8 data type 0xFF is an invalid value, and 0xFE should be the max. Here we// manually handle the invalid attribute value since it will be ignored by getEvent as an invalid value.// We also set the level of the bulb to 0xFE so future level reports will be 0xFE until it is changed by// something else.if (descMap.value.toUpperCase() == "FF") {descMap.value = "FE"}sendHubCommand(mand(zigbee.LEVEL_CONTROL_CLUSTER, 0x00, "FE0000").collect { new physicalgraph.device.HubAction(it) }, 0)sendEvent(zigbee.getEventFromAttrData(descMap.clusterInt, descMap.attrInt, descMap.encoding, descMap.value))} else {log.warn "DID NOT PARSE MESSAGE for description : $description"log.debug "${descMap}"}}}def off() {zigbee.off()}def on() {zigbee.on()}def setLevel(value, rate = null) {def additionalCmds = []if (device.getDataValue("model") == "iQBR30" && value.toInteger() > 0) { // Handle iQ bulb not following specadditionalCmds = zigbee.on()} else if (device.getDataValue("manufacturer") == "MRVL") { // Handle marvel stack not reportingadditionalCmds = refresh()}zigbee.setLevel(value) + additionalCmds}/** * PING is used by Device-Watch in attempt to reach the Device * */def ping() {return zigbee.onOffRefresh()}def refresh() {zigbee.onOffRefresh() + zigbee.levelRefresh()}def installed() {if (((device.getDataValue("manufacturer") == "MRVL") && (device.getDataValue("model") == "MZ100")) || (device.getDataValue("manufacturer") == "OSRAM SYLVANIA") || (device.getDataValue("manufacturer") == "OSRAM")) {if ((device.currentState("level")?.value == null) || (device.currentState("level")?.value == 0)) {sendEvent(name: "level", value: 100)}}}def configure() {log.debug "Configuring Reporting and Bindings."// Device-Watch allows 2 check-in misses from device + ping (plus 1 min lag time)// enrolls with default periodic reporting until newer 5 min interval is confirmedsendEvent(name: "checkInterval", value: 2 * 10 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])// OnOff minReportTime 0 seconds, maxReportTime 5 min. Reporting interval if no activityrefresh() + zigbee.onOffConfig(0, 300) + zigbee.levelConfig()} ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download