Events seem to have a mind of their own

Background

I have a custom SmartApp and DeviceType. I need to communicate between the two. Seems simple right?

SmartApp

Here I have a simple subscribe command defined in my install/update functions.

subscribe(myDevices, "getStatus", "refreshHandler")

This is followed up with the event handler function defined as:

def refreshHandler
{
    myDevices.each { d->
       def data = state.deviceValues[d.deviceNetworkId]
       d.generateEvent(data)
    }
}

For simplicity my example is sending out to all devices, not just the one that sends out the originating event.

DeviceType
The deviceType is pretty simple(or at least should be).

I define a two custom commands and an attribute:

command "forceRefreshStatus"
command "generateEvent"
attribute "refresh", "string"

I then have a tile defined as

standardTile("refresh", "device.refresh", inactiveLabel: false, decoration: "flat") {
        state "default", action:"forceRefreshStatus", icon:"st.secondary.refresh"
    }

Followed by a definition of the commands:

def forceRefreshStatus()
{
    def dni = device.deviceNetworkId
    sendEvent(name: "getProtectStatus", value: "${dni}")
}
def generateEvent(Map results) 
{
    log.debug "generate event"
}

Problem
Here’s what I find happens. I can press the Refresh tile the first time, the message is sent and received as expected, with the smartapp making the call to generateEvent with it’s data.

However, any other time I press Refresh the message isn’t received by the smartapp.

If I look at the event list for the device in the web dashboard things get confusing. Here’s the abbreviated version of what I see (oldest event at top)

Source/Name/Value

  • DEVICE/getStatus/deviceNetworkId
  • COMMAND/empty/forceRefreshStatus
  • APP_COMMAND/empty/generateEvent

Second Press
-COMMAND/empty/generateEvent
-COMMAND/empty/forceRefreshStatus

Third Press
-APP_COMMAND/empty/generateEvent
-COMMAND/empty/generateEvent
-COMMAND/empty/forceRefreshStatus

What the heck? I’m totally lost as to why the SmartApp no longer receives the message. I think it has something to do with the device Status? I have no clue how that works, but I notice my devices change from ACTIVE to INACTIVE at some point.

HELP!