[OBSOLETE] Aeon Multisensor 6 (Advanced)

This is great, couple things:

  1. Seems i’m getting Aeon multisensor 6 motion has stopped twice event within my Recenlty tab.
  2. I’ve set my interval to 4minutes, and I can see 4 sensors being reported in the live logs tab, however, it seems that only the temperature is being reported in the “Recently” tab in the events. I can only see: Aeon Multisensor 6 temperature is 25.2C, for example. Seems to be missing the other 4 (lux, humidity,uv,battery).
  3. The get battery level status doesn’t seems to be reported as part of the report interval and even if I click refresh, I don’t see it in the logs. I’ve added a debug statement and I can see the code runs zwave.batteryV1.batteryGet() but doesn’t seem to report the actual value, could this be a firmware issue?

I’m running v1.06 of the firmware.

thanks and good job BTW, this handler is great :slight_smile:

Thanks, I am having great results with this handler. Really like these sensors.

  1. What Mobile OS? I am only seeing it once on all my sensors.
  2. SmartThings will only send events if there is a change in the measurements. So, if any of the values don’t change, you won’t ever see the activity (except for in the logs).
  3. Battery reports should be coming in. Make sure the device is set to “Battery” in the preferences. Also, if the device is battery powered, refresh won’t do anything unless it is done immediately after pressing the button on the sensor. It has to be timed pretty well or the device will go back to sleep before the commands reach it.

I have published a version of the handler that has more detailed logging information for the sensor values if you want to look at them. Make sure debug logging is turned on in the preferences of the device.

  1. I’m running 6.0.1 android Marshmallow. check here:
  2. cool, that explains why
  3. Yeah, I did switched to battery but i’m still not getting it. I’ve tried to just be in front of the sensor (to keep them alive) but i’m still not getting the battery report.

I’ve loaded your newest version but i’m getting the same problem. You can find the screenshot as well as the device logs.

Hello, I just bought three Multisensor 6 devices. They all have model number ZW100-A. No matter what I do I cannot get it to pair with the SmartThings hub. When I hit the action button once, the sensor LED blinks fast for a few seconds and then turns red. The LED then goes to cycling through the different colors like it does after it’s powered on. I’ve also tried pressing action button 2 times to make it fast blink blue, same result.

SmartThings hub pairs fine with other devices, just can’t get it to work with these ones. When I look at the live log during pairing of Multisensor 6, I see NO activity whatsover. It’s like nothing is happening at all between sensor and hub.

I tried doing the exclude, but nothing seemed to happen when I did that either.

What do I do, I really would like these to work? I see lots of people online have no problem at all getting these to pair.

@Aaron_Quirk

  • Log in to the IDE and add my device type
    "from code" copy pasting the raw code from github and save it. This
    is where you install DTH.

  • With the sensor plugged in via usb try resetting
    the device by pressing the Zwave button on the device for 20 seconds to factory
    setting. The Led should cycle through many different colors continually.

  • After the led lights up for 2 seconds cycling through
    colors, Go to the ST APP choose to add a new device (Try to be within 10ft from
    Hub) once it’s searching for a device then click the Zwave button once. The
    device should be then found.

I hope this helps.

Thanks @Mikee, I tried the reset still same behavior. I put ST hub into pairing mode, click the button on sensor and nothing happens. The LED fast blinks green for a few seconds, and the goes red, then back to cycling through all the colors. Almost like the hub doesn’t see sensors signal at all. Live logs are empty on ST hub :frowning:

I have a few of these sensors and few are finicky, try double clicking the zwave action button instead of 1 click. It is recommended that your are using USB power not battery and be within 10ft from the Hub. Try rebooting your ST hub (remember to remove the batteries ) Good Luck

Also, make sure that you are not too far away from the hub when pairing. If you are still having problems, try rebooting the hub.

What is the average battery life on your devices? Just noticed that my new sensor eat 56% of the battery in two weeks, is this normal? I was getting much better battery life with the older gen 5 sensors.

I feel like I had worse battery life on 1.06, but it still isn’t great on 1.07 & 1.08. Of course, how often your reporting interval is makes a big difference. I am still waiting to get a good feel for how battery life is as I haven’t had any die since I started tracking it with my handler. I have several sensors that are still at 100%, one at 74%, and one at 69%, but I don’t know exactly how old their batteries are. They all have been installed for at least a couple months if not more though.

Do you know of or have a handler that will work with the Multisensor Gen 5? I am currently using your handler for my Multisensor 6 but my Gen 5 hasn’t been showing any motion since it has been set up and I don’t know how to configure it. Thank you

I use this one and works great.

john.fullman : Aeon Multisensor 4 Gen5 (Configurable)

/**

  • 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.

  • Modified by john.fullman@gmail.com
    */
    metadata
    {
    definition (name: “Aeon Multisensor 4 Gen5 (Configurable)”, namespace: “john.fullman”, author: "john.fullman@gmail.com")
    {
    capability "Motion Sensor"
    capability "Temperature Measurement"
    capability "Relative Humidity Measurement"
    capability "Illuminance Measurement"
    capability "Configuration"
    command "logconfig"
    capability "Sensor"
    capability "Battery"
    capability “Refresh”

    fingerprint deviceId: "0x0701", inClusters: "0x5E,0x86,0x72,0x59,0x85,0x73,0x71,0x84,0x80,0x30,0x31,0x70,0x98,0x7A", outClusters:"0x5A"
    

    }

    preferences
    {
    //realtime reporting
    input “ReportRealTime”, “bool”, title: “Should values be reported in realtime as they move past thresholds?”, required: true, displayDuringSetup: true, defaultValue: false
    input “ReportTemperatureRT”, “decimal”, title: “Report threshold temperature (degrees):”, required: true, displayDuringSetup: true, defaultValue: 1.8
    input “ReportHumidityRT”, “decimal”, title: “Report threshold for humidity (%):”, required: true, displayDuringSetup: true, defaultValue: 1.0
    input “ReportIlluminanceRT”, “decimal”, title: “Report threshold for illuminance (LUX):”, required: true, displayDuringSetup: true, defaultValue: 100.0
    input “ReportBatteryRT”, “decimal”, title: “Report threshold for battery (%):”, required: true, displayDuringSetup: true, defaultValue: 5.0

    //motion
    input "MotionStopMinutes", "number", title: "Minutes until no-motion is reported:", required: true, displayDuringSetup: true, defaultValue: 4
    input "MotionStopSeconds", "number", title: "Seconds until no-motion is reported:", required: true, displayDuringSetup: true, defaultValue: 0
    
    //group 1
    input "ReportInterval1", "number", title: "Report Group 1 items every x minutes:", required: true, displayDuringSetup: true, defaultValue: 30
    input "ReportTemperature1", "bool", title: "Report temperature in Group 1?", required: true, displayDuringSetup: true, defaultValue: true
    input "ReportHumidity1", "bool", title: "Report humidity in Group 1?", required: true, displayDuringSetup: true, defaultValue: true
    input "ReportIlluminance1", "bool", title: "Report illuminance in Group 1?", required: true, displayDuringSetup: true, defaultValue: true
    input "ReportBattery1", "bool", title: "Report battery level in Group 1?", required: true, displayDuringSetup: true, defaultValue: true
    
    //group 2
    input "ReportInterval2", "number", title: "Report Group 2 items every x minutes:", required: true, displayDuringSetup: true, defaultValue: 30
    input "ReportTemperature2", "bool", title: "Report temperature in Group 2?", required: true, displayDuringSetup: true, defaultValue: false
    input "ReportHumidity2", "bool", title: "Report humidity in Group 2?", required: true, displayDuringSetup: true, defaultValue: false
    input "ReportIlluminance2", "bool", title: "Report illuminance in Group 2?", required: true, displayDuringSetup: true, defaultValue: false
    input "ReportBattery2", "bool", title: "Report battery level in Group 2?", required: true, displayDuringSetup: true, defaultValue: false
    
    //group 3
    input "ReportInterval3", "number", title: "Report Group 3 items every x minutes:", required: true, displayDuringSetup: true, defaultValue: 30
    input "ReportTemperature3", "bool", title: "Report temperature in Group 3?", required: true, displayDuringSetup: true, defaultValue: false
    input "ReportHumidity3", "bool", title: "Report humidity in Group 3?", required: true, displayDuringSetup: true, defaultValue: false
    input "ReportIlluminance3", "bool", title: "Report illuminance in Group 3?", required: true, displayDuringSetup: true, defaultValue: false
    input "ReportBattery3", "bool", title: "Report battery level in Group 3?", required: true, displayDuringSetup: true, defaultValue: false
    
    //battery
    input "ReportLowBattery", "bool", title: "Report low battery warnings", required: true, displayDuringSetup: true, defaultValue: true
    

    }

    simulator
    {
    status “no motion” : "command: 9881, payload: 00300300"
    status “motion” : “command: 9881, payload: 003003FF”

    for (int i = 0; i <= 100; i += 20) {
        status "temperature ${i}F": new physicalgraph.zwave.Zwave().securityV1.securityMessageEncapsulation().encapsulate(
            new physicalgraph.zwave.Zwave().sensorMultilevelV2.sensorMultilevelReport(
                scaledSensorValue: i, precision: 1, sensorType: 1, scale: 1)
            ).incomingMessage()
    }
    
    for (int i = 0; i <= 100; i += 20) {
        status "humidity ${i}%":  new physicalgraph.zwave.Zwave().securityV1.securityMessageEncapsulation().encapsulate(
            new physicalgraph.zwave.Zwave().sensorMultilevelV2.sensorMultilevelReport(scaledSensorValue: i, sensorType: 5)
        ).incomingMessage()
    }
    
    for (int i in [0, 20, 89, 100, 200, 500, 1000]) {
        status "illuminance ${i} lux":  new physicalgraph.zwave.Zwave().securityV1.securityMessageEncapsulation().encapsulate(
            new physicalgraph.zwave.Zwave().sensorMultilevelV2.sensorMultilevelReport(scaledSensorValue: i, sensorType: 3)
        ).incomingMessage()
    }
    
    for (int i in [0, 5, 10, 15, 50, 99, 100]) {
        status "battery ${i}%":  new physicalgraph.zwave.Zwave().securityV1.securityMessageEncapsulation().encapsulate(
            new physicalgraph.zwave.Zwave().batteryV1.batteryReport(batteryLevel: i)
        ).incomingMessage()
    }
    status "low battery alert":  new physicalgraph.zwave.Zwave().securityV1.securityMessageEncapsulation().encapsulate(
        new physicalgraph.zwave.Zwave().batteryV1.batteryReport(batteryLevel: 255)
    ).incomingMessage()
    
    status "wake up" : "command: 8407, payload: "
    

    }

    tiles
    {
    standardTile(“motion”, “device.motion”) {
    state “active”, label:‘motion’, icon:“st.motion.motion.active”, backgroundColor:"#53a7c0"
    state “inactive”, label:‘no motion’, icon:“st.motion.motion.inactive”, backgroundColor:"#ffffff"
    }
    valueTile(“temperature”, “device.temperature”, inactiveLabel: false) {
    state “temperature”, label:’${currentValue}°’,
    backgroundColors:[
    [value: 32, color: “#153591”],
    [value: 44, color: “#1e9cbb”],
    [value: 59, color: “#90d2a7”],
    [value: 74, color: “#44b621”],
    [value: 84, color: “#f1d801”],
    [value: 92, color: “#d04e00”],
    [value: 98, color: “#bc2323”]
    ]
    }
    valueTile(“humidity”, “device.humidity”, inactiveLabel: false) {
    state “humidity”, label:’${currentValue}% humidity’, unit:""
    }
    valueTile(“illuminance”, “device.illuminance”, inactiveLabel: false) {
    state “luminosity”, label:’${currentValue} lux’, unit:“lux”
    }
    valueTile(“battery”, “device.battery”, inactiveLabel: false, decoration: “flat”) {
    state “battery”, label:’${currentValue}% battery’, unit:""
    }
    standardTile(“configure”, “device.configure”, inactiveLabel: false, decoration: “flat”) {
    state “configure”, label:’’, action:“configure”, icon:“st.secondary.configure”
    }
    standardTile(“logconfig”, “device.logconfig”)
    {
    state “default”, label: “log config”, action: “logconfig” //, inactiveLabel: true
    }
    standardTile(“refresh”, “device.refresh”, inactiveLabel: false, decoration: “flat”) {
    state “default”, label:’’, action:“refresh.refresh”, icon:“st.secondary.refresh”
    }

    main(["motion", "temperature", "humidity", "illuminance"])
    details(["motion", "temperature", "humidity", "illuminance", "battery", "configure", "logconfig", "refresh"])
    

    }
    }

def parse(String description)
{
def result = null
if (description == “updated”) {
result = null
} else {
def cmd = zwave.parse(description, [0x31: 5, 0x30: 2, 0x70: 1, 0x84: 2])
if (cmd) {
result = zwaveEvent(cmd)
}
}
//log.debug "Parsed ‘${description}’ to ${result.inspect()}"
return result
}

def zwaveEvent(physicalgraph.zwave.commands.wakeupv1.WakeUpNotification cmd)
{
def result = [createEvent(descriptionText: “${device.displayName} woke up”, isStateChange: false)]

if (!isConfigured()) {
    // we're still in the process of configuring a newly joined device
    log.debug("not sending wakeUpNoMoreInformation yet")
    //result += response(["delay 20000"] + configure())
} else {
    result += response(zwave.wakeUpV1.wakeUpNoMoreInformation())
}
return result

}

def zwaveEvent(physicalgraph.zwave.commands.securityv1.SecurityMessageEncapsulation cmd) {
def encapsulatedCommand = cmd.encapsulatedCommand([0x31: 5, 0x30: 2, 0x70: 1, 0x84: 2])
// log.debug "encapsulated: ${encapsulatedCommand}"
if (encapsulatedCommand) {
zwaveEvent(encapsulatedCommand)
} else {
log.warn "Unable to extract encapsulated cmd from $cmd"
createEvent(descriptionText: cmd.toString())
}
}

def zwaveEvent(physicalgraph.zwave.commands.securityv1.SecurityCommandsSupportedReport cmd) {
// log.debug "Received SecurityCommandsSupportedReport"
response([“delay 10000”] + configure())
}

def zwaveEvent(physicalgraph.zwave.commands.batteryv1.BatteryReport cmd) {
if((cmd.batteryLevel == 0x00 || cmd.batteryLevel == 0xFF) && !ReportLowBattery) { return }
def map = [ name: “battery”, unit: “%” ]
if (cmd.batteryLevel == 0xFF) {
map.value = 1
map.descriptionText = "${device.displayName} battery is low"
map.isStateChange = true
} else {
map.value = cmd.batteryLevel
}
state.lastbatt = new Date().time
createEvent(map)
}

def zwaveEvent(physicalgraph.zwave.commands.sensormultilevelv5.SensorMultilevelReport cmd)
{
def map = [:]
switch (cmd.sensorType) {
case 1:
map.name = "temperature"
def cmdScale = cmd.scale == 1 ? “F” : "C"
map.value = convertTemperatureIfNeeded(cmd.scaledSensorValue, cmdScale, cmd.precision)
map.unit = getTemperatureScale()
break;
case 3:
map.name = "illuminance"
map.value = cmd.scaledSensorValue.toInteger()
map.unit = "lux"
break;
case 5:
map.name = "humidity"
map.value = cmd.scaledSensorValue.toInteger()
map.unit = "%"
break;
default:
map.descriptionText = cmd.toString()
}
createEvent(map)
}

def motionEvent(value) {
def map = [name: “motion”]
if (value) {
map.value = "active"
map.descriptionText = “$device.displayName detected motion”
} else {
map.value = "inactive"
map.descriptionText = “$device.displayName motion has stopped”
}
createEvent(map)
}

def zwaveEvent(physicalgraph.zwave.commands.sensorbinaryv2.SensorBinaryReport cmd) {
motionEvent(cmd.sensorValue)
}

def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicSet cmd) {
motionEvent(cmd.value)
}

def zwaveEvent(physicalgraph.zwave.commands.notificationv3.NotificationReport cmd) {
if (cmd.notificationType == 7 && cmd.event == 7) {
motionEvent(cmd.notificationStatus)
} else {
createEvent(descriptionText: cmd.toString(), isStateChange: false)
}
}

def zwaveEvent(physicalgraph.zwave.commands.configurationv1.ConfigurationReport cmd) {
def hexval = cmd.configurationValue.collect { String.format( ‘%02x’, it.toInteger() ) }.join()
def decval = Integer.parseInt(hexval,16)
def precval = decval / 256.0
def minval = (decval / 60).toInteger()
def secval = decval - (minval * 60)
switch(cmd.parameterNumber)
{
case 3: //motion stop seconds
log.info "Will transmit no-motion report after ${minval} miuntes and ${secval} seconds of no motion."
break
case 4: //motion enabled
if(decval == 1)
{
log.info “Motion sensor is enabled.”
}
else
{
log.info “Motion sensor is disabled.”
}
break
case 5: //motion commandset
if(deval == 1)
{
log.info “Sending ‘basic set’ commands for motion.”
}
else if(decval == 2)
{
log.info “Sending ‘sensor binary report’ commands for motion.”
}
else
{
log.info “Unxpected value for motion commandset. Currently 0x${hexval}”
}
break
case 40: //realtime threshold reporting enabled
if(decval == 1)
{
log.info “Realtime (threshold) reporting is enabled.”
}
else
{
log.info “Realtime (threshold) reporting is disabled.”
}
break
case 41: //temperature threshold
def fer_thresh = precval * 1.8
log.info "Temperature threshold is ${precval}C or ${fer_thresh}F."
break
case 42: //humidity threshold
log.info "Humidity threshold is ${precval}%."
break
case 43: //luminance threshold
log.info "Luminance threshold is ${precval} LUX."
break
case 44: //battery threshold
log.info "Battery threshold is ${precval}%."
break
case 101: //group 1 interval
log.info "Group 1 will report every ${minval} miuntes and ${secval} seconds."
break
case 102: //group 2 interval
log.info "Group 2 will report every ${minval} miuntes and ${secval} seconds."
break
case 103: //group 3 interval
log.info "Group 3 will report every ${minval} miuntes and ${secval} seconds."
break
case 111: //group 1 members
log.info "Group 1 report members are ${ReportItemsToString(decval)}"
break
case 112: //group 2 members
log.info "Group 2 report members are ${ReportItemsToString(decval)}"
break
case 113: //group 3 members
log.info "Group 3 report members are ${ReportItemsToString(decval)}"
break
case 252: //config lock
if(decval == 1)
{
log.info “Configuration settings are locked.”
}
else
{
log.info “Configuration settings are unlocked.”
}
break
default:
log.info "Parameter #${cmd.parameterNumber} = 0x${hexval}"
break
}
}

def zwaveEvent(physicalgraph.zwave.Command cmd) {
createEvent(descriptionText: cmd.toString(), isStateChange: false)
}

def ReportItemsToString(int report_items)
{
def ret = ""
if((report_items & 128) > 0)
{
def item_name = "Luminance"
if(ret == “”)
{
ret = item_name
}
else
{
ret = “${ret}, ${item_name}”
}
}
if((report_items & 64) > 0)
{
def item_name = "Humidity"
if(ret == “”)
{
ret = item_name
}
else
{
ret = “${ret}, ${item_name}”
}
}
if((report_items & 32) > 0)
{
def item_name = "Temperature"
if(ret == “”)
{
ret = item_name
}
else
{
ret = “${ret}, ${item_name}”
}
}
if((report_items & 1) > 0)
{
def item_name = "Battery"
if(ret == “”)
{
ret = item_name
}
else
{
ret = “${ret}, ${item_name}”
}
}
return ret
}

def BuildReportGroupConfig(i)
{
int report_interval = 0
int report_items = 0

switch(i)
{
    case 1:
        report_interval = ReportInterval1
        if(ReportTemperature1)
        {
            report_items = report_items|128
        }
        if(ReportHumidity1)
        {
            report_items = report_items|64
        }
        if(ReportIlluminance1)
        {
            report_items = report_items|32
        }
        if(ReportBattery1)
        {
            report_items = report_items|1
        }
        break;
    case 2:
        report_interval = ReportInterval2
        if(ReportTemperature2)
        {
            report_items = report_items|128
        }
        if(ReportHumidity2)
        {
            report_items = report_items|64
        }
        if(ReportIlluminance2)
        {
            report_items = report_items|32
        }
        if(ReportBattery2)
        {
            report_items = report_items|1
        }
        break;
    case 3:
        report_interval = ReportInterval3
        if(ReportTemperature3)
        {
            report_items = report_items|128
        }
        if(ReportHumidity3)
        {
            report_items = report_items|64
        }
        if(ReportIlluminance3)
        {
            report_items = report_items|32
        }
        if(ReportBattery3)
        {
            report_items = report_items|1
        }
        break;
}

if(report_interval == 0 || report_items == 0)
{
    log.debug "Report Group ${i} - No Report"
    return [
        zwave.configurationV1.configurationSet(parameterNumber: 100 + i, size: 4, scaledConfigurationValue: 0),
        zwave.configurationV1.configurationSet(parameterNumber: 110 + i, size: 4, scaledConfigurationValue: 30 * 60)
    ]
}

log.debug "Report Group ${i} - Report ${report_items} every ${report_interval} minutes"
return [
    zwave.configurationV1.configurationSet(parameterNumber: 100 + i, size: 4, scaledConfigurationValue: report_items),
    zwave.configurationV1.configurationSet(parameterNumber: 110 + i, size: 4, scaledConfigurationValue: report_interval * 60)
]

}

def configure()
{
log.debug “configure()”

//calculate parameter values
int motion_stop_value = (MotionStopMinutes ? MotionStopMinutes : 0) * 60 + (MotionStopSeconds ? MotionStopSeconds : 0)
int iReportRealTime = ReportRealTime ? 1 : 0
int temp_th = (256.0 * ReportTemperatureRT / 1.8).toInteger()
int hum_th = (256.0 * ReportHumidityRT).toInteger()
int ill_th = (256.0 * ReportIlluminanceRT).toInteger()
int batt_th = (256.0 * ReportBatteryRT).toInteger()

//show values being sent
log.debug "Report no motion after ${motion_stop_value} seconds"
if(iReportRealTime == 1)
{
    log.debug "Realtime reporting enabled with values (P41=${temp_th}; P42=${hum_th}; P43=${ill_th}; P44=${batt_th})"
}
else
{
    log.debug "Realtime reporting disabled"
}

def request = GetSensorUpdates() + [

    //unlock config in case it is locked
    zwave.configurationV1.configurationSet(parameterNumber: 252, size: 1, scaledConfigurationValue: 0)
    
//configure report intervals
] + BuildReportGroupConfig(1) + BuildReportGroupConfig(2) + BuildReportGroupConfig(3) + [

    //configure realtime reporting
    zwave.configurationV1.configurationSet(parameterNumber: 40, size: 1, scaledConfigurationValue: iReportRealTime),
    zwave.configurationV1.configurationSet(parameterNumber: 41, size: 2, scaledConfigurationValue: temp_th),
    zwave.configurationV1.configurationSet(parameterNumber: 42, size: 2, scaledConfigurationValue: hum_th),
    zwave.configurationV1.configurationSet(parameterNumber: 43, size: 2, scaledConfigurationValue: ill_th),
    zwave.configurationV1.configurationSet(parameterNumber: 44, size: 2, scaledConfigurationValue: batt_th),
    
    // enable motion reporting
    zwave.configurationV1.configurationSet(parameterNumber: 4, size: 1, scaledConfigurationValue: 1),
    
    // send no-motion report x seconds after motion stops
    zwave.configurationV1.configurationSet(parameterNumber: 3, size: 2, scaledConfigurationValue: motion_stop_value),

    // send binary sensor report instead of basic set for motion
    zwave.configurationV1.configurationSet(parameterNumber: 5, size: 1, scaledConfigurationValue: 2),

    // disable notification-style motion events
    zwave.notificationV3.notificationSet(notificationType: 7, notificationStatus: 0)
]

setConfigured()

//return secureSequence(request) //+ ["delay 20000", zwave.wakeUpV1.wakeUpNoMoreInformation().format()]
return secureSequence(request, 2000)

}

def setConfigured()
{
device.updateDataValue(“configured”, “true”)
}

def isConfigured()
{
Boolean configured = device.getDataValue([“configured”]) as Boolean
return configured
}

private secure(physicalgraph.zwave.Command cmd) {
return zwave.securityV1.securityMessageEncapsulation().encapsulate(cmd).format()
}

private secureSequence(commands, delay=200)
{
return delayBetween(commands.collect{ secure(it) }, delay)
}

def GetSensorUpdates()
{
return [
//sensor updates
zwave.sensorMultilevelV5.sensorMultilevelGet(sensorType: 1), //temperature
zwave.sensorMultilevelV5.sensorMultilevelGet(sensorType: 3), //light
zwave.sensorMultilevelV5.sensorMultilevelGet(sensorType: 5), //humidity
zwave.sensorBinaryV2.sensorBinaryGet(sensorType: 12), //motion
zwave.batteryV1.batteryGet() //battery
]
}

def GetCurrentConfig()
{
return [
zwave.configurationV1.configurationGet(parameterNumber: 3),
zwave.configurationV1.configurationGet(parameterNumber: 4),
zwave.configurationV1.configurationGet(parameterNumber: 5),
zwave.configurationV1.configurationGet(parameterNumber: 40),
zwave.configurationV1.configurationGet(parameterNumber: 41),
zwave.configurationV1.configurationGet(parameterNumber: 42),
zwave.configurationV1.configurationGet(parameterNumber: 43),
zwave.configurationV1.configurationGet(parameterNumber: 44),
zwave.configurationV1.configurationGet(parameterNumber: 101),
zwave.configurationV1.configurationGet(parameterNumber: 102),
zwave.configurationV1.configurationGet(parameterNumber: 103),
zwave.configurationV1.configurationGet(parameterNumber: 111),
zwave.configurationV1.configurationGet(parameterNumber: 112),
zwave.configurationV1.configurationGet(parameterNumber: 113),
zwave.configurationV1.configurationGet(parameterNumber: 252)
]
}

def refresh()
{
log.debug "Sensor data refresh initiated"
return secureSequence(GetSensorUpdates(), 1000)
}

def logconfig()
{
log.debug "Getting current configuration"
return secureSequence(GetCurrentConfig(), 2000)
}

I use a good one. I posted it but it was flaged. Hopefully the ST staff will release it soon so you could use it if you wanted to.

Thank you, I saw it for a brief second before it was gone. I hope it comes back as well!

tried to send it to you by message.

@cscheiene I got a response from Aeon regarding threshold reporting. Configuration of it is way different than what can be pieced together from the documentation. I have made changes based on what they told me and it looks to be working. You still need to set an Interval Report value as the device only checks for threshold changes when it wakes up.

@jbisson I believe I found a bug that might have caused your battery reports not being sent. Also, I fixed the possible duplicate “stopped” reporting.

1 Like

Sorry, but did you update that DTH in your github with latest change.

Im very interested in selective threshold reporting!

Thanks

Yes, the handler in Github has selective reporting working. This is the only device handler with this feature working most likely (because the way you have to configure it is funky). This is how it works:

On USB Power - the device checks every 15 seconds to see if there is a change above the thresholds. If there is, it sends a report.

On Battery Power - The device wakes up at its interval report period and checks to see if there is a change above the thresholds. If there is, it sends a report.

Thanks.

Currently working on battery power, as described.

One question related to the threshold reporting mechanic. For instance, if we were to have a 2.0°C for temperature, and

  1. Initial temperature is 20.0°C.
  2. On the next interval period, the temperature is 21.5°C, so no threshold reporting is active,
  3. On the following interval report the temperature is 22.1°C, and here is the question: does it compare to initial temperature (20.0°C), or to the last one (21.5°C).

Thanks!!!

When I asked Aeon, their response was that the threshold is from the LAST REPORT that was sent. So, in your example it compares the initial temperature.