Heiman Smart Smoke Sensor HS1SA Zigbee

Just reporting that this driver also works very nicely with the Heiman Smart Carbon Monoxide sensor, model : HS1CA-E
Thanks. :pray:

1 Like

If you can give me the Fingerprint I will add it to the driver so that it will be discovered correctly.

Many Thanks

1 Like

Here you go:

Heiman Smart Carbon Monoxide Sensor
Model:HS1CA-E
Zigbee HA1.2

ID: 6AC1
Manufacturer: HEIMAN
Product Name:
Model Number: COSensor-EM
deviceTypeId: 103
manufacturer : HEIMAN
idAsInt : 1
inClusters : 0000,0001,0003,0500
endpointId : 01
profileId : 0104
application : 11
outClusters :
initialized : true
model : COSensor-EM
stage : 4

Thank you

Hi.
This device handler work for me, then there is smoke or the test button is pressed I'll get an event.
But there is no status updates between I'm manuel testing or smoke is detected.

I'm have a diffrent version names Heiman SmokeSensor-EF-3.0.
What can I do to her status updates og battery level reported frequently.

endpointId: 01
application: 11
manufacturer: HEIMAN
model: SmokeSensor-EF-3.0
softwareBuild:
inClusters: 0000,0001,0003,0500,0502,0B05
outClusters: 0019

Christian

Here's an update...... should sort out some of the comments I've received.....
Basically the driver now forces an event to be logged even if there is no change from the last time the sensor reported an event. (The HE default is not to log an event if no change).
@Tursoe I have added in the fingerprint of your device.

/**
 * Heiman Zigbee Smoke Detector
 *
 *  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.
 *
 *   Original DTH on SmartThings by cuboy29
 *       Converted to Hubitat and extensivly modified by Scruffy-SJB
 *
 *   Code snippets copied from veeceeoh, Daniel Terryn and Marcus Liljergren - with thanks.
 */

// Ver: 1.8 - Added fingerprint for model SmokeSensor-EF-3.0  Enhanced status message processing.  New Current State - Date/Time last status recorded.
// Ver: 1.7 - Added fingerprint for model HS1CA-M HEIMAN Smart Carbon Monoxide Sensor
// Ver: 1.6 - Added fingerprint for model HS1SA-M
// Ver: 1.5 - Added ability to detect a device test and to trigger a last tested event
// Ver: 1.4 - Parsed another unhandled catch-all
// Ver: 1.3 - Updated to support Zigbee 3.0 version HS1SA-E

import hubitat.zigbee.clusters.iaszone.ZoneStatus
 
metadata {
	definition (name: "Heiman Zigbee Smoke Detector", namespace: "scruffy-sjb", author: "scruffy-sjb and cuboy29") {
		
        capability "Configuration"
        capability "Smoke Detector"
        capability "SmokeDetector"
        capability "Sensor"
        capability "Refresh"
        capability "Battery"
        
		command "resetToClear"
        command "resetBatteryReplacedDate"
        
        attribute "smoke", "string"
        attribute "batteryLastReplaced", "string"
        attribute "sensorLastTested", "string"
        attribute "lastStatus", "string"
          
        fingerprint profileID: "0104", deviceID: "0402", inClusters: "0000,0001,0003,0500,0502", outClusters: "0019", manufacturer: "HEIMAN", model: "SmokeSensor-EM", deviceJoinName: "HEIMAN Smoke Detector" //HEIMAN Smoke Sensor (HS1SA-E)
        fingerprint profileID: "0104", deviceID: "0402", inClusters: "0000,0003,0500,0001,0009,0502", outClusters: "0019", manufacturer: "HEIMAN", model: "SMOK_V16", deviceJoinName: "HEIMAN Smoke Detector M" //HEIMAN Smoke Sensor (HS1SA-M)
        fingerprint profileID: "0104", deviceID: "0402", inClusters: "0000,0003,0001,0500,0502,0B05", outClusters: "0019", manufacturer: "HEIMAN", model: "SmokeSensor-N-3.0", deviceJoinName: "HEIMAN Smoke Detector 3.0" //HEIMAN Smoke Sensor (HS1SA-E)
        fingerprint profileID: "0104", deviceID: "0402", inClusters: "0000,0001,0003,0500", manufacturer: "HEIMAN", model: "COSensor-EM", deviceJoinName: "HEIMAN CO Sensor" //HEIMAN Smart Carbon Monoxide Sensor (HS1CA-E)
        fingerprint profileID: "0104", deviceID: "0402", inClusters: "0000,0001,0003,0500,0502,0B05", outClusters: "0019", manufacturer: "HEIMAN", model: "SmokeSensor-EF-3.0", deviceJoinName: "HEIMAN Smoke Detector" //HEIMAN Smoke Sensor 
    }
}

def SensorTestOptions = [:]
	SensorTestOptions << ["1" : "Yes"] // 0x01
	SensorTestOptions << ["0" : "No"]  // 0x00

preferences {
	input "SensorTest", "enum", title: "Enable Sensor Testing", options: SensorTestOptions, description: "Default: Yes", required: false, displayDuringSetup: true
}        

def parse(String description) {
    def descMap = [:]
    
	if (description?.startsWith('zone status')) {
			descMap = parseIasMessage(description)
    }else if (description?.startsWith('enroll request')) {
		    List cmds = zigbee.enrollResponse()
		    descMap = cmds?.collect { new hubitat.device.HubAction(it) }
	}else if (description?.startsWith('catchall')) {
            descMap = parseCatchAllMessage(description)
    }else if (description?.startsWith('read attr'))  {  
            descMap = zigbee.parseDescriptionAsMap(description)
            if ((descMap?.cluster == "0500" && descMap.attrInt == 0x0001) && (descMap.value == '0028')){  //Zone Type
                log.debug "Zone Type is Fire Sensor"
			}else if ((descMap?.cluster == "0500" && descMap.attrInt == 0x0000) && (descMap.value == '01')){  //Zone State
                log.debug "Zone State is enrolled"
			}else if ((descMap?.cluster == "0500" && descMap.attrInt == 0x0002) && ((descMap.value == '20') || (descMap.value == '0020'))){  //Zone Status Clear
                SmokeOrClear("clear")    
			}else if ((descMap?.cluster == "0500" && descMap.attrInt == 0x0002) && ((descMap.value == '30') || (descMap.value == '0030'))){  //Zone Status Clear
                SmokeOrClear("clear") 
			}else if ((descMap?.cluster == "0500" && descMap.attrInt == 0x0002) && ((descMap.value == '0031') || (descMap.value == '0021'))){  //Zone Status Smoke
                SmokeOrClear("detected")              
			}else if ((descMap?.cluster == "0502" && descMap.attrInt == 0x0000)){  //Alarm Max Duration
                def int alarmMinutes = Integer.parseInt(descMap.value,16) 
                log.debug "Max Alarm Duration is ${alarmMinutes} seconds"              
			}else if ((descMap?.cluster == "0000" && descMap.attrInt == 0x0007) && ((descMap.value == '03') )){  //PowerSource
                log.debug "${device.displayName} is Battery Powered"    
			}else if ((descMap?.cluster == "0001" && descMap.attrInt == 0x0020)) {  //Battery Voltage
                def batteryVoltage = ConvertHexValue(descMap.value)
                handleBatteryEvent(batteryVoltage)
			}else if ((descMap?.cluster == "0001" && descMap.attrInt == 0x0021)) {  //Battery Cells
                def batteryCells = ConvertHexValue(descMap.value)
                handleCellsEvent(batteryCells)                
            }else if (descMap?.cluster == "0000" && descMap.attrInt == 0x0004){  //Manufacture
                sendEvent(name: "manufacture", value: descMap.value)
                log.debug "Manufacturer is ${descMap.value}"
            }else if (descMap?.cluster == "0000" && descMap.attrInt == 0x0005){  //Model 
                sendEvent(name: "model", value: descMap.value)
                log.debug "Model is ${descMap.value}"
            }else {log.debug "Unknown --> Cluster-> ${descMap?.cluster}  AttrInt-> ${descMap.attrInt}  Value-> ${descMap.value}"
            }
       // log.debug "Cluster-> ${descMap?.cluster}  AttrInt-> ${descMap.attrInt}  Value-> ${descMap.value}"
    }else { 
        log.debug "Unparsed -> $description" 
        descMap = zigbee.parseDescriptionAsMap(description)
    }
    // log.debug "$descMap"
	return descMap   
}    

private parseCatchAllMessage(String description) {
    
    Map resultMap = [:]
    def descMap = zigbee.parse(description)  
    if (shouldProcessMessage(descMap)) {
        log.debug descMap.inspect()               
    }
    return resultMap
}

private boolean shouldProcessMessage(cluster) {
    // 0x0B is default response indicating message got through
    // 0x07 is bind message
    // 0x04 - No Idea !!!!!
    boolean ignoredMessage = cluster.profileId != 0x0104 || 
        cluster.command == 0x0B ||
        cluster.command == 0x07 ||
        cluster.command == 0x04 ||        
        (cluster.data.size() > 0 && cluster.data.first() == 0x3e)
    return !ignoredMessage
}

def refresh() {
	log.debug "Refreshing..."
	def refreshCmds = []
    
    refreshCmds +=
	zigbee.readAttribute(0x0500, 0x0001) +	   // IAS ZoneType
    zigbee.readAttribute(0x0500, 0x0000) +	   // IAS ZoneState
    zigbee.readAttribute(0x0500, 0x0002) +	   // IAS ZoneStatus
    zigbee.readAttribute(0x0502, 0x0000) +	   // Alarm Max Duration
    zigbee.readAttribute(0x0000, 0x0007) +	   // Power Source
    zigbee.readAttribute(0x0001, 0x0020) +     // Battery Voltage      
    zigbee.readAttribute(0x0001, 0x0033) +     // Battery Cells         
    zigbee.readAttribute(0x0000, 0x0004) +	   // Manufacturer Name
    zigbee.readAttribute(0x0000, 0x0005) +	   // Model Indentification
    zigbee.enrollResponse()
    
	return refreshCmds
}

def configure() {
    log.debug "Configuring..."
    
	if (!device.currentState('batteryLastReplaced')?.value)
		resetBatteryReplacedDate(true)
    
    def cmds = [
            //bindings
            "zdo bind 0x${device.deviceNetworkId} 1 1 0x0500 {${device.zigbeeId}} {}", "delay 200",
        ] +  zigbee.enrollResponse(1200) + zigbee.configureReporting(0x0500, 0x0002, 0x19, 0, 3600, 0x00) + "delay 200" + 
        zigbee.configureReporting(0x0001, 0x0020, 0x20, 600, 7200, 0x01) + refresh()
    
    return cmds 
}

def resetBatteryReplacedDate(paired) {
	def newlyPaired = paired ? " for newly paired sensor" : ""
	sendEvent(name: "batteryLastReplaced", value: new Date())
	log.debug "${device.displayName} Setting Battery Last Replaced to Current date${newlyPaired}"
}

def resetSensorTestedDate() {
    def newlyTested=""
    sendEvent(name: "sensorLastTested", value: new Date())
    log.debug "${device.displayName} Setting Sensor Last Tested to Current date${newlyTested}"
}

def resetToClear() {
	sendEvent(name:"smoke", value:"clear")
    sendEvent(name: "lastStatus", value: new Date(), displayed: True)
    log.debug "Resetting to Clear..."
	didWeGetClear = 0
}

/**
 * Code borrowed (mixed and matched) from both Daniel Terryn and veeceeoh
 *
 * Create battery event from reported battery voltage.
 *
 */

private handleBatteryEvent(rawVolts) {
    rawVolts = rawVolts / 10.0
	def minVolts = voltsmin ? voltsmin : 2.5
	def maxVolts = voltsmax ? voltsmax : 3.0
	def pct = (rawVolts - minVolts) / (maxVolts - minVolts)
	def roundedPct = Math.min(100, Math.round(pct * 100))
	log.debug "Battery level is ${roundedPct}% (${rawVolts} Volts)"
	
    sendEvent(name:"battery", value: roundedPct, unit: "%", isStateChange: true)
	return 
}

private handleCellsEvent(noCells) {
	log.debug "Battery reports that it has (${noCells} Cells)"
	return 
}

def ConvertHexValue(value) {
	if (value != null)
	{
		return Math.round(Integer.parseInt(value, 16))
	}
}

def SmokeOrClear(value) {
    if (value == "clear") {
        sendEvent(name:"smoke", value:"clear", isStateChange: true)
        log.info "${device.displayName} reports status is all clear"
    } else {
        sendEvent(name:"smoke", value:"detected", isStateChange: true)
        log.info "${device.displayName} reports smoke is detected"
    }
    
    sendEvent(name: "lastStatus", value: new Date(), displayed: True)
}

private Map parseIasMessage(String description) {
    // log.debug "Zone Status Received--> ${description}"
    ZoneStatus zs = zigbee.parseZoneStatus(description)    
    translateZoneStatus(zs)    
}

private Map translateZoneStatus(ZoneStatus zs) {
	// Some sensor models that use this DTH use alarm1 and some use alarm2 to signify motion       
	return getSmokeResult(zs.isAlarm1Set() || zs.isAlarm2Set())
}

private Map getSmokeResult(value) {
	if (value) {
        if (SensorTest == "") {
            SensorTest = "1"    // Default is Yes
        }
        
        if (SensorTest == "1") {
    		def descriptionText = "${device.displayName} status is pending"
            sendEvent(name: "lastStatus", value: new Date(), displayed: True)
	    	log.debug descriptionText
		    runIn(3,EventOrTest)
		    return [
			    name			: 'smoke',
			    value			: 'pending',
                isStateChange: false,
			    descriptionText : descriptionText
            ]
        } else {
    		def descriptionText = "${device.displayName} testing disabled - smoke detected !!!"
	    	log.debug descriptionText
            sendEvent(name: "lastStatus", value: new Date(), displayed: True)
		    return [
			    name			: 'smoke',
			    value			: 'detected',
                isStateChange: true,
			    descriptionText : descriptionText
            ]
        }                 
   } else {
		def descriptionText = "${device.displayName} all clear"
		log.debug descriptionText
        sendEvent(name: "lastStatus", value: new Date(), displayed: True)
		return [
			name			: 'smoke',
			value			: 'clear',
            isStateChange: true,
			descriptionText : descriptionText
		]
	}
}		

def EventOrTest() {
    if (device.currentValue("smoke") == "clear") {
		log.debug "${device.displayName} was tested sucessfully"
        resetSensorTestedDate()
	} else {
		log.debug "${device.displayName} This was not a test - smoke detected !!!"
		sendEvent(name:"smoke", value:"detected")
        sendEvent(name: "lastStatus", value: new Date(), displayed: True)
	}
}
3 Likes

The issues I was having with my sensors not reporting regularly and the battery status as cells prompted me to put together a zigbee2mqtt system and tinker with my sensors. So here's some info the may help anyone with these sensors and Simon improve your driver.

Pairing: once you initiate the pairing and hubitat detects it. Click the pairing button about once a second (the led in self test button will flash green) until the zigbee discovery times out. These sensor seem to go into a deep sleep mode and will not respond to any commands/configurations sent from hubitat. Clicking the pairing button wakes it up.

The battery/cells report: The number of cells reported by the sensor is the 2 times the battery remaining percentage. ie 186 cells / 2 = 93% battery.

Only thing I haven't resolved is 1 sensor only gives a battery status report and the other 2 send a more detailed status report which includes smoke status.

The reporting interval can be changed/updated by sending a message with a new reporting interval value (in seconds) the the appropriate zigbee cluster. And clicking the paring button as soon as you send the configure update. I have had mine reporting as often as 5 minutes to as long as 2 hours.

Granted this info is from how zigbee2mqtt handles the zigbee side of things and not from sniffing the actual zibgee messages from the air. (Beyond my skill set). But zigbee2mqtt supports many more devices and seems to expose more data then hubitat.

I've just received an Orvibo Carbon Monoxide detector (rebadged Heiman) from www.cef.co.uk. The log showed "Unknown Zigbee Device" and...
fingerprint profileId:"0104", endpointId:"01", inClusters:"0000,0003,0500,0001,0009", outClusters:"0019", model:"1ccaa94c49a84abaa9e38687913947ba", manufacturer:"Heiman"

I've been trying to modify Simon's device driver to handle it. All I did was to add this line....
fingerprint profileID: "0104", deviceID: "0402", inClusters: "0000,0003,0500,0001,0009", outClusters: "0019", manufacturer: "HEIMAN", model: "Orvibo CO Sensor", deviceJoinName: "Orvibo CO Sensor" //Orvibo CO Sensor
I know it's not correct - I was just trying to get HE to recognize the device. It has worked a little, but the log now shows...
dev:2662021-02-16 06:16:46.806 pm debugModel is 1ccaa94c49a84abaa9e38687913947ba
dev:2662021-02-16 06:16:44.554 pm debugManufacturer is Heiman
dev:2662021-02-16 06:16:42.306 pm debugUnknown --> Cluster-> 0001 AttrInt-> 51 Value-> 00
dev:2662021-02-16 06:16:41.107 pm debugBattery level is 100% (3.1 Volts)
dev:2662021-02-16 06:16:38.860 pm debugCO sensor is Battery Powered
dev:2662021-02-16 06:16:34.355 pm infoCO sensor reports status is all clear
dev:2662021-02-16 06:16:32.129 pm debugZone State is enrolled
dev:2662021-02-16 06:16:30.934 pm debugUnknown --> Cluster-> 0500 AttrInt-> 1 Value-> 002B
sys:12021-02-16 06:16:21.900 pm Unable to execute hubAction:delay 2000 sent from CO sensor, invalid or unspecified protocol.
sys:12021-02-16 06:16:21.896 pm Unable to execute hubAction:he raw 0x782F 1 0x01 0x0500 {01 23 00 00 00} sent from CO sensor, invalid or unspecified protocol.
sys:12021-02-16 06:16:21.892 pm Unable to execute hubAction:delay 2000 sent from CO sensor, invalid or unspecified protocol.
sys:12021-02-16 06:16:21.887 pm Unable to execute hubAction:he wattr 0x782F 0x01 0x0500 0x0010 0xF0 {BE229513006F0D00} sent from CO sensor, invalid or unspecified protocol.
sys:12021-02-16 06:16:18.786 pm Found Previously Joined Zigbee Device CO sensor
dev:2662021-02-16 06:16:18.697 pm debugRefreshing...
dev:2662021-02-16 06:16:18.604 pm debugCO sensor Setting Battery Last Replaced to Current date for newly paired sensor
dev:2662021-02-16 06:16:18.545 pm debugConfiguring...

Can anyone help?

Hi @simon ... and everybody else too

I'm about to install your driver and as a natural born PITA user ( :laughing:) I'd like to suggest two things:

a) Publish your driver at GitHub - it would be easier to keep it for easy access

b) Once using GitHub, configure the Hubitat Package Manager (HPM) to easy install/updade the driver for the users; HPM is really easy to use and it is also a very nice piece of software developed by @dman2306

I hope you don't mind ...

Now, back to use your driver!

Thanks,

Marco

1 Like

Yep. I need to get the finger out and do that !!!

1 Like

Just to say thanks for all your work! :slight_smile: This was a doddle to add, was banging my head through posts.. as I have been with many being my 1st 'proper' week into this, and it's nice when something just works.

2 Likes

Is there a way for me to have them all start sounding after x time when one starts?

No, there isn't a "siren" trigger available in the driver. You can set up announcements on smart speakers and trigger other devices such as stand-alone sirens (like the Heiman HS2WD-E), light bulbs, switches etc...

Hi

I have also few of those Heiman zigbee smoke detectors, few years old already, and installed them a couple of weeks ago with the Simon's driver.

They were found nicely and after installation I tested each with pressing the test button. They sent alarms like they should.

But then... nothing heard. No activity on the log and if test button pressed, nothing is seen in the HE.

This is copied from their properties:

  • endpointId: 01
  • model: SMOK_V16
  • application: 03
  • manufacturer: Heiman

What's wrong?

Do you get battery status or "all clear" status every now and then?

No. Not all clear or even battery status. Just empty log

Could you delete one of your smoke sensors and re-pair it to the hub and post everything that the device posts to the log during the pairing please?

Hi. Here is a copy of the log. I removed a bunch of identical (maybe 20) lines. The last activity is when I pressed the test button. Since that there is no activity (over 12 hours gone)

dev:782021-09-23 19:45:06.631 debugHeiman Zigbee Smoke Detector all clear
dev:782021-09-23 19:45:03.973 debugHeiman Zigbee Smoke Detector testing disabled - smoke detected !!!
dev:782021-09-23 19:44:25.212 debugModel is SMOK_V16
dev:782021-09-23 19:44:23.871 debugModel is SMOK_V16
dev:782021-09-23 19:44:23.861 debugManufacturer is Heiman
dev:782021-09-23 19:44:22.501 debugModel is SMOK_V16
dev:782021-09-23 19:44:22.494 debugManufacturer is Heiman
dev:782021-09-23 19:44:21.165 debugUnknown --> Cluster-> 0001 AttrInt-> 51 Value-> 00
dev:782021-09-23 19:44:21.146 debugManufacturer is Heiman
dev:782021-09-23 19:44:19.791 debugUnknown --> Cluster-> 0001 AttrInt-> 51 Value-> 00
dev:782021-09-23 19:44:19.778 debugBattery level is 100% (3 Volts)
dev:782021-09-23 19:44:18.433 debugUnknown --> Cluster-> 0001 AttrInt-> 51 Value-> 00
dev:782021-09-23 19:44:18.401 debugBattery level is 100% (3 Volts)
dev:782021-09-23 19:44:17.057 debugHeiman Zigbee Smoke Detector is Battery Powered
dev:782021-09-23 19:44:17.027 debugBattery level is 100% (3 Volts)
dev:782021-09-23 19:44:15.702 debugHeiman Zigbee Smoke Detector is Battery Powered
dev:782021-09-23 19:44:15.671 debugMax Alarm Duration is 240 seconds
dev:782021-09-23 19:44:14.333 debugHeiman Zigbee Smoke Detector is Battery Powered
dev:782021-09-23 19:44:14.296 debugMax Alarm Duration is 240 seconds
dev:782021-09-23 19:44:12.953 infoHeiman Zigbee Smoke Detector reports status is all clear
dev:782021-09-23 19:44:12.948 debugMax Alarm Duration is 240 seconds
dev:782021-09-23 19:44:11.581 infoHeiman Zigbee Smoke Detector reports status is all clear
dev:782021-09-23 19:44:11.575 debugZone State is enrolled
dev:782021-09-23 19:44:10.242 infoHeiman Zigbee Smoke Detector reports status is all clear
dev:782021-09-23 19:44:10.230 debugZone State is enrolled
dev:782021-09-23 19:44:08.885 debugZone Type is Fire Sensor
dev:782021-09-23 19:44:08.875 debugZone State is enrolled
dev:782021-09-23 19:44:07.498 debugZone Type is Fire Sensor
dev:782021-09-23 19:44:06.122 debugZone Type is Fire Sensor
dev:782021-09-23 19:43:57.986 debugModel is SMOK_V16
[--many identic lines removed--]
dev:782021-09-23 19:43:28.877 debugModel is SMOK_V16
dev:782021-09-23 19:43:27.555 debugManufacturer is Heiman
dev:782021-09-23 19:43:27.543 debugModel is SMOK_V16
dev:782021-09-23 19:43:27.473 debugModel is SMOK_V16
dev:782021-09-23 19:43:25.509 debugRefreshing...
dev:782021-09-23 19:43:25.468 debugHeiman Zigbee Smoke Detector Setting Battery Last Replaced to Current date for newly paired sensor
dev:782021-09-23 19:43:25.457 debugConfiguring...

Still no activity??? If you press test again, you should get a message into the log.

The logs tell me it's paired and communicating ok. My guess is that your device did not receive the configuration commands when it gets paired - therefore it's not sending battery and status messages every 6 hours. However, it's still working - ultimate test would be to generate a bit of smoke under the sensor and see if it alarms and logs the alarm.

I don't know why you are getting a lot of duplicate messages. I do see one unparsed attribute "debugUnknown --> Cluster-> 0001 AttrInt-> 51 Value-> 00" this is number of battery cells, I've added that into the code for the next release.

I might get myself another Heiman Smokie for testing - the original ones I used to develop this driver are all up on ceilings and happily reporting in every 6 hours (I just checked them).

Thanks, Simon

1 Like

Hi. Still no activity, but when pressing test button, it returns alarm data:

[dev:78]2021-09-25 21:21:59.779 [debug] Heiman Zigbee Smoke Detector all clear

[dev:78] 2021-09-25 21:21:56.024 [debug] Heiman Zigbee Smoke Detector testing disabled - smoke detected !!!

When testing the other ones, seems they do also send the alarm, but the Hubitat Safety Monitor does not somehow forward it anywhere. (It has forwarded it earlier when I installed the Heimans and tested the alarm functionality)

I will re-pair some of them once again very close the hub to make sure it will pair directly without any other devices in between. Maybe that changes the log :thinking: