diff --git a/README.md b/README.md index 93597a5..83607f9 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,17 @@ # Zintercom -## Zigbee Intercom Automator -This device is designed to control the matrix intercom using Zigbee +##### Zigbee Intercom Automator +This device is designed to control the matrix intercom using Zigbee. Using zigbee2mqtt you can: 1. Receive notification when the intercom rings. (also support **direct bind**) 2. Mute the sound on the intercom handset. -3. Automatically or manually open the door or hang up when the intercom rings. +3. Automatically or manually open the door or hang up when the intercom rings. There are 4 work modes: -Never - ordinary work mode, use handset to control -Once - one time open door when intercom rings -Always - open door when intercom rings -Drop - hangs up all intercom rings, right after start +1. `Never` - ordinary work mode, use handset to control +2. `Once` - one time open door when intercom rings +3. `Always` - open door when intercom rings +4. `Drop` - hangs up all intercom rings, right after start You can change the operating mode with z2m or by pressing the button. After pressing the button, the LED will flash. @@ -23,15 +23,14 @@ Reset to FN by press and hold BTN for 5 seconds. LED will flash during reset. + ### How to add device into zigbe2mqtt Use [external converters](https://www.zigbee2mqtt.io/information/configuration.html#external-converters-configuration) feature Converter file located [here](./converters/DIY_Zintercom.js) - - - + ### Schematic @@ -47,8 +46,10 @@ Converter file located [here](./converters/DIY_Zintercom.js) ### DC Power Support `router` and `end device` modes. -Install `E18-MS1PA1`, `E18-MS1PA2` or `E18-MS1-PCB`. - +Install `E18-MS1PA1`, `E18-MS1PA2` or `E18-MS1-PCB`. + + + @@ -56,4 +57,30 @@ Install `E18-MS1PA1`, `E18-MS1PA2` or `E18-MS1-PCB`. Support only `end device` mode. Install `E18-MS1-PCB` only! + +Do not turn off `sound` because it turns U2 forever, which will drain the battery much faster. + +Since the device is in sleep mode, it cannot receive commands. +But you have the ability to set the button mode or at the time of the call. + +If any commands are in the coordinator's queue, they will be executed after a button is pressed or a call is received. + + +##### The mode set by the Zigbee command `overwrites` the mode set by the button. + +### Binding +The device supports direct binding of an incoming call to the onOff cluster. + +For example, you can turn on the light while a call comes to the intercom, for notification in mute mode. + + +### Files to reproduce +* [Gerbers and BOM](https://github.com/diyruz/Zintercom/tree/master/hardware) by [xyzroe](https://t.me/xyzroe) +* [Firmware](https://github.com/diyruz/Zintercom/releases) by [xyzroe](https://t.me/xyzroe) + + +### Inspired by +The original scheme of the intercom opener by [Alexander Vaidurov](https://easyeda.com/Alex_AW/domofon-with-battery) +Various hardware solutions by [Jager](https://modkam.ru) +Firmware for different Zigbee devices by [Anonymous](https://github.com/nurikk/) diff --git a/converters/DIY_Zintercom.js b/converters/DIYRuZ_Zintercom.js similarity index 78% rename from converters/DIY_Zintercom.js rename to converters/DIYRuZ_Zintercom.js index b71d8aa..a9b415b 100644 --- a/converters/DIY_Zintercom.js +++ b/converters/DIYRuZ_Zintercom.js @@ -7,11 +7,6 @@ const { const ep = exposes.presets; const ea = exposes.access; -const ZCL_DATATYPE_INT16 = 0x29; -const ZCL_DATATYPE_UINT8 = 0x20; -const ZCL_DATATYPE_UINT16 = 0x21; -const ZCL_DATATYPE_BOOLEAN = 0x10; -const ZCL_DATATYPE_INT32 = 0x2b; const bind = async (endpoint, target, clusters) => { for (const cluster of clusters) { await endpoint.bind(cluster, target); @@ -63,8 +58,6 @@ const repInterval = { MINUTE: 60, }; - - const fz = { diy_zintercom_config: { cluster: 'closuresDoorLock', @@ -150,11 +143,10 @@ const tz = { const device = { zigbeeModel: ['DIY_Zintercom'], - model: 'DIY_Zintercom', - vendor: 'xyzroe', - description: '[Intercom Auto Opener]', - supports: '', - //homeassistant: [hass.temperature, hass.presure, hass.humidity, hass.co2], + model: 'DIYRuZ_Zintercom', + vendor: 'DIYRuZ', + description: '[Matrix intercom auto opener](https://diyruz.github.io/posts/zintercom/)', + icon: 'https://github.com/diyruz/Zintercom/blob/master/images/z2m.png?raw=true', fromZigbee: [ fromZigbeeConverters.battery, fz.diy_zintercom_config, @@ -169,37 +161,11 @@ const device = { configure: async (device, coordinatorEndpoint) => { const firstEndpoint = device.getEndpoint(1); - //await bind(firstEndpoint, coordinatorEndpoint, ['msCO2', 'closuresDoorLock', 'genOnOff']); - await bind(firstEndpoint, coordinatorEndpoint, ['closuresDoorLock', 'genPowerCfg']); + const overides = {min: 0, max: 3600, change: 0}; await configureReporting.batteryVoltage(firstEndpoint, overides); await configureReporting.batteryPercentageRemaining(firstEndpoint, overides); -/* - if (device.applicationVersion < 3) { // Legacy PM2 firmwares - const payload = [{ - attribute: 'batteryPercentageRemaining', - minimumReportInterval: 0, - maximumReportInterval: 3600, - reportableChange: 0, - }, { - attribute: 'batteryVoltage', - minimumReportInterval: 0, - maximumReportInterval: 3600, - reportableChange: 0, - }]; - await firstEndpoint.configureReporting('genPowerCfg', payload); - } - */ -/* - const msBindPayload = [{ - attribute: 'measuredValue', - minimumReportInterval: 0, - maximumReportInterval: 3600, - reportableChange: 0, - }]; - await firstEndpoint.configureReporting('msCO2', msBindPayload); -*/ const payload = [{ attribute: { @@ -212,20 +178,6 @@ const device = { }, ]; await firstEndpoint.configureReporting('closuresDoorLock', payload); - /**/ - /* - await firstEndpoint.configureReporting('msTemperatureMeasurement', msBindPayload); - await firstEndpoint.configureReporting('msRelativeHumidity', msBindPayload); - - const pressureBindPayload = [{ - attribute: 'scaledValue', - minimumReportInterval: 0, - maximumReportInterval: 3600, - reportableChange: 0, - }]; - await firstEndpoint.configureReporting('msPressureMeasurement', pressureBindPayload); - */ - }, exposes: [ diff --git a/images/back_2xAAA.png b/images/back_2xAAA.png index 1a1982e..c048337 100644 Binary files a/images/back_2xAAA.png and b/images/back_2xAAA.png differ diff --git a/images/z2m_dashboard.gif b/images/z2m_dashboard.gif new file mode 100644 index 0000000..8ee1364 Binary files /dev/null and b/images/z2m_dashboard.gif differ diff --git a/images/z2m_dashboard.png b/images/z2m_dashboard.png deleted file mode 100644 index 0c985f2..0000000 Binary files a/images/z2m_dashboard.png and /dev/null differ