Custom Device Integration: help needed

My plan is to build a few custom Zigbee devices based on the Nordic nRF5840 dongle. I purchased two dongles and the development board and downloaded the software to start trying them out. I based my first device on the Nordic demo light bulb device. The device is on a board with an LED and a couple of buttons. I can get it to pair with the SmartThings hub and I have taken a basic Zigbee driver and adapted it to work giving me the ability to turn the LED on and off simulating a simple light bulb using the Dimmable Light cluster. I then tried to get the device to report the status of the light so if I turn it on or off with the buttons on the board the SmartThings tile changes accordingly. After many hours of searching around I believe I have set up the driver to configure the device for attribute reporting. I don’t really understand where to put this command. I added it to the configure method but that didn’t work. I added logging to the install and configure methods to see when they get executed and have not managed to work out that. They certainly don’t get called when my device joins the network so in desperation I added the zigbee.onOffConfig() to the refresh method so when I tell the device to refresh from the UI it sends the configure reporting command.
The device is using the ZBOSS stack supplied by Nordic and certified by Zigbee Association. The stack is supposed to handle the reporting internally, there is nothing for me to do.
When SmartThings sends the configureReporting command the device responds but I get a couple of errors in the log…

0509e155-3bc7-4785-b023-3e9ae037e82c 6:07:57 PM: warn ON/OFF REPORTING CONFIG FAILED- error code:135

0509e155-3bc7-4785-b023-3e9ae037e82c 6:07:57 PM: debug description is catchall: 0104 0006 0A 01 0D40 00 2FC1 00 00 0000 07 01 87000000

0509e155-3bc7-4785-b023-3e9ae037e82c 6:07:56 PM: debug SmartShield(text: null, manufacturerId: 0x0000, direction: 0x00, data: [0x08, 0x00], number: null, isManufacturerSpecific: false, messageType: 0x00, senderShortId: 0x2fc1, isClusterSpecific: false, sourceEndpoint: 0x00, profileId: 0x0000, command: 0x00, clusterId: 0x8021, destinationEndpoint: 0x00, options: 0x0d40)

0509e155-3bc7-4785-b023-3e9ae037e82c 6:07:56 PM: warn DID NOT PARSE MESSAGE for description : catchall: 0000 8021 00 00 0D40 00 2FC1 00 00 0000 00 00 0800

0509e155-3bc7-4785-b023-3e9ae037e82c 6:07:56 PM: debug description is catchall: 0000 8021 00 00 0D40 00 2FC1 00 00 0000 00 00 0800

0509e155-3bc7-4785-b023-3e9ae037e82c 6:07:55 PM: debug description is catchall: 0104 0006 0A 01 0D40 00 2FC1 00 00 0000 01 01 0000001001

0509e155-3bc7-4785-b023-3e9ae037e82c 6:07:53 PM: debug Refresh and set up reporting

Reporting is obviously not enabled. Does anyone have any idea what is going on? Is there somewhere that explains when the installed and configure methods are called?

My driver includes these methods…
def refresh() {
log.debug “Refresh and set up reporting”

return zigbee.onOffRefresh() + zigbee.onOffConfig()

}

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

refresh()

}