Ecolink Zigbee Wireless Siren Audio Detector

@nerlins if you buy this device let me know if it worked out for you! I am curious if it will work with zigbee2mqtt.

Yes, I have not purchased the ‘ecolink’ yet. Yes, I am asking if anyone else has used it. Is this an issue?

There isn’t a single thread on this forum dedicated to using/ troubleshooting the zigbee version of this device. I am considering being the guinea pig in this situation.

Will do, man. The worst thing that’ll happen is that I just send it back to Amazon via Kohl’s. I was hoping to try it with ZHA, first though.

Am also interested by this FFZB1-ECO model.
Did you buy it and did test it with ZHA in the end ?

Sorry, I didn’t realize you had asked me a question. I’ve been knee-deep in some 3D printer upgrades. The goal for this audio detector would be to detect the smoke detector for the room the printer is in. I probably will end up buying it, but just haven’t yet. I will come back here when I do, and post what I found.

1 Like

Has anyone purchased this device and got it working with ZHA?

I just got one and I’m having difficulties. I really like the idea of integraing my smoke detectors in this way, with zigbee. So hopefully we can get it working.

I am able to pair it quite easily (using HUSBZB-1 stick).

However I don’t seem to be able to see an binary sensor state changes in Home Assistant.

The device has 2 detection modes (per the manual). An initial test testing mode for use when you push the test button on your smoke detector, which is only enabled for 15 minutes after inserting the battery. And also the normal detection mode. I have been unable to get either to work.

I believe the ecolink is correctly “hearing” the smoke detector go off. The light on the device blinks red corresponding with the noise coming from the smoke detector.

There are also additional smaller issues I’m noticing. The battery percentage does not report, but the battery voltage seems just fine. (CR123A battery is used, so 3V is expected.)

Also the device has a “tamper” sensor too, per the manual. I am not too concerned about this, however, this does not show in home assistant. Which makes me believe that there are no zha quirks for this device (I think thats the correct terminology) to interpret the device’s signals. That will be my next line of research.

Hopefully this is helpful, and if anyone has got this working or has any suggestions, I’d greatly appreciate it!

1 Like

I’m getting the same results as @jimjames. It pairs very easily, but not getting battery info. Red light flashes if I trigger it with a smoke alarm, but no state change in HA. I tried developer tools and listened to zha_event and nothing happens. Guess I should have searched this before I bought it. I just saw zigbee and assumed it would work.

1 Like

Shoot. You’re not getting zha_events when you trigger the alarm (and red light blinked?) Thats not good. I was hoping that would work, and was going to be my next troubleshooting step. When you tried was it within the 10 min testing period for the ecolink?

I’m almost positive my testing was during the initial 10min and after. Just returned it to Amazon. I’m going to hack together a better way to do this. I have X-Sense linked smoke detectors and have found connection points inside for alarm and reset. I’m going to hard wire into one in my garage to my RasPi GPIO. Then HA will not only know when I have an alarm, but also be able to test/silence it.

I just tried it and couldn’t connect with zigbee2mqtt. Got this warning:

https://www.zigbee2mqtt.io/advanced/support-new-devices/01_support_new_devices.html

I tried for 6 hours today to add zigbee2mqtt support for this device (FFZB1-SM-ECO). I successfully got it to expose tamper, but nothing else. I could not get the device to trigger debug logs relating to a smoke alarm going off. I got the device to show a solid red LED, which the docs state indicate a message has been sent, but I saw nothing in debug logs similar to

No converter available for ...

so there was no way for me to continue troubleshooting how to write the converter.

For reference, here’s my custom converter file that worked to expose tamper:

const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const reporting = require('zigbee-herdsman-converters/lib/reporting');
const extend = require('zigbee-herdsman-converters/lib/extend');
const e = exposes.presets;
const ea = exposes.access;

function postfixWithEndpointName(value, msg, definition, meta) {
	// Prevent breaking change https://github.com/Koenkk/zigbee2mqtt/issues/13451
	if (!meta) {
		meta.logger.warn(`No meta passed to postfixWithEndpointName, update your external converter!`);
		meta = { device: null };
	}

	if (definition.meta && definition.meta.multiEndpoint &&
		(!definition.meta.multiEndpointSkip || !definition.meta.multiEndpointSkip.includes(value))) {
		const endpointName = definition.hasOwnProperty('endpoint') ?
			getKey(definition.endpoint(meta.device), msg.endpoint.ID) : msg.endpoint.ID;

		// NOTE: endpointName can be undefined if we have a definition.endpoint and the endpoint is
		//       not listed.
		if (endpointName) return `${value}_${endpointName}`;
	}
	return value;
}

const fzLocal = {
	ias_audio_alarm_1: {
		cluster: 'ssIasZone',
		type: 'commandStatusChangeNotification',
		convert: (model, msg, publish, options, meta) => {
			const zoneStatus = msg.data.zonestatus;
			const batteryLowProperty = postfixWithEndpointName('battery_low', msg, model, meta);
			const tamperProperty = postfixWithEndpointName('tamper', msg, model, meta);

			return {
				[batteryLowProperty]: (zoneStatus & 1) > 0,
				[tamperProperty]: (zoneStatus & 1 << 2) > 0,
			};
		},
	},
};

const definition = {
	zigbeeModel: ['FFZB1-SM-ECO'], // The model ID from: Device with modelID 'lumi.sens' is not supported.
	model: 'FFZB1-SM-ECO', // Vendor model number, look on the device for a model number
	vendor: 'Ecolink', // Vendor of the device (only used for documentation and startup logging)
	description: 'Audio Detector: Listens for the siren tone from a UL listed smoke detector in your home and sends signal to your Zigbee HUB', // Description of the device, copy from vendor site. (only used for documentation and startup logging)
	fromZigbee: [fzLocal.ias_audio_alarm_1],
	toZigbee: [], // Should be empty, unless device can be controlled (e.g. lights, switches).
	exposes: [e.battery_low(), e.tamper()], // Defines what this device exposes, used for e.g. Home Assistant discovery and in the frontend
};

module.exports = definition;

I did order a replacement to see if it’s a faulty device. So I’ll try again in a few days but my hopes aren’t high. FYI, I did not have a low battery to test that expose low_battery actually works either.

EDIT:
Replacement has the same issue (I can’t get it to send anything that looks like smoke alarm detection, even when the light turns solid red). It keeps sending the following request so I have reached out to Ecolink to ask for the OTA index file:

type 'commandQueryNextImageRequest', cluster 'genOta', data '{"fieldControl":0,"fileVersion":51905841,"imageType":4,"manufacturerCode":4130}' from endpoint 1 with groupID 0

EDIT 2:
Ecolink said We have no updates for the FFZB1-ECO, either OTA or otherwise. So I’m at a loss.

Well, two years later, and it’s still a bummer. I kind of forgot about purchasing it, and just now realized there were others attempting. I still can’t believe in two years this is still the only manufactured zigbee audio detector.

When you spoke to them, did you happen to ask what Zigbee this is actually supposed to work with?? Do they have a proprietary hub?? Like, what the hell, Ecolink…

I wish there were other options too. It is frustrating. I was hoping to have this device in place until I can get a hardwired zigbee relay added to my hardwired smoke detectors. But I’m sending it back.

I only sent them an email to [email protected] asking for the firmware update. Supposedly the device works with Samsung Smartthings Hub, Ezlo, and HomeSeer. I haven’t heard of those last 2. But as is the case for most of us, I’m not looking to buy into an ecosystem. Sucks.

I met a guy who uses Homeseer. Some genius signals-intelligence dude. He had been home-automating for over a decade with it. He showed me the config pages and yeah, it would take a genius just to figure out that ugly mess.

2 Likes

no luck getting this to work in Z2M or ZHA?

No. But I bought the same device in the z-wave version and it works perfectly.

I have this device and it seems to be working using the following configuration, found on Smoke detector "TS0205 _TZ3210_up3pngle" go to offline · Issue #19910 · Koenkk/zigbee2mqtt · GitHub.

const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const reporting = require('zigbee-herdsman-converters/lib/reporting');
const extend = require('zigbee-herdsman-converters/lib/extend');
const e = exposes.presets;
const ea = exposes.access;

const definition = {
	zigbeeModel: ['FFZB1-SM-ECO'], // The model ID from: Device with modelID 'lumi.sens' is not supported.
	model: 'FFZB1-SM-ECO', // Vendor model number, look on the device for a model number
	vendor: 'Ecolink', // Vendor of the device (only used for documentation and startup logging)
	description: 'Audio Detector: Listens for the siren tone from a UL listed smoke detector in your home and sends signal to your Zigbee HUB', // Description of the device, copy from vendor site. (only used for documentation and startup logging)
	fromZigbee: [fz.ias_smoke_alarm_1, fz.battery],
	toZigbee: [], // Should be empty, unless device can be controlled (e.g. lights, switches).
	exposes: [e.battery_low(), e.battery(), e.tamper(), e.smoke()], // Defines what this device exposes, used for e.g. Home Assistant discovery and in the frontend
};

module.exports = definition;

wow this is great, does it work reliably and stays connected?

Thanks for the config, it seems to be adding fine, but only tamper works. I tried the test alarm today and there is no report for the smoke.

const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const reporting = require('zigbee-herdsman-converters/lib/reporting');
const extend = require('zigbee-herdsman-converters/lib/extend');
const e = exposes.presets;
const ea = exposes.access;

const definition = {
	zigbeeModel: ['FFZB1-SM-ECO'], // The model ID from: Device with modelID 'lumi.sens' is not supported.
	model: 'FFZB1-SM-ECO', // Vendor model number, look on the device for a model number
	vendor: 'Ecolink', // Vendor of the device (only used for documentation and startup logging)
	description: 'Audio Detector: Listens for the siren tone from a UL listed smoke detector in your home and sends signal to your Zigbee HUB', 
	fromZigbee: [fz.ias_smoke_alarm_1, fz.battery, fz.ias_carbon_monoxide_alarm_1, fz.temperature],
	toZigbee: [], // Should be empty, unless device can be controlled (e.g. lights, switches).
	exposes: [e.battery_low(), e.battery(), e.tamper(), e.smoke(), e.carbon_monoxide(),e.temperature()], // Defines what this device exposes, used for e.g. Home Assistant discovery and in the frontend
};

module.exports = definition;

Still hoping this will be supported, otherwise I may just need to go with the z-wave version.