Post Requests for Zigbee Edge Drivers Here (community-created)

Hi @TRIGGAT

Added to this driver version.

Install this driver version in your hub
uninstall device and reinstall it for configuration

───────────────────────────────────────────────────
 Name         Zigbee Motion Sensor Mc
 Version      2024-01-06T16:50:18.723152703
───────────────────────────────────────────────────
- id: "_TZ3000_jqge2fjx/Vibration"
    deviceLabel: TS0210 Vibration Sensor
    manufacturer: _TZ3000_jqge2fjx
    model: TS0210
    deviceProfileName: motion-battery-sens
2 Likes

Hello @Mariano_Colmenarejo,

Thank you for the update.

The driver was recognised and i am getting responses from the device.

Now to test and see if it is fit for purpose.

Once again, many thanks.

1 Like

Hello Mariano
Please if possible, may I have a driver for this item
The TSO202 is a Human Motion Sensor

Thank Ron

Hello Mariano
Please if possible, may I have a driver for this 2nd item

It is a Alarm Siren
Thank you for all your help Ron

Hi @Aim23

This device exist in Zigbee Motion Sensor Mc driver.

Install driver in your hub
Uninstall device and reinstall it again

1 Like

Sorry, this device uses Tuya cluster EF00 and not work with standard zigbee drivers

Try in this thread

1 Like

Thank You for all of your help

I thought I had that driver installed I will again check
Thank you for your time
Ron

1 Like

Looking for an Edge deiver for a Sylvania Lightify 4-button switch

Lightify 4 button switch -2nd image

Here is a DTH that I was using for the Lightify 4 button switch back in 2017.

/**

  • OSRAM 4 Button Switch Handler
  • Copyright 2017 AnotherUser
  • 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.
  • Modified from code written by motley74 and sticks18.
  • Original source: SmartThingsPublic/devicetypes/motley74/osram-lightify-dimming-switch.src/osram-lightify-dimming-switch.groovy at master · motley74/SmartThingsPublic · GitHub
    */

metadata {
definition (name: “OSRAM 4 Button Switch Classic”, namespace: “AnotherUser”, author: “AN”) {

capability "Actuator"
capability "Battery"
capability "Button"
capability "Configuration"
capability "Refresh"
capability "Sensor"
   
attribute "zMessage", "String"
	fingerprint profileId: "0104", deviceId: "0810", inClusters: "0000, 0001, 0020, 1000, FD00", outClusters: "0003, 0004, 0005, 0006, 0008, 0019, 0300, 1000", manufacturer: "OSRAM", model: "Switch 4x-LIGHTIFY", deviceJoinName: "OSRAM 4x Switch"


}


simulator {
	// Nothing to see here
}

tiles(scale: 2) {
	standardTile("button", "device.button", width: 6, height: 4) {
  	state "default", label: "", icon: "st.unknown.zwave.remote-controller", backgroundColor: "#ffffff"
	}
	valueTile("battery", "device.battery", decoration: "flat", inactiveLabel: false, width: 2, height: 2) {
  	state "battery", label:'${currentValue}% battery'
	}
	standardTile("refresh", "device.button", decoration: "flat", width: 2, height: 2) {
  	state "default", label:"", action:"refresh.refresh", icon:"st.secondary.refresh"
	}
main "button"
details(["button", "battery", "refresh"])
}
}

// parse events into attributes
def parse(String description) {
log.debug “Parsing ‘${description}’”
// TODO: handle ‘numberOfButtons’ attribute
// Parse incoming device messages to generate events

Map map = [:]
log.debug "parse description: $description"
if (description?.startsWith('catchall:')) {
	// call parseCatchAllMessage to parse the catchall message received
	map = parseCatchAllMessage(description)
} else if (description?.startsWith('read')) {
	// call parseReadMessage to parse the read message received
	map = parseReadMessage(description)
} else {
	log.debug "Unknown message received: $description"
}

//return event unless map is not set
return map ? createEvent(map) : null
}

def configure() {
log.debug “Confuguring Reporting and Bindings.”
def configCmds = [
// Bind Button 1 and 2. No Change from source.
“zdo bind 0x${device.deviceNetworkId} 0x01 0x01 0x0006 {${device.zigbeeId}} {}”,
// Bind Button 3 and 4. New cluster IDs.
“zdo bind 0x${device.deviceNetworkId} 0x01 0x01 0x0300 {${device.zigbeeId}} {}”,
// Bind the outgoing level cluster from remote to hub, so the hub receives messages when Dim Up/Down buttons pushed
“zdo bind 0x${device.deviceNetworkId} 0x01 0x01 0x0008 {${device.zigbeeId}} {}”,
// Bind the incoming battery info cluster from remote to hub, so the hub receives battery updates
“zdo bind 0x${device.deviceNetworkId} 0x01 0x01 0x0001 {${device.zigbeeId}} {}”,
//ToDO: Determine what other clusters are on there and how they can be used. What purpose do 0003, 0004, 0005, 0019, and 1000 have?
“zdo bind 0x${device.deviceNetworkId} 0x02 0x01 0x0006 {${device.zigbeeId}} {}”,
“zdo bind 0x${device.deviceNetworkId} 0x03 0x01 0x0006 {${device.zigbeeId}} {}”,
“zdo bind 0x${device.deviceNetworkId} 0x04 0x01 0x0006 {${device.zigbeeId}} {}”,
“zdo bind 0x${device.deviceNetworkId} 0x02 0x01 0x0300 {${device.zigbeeId}} {}”,
“zdo bind 0x${device.deviceNetworkId} 0x03 0x01 0x0300 {${device.zigbeeId}} {}”,
“zdo bind 0x${device.deviceNetworkId} 0x04 0x01 0x0300 {${device.zigbeeId}} {}”,
]
return configCmds
}
def refresh() {
//Straight copy. Need to check device and clusterID for battery.
def refreshCmds = [
zigbee.readAttribute(0x0001, 0x0020)
]
//when refresh button is pushed, read updated status
return refreshCmds
}

private Map parseReadMessage(String description) {
// Create a map from the message description to make parsing more intuitive
def msg = zigbee.parseDescriptionAsMap(description)
//def msg = zigbee.parse(description)
if (msg.clusterInt==1 && msg.attrInt==32) {
// call getBatteryResult method to parse battery message into event map
def result = getBatteryResult(Integer.parseInt(msg.value, 16))
} else {
log.debug “Unknown read message received, parsed message: $msg”
}
// return map used to create event
return result
}

private Map parseCatchAllMessage(String description) {
// Create a map from the raw zigbee message to make parsing more intuitive
def msg = zigbee.parse(description)
def abc = “zdo active 0x${device.deviceNetworkId}”
log.debug “cluster ID is $msg.clusterId”
log.debug “message from source $msg.sourceEndpoint”
//New content follows
switch(msg.sourceEndpoint) {
//Endpoint numbering runs top left, top right, lower left, lower right.
case 1: //“physical button 1”
Map result = [:]
if (msg.command==01){
result = [
name: ‘button’,
value: ‘pushed’,
data: [buttonNumber: 1],
descriptionText: “$device.displayName button 1 was pushed”,
isStateChange: true
]
}
else if (msg.command==05) {
result = [
name: ‘button’,
value: ‘held’,
data: [buttonNumber: 1],
descriptionText: “$device.displayName button 1 was held”,
isStateChange: true
]
}
else if (msg.command==03) {
result = [
name: ‘button’,
value: ‘stophold’,
data: [buttonNumber: 1],
descriptionText: “$device.displayName button 1 stopped being held”,
isStateChange: true
]
}

log.debug  "Parse returned ${result?.descriptionText}"
return result
break
case 2: //physical button 3    
Map result = [:]
if (msg.command==76){
		result = [
		name: 'button',
		value: 'pushed',
		data: [buttonNumber: 3],
		descriptionText: "$device.displayName button 3 was pushed",
    	isStateChange: true
   		]
    }
 else if (msg.command==03){
	    result = [
		name: 'button',
		value: 'held',
		data: [buttonNumber: 3],
		descriptionText: "$device.displayName button 3 started to be held",
    	isStateChange: true
   		]
     }
 else if (msg.command==01){
 		if(msg.data[0]==1){
       		result = [
			name: 'button',
    		value: 'longhold',
			data: [buttonNumber: 3],
			descriptionText: "$device.displayName button 3 continued to be held",
    		isStateChange: true
   			]
     	}
        else if (msg.data[0]==0){
        	result = [
			name: 'button',
    		value: 'stophold',
			data: [buttonNumber: 3],
			descriptionText: "$device.displayName button 3 stopped being held",
    		isStateChange: true
   			]
     	}
        else{
        	result =[
            descriptionText: "$device.displayName button 3 unknown data in command 01",
        	]
		}
     }
  else{
  	result =[
            descriptionText: "$device.displayName button 3 unknown command",
        	]
    }
      
log.debug "message data $msg.data[0]"
log.debug "message command $msg.command"
log.debug  "Parse returned ${result?.descriptionText}"
return result
break
case 3:
//physical button 2
Map result = [:]
result = [
	name: 'button',
	value: 'pushed',
	data: [buttonNumber: 2],
	descriptionText: "$device.displayName button 2 was pushed",
    isStateChange: true
   ]
log.debug  "Parse returned ${result?.descriptionText}"
return result
break
case 4:
//physical button 4
Map result = [:]

if (msg.command==76){
		result = [
		name: 'button',
		value: 'pushed',
		data: [buttonNumber: 4],
		descriptionText: "$device.displayName button 4 was pushed",
    	isStateChange: true
   		]
    }
 else if (msg.command==03){
	    result = [
		name: 'button',
		value: 'held',
		data: [buttonNumber: 4],
		descriptionText: "$device.displayName button 4 started to be held",
    	isStateChange: true
   		]
     }
 else if (msg.command==01){
 		if(msg.data[0]==3){
       		result = [
			name: 'button',
    		value: 'longhold',
			data: [buttonNumber: 4],
			descriptionText: "$device.displayName button 4 continued to be held",
    		isStateChange: true
   			]
     	}
        else if (msg.data[0]==0){
        	result = [
			name: 'button',
    		value: 'stophold',
			data: [buttonNumber: 3],
			descriptionText: "$device.displayName button 4 stopped being held",
    		isStateChange: true
   			]
     	}
        else{
        	result =[
            descriptionText: "$device.displayName button 4 unknown data in command 01",
        	]
		}
     }
  else{
  	result =[
            descriptionText: "$device.displayName button 4 unknown command",
        	]
    }
log.debug  "Parse returned ${result?.descriptionText}"
log.debug "message data $msg.data[0]"
log.debug "message command $msg.command"
return result
break

//ToDo: Look at how to capture hold down of buttons 3 & 4, it doesn’t differentiate on cluster or command as per B1 and B2 .
}

}

//Motley obtained from other examples, converts battery message into event map.
//AN: I don’t think this is working yet.
private Map getBatteryResult(rawValue) {
def linkText = getLinkText(device)
def result = [
name: ‘battery’,
value: ‘–’
]
def volts = rawValue / 10
def descriptionText
if (rawValue == 0) {
} else {
if (volts > 3.5) {
result.descriptionText = “${linkText} battery has too much power (${volts} volts).”
} else if (volts > 0){
def minVolts = 2.1
def maxVolts = 3.0
def pct = (volts - minVolts) / (maxVolts - minVolts)
result.value = Math.min(100, (int) pct * 100)
result.descriptionText = “${linkText} battery was ${result.value}%”
}
}
log.debug “Parse returned ${result?.descriptionText}”
return result
}

With the shutdown of the Groovy based architecture and platform, a DTH is no longer an option. Someone would need to use the DTH as a guide to develop a Lua-based Edge driver (or enhance an existing one).

I believe that was the poster’s intent, to provide the DTH so that a community developer would have more information about the device.

In the first post of this thread, we ask people making requests to include the DTH They were using previously if they know it. :sunglasses:

2 Likes

I second for edge drivers for the NYCE motion sensor. The ST edge drivers lack temp and humidity settings that are built in.

A post was merged into an existing topic: Post Requests for Zwave Edge Drivers Here (community-created)

This device has not been developed for the zigbee-button and therefore the fingerprint for this device is not in the driver.

I had the same issue and have created a fork of the code and have successfully got this to work with my new driver.

Here is the fork of the code on github: Zigbee-Button With Ikea RODRET driver.

I might get around to having in my own drivers to share, but I have initailly pushed a request to combine it with the main driver.

In my experience getting this one to pair is a challenge, as it has an enrollment that you need to tell the device to enable both the push and held buttons. Otherwise it will pair but not send these command when you click the button.

You may need to try it a few times, but in my experience follow these step:

  1. Install the driver
  2. Press the pairing button 4 times within 5 seconds
  3. Light on button flashes, wait ten seconds.
  4. Then scan with you hub to discover the device.
4 Likes

Hi, how can your driver be installed in the hub? Do you have a ST channel I can eroll? Thanks for your help.

Any chance this could also work for the Ikea SOMRIG?

Any chance you can elaborate on what we need to do to use this for us dummies that bought 4 of these while they were in an Ikea recently and can’t figure out how to make them work?

Hi,
I would like to use your driver for:
zigbeeModel: ['RODRET Dimmer']
Did you publish to your channel ? what is the link to your channel ?