[RELEASE] Fibaro FGBS-001 Universal Binary Sensor (UBS)

NP. I have been using your DTH in the old app for over 18 months now. Works flawlessly. Its just with all the talk about migration to the new app I would like to get these quirks sorted if I can.

Well, I’m having a stack of problems here. I already have one existing ubs with temperature probes - been working for more than a year.

I have approx 7 spare DS1820s, two spare ubs, one implant.

Try as I might I cannot under any circumstances set up a new system here. Can’t get anything to get recognised, and it’s driving me insane.

I connect the PSU and the probes, reboot/reset, add using the triple-click, see it recognised as a zwave whatever, log into the dev portal and change the device type… cannot get this thing to recognise any of the sensors.

Same goes for both spare ubs’s and the implant. Which suggests the unlikely possibility that all of my unconnected sensors are broken ? I’m terrified to unplug anything from the existing working ubs as I’m not so sure I could get it working again.

Gah!!

I found the UBS to be the most problematic to include of all the Fibaro devices. When I had issues the best sequence was to b exclude the device, reset, confirm the probes are attached and then include again. Also look at the event to see how many end points were found. After setting the device in inclusion mode and doing the 3 clicks while the UBS is close to the hub, it pays to wait a while. I found it can take up to 20 seconds or more to show up.

Yup, absolute pain in the ass.

Finally got it working after a few reboots. Not the most intuitive. The smart implant by comparison, was a doddle.

Did you use the same DTH for the implant? Was looking at this for another use case.

Hi,

Oliver has written a fairly awesome DTH for the implant.

See here

Cheers. I missed that!

Hello, just to inform you that with HUB firmware 30.3 Fibaro UBS is broken.
Here the discussion: Hub Firmware Release Notes - 30.3

Seems a problem on how Smartthings HUB manage multilevel capability on Zwave devices.

Yes, apparently so. I rely on fibaro ubs and connected ds18b20’s to control my central heating. This has been broken since monday evening with an update I did not want.

Very, very frustrating !

Yep, messed up both my installs. Looking at the DTH, I can see the endpoint stuff that seems to be the issue. I have no idea how to fix it myself though. Hopefully @cjcharles will pop long and have a look.

Just seen this when I noticed quite a few of my own devices weren’t working!

Will try and have a look at this tonight, if anybody has started investigating or has ideas for a fix them please let me know to give me a headstart later (I haven’t looked at zwave associations in 2 years)!

2 Likes

It may be something to do with the ubs not sending unsolicited communications to the correct endpoint.

This may be relevant from:
Kianoosh_Karami
SmartThings Staff
10h

"The current status of the Z-Wave issue is that affected multi channel devices are sending unsolicited messages to endpoint 1 instead of endpoint 0. In the 0.30.X release, we upgraded our Z-Wave middleware (minor version bump) which included various fixes, needless to say in the latest SDK, there was a change to drop messages sent to hub with destination endpoint that was not 0 (Following the specification) and this change is now impacting these selected multi channel devices.

We are investigating the issue further, we’d like to be Z-Wave compliant as much as we can so we need to understand what prompted these devices to be sending a message to endpoint 1. The DTHs could potentially tell the device (Via association) to send unsolicited messages to different points other than 0.

I will keep you in the loop, if you have a Fibaro device that is affected, I have a potential fix that I would like you to validate for me (Self publishing a modified DTH). So if you are up for it, please PM me."

@cscheiene Do you think it’s possible to implement refresh capability (zwave)?
I have also a Fibaro double switch with the same issue and if i press refresh the status arrives correctly.

This can be useful until Smartthings fixes the firmware but also if you need to refresh the status.
Here the code from the other device type

def refresh() {
	def cmds = []
    (1..2).each { endpoint ->
        cmds << encap(zwave.switchBinaryV1.switchBinaryGet(), endpoint)
		cmds << encap(zwave.meterV2.meterGet(scale: 0), endpoint)
        cmds << encap(zwave.meterV2.meterGet(scale: 2), endpoint)
	}
    log.debug "Refresh $cmds"
	commands(cmds, 1000)
}

Thanks
M

Hello all,
I have tried to “increase” @cjcharles device type exploiting also basic report.
This updates the status of ep1 when basic report is received. This works just for endpoint1 because the report refers just to EP1.

def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicReport cmd)
{
    def result
    def currentstate
    def motionstate
    
	if (cmd.value == 0) 
    {
       	currentstate = "closed"
        motionstate = "active"
	}
	else
    {
      	currentstate = "open"
        motionstate = "inactive"
	}
    log.debug "Basic report: ep1 is ${currentstate}"
    //First update tile on this device
    sendEvent(name: "contact1", value: currentstate, descriptionText: "$device.displayName - ep1 is ${currentstate}")
	//If not null then we have found either ep1 or ep2, hence try to send to the child device aswell
    try {
        def childDevice = getChildDevices()?.find { it.deviceNetworkId == "${device.deviceNetworkId}-ep1"}
        if (childDevice)
        	if(childDevice.currentValue("contact") != currentstate || childDevice.currentValue("motion") != motionstate)
            {
            	childDevice.sendEvent(name: "motion", value: motionstate)
            	childDevice.sendEvent(name: "contact", value: currentstate)
                log.debug "Updating state ${childDevice} to ${currentstate}/${motionstate}"
            }
    } catch (e) {
        log.error "Couldn't find child device, probably doesn't exist...? Error: ${e}"
    }    
	return result   
} 

I have 2 questions:
1 - @cjcharles do you think you can integrate this part in your device type?
2 - How can we add also the report for the second endpoint (EP2)?

Thanks a lot
Marco

Hello all, i found a workaround to make Fibaro Universali Binary Sensor work again (just the contacts, not temperature)

  1. Insert this code at the end of Device Handler made by cjcharles
  2. Set Parameter 14 to value 1
  3. Press Send Config in the IDE of Fibaro UBS
  4. Enjoy

NOTE: when Smartthings will fix the multichannel bug just set Parameter 14 to 0

//NEED TO SET PARAMETER 14 (SCENES) TO VALUE 1 IN ORDER TO WORK PROPERLY
def zwaveEvent(physicalgraph.zwave.commands.sceneactivationv1.SceneActivationSet cmd) {
	def value = cmd.sceneId
    def result	
    def ep
    def currentstate
    def motionstate
    
    if (value == 10)
    {
    	ep="1"
       	currentstate = "open"
        motionstate = "inactive"       
    }
    else if (value == 11)
    {
    	ep="1"
       	currentstate = "closed"
        motionstate = "active"     
    }
    else if (value == 20)
    {
    	ep="2"
       	currentstate = "open"
        motionstate = "inactive"       
    }
    else if (value == 21)
    {
    	ep="2"
       	currentstate = "closed"
        motionstate = "active"     
    }	
    
    log.debug "Scene report: ${ep} is ${currentstate}"

    //First update tile on this device
    sendEvent(name: "contact${ep}", value: currentstate, descriptionText: "$device.displayName - ep${ep} is ${currentstate}")
	//If not null then we have found either ep1 or ep2, hence try to send to the child device aswell
    try {
        def childDevice = getChildDevices()?.find { it.deviceNetworkId == "${device.deviceNetworkId}-ep${ep}"}
        if (childDevice)
        	if(childDevice.currentValue("contact") != currentstate || childDevice.currentValue("motion") != motionstate)
            {
            	childDevice.sendEvent(name: "motion", value: motionstate)
            	childDevice.sendEvent(name: "contact", value: currentstate)
                log.debug "Updating state ${childDevice} to ${currentstate}/${motionstate}"
            }
    } catch (e) {
        log.error "Couldn't find child device, probably doesn't exist...? Error: ${e}"
    }    
	return result 	
}
2 Likes

Not sure if I understand, so I’m currently using cjcharles handler, I copy/pasted your code onto the end of it and republished. Then altered 14 to 1. Or have I totally misunderstood and I should be using a completely different DTH and adding this to the end?

Thanks for your efforts!

?

You are right!

Yeah. In that case doesn’t work here I’m afraid.

Did u press “send Config” in the IDE of the UBS?

Looks ike this is to fix the contact sensors? How about temperature probes?