Pre-release of Fibaro Motion Sensor

Using batteries is the trend in home automation. However, not only does it increase landfill waste it also increases maintenance cost. It makes it worse when there aren’t rechargable alternatives as in CR123A (at least none that work well). And the range of prices charged for CR123A is like the wild west. And there aren’t any objective comparisons of CR123A brands.

If you haven’t noticed, battery management is my pet peeve.

Thanks for pointing out more competitive alternative (and sorry about getting off topic).

P.S. Noticed $14.50 for 8 not requiring prime: http://www.amazon.com/DL123A-Duracell-Ultra-Lithium-Batteries-CR123A/dp/B002IGW15G/ref=lh_ni_t?ie=UTF8&psc=1&smid=A1EALKCELCYUZN

1 Like

Would I have to exclude and include the device to get the new parameters or if I update the device type will it just update all my Fibaros?

no need to exclude/include, but you do have to wake up each one (b button until it stays blue), then make the parameter changes for each one.
For these I’ve just been loading the device in the ide, then selecting the actual device i want to update, wake it up, push the changes, next one…
How you update these is dependent on where you are made the parameter changes in the device code.
Configure() is only called during pairing.
resetParams2StDefaults() can be executed fro the IDE

How are you pushing the changes in the IDE? You can see that I edited 80 to be zero. Did I do that correctly? I added a new sensor I just got today and it still flashes on motion.

def resetParams2StDefaults() {
log.debug “Resetting Sensor Parameters to SmartThings Compatible Defaults”
def cmds =
cmds << zwave.configurationV1.configurationSet(configurationValue: [10], parameterNumber: 1, size: 1).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [15], parameterNumber: 2, size: 1).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [1], parameterNumber: 3, size: 1).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [2], parameterNumber: 4, size: 1).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [0,30], parameterNumber: 6, size: 2).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 8, size: 1).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [0,200], parameterNumber: 9, size: 2).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 12, size: 1).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 16, size: 1).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [15], parameterNumber: 20, size: 1).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [0,30], parameterNumber: 22, size: 2).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [4], parameterNumber: 24, size: 1).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 26, size: 1).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [0,200], parameterNumber: 40, size: 2).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 42, size: 2).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [5], parameterNumber: 60, size: 1).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [3,132], parameterNumber: 62, size: 2).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 64, size: 2).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 66, size: 2).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 80, size: 1).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [50], parameterNumber: 81, size: 1).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [0,100], parameterNumber: 82, size: 2).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [3,232], parameterNumber: 83, size: 2).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [18], parameterNumber: 86, size: 1).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [28], parameterNumber: 87, size: 1).format()
cmds << zwave.configurationV1.configurationSet(configurationValue: [1], parameterNumber: 89, size: 1).format()

Yea, I did them via the IDE, as I was too lazy to add to the configure section, yea that looks right.
Now, you need run the simulator, select the real device you want to configure, wake it up, and while the blue light’s on click the resetParams2StDefaults button…

There’s two flashy flashy modes, one for motion, the other for vibration, 80 is motion, 89 I think is vibration…

I guess I’m missing something on waking it up. When I press the button on the sensor, it goes from purple to yellow/green. It never displays blue.

Wait, I think I have it. Testing on another one. Yep. that did it.

Although, my new sensor just dropped to 1% battery. I’ll let it go overnight in case it is a false entry. It also is not displaying lux. But if I recall, that only happens with big changes or something like that.

Yea, there’s separate parameters for that, I think the default is 200 lux?, there’s also a lux reporting interval you can dink with…

Have you tried adjusting the sensitivity at all? Curious what others have found.

Also curious if anyone has used this:

64.TEMPERATURE REPORTS INTERVAL
The parameter determines how often the temperature reports will be sent to the main controller.
Available settings: 0 - 65535 (1 - 65535 sekund; 0 = reports are not sent)
Default setting: 0 Parameter size: 2 [byte]

Looks like that by default temp isn’t sent. But I do get temp updates from my sensors. So, what am I missing? Is it sending when other updates occur?

Also, how would you apply the settings to a single sensor? I changed the device type to not flash (parameter 80) on motion, which was applied to all my sensors. If I have one I want to adjust the sensitivity on, how would I apply it to that single sensor?

Create a separate device type.

Ugh…really? :frowning: What’s the Configure tile do in the device? I tapped it but it doesn’t seem to do anything.

Depends on how you made the parameter changes in the first place.
If you went the route I mentioned a couple posts above, then you only meet to load the device in the IDE, attach it to the real device, update the parameters, then uninstall the device from the IDE. You don’t need to publish it.
In other words, your are using the IDE to load the parameters to the live device.
Since the section of code you’re using isn’t part of the operational set, there’s no need to publish it.

Configure, runs whatever is in configure() in the device driver, however unless the Fibaro is woke up any commands configure issues will be ignored.

OK, I think I follow what you are saying, a few questions though. (And feel free to point me to some FAQ somewhere that might explain it more…less typing for you)

  • Go to My Device Types
  • Select the Fibaro type
  • Select the Location down the right side, then the sensor you want.
  • this step is where I’m hazy. If I want to apply it to only one, do I update the settings and not save/publish them, but wake the device up (is that via the button or just motion?) and then click the configure button?
  • Click uninstall when complete

OK, what don’t I have right? (I’m sure a lot!)

You can only select one physical device when testing devices in the ide.
Make the changes you want under the resetParams2StDefaults section, be sure to include all the ones you want.
Save the device, set location, select the actual device, then install.
At this point your Figaro is using the device in the IDE
Wake it up then click the resetParams2StDefaults button.
It could have the new settings now.
Uninstall the device, you should be good.

@wackware, I’m curious about your handling of wakeupnotification. I’m guessing that this is the check for “8407” in parse()? I’m just wondering, though, if “response” should be used here for the “no more info” message…

Existing:

result << response(zwave.batteryV1.batteryGet().format())
result << new physicalgraph.device.HubAction(zwave.wakeUpV1.wakeUpNoMoreInformation().format()) 

Should that be:

result << response(zwave.batteryV1.batteryGet().format())
result << response(zwave.wakeUpV1.wakeUpNoMoreInformation())

?

Take care
Gary

Okay, after playing with this for several hours, I hope you don’t mind a suggestion:

First, I have no idea what “8407” is, but it doesn’t seem to be a wakeup notification from the device. If it is some variation of wakeup that I haven’t been able to repeat, it won’t work with newer fibaro firmware, as the wakeup seems to be encapsulated in the crc16 stuff.

I’d think it’d be a lot easier to just provide a zwaveEvent() function for the wake ups. This would allow things to work regardless of if it’s encapsulated or not. Here’s one that I’ve confirmed to work:

def zwaveEvent(physicalgraph.zwave.commands.wakeupv1.WakeUpNotification cmd)
{
	sendEvent(descriptionText: "${device.displayName} woke up", displayed: false)
	def result = []
	result << zwave.batteryV1.batteryGet().format()
	result << "delay 1200"
	result << zwave.wakeUpV1.wakeUpNoMoreInformation().format()
	response(result) 
}

Again - thank you very much for sharing the device type code for this sensor.

Take care
Gary

Oops! Looks like the Fibaro outside, the battery dropped from 92% to 1% in just couple of days. No explanation… Except that it is outdoors and trying to survive subzero temperatures in the NE.

The 1% is a false reading.

1 Like