@willieee802/zigbee-herdsman-converters 19.44.4 → 19.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1101 -0
- package/dist/converters/actions.d.ts.map +1 -1
- package/dist/converters/actions.js +2 -0
- package/dist/converters/actions.js.map +1 -1
- package/dist/converters/fromZigbee.d.ts +1 -150
- package/dist/converters/fromZigbee.d.ts.map +1 -1
- package/dist/converters/fromZigbee.js +183 -3044
- package/dist/converters/fromZigbee.js.map +1 -1
- package/dist/converters/toZigbee.d.ts +0 -121
- package/dist/converters/toZigbee.d.ts.map +1 -1
- package/dist/converters/toZigbee.js +289 -2386
- package/dist/converters/toZigbee.js.map +1 -1
- package/dist/devices/ITCommander.d.ts.map +1 -1
- package/dist/devices/ITCommander.js +2 -1
- package/dist/devices/ITCommander.js.map +1 -1
- package/dist/devices/acova.d.ts.map +1 -1
- package/dist/devices/acova.js +69 -2
- package/dist/devices/acova.js.map +1 -1
- package/dist/devices/adeo.d.ts.map +1 -1
- package/dist/devices/adeo.js +35 -3
- package/dist/devices/adeo.js.map +1 -1
- package/dist/devices/adurosmart.js +1 -1
- package/dist/devices/adurosmart.js.map +1 -1
- package/dist/devices/amina.d.ts.map +1 -1
- package/dist/devices/amina.js +47 -10
- package/dist/devices/amina.js.map +1 -1
- package/dist/devices/aurora_lighting.d.ts.map +1 -1
- package/dist/devices/aurora_lighting.js +15 -0
- package/dist/devices/aurora_lighting.js.map +1 -1
- package/dist/devices/automaton.d.ts.map +1 -1
- package/dist/devices/automaton.js +1 -0
- package/dist/devices/automaton.js.map +1 -1
- package/dist/devices/avatto.d.ts.map +1 -1
- package/dist/devices/avatto.js +29 -24
- package/dist/devices/avatto.js.map +1 -1
- package/dist/devices/awox.d.ts.map +1 -1
- package/dist/devices/awox.js +41 -3
- package/dist/devices/awox.js.map +1 -1
- package/dist/devices/bacchus.d.ts.map +1 -1
- package/dist/devices/bacchus.js +75 -0
- package/dist/devices/bacchus.js.map +1 -1
- package/dist/devices/bitron.d.ts.map +1 -1
- package/dist/devices/bitron.js +29 -2
- package/dist/devices/bitron.js.map +1 -1
- package/dist/devices/bosch.d.ts.map +1 -1
- package/dist/devices/bosch.js +70 -50
- package/dist/devices/bosch.js.map +1 -1
- package/dist/devices/bticino.d.ts.map +1 -1
- package/dist/devices/bticino.js +11 -1
- package/dist/devices/bticino.js.map +1 -1
- package/dist/devices/byun.d.ts.map +1 -1
- package/dist/devices/byun.js +40 -3
- package/dist/devices/byun.js.map +1 -1
- package/dist/devices/candeo.d.ts.map +1 -1
- package/dist/devices/candeo.js +262 -9
- package/dist/devices/candeo.js.map +1 -1
- package/dist/devices/centralite.d.ts +9 -0
- package/dist/devices/centralite.d.ts.map +1 -1
- package/dist/devices/centralite.js +44 -5
- package/dist/devices/centralite.js.map +1 -1
- package/dist/devices/{aubess.d.ts → cigol.d.ts} +1 -1
- package/dist/devices/cigol.d.ts.map +1 -0
- package/dist/devices/cigol.js +260 -0
- package/dist/devices/cigol.js.map +1 -0
- package/dist/devices/cleverio.js +2 -2
- package/dist/devices/cleverio.js.map +1 -1
- package/dist/devices/climax.d.ts.map +1 -1
- package/dist/devices/climax.js +15 -1
- package/dist/devices/climax.js.map +1 -1
- package/dist/devices/ctm.d.ts.map +1 -1
- package/dist/devices/ctm.js +845 -496
- package/dist/devices/ctm.js.map +1 -1
- package/dist/devices/custom_devices_diy.d.ts +183 -1
- package/dist/devices/custom_devices_diy.d.ts.map +1 -1
- package/dist/devices/custom_devices_diy.js +390 -33
- package/dist/devices/custom_devices_diy.js.map +1 -1
- package/dist/devices/daewoo.d.ts +3 -0
- package/dist/devices/daewoo.d.ts.map +1 -0
- package/dist/devices/daewoo.js +198 -0
- package/dist/devices/daewoo.js.map +1 -0
- package/dist/devices/danfoss.d.ts.map +1 -1
- package/dist/devices/danfoss.js +1270 -296
- package/dist/devices/danfoss.js.map +1 -1
- package/dist/devices/databyte.d.ts.map +1 -1
- package/dist/devices/databyte.js +47 -3
- package/dist/devices/databyte.js.map +1 -1
- package/dist/devices/datek.d.ts.map +1 -1
- package/dist/devices/datek.js +202 -41
- package/dist/devices/datek.js.map +1 -1
- package/dist/devices/dawon_dns.d.ts.map +1 -1
- package/dist/devices/dawon_dns.js +14 -1
- package/dist/devices/dawon_dns.js.map +1 -1
- package/dist/devices/develco.d.ts.map +1 -1
- package/dist/devices/develco.js +145 -64
- package/dist/devices/develco.js.map +1 -1
- package/dist/devices/diyruz.d.ts.map +1 -1
- package/dist/devices/diyruz.js +444 -20
- package/dist/devices/diyruz.js.map +1 -1
- package/dist/devices/domraem.d.ts.map +1 -1
- package/dist/devices/domraem.js +7 -0
- package/dist/devices/domraem.js.map +1 -1
- package/dist/devices/easyaccess.d.ts.map +1 -1
- package/dist/devices/easyaccess.js +22 -2
- package/dist/devices/easyaccess.js.map +1 -1
- package/dist/devices/easyiot.d.ts.map +1 -1
- package/dist/devices/easyiot.js +767 -5
- package/dist/devices/easyiot.js.map +1 -1
- package/dist/devices/echostar.d.ts.map +1 -1
- package/dist/devices/echostar.js +25 -1
- package/dist/devices/echostar.js.map +1 -1
- package/dist/devices/ecodim.d.ts.map +1 -1
- package/dist/devices/ecodim.js +8 -0
- package/dist/devices/ecodim.js.map +1 -1
- package/dist/devices/ecolink.d.ts.map +1 -1
- package/dist/devices/ecolink.js +12 -0
- package/dist/devices/ecolink.js.map +1 -1
- package/dist/devices/efekta.d.ts.map +1 -1
- package/dist/devices/efekta.js +1615 -60
- package/dist/devices/efekta.js.map +1 -1
- package/dist/devices/eglo.d.ts.map +1 -1
- package/dist/devices/eglo.js +203 -17
- package/dist/devices/eglo.js.map +1 -1
- package/dist/devices/elko.d.ts.map +1 -1
- package/dist/devices/elko.js +20 -22
- package/dist/devices/elko.js.map +1 -1
- package/dist/devices/engo.d.ts.map +1 -1
- package/dist/devices/engo.js +201 -0
- package/dist/devices/engo.js.map +1 -1
- package/dist/devices/enocean.d.ts.map +1 -1
- package/dist/devices/enocean.js +132 -4
- package/dist/devices/enocean.js.map +1 -1
- package/dist/devices/ensystec.d.ts +3 -0
- package/dist/devices/ensystec.d.ts.map +1 -0
- package/dist/devices/ensystec.js +1200 -0
- package/dist/devices/ensystec.js.map +1 -0
- package/dist/devices/eurotronic.d.ts +78 -1
- package/dist/devices/eurotronic.d.ts.map +1 -1
- package/dist/devices/eurotronic.js +244 -40
- package/dist/devices/eurotronic.js.map +1 -1
- package/dist/devices/ewelink.d.ts.map +1 -1
- package/dist/devices/ewelink.js +154 -2
- package/dist/devices/ewelink.js.map +1 -1
- package/dist/devices/fantem.js +1 -1
- package/dist/devices/fantem.js.map +1 -1
- package/dist/devices/fireangel.d.ts.map +1 -1
- package/dist/devices/fireangel.js +12 -1
- package/dist/devices/fireangel.js.map +1 -1
- package/dist/devices/frankever.d.ts.map +1 -1
- package/dist/devices/frankever.js +96 -0
- package/dist/devices/frankever.js.map +1 -1
- package/dist/devices/frient.d.ts.map +1 -1
- package/dist/devices/frient.js +15 -0
- package/dist/devices/frient.js.map +1 -1
- package/dist/devices/girier.js +1 -1
- package/dist/devices/girier.js.map +1 -1
- package/dist/devices/gledopto.js +1 -1
- package/dist/devices/gledopto.js.map +1 -1
- package/dist/devices/gmmts.d.ts.map +1 -1
- package/dist/devices/gmmts.js +59 -55
- package/dist/devices/gmmts.js.map +1 -1
- package/dist/devices/halo_smart_labs.d.ts +3 -0
- package/dist/devices/halo_smart_labs.d.ts.map +1 -0
- package/dist/devices/halo_smart_labs.js +918 -0
- package/dist/devices/halo_smart_labs.js.map +1 -0
- package/dist/devices/handshake_finland.d.ts +3 -0
- package/dist/devices/handshake_finland.d.ts.map +1 -0
- package/dist/devices/handshake_finland.js +15 -0
- package/dist/devices/handshake_finland.js.map +1 -0
- package/dist/devices/heiman.d.ts.map +1 -1
- package/dist/devices/heiman.js +1361 -147
- package/dist/devices/heiman.js.map +1 -1
- package/dist/devices/heimgard_technologies.d.ts.map +1 -1
- package/dist/devices/heimgard_technologies.js +13 -0
- package/dist/devices/heimgard_technologies.js.map +1 -1
- package/dist/devices/hive.d.ts.map +1 -1
- package/dist/devices/hive.js +11 -0
- package/dist/devices/hive.js.map +1 -1
- package/dist/devices/ikea.d.ts.map +1 -1
- package/dist/devices/ikea.js +185 -135
- package/dist/devices/ikea.js.map +1 -1
- package/dist/devices/iluminize.d.ts.map +1 -1
- package/dist/devices/iluminize.js +8 -7
- package/dist/devices/iluminize.js.map +1 -1
- package/dist/devices/immax.d.ts.map +1 -1
- package/dist/devices/immax.js +3 -1
- package/dist/devices/immax.js.map +1 -1
- package/dist/devices/index.d.ts.map +1 -1
- package/dist/devices/index.js +20 -2
- package/dist/devices/index.js.map +1 -1
- package/dist/devices/innr.d.ts.map +1 -1
- package/dist/devices/innr.js +34 -2
- package/dist/devices/innr.js.map +1 -1
- package/dist/devices/inovelli.d.ts.map +1 -1
- package/dist/devices/inovelli.js +41 -2348
- package/dist/devices/inovelli.js.map +1 -1
- package/dist/devices/iris.d.ts.map +1 -1
- package/dist/devices/iris.js +13 -1
- package/dist/devices/iris.js.map +1 -1
- package/dist/devices/javis.d.ts.map +1 -1
- package/dist/devices/javis.js +39 -1
- package/dist/devices/javis.js.map +1 -1
- package/dist/devices/jxuan.d.ts.map +1 -1
- package/dist/devices/jxuan.js +37 -2
- package/dist/devices/jxuan.js.map +1 -1
- package/dist/devices/kami.d.ts.map +1 -1
- package/dist/devices/kami.js +21 -2
- package/dist/devices/kami.js.map +1 -1
- package/dist/devices/keen_home.d.ts.map +1 -1
- package/dist/devices/keen_home.js +13 -3
- package/dist/devices/keen_home.js.map +1 -1
- package/dist/devices/klikaanklikuit.d.ts.map +1 -1
- package/dist/devices/klikaanklikuit.js +7 -0
- package/dist/devices/klikaanklikuit.js.map +1 -1
- package/dist/devices/kmpcil.d.ts.map +1 -1
- package/dist/devices/kmpcil.js +44 -5
- package/dist/devices/kmpcil.js.map +1 -1
- package/dist/devices/konke.d.ts.map +1 -1
- package/dist/devices/konke.js +10 -1
- package/dist/devices/konke.js.map +1 -1
- package/dist/devices/lds.d.ts.map +1 -1
- package/dist/devices/lds.js +7 -0
- package/dist/devices/lds.js.map +1 -1
- package/dist/devices/led_trading.d.ts.map +1 -1
- package/dist/devices/led_trading.js +13 -13
- package/dist/devices/led_trading.js.map +1 -1
- package/dist/devices/leedarson.d.ts.map +1 -1
- package/dist/devices/leedarson.js +140 -1
- package/dist/devices/leedarson.js.map +1 -1
- package/dist/devices/legrand.d.ts.map +1 -1
- package/dist/devices/legrand.js +73 -42
- package/dist/devices/legrand.js.map +1 -1
- package/dist/devices/lellki.d.ts.map +1 -1
- package/dist/devices/lellki.js +3 -1
- package/dist/devices/lellki.js.map +1 -1
- package/dist/devices/letv.d.ts.map +1 -1
- package/dist/devices/letv.js +16 -2
- package/dist/devices/letv.js.map +1 -1
- package/dist/devices/lidl.d.ts.map +1 -1
- package/dist/devices/lidl.js +26 -6
- package/dist/devices/lidl.js.map +1 -1
- package/dist/devices/lincukoo.d.ts.map +1 -1
- package/dist/devices/lincukoo.js +92 -31
- package/dist/devices/lincukoo.js.map +1 -1
- package/dist/devices/linkind.d.ts.map +1 -1
- package/dist/devices/linkind.js +14 -1
- package/dist/devices/linkind.js.map +1 -1
- package/dist/devices/linptech.d.ts.map +1 -1
- package/dist/devices/linptech.js +3 -1
- package/dist/devices/linptech.js.map +1 -1
- package/dist/devices/livingwise.d.ts.map +1 -1
- package/dist/devices/livingwise.js +2 -1
- package/dist/devices/livingwise.js.map +1 -1
- package/dist/devices/livolo.d.ts.map +1 -1
- package/dist/devices/livolo.js +612 -20
- package/dist/devices/livolo.js.map +1 -1
- package/dist/devices/lixee.d.ts.map +1 -1
- package/dist/devices/lixee.js +46 -44
- package/dist/devices/lixee.js.map +1 -1
- package/dist/devices/lonsonho.d.ts.map +1 -1
- package/dist/devices/lonsonho.js +18 -11
- package/dist/devices/lonsonho.js.map +1 -1
- package/dist/devices/lumi.d.ts.map +1 -1
- package/dist/devices/lumi.js +877 -155
- package/dist/devices/lumi.js.map +1 -1
- package/dist/devices/lytko.d.ts.map +1 -1
- package/dist/devices/lytko.js +205 -556
- package/dist/devices/lytko.js.map +1 -1
- package/dist/devices/makegood.d.ts.map +1 -1
- package/dist/devices/makegood.js +5 -1
- package/dist/devices/makegood.js.map +1 -1
- package/dist/devices/mazda.js +7 -7
- package/dist/devices/mazda.js.map +1 -1
- package/dist/devices/meazon.d.ts.map +1 -1
- package/dist/devices/meazon.js +82 -20
- package/dist/devices/meazon.js.map +1 -1
- package/dist/devices/megaman.d.ts +4 -0
- package/dist/devices/megaman.d.ts.map +1 -0
- package/dist/devices/megaman.js +48 -0
- package/dist/devices/megaman.js.map +1 -0
- package/dist/devices/mercator.d.ts.map +1 -1
- package/dist/devices/mercator.js +20 -5
- package/dist/devices/mercator.js.map +1 -1
- package/dist/devices/miboxer.d.ts.map +1 -1
- package/dist/devices/miboxer.js +3 -1
- package/dist/devices/miboxer.js.map +1 -1
- package/dist/devices/mill.d.ts.map +1 -1
- package/dist/devices/mill.js +33 -7
- package/dist/devices/mill.js.map +1 -1
- package/dist/devices/moes.d.ts.map +1 -1
- package/dist/devices/moes.js +89 -15
- package/dist/devices/moes.js.map +1 -1
- package/dist/devices/msh.d.ts +3 -0
- package/dist/devices/msh.d.ts.map +1 -0
- package/dist/devices/msh.js +93 -0
- package/dist/devices/msh.js.map +1 -0
- package/dist/devices/muller_licht.d.ts.map +1 -1
- package/dist/devices/muller_licht.js +11 -0
- package/dist/devices/muller_licht.js.map +1 -1
- package/dist/devices/multir.d.ts.map +1 -1
- package/dist/devices/multir.js +12 -1
- package/dist/devices/multir.js.map +1 -1
- package/dist/devices/multiterm.js +2 -2
- package/dist/devices/multiterm.js.map +1 -1
- package/dist/devices/namron.d.ts.map +1 -1
- package/dist/devices/namron.js +488 -128
- package/dist/devices/namron.js.map +1 -1
- package/dist/devices/neo.d.ts.map +1 -1
- package/dist/devices/neo.js +151 -192
- package/dist/devices/neo.js.map +1 -1
- package/dist/devices/netica.d.ts +3 -0
- package/dist/devices/netica.d.ts.map +1 -0
- package/dist/devices/netica.js +153 -0
- package/dist/devices/netica.js.map +1 -0
- package/dist/devices/niko.d.ts.map +1 -1
- package/dist/devices/niko.js +10 -8
- package/dist/devices/niko.js.map +1 -1
- package/dist/devices/nodon.d.ts.map +1 -1
- package/dist/devices/nodon.js +6 -4
- package/dist/devices/nodon.js.map +1 -1
- package/dist/devices/nous.d.ts.map +1 -1
- package/dist/devices/nous.js +160 -61
- package/dist/devices/nous.js.map +1 -1
- package/dist/devices/nue_3a.d.ts.map +1 -1
- package/dist/devices/nue_3a.js +2 -0
- package/dist/devices/nue_3a.js.map +1 -1
- package/dist/devices/onesti.d.ts +11 -1
- package/dist/devices/onesti.d.ts.map +1 -1
- package/dist/devices/onesti.js +30 -6
- package/dist/devices/onesti.js.map +1 -1
- package/dist/devices/onokom.d.ts.map +1 -1
- package/dist/devices/onokom.js +1152 -2309
- package/dist/devices/onokom.js.map +1 -1
- package/dist/devices/orvibo.d.ts +17 -1
- package/dist/devices/orvibo.d.ts.map +1 -1
- package/dist/devices/orvibo.js +71 -4
- package/dist/devices/orvibo.js.map +1 -1
- package/dist/devices/owon.d.ts.map +1 -1
- package/dist/devices/owon.js +382 -62
- package/dist/devices/owon.js.map +1 -1
- package/dist/devices/paul_neuhaus.d.ts.map +1 -1
- package/dist/devices/paul_neuhaus.js +9 -0
- package/dist/devices/paul_neuhaus.js.map +1 -1
- package/dist/devices/paulmann.js +2 -2
- package/dist/devices/paulmann.js.map +1 -1
- package/dist/devices/perenio.d.ts.map +1 -1
- package/dist/devices/perenio.js +57 -39
- package/dist/devices/perenio.js.map +1 -1
- package/dist/devices/philips.d.ts.map +1 -1
- package/dist/devices/philips.js +194 -53
- package/dist/devices/philips.js.map +1 -1
- package/dist/devices/plaid.d.ts.map +1 -1
- package/dist/devices/plaid.js +18 -1
- package/dist/devices/plaid.js.map +1 -1
- package/dist/devices/plugwise.d.ts.map +1 -1
- package/dist/devices/plugwise.js +307 -26
- package/dist/devices/plugwise.js.map +1 -1
- package/dist/devices/profalux.d.ts.map +1 -1
- package/dist/devices/profalux.js +25 -1
- package/dist/devices/profalux.js.map +1 -1
- package/dist/devices/pushok.d.ts.map +1 -1
- package/dist/devices/pushok.js +44 -0
- package/dist/devices/pushok.js.map +1 -1
- package/dist/devices/qa.d.ts.map +1 -1
- package/dist/devices/qa.js +80 -32
- package/dist/devices/qa.js.map +1 -1
- package/dist/devices/repenic_ltd.d.ts +3 -0
- package/dist/devices/repenic_ltd.d.ts.map +1 -0
- package/dist/devices/repenic_ltd.js +97 -0
- package/dist/devices/repenic_ltd.js.map +1 -0
- package/dist/devices/robb.d.ts.map +1 -1
- package/dist/devices/robb.js +13 -1
- package/dist/devices/robb.js.map +1 -1
- package/dist/devices/rtx.js +1 -1
- package/dist/devices/rtx.js.map +1 -1
- package/dist/devices/salus_controls.d.ts.map +1 -1
- package/dist/devices/salus_controls.js +44 -17
- package/dist/devices/salus_controls.js.map +1 -1
- package/dist/devices/samotech.js +2 -2
- package/dist/devices/samotech.js.map +1 -1
- package/dist/devices/sber.d.ts.map +1 -1
- package/dist/devices/sber.js +435 -26
- package/dist/devices/sber.js.map +1 -1
- package/dist/devices/schneider_electric.d.ts.map +1 -1
- package/dist/devices/schneider_electric.js +808 -252
- package/dist/devices/schneider_electric.js.map +1 -1
- package/dist/devices/securifi.d.ts.map +1 -1
- package/dist/devices/securifi.js +24 -1
- package/dist/devices/securifi.js.map +1 -1
- package/dist/devices/sengled.d.ts.map +1 -1
- package/dist/devices/sengled.js +5 -4
- package/dist/devices/sengled.js.map +1 -1
- package/dist/devices/shada.d.ts +3 -0
- package/dist/devices/shada.d.ts.map +1 -0
- package/dist/devices/{aubess.js → shada.js} +7 -20
- package/dist/devices/shada.js.map +1 -0
- package/dist/devices/shelly.d.ts.map +1 -1
- package/dist/devices/shelly.js +646 -61
- package/dist/devices/shelly.js.map +1 -1
- package/dist/devices/shinasystem.d.ts.map +1 -1
- package/dist/devices/shinasystem.js +75 -16
- package/dist/devices/shinasystem.js.map +1 -1
- package/dist/devices/siglis.d.ts.map +1 -1
- package/dist/devices/siglis.js +26 -0
- package/dist/devices/siglis.js.map +1 -1
- package/dist/devices/sinope.d.ts.map +1 -1
- package/dist/devices/sinope.js +163 -83
- package/dist/devices/sinope.js.map +1 -1
- package/dist/devices/slacky_diy.d.ts.map +1 -1
- package/dist/devices/slacky_diy.js +3007 -69
- package/dist/devices/slacky_diy.js.map +1 -1
- package/dist/devices/smarli.d.ts.map +1 -1
- package/dist/devices/smarli.js +4 -5
- package/dist/devices/smarli.js.map +1 -1
- package/dist/devices/smartthings.d.ts +25 -0
- package/dist/devices/smartthings.d.ts.map +1 -1
- package/dist/devices/smartthings.js +62 -11
- package/dist/devices/smartthings.js.map +1 -1
- package/dist/devices/somfy.d.ts.map +1 -1
- package/dist/devices/somfy.js +14 -1
- package/dist/devices/somfy.js.map +1 -1
- package/dist/devices/sonoff.d.ts +42 -1
- package/dist/devices/sonoff.d.ts.map +1 -1
- package/dist/devices/sonoff.js +5161 -2007
- package/dist/devices/sonoff.js.map +1 -1
- package/dist/devices/sprut.d.ts.map +1 -1
- package/dist/devices/sprut.js +5 -4
- package/dist/devices/sprut.js.map +1 -1
- package/dist/devices/stello.d.ts.map +1 -1
- package/dist/devices/stello.js +6 -24
- package/dist/devices/stello.js.map +1 -1
- package/dist/devices/stelpro.d.ts +51 -1
- package/dist/devices/stelpro.d.ts.map +1 -1
- package/dist/devices/stelpro.js +86 -23
- package/dist/devices/stelpro.js.map +1 -1
- package/dist/devices/sunricher.d.ts.map +1 -1
- package/dist/devices/sunricher.js +215 -29
- package/dist/devices/sunricher.js.map +1 -1
- package/dist/devices/tech.d.ts.map +1 -1
- package/dist/devices/tech.js +35 -35
- package/dist/devices/tech.js.map +1 -1
- package/dist/devices/terncy.d.ts.map +1 -1
- package/dist/devices/terncy.js +398 -2
- package/dist/devices/terncy.js.map +1 -1
- package/dist/devices/third_reality.d.ts +42 -1
- package/dist/devices/third_reality.d.ts.map +1 -1
- package/dist/devices/third_reality.js +521 -110
- package/dist/devices/third_reality.js.map +1 -1
- package/dist/devices/tuya.d.ts.map +1 -1
- package/dist/devices/tuya.js +3139 -814
- package/dist/devices/tuya.js.map +1 -1
- package/dist/devices/ubisys.d.ts.map +1 -1
- package/dist/devices/ubisys.js +11 -8
- package/dist/devices/ubisys.js.map +1 -1
- package/dist/devices/vesternet.d.ts.map +1 -1
- package/dist/devices/vesternet.js +7 -0
- package/dist/devices/vesternet.js.map +1 -1
- package/dist/devices/viessmann.d.ts.map +1 -1
- package/dist/devices/viessmann.js +107 -4
- package/dist/devices/viessmann.js.map +1 -1
- package/dist/devices/vsmart.d.ts.map +1 -1
- package/dist/devices/vsmart.js +11 -0
- package/dist/devices/vsmart.js.map +1 -1
- package/dist/devices/weiser.d.ts.map +1 -1
- package/dist/devices/weiser.js +6 -0
- package/dist/devices/weiser.js.map +1 -1
- package/dist/devices/wirenboard.d.ts.map +1 -1
- package/dist/devices/wirenboard.js +124 -21
- package/dist/devices/wirenboard.js.map +1 -1
- package/dist/devices/wmun.d.ts.map +1 -1
- package/dist/devices/wmun.js +3 -2
- package/dist/devices/wmun.js.map +1 -1
- package/dist/devices/woolley.d.ts.map +1 -1
- package/dist/devices/woolley.js +6 -9
- package/dist/devices/woolley.js.map +1 -1
- package/dist/devices/woox.js +2 -2
- package/dist/devices/woox.js.map +1 -1
- package/dist/devices/xyzroe.d.ts.map +1 -1
- package/dist/devices/xyzroe.js +16 -4
- package/dist/devices/xyzroe.js.map +1 -1
- package/dist/devices/yale.d.ts.map +1 -1
- package/dist/devices/yale.js +138 -40
- package/dist/devices/yale.js.map +1 -1
- package/dist/devices/yandex.d.ts.map +1 -1
- package/dist/devices/yandex.js +93 -11
- package/dist/devices/yandex.js.map +1 -1
- package/dist/devices/yokis.d.ts.map +1 -1
- package/dist/devices/yokis.js +122 -85
- package/dist/devices/yokis.js.map +1 -1
- package/dist/devices/zbeacon.d.ts.map +1 -1
- package/dist/devices/zbeacon.js +0 -7
- package/dist/devices/zbeacon.js.map +1 -1
- package/dist/devices/zemismart.d.ts.map +1 -1
- package/dist/devices/zemismart.js +148 -11
- package/dist/devices/zemismart.js.map +1 -1
- package/dist/devices/zigbeetlc.js +1 -1
- package/dist/devices/zigbeetlc.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +40 -35
- package/dist/index.js.map +1 -1
- package/dist/lib/bosch.d.ts.map +1 -1
- package/dist/lib/bosch.js +212 -42
- package/dist/lib/bosch.js.map +1 -1
- package/dist/lib/constants.d.ts +99 -17
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +15 -2
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/develco.d.ts +11 -0
- package/dist/lib/develco.d.ts.map +1 -1
- package/dist/lib/develco.js +78 -9
- package/dist/lib/develco.js.map +1 -1
- package/dist/lib/exposes.d.ts +11 -10
- package/dist/lib/exposes.d.ts.map +1 -1
- package/dist/lib/exposes.js +7 -48
- package/dist/lib/exposes.js.map +1 -1
- package/dist/lib/heiman.d.ts.map +1 -1
- package/dist/lib/heiman.js +34 -14
- package/dist/lib/heiman.js.map +1 -1
- package/dist/lib/ikea.d.ts +17 -0
- package/dist/lib/ikea.d.ts.map +1 -1
- package/dist/lib/ikea.js +46 -20
- package/dist/lib/ikea.js.map +1 -1
- package/dist/lib/inovelli.d.ts +86 -0
- package/dist/lib/inovelli.d.ts.map +1 -0
- package/dist/lib/inovelli.js +2580 -0
- package/dist/lib/inovelli.js.map +1 -0
- package/dist/lib/ledvance.d.ts +4 -4
- package/dist/lib/ledvance.d.ts.map +1 -1
- package/dist/lib/ledvance.js +23 -7
- package/dist/lib/ledvance.js.map +1 -1
- package/dist/lib/legacy.d.ts +21 -2
- package/dist/lib/legacy.d.ts.map +1 -1
- package/dist/lib/legacy.js +29 -2
- package/dist/lib/legacy.js.map +1 -1
- package/dist/lib/legrand.d.ts +65 -6
- package/dist/lib/legrand.d.ts.map +1 -1
- package/dist/lib/legrand.js +188 -9
- package/dist/lib/legrand.js.map +1 -1
- package/dist/lib/light.d.ts +1 -1
- package/dist/lib/light.d.ts.map +1 -1
- package/dist/lib/light.js +2 -2
- package/dist/lib/light.js.map +1 -1
- package/dist/lib/lumi.d.ts +88 -44
- package/dist/lib/lumi.d.ts.map +1 -1
- package/dist/lib/lumi.js +1813 -59
- package/dist/lib/lumi.js.map +1 -1
- package/dist/lib/modernExtend.d.ts +19 -14
- package/dist/lib/modernExtend.d.ts.map +1 -1
- package/dist/lib/modernExtend.js +37 -35
- package/dist/lib/modernExtend.js.map +1 -1
- package/dist/lib/namron.d.ts +131 -28
- package/dist/lib/namron.d.ts.map +1 -1
- package/dist/lib/namron.js +723 -42
- package/dist/lib/namron.js.map +1 -1
- package/dist/lib/nodon.d.ts.map +1 -1
- package/dist/lib/nodon.js +3 -1
- package/dist/lib/nodon.js.map +1 -1
- package/dist/lib/philips.d.ts +106 -2
- package/dist/lib/philips.d.ts.map +1 -1
- package/dist/lib/philips.js +945 -44
- package/dist/lib/philips.js.map +1 -1
- package/dist/lib/sonoff.d.ts +77 -10
- package/dist/lib/sonoff.d.ts.map +1 -1
- package/dist/lib/sonoff.js +165 -34
- package/dist/lib/sonoff.js.map +1 -1
- package/dist/lib/sunricher.d.ts +1 -1
- package/dist/lib/sunricher.d.ts.map +1 -1
- package/dist/lib/sunricher.js +6 -8
- package/dist/lib/sunricher.js.map +1 -1
- package/dist/lib/tuya.d.ts +558 -13
- package/dist/lib/tuya.d.ts.map +1 -1
- package/dist/lib/tuya.js +1518 -10
- package/dist/lib/tuya.js.map +1 -1
- package/dist/lib/types.d.ts +9 -6
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/ubisys.d.ts +1 -1
- package/dist/lib/ubisys.d.ts.map +1 -1
- package/dist/lib/ubisys.js +60 -5
- package/dist/lib/ubisys.js.map +1 -1
- package/dist/lib/utils.d.ts +5 -8
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +30 -17
- package/dist/lib/utils.js.map +1 -1
- package/dist/lib/zosung.d.ts +69 -6
- package/dist/lib/zosung.d.ts.map +1 -1
- package/dist/lib/zosung.js +113 -1
- package/dist/lib/zosung.js.map +1 -1
- package/dist/models-index.json +1 -1
- package/package.json +2 -2
- package/dist/devices/aubess.d.ts.map +0 -1
- package/dist/devices/aubess.js.map +0 -1
package/dist/devices/shelly.js
CHANGED
|
@@ -265,9 +265,10 @@ const shellyModernExtend = {
|
|
|
265
265
|
// Shelly Gen4 devices report haElectricalMeasurement.powerFactor (0x0510) as INT16 (0x29)
|
|
266
266
|
// while zigbee-herdsman defines it as INT8 (0x28). This breaks configureReporting (INVALID_DATA_TYPE).
|
|
267
267
|
return m.deviceAddCustomCluster("haElectricalMeasurement", {
|
|
268
|
+
name: "haElectricalMeasurement",
|
|
268
269
|
ID: HA_ELECTRICAL_MEASUREMENT_CLUSTER_ID,
|
|
269
270
|
attributes: {
|
|
270
|
-
powerFactor: { ID: HA_ELECTRICAL_MEASUREMENT_POWER_FACTOR_ATTR_ID, type: zigbee_herdsman_1.Zcl.DataType.INT16 },
|
|
271
|
+
powerFactor: { name: "powerFactor", ID: HA_ELECTRICAL_MEASUREMENT_POWER_FACTOR_ATTR_ID, type: zigbee_herdsman_1.Zcl.DataType.INT16 },
|
|
271
272
|
},
|
|
272
273
|
commands: {},
|
|
273
274
|
commandsResponse: {},
|
|
@@ -276,31 +277,33 @@ const shellyModernExtend = {
|
|
|
276
277
|
shellyCustomClusters() {
|
|
277
278
|
return [
|
|
278
279
|
m.deviceAddCustomCluster("shellyRPCCluster", {
|
|
280
|
+
name: "shellyRPCCluster",
|
|
279
281
|
ID: 0xfc01,
|
|
280
282
|
manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.SHELLY,
|
|
281
283
|
attributes: {
|
|
282
|
-
data: { ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
|
|
283
|
-
txCtl: { ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT32, write: true, max: 0xffffffff },
|
|
284
|
-
rxCtl: { ID: 0x0002, type: zigbee_herdsman_1.Zcl.DataType.UINT32, write: true, max: 0xffffffff },
|
|
284
|
+
data: { name: "data", ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
|
|
285
|
+
txCtl: { name: "txCtl", ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT32, write: true, max: 0xffffffff },
|
|
286
|
+
rxCtl: { name: "rxCtl", ID: 0x0002, type: zigbee_herdsman_1.Zcl.DataType.UINT32, write: true, max: 0xffffffff },
|
|
285
287
|
},
|
|
286
288
|
commands: {},
|
|
287
289
|
commandsResponse: {},
|
|
288
290
|
}),
|
|
289
291
|
m.deviceAddCustomCluster("shellyWiFiSetupCluster", {
|
|
292
|
+
name: "shellyWiFiSetupCluster",
|
|
290
293
|
ID: 0xfc02,
|
|
291
294
|
manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.SHELLY,
|
|
292
295
|
attributes: {
|
|
293
|
-
status: { ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
|
|
294
|
-
ip: { ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
|
|
295
|
-
actionCode: { ID: 0x0002, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, max: 0xff },
|
|
296
|
-
dhcp: { ID: 0x0003, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN, write: true },
|
|
297
|
-
enabled: { ID: 0x0004, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN, write: true },
|
|
298
|
-
ssid: { ID: 0x0005, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
|
|
299
|
-
password: { ID: 0x0006, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
|
|
300
|
-
staticIp: { ID: 0x0007, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
|
|
301
|
-
netMask: { ID: 0x0008, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
|
|
302
|
-
gateway: { ID: 0x0009, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
|
|
303
|
-
nameServer: { ID: 0x000a, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
|
|
296
|
+
status: { name: "status", ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
|
|
297
|
+
ip: { name: "ip", ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
|
|
298
|
+
actionCode: { name: "actionCode", ID: 0x0002, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, max: 0xff },
|
|
299
|
+
dhcp: { name: "dhcp", ID: 0x0003, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN, write: true },
|
|
300
|
+
enabled: { name: "enabled", ID: 0x0004, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN, write: true },
|
|
301
|
+
ssid: { name: "ssid", ID: 0x0005, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
|
|
302
|
+
password: { name: "password", ID: 0x0006, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
|
|
303
|
+
staticIp: { name: "staticIp", ID: 0x0007, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
|
|
304
|
+
netMask: { name: "netMask", ID: 0x0008, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
|
|
305
|
+
gateway: { name: "gateway", ID: 0x0009, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
|
|
306
|
+
nameServer: { name: "nameServer", ID: 0x000a, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR, write: true },
|
|
304
307
|
},
|
|
305
308
|
commands: {},
|
|
306
309
|
commandsResponse: {},
|
|
@@ -312,6 +315,9 @@ const shellyModernExtend = {
|
|
|
312
315
|
const shellyRPCBugFixed = false; // For firmware 20250819-150402/ga0def2d
|
|
313
316
|
const featureDev = features.includes("Dev");
|
|
314
317
|
const featurePowerstripUI = features.includes("PowerstripUI");
|
|
318
|
+
const featurePowerstripPowerOnBehavior = features.includes("PowerstripPowerOnBehavior");
|
|
319
|
+
const featureTwoPMInputMode = features.includes("2PMInputMode");
|
|
320
|
+
const featureOnePMInputMode = features.includes("1PMInputMode");
|
|
315
321
|
// Generic helper functions
|
|
316
322
|
const validateTime = (value) => {
|
|
317
323
|
const hhmmRegex = /^([01][0-9]|2[0-3]):[0-5][0-9]$/;
|
|
@@ -433,13 +439,27 @@ const shellyModernExtend = {
|
|
|
433
439
|
state.rpc_rxctl = msg.data.rxCtl;
|
|
434
440
|
state.rpc_data = "";
|
|
435
441
|
}
|
|
436
|
-
if (msg.data.data !== undefined)
|
|
437
|
-
|
|
442
|
+
if (msg.data.data !== undefined) {
|
|
443
|
+
const accumulated = (meta.state.rpc_data ?? "") + msg.data.data;
|
|
444
|
+
state.rpc_data = accumulated;
|
|
445
|
+
const expectedLen = meta.state.rpc_rxctl;
|
|
446
|
+
if (expectedLen > 0 && accumulated.length >= expectedLen) {
|
|
447
|
+
try {
|
|
448
|
+
const response = JSON.parse(accumulated);
|
|
449
|
+
if (response.result?.in_mode !== undefined) {
|
|
450
|
+
const epName = response.result.id === 0 ? "sw1" : "sw2";
|
|
451
|
+
state[`switch_mode_${epName}`] = response.result.in_mode;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
catch { }
|
|
455
|
+
}
|
|
456
|
+
}
|
|
438
457
|
return state;
|
|
439
458
|
},
|
|
440
459
|
},
|
|
441
460
|
];
|
|
442
461
|
const toZigbee = [];
|
|
462
|
+
const configure = [];
|
|
443
463
|
const toZigbeeDev = [
|
|
444
464
|
{
|
|
445
465
|
key: ["rpc_rxctl", "rpc_data"],
|
|
@@ -574,7 +594,108 @@ const shellyModernExtend = {
|
|
|
574
594
|
exposes.push(...exposesPowerstripUI);
|
|
575
595
|
toZigbee.push(...toZigbeePowerstripUI);
|
|
576
596
|
}
|
|
577
|
-
|
|
597
|
+
if (featurePowerstripPowerOnBehavior) {
|
|
598
|
+
const powerOnBehaviorValues = ["off", "on", "previous", "match_input"];
|
|
599
|
+
for (const channel of [1, 2, 3, 4]) {
|
|
600
|
+
exposes.push(e
|
|
601
|
+
.enum("power_on_behavior", ea.STATE_SET, powerOnBehaviorValues)
|
|
602
|
+
.withDescription("Behavior of the socket after a power outage. 'previous' restores the last known state.")
|
|
603
|
+
.withCategory("config")
|
|
604
|
+
.withEndpoint(String(channel)));
|
|
605
|
+
}
|
|
606
|
+
toZigbee.push({
|
|
607
|
+
key: ["power_on_behavior"],
|
|
608
|
+
convertSet: async (entity, key, value, meta) => {
|
|
609
|
+
utils.assertString(value, key);
|
|
610
|
+
utils.assertString(meta.endpoint_name, "endpoint_name");
|
|
611
|
+
utils.assertEndpoint(entity);
|
|
612
|
+
const switchId = Number(meta.endpoint_name) - 1;
|
|
613
|
+
// shellyRPCCluster lives on a dedicated endpoint (239), but this expose is per-channel.
|
|
614
|
+
// determineEndpoint() would return the per-channel endpoint when endpoint_name is set,
|
|
615
|
+
// so we explicitly resolve the RPC endpoint via the device.
|
|
616
|
+
const ep = entity.getDevice().getEndpoint(SHELLY_ENDPOINT_ID);
|
|
617
|
+
if (!ep)
|
|
618
|
+
throw new Error(`Shelly RPC endpoint ${SHELLY_ENDPOINT_ID} not found`);
|
|
619
|
+
const shellyValue = value === "previous" ? "restore_last" : value;
|
|
620
|
+
await rpcSend(ep, "Switch.SetConfig", { id: switchId, config: { initial_state: shellyValue } });
|
|
621
|
+
return { state: { power_on_behavior: value } };
|
|
622
|
+
},
|
|
623
|
+
});
|
|
624
|
+
}
|
|
625
|
+
if (featureTwoPMInputMode) {
|
|
626
|
+
const inModeValues = ["follow", "flip", "detached", "cycle", "activation"];
|
|
627
|
+
exposes.push((device, _options) => {
|
|
628
|
+
if (utils.isDummyDevice(device) || !device.getEndpoint(SHELLY_ENDPOINT_ID))
|
|
629
|
+
return [];
|
|
630
|
+
return [
|
|
631
|
+
e.enum("switch_mode", ea.ALL, inModeValues).withDescription("Switch input mode").withCategory("config").withEndpoint("sw1"),
|
|
632
|
+
e.enum("switch_mode", ea.ALL, inModeValues).withDescription("Switch input mode").withCategory("config").withEndpoint("sw2"),
|
|
633
|
+
];
|
|
634
|
+
});
|
|
635
|
+
toZigbee.push({
|
|
636
|
+
key: ["switch_mode"],
|
|
637
|
+
convertSet: async (entity, key, value, meta) => {
|
|
638
|
+
const switchId = meta.endpoint_name === "sw1" ? 0 : 1;
|
|
639
|
+
const ep = (0, utils_1.determineEndpoint)(entity, meta, "shellyRPCCluster");
|
|
640
|
+
await rpcSend(ep, "Switch.SetConfig", { id: switchId, config: { in_mode: value } });
|
|
641
|
+
return { state: { switch_mode: value } };
|
|
642
|
+
},
|
|
643
|
+
convertGet: async (entity, key, meta) => {
|
|
644
|
+
const switchId = meta.endpoint_name === "sw1" ? 0 : 1;
|
|
645
|
+
const ep = (0, utils_1.determineEndpoint)(entity, meta, "shellyRPCCluster");
|
|
646
|
+
await rpcSend(ep, "Switch.GetConfig", { id: switchId });
|
|
647
|
+
await rpcReceive(ep, "rpc_rxctl");
|
|
648
|
+
},
|
|
649
|
+
});
|
|
650
|
+
configure.push(async (device) => {
|
|
651
|
+
const ep = device.getEndpoint(SHELLY_ENDPOINT_ID);
|
|
652
|
+
if (!ep)
|
|
653
|
+
return;
|
|
654
|
+
try {
|
|
655
|
+
for (const id of [0, 1]) {
|
|
656
|
+
await rpcSend(ep, "Switch.GetConfig", { id });
|
|
657
|
+
await rpcReceive(ep, "rpc_rxctl");
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
catch (e) {
|
|
661
|
+
logger_1.logger.warning(`Failed to read switch_mode during configure, use get to retry: ${e}`, NS);
|
|
662
|
+
}
|
|
663
|
+
});
|
|
664
|
+
}
|
|
665
|
+
if (featureOnePMInputMode) {
|
|
666
|
+
const inModeValues = ["follow", "flip", "detached", "cycle", "activation"];
|
|
667
|
+
exposes.push((device, _options) => {
|
|
668
|
+
if (utils.isDummyDevice(device) || !device.getEndpoint(SHELLY_ENDPOINT_ID))
|
|
669
|
+
return [];
|
|
670
|
+
return [e.enum("switch_mode", ea.ALL, inModeValues).withDescription("Switch input mode").withCategory("config").withEndpoint("sw1")];
|
|
671
|
+
});
|
|
672
|
+
toZigbee.push({
|
|
673
|
+
key: ["switch_mode"],
|
|
674
|
+
convertSet: async (entity, key, value, meta) => {
|
|
675
|
+
const ep = (0, utils_1.determineEndpoint)(entity, meta, "shellyRPCCluster");
|
|
676
|
+
await rpcSend(ep, "Switch.SetConfig", { id: 0, config: { in_mode: value } });
|
|
677
|
+
return { state: { switch_mode: value } };
|
|
678
|
+
},
|
|
679
|
+
convertGet: async (entity, key, meta) => {
|
|
680
|
+
const ep = (0, utils_1.determineEndpoint)(entity, meta, "shellyRPCCluster");
|
|
681
|
+
await rpcSend(ep, "Switch.GetConfig", { id: 0 });
|
|
682
|
+
await rpcReceive(ep, "rpc_rxctl");
|
|
683
|
+
},
|
|
684
|
+
});
|
|
685
|
+
configure.push(async (device) => {
|
|
686
|
+
const ep = device.getEndpoint(SHELLY_ENDPOINT_ID);
|
|
687
|
+
if (!ep)
|
|
688
|
+
return;
|
|
689
|
+
try {
|
|
690
|
+
await rpcSend(ep, "Switch.GetConfig", { id: 0 });
|
|
691
|
+
await rpcReceive(ep, "rpc_rxctl");
|
|
692
|
+
}
|
|
693
|
+
catch (e) {
|
|
694
|
+
logger_1.logger.warning(`Failed to read switch_mode during configure, use get to retry: ${e}`, NS);
|
|
695
|
+
}
|
|
696
|
+
});
|
|
697
|
+
}
|
|
698
|
+
return { exposes, fromZigbee, toZigbee, configure, isModernExtend: true };
|
|
578
699
|
},
|
|
579
700
|
shellyWiFiSetup() {
|
|
580
701
|
// biome-ignore lint/suspicious/noExplicitAny: generic
|
|
@@ -826,10 +947,61 @@ const shellyModernExtend = {
|
|
|
826
947
|
];
|
|
827
948
|
return { exposes, fromZigbee, isModernExtend: true };
|
|
828
949
|
},
|
|
950
|
+
shellyLightLevel(args) {
|
|
951
|
+
const reporting = args?.reporting ?? { min: "1_MINUTE", max: 900, change: 0 };
|
|
952
|
+
return [
|
|
953
|
+
m.deviceAddCustomCluster("shellyLightLevel", {
|
|
954
|
+
name: "shellyLightLevel",
|
|
955
|
+
ID: 0xfc21,
|
|
956
|
+
manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.SHELLY,
|
|
957
|
+
attributes: {
|
|
958
|
+
lightLevel: { name: "lightLevel", ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
|
|
959
|
+
darkThreshold: { name: "darkThreshold", ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT24, write: true },
|
|
960
|
+
brightThreshold: { name: "brightThreshold", ID: 0x0002, type: zigbee_herdsman_1.Zcl.DataType.UINT24, write: true },
|
|
961
|
+
},
|
|
962
|
+
commands: {},
|
|
963
|
+
commandsResponse: {},
|
|
964
|
+
}),
|
|
965
|
+
m.enumLookup({
|
|
966
|
+
name: "light_level",
|
|
967
|
+
cluster: "shellyLightLevel",
|
|
968
|
+
attribute: "lightLevel",
|
|
969
|
+
lookup: { dark: 0, twilight: 1, bright: 2 },
|
|
970
|
+
description: "Coarse light level",
|
|
971
|
+
reporting,
|
|
972
|
+
access: "STATE_GET",
|
|
973
|
+
}),
|
|
974
|
+
m.numeric({
|
|
975
|
+
name: "dark_threshold",
|
|
976
|
+
cluster: "shellyLightLevel",
|
|
977
|
+
attribute: "darkThreshold",
|
|
978
|
+
valueMin: 0,
|
|
979
|
+
valueMax: 65535,
|
|
980
|
+
reporting: false,
|
|
981
|
+
description: "Lux threshold below which light level is dark",
|
|
982
|
+
unit: "lx",
|
|
983
|
+
access: "ALL",
|
|
984
|
+
}),
|
|
985
|
+
m.numeric({
|
|
986
|
+
name: "bright_threshold",
|
|
987
|
+
cluster: "shellyLightLevel",
|
|
988
|
+
attribute: "brightThreshold",
|
|
989
|
+
valueMin: 0,
|
|
990
|
+
valueMax: 65535,
|
|
991
|
+
reporting: false,
|
|
992
|
+
description: "Lux threshold above which light level is bright",
|
|
993
|
+
unit: "lx",
|
|
994
|
+
access: "ALL",
|
|
995
|
+
}),
|
|
996
|
+
];
|
|
997
|
+
},
|
|
829
998
|
};
|
|
830
999
|
// =============================================================================
|
|
831
1000
|
// Local From Zigbee Converters
|
|
832
1001
|
// =============================================================================
|
|
1002
|
+
const handlePosition = e
|
|
1003
|
+
.enum("handle_position", ea.STATE, ["closed", "tilted", "open"])
|
|
1004
|
+
.withDescription("Handle position: closed, tilted (partly open), or open");
|
|
833
1005
|
const fzLocal = {
|
|
834
1006
|
one_button_events: {
|
|
835
1007
|
cluster: "genOnOff",
|
|
@@ -839,15 +1011,27 @@ const fzLocal = {
|
|
|
839
1011
|
return { action: event };
|
|
840
1012
|
},
|
|
841
1013
|
},
|
|
1014
|
+
one_button_scene_events: {
|
|
1015
|
+
cluster: "genScenes",
|
|
1016
|
+
type: ["commandRecall"],
|
|
1017
|
+
convert: (model, msg, publish, options, meta) => {
|
|
1018
|
+
const event = utils.getFromLookup(`${msg.endpoint.ID}`, { "1": "single_long", "2": "double_long", "3": "triple_long" });
|
|
1019
|
+
return { action: event };
|
|
1020
|
+
},
|
|
1021
|
+
},
|
|
842
1022
|
four_buttons_single_events: {
|
|
843
1023
|
cluster: "genOnOff",
|
|
844
|
-
type: ["commandOn", "commandOff"],
|
|
1024
|
+
type: ["commandOn", "commandOff", "commandToggle"],
|
|
845
1025
|
convert: (model, msg, publish, options, meta) => {
|
|
846
1026
|
const event = utils.getFromLookup(`${msg.endpoint.ID}_${msg.type}`, {
|
|
847
1027
|
"1_commandOn": "1_single",
|
|
848
1028
|
"1_commandOff": "2_single",
|
|
849
1029
|
"2_commandOn": "3_single",
|
|
850
1030
|
"2_commandOff": "4_single",
|
|
1031
|
+
"1_commandToggle": "1_single",
|
|
1032
|
+
"2_commandToggle": "2_single",
|
|
1033
|
+
"3_commandToggle": "3_single",
|
|
1034
|
+
"4_commandToggle": "4_single",
|
|
851
1035
|
});
|
|
852
1036
|
return { action: event };
|
|
853
1037
|
},
|
|
@@ -865,6 +1049,141 @@ const fzLocal = {
|
|
|
865
1049
|
return { action: event };
|
|
866
1050
|
},
|
|
867
1051
|
},
|
|
1052
|
+
four_buttons_scene_events: {
|
|
1053
|
+
cluster: "genScenes",
|
|
1054
|
+
type: ["commandRecall"],
|
|
1055
|
+
convert: (model, msg, publish, options, meta) => {
|
|
1056
|
+
const event = utils.getFromLookup(`${msg.endpoint.ID}_${msg.data.sceneid}`, {
|
|
1057
|
+
"1_1": "1_double",
|
|
1058
|
+
"2_1": "2_double",
|
|
1059
|
+
"3_1": "3_double",
|
|
1060
|
+
"4_1": "4_double",
|
|
1061
|
+
"1_2": "1_triple",
|
|
1062
|
+
"2_2": "2_triple",
|
|
1063
|
+
"3_2": "3_triple",
|
|
1064
|
+
"4_2": "4_triple",
|
|
1065
|
+
"1_11": "1_single_long",
|
|
1066
|
+
"2_11": "2_single_long",
|
|
1067
|
+
"3_11": "3_single_long",
|
|
1068
|
+
"4_11": "4_single_long",
|
|
1069
|
+
"1_12": "1_double_long",
|
|
1070
|
+
"2_12": "2_double_long",
|
|
1071
|
+
"3_12": "3_double_long",
|
|
1072
|
+
"4_12": "4_double_long",
|
|
1073
|
+
"1_13": "1_triple_long",
|
|
1074
|
+
"2_13": "2_triple_long",
|
|
1075
|
+
"3_13": "3_triple_long",
|
|
1076
|
+
"4_13": "4_triple_long",
|
|
1077
|
+
});
|
|
1078
|
+
return { action: event };
|
|
1079
|
+
},
|
|
1080
|
+
},
|
|
1081
|
+
two_switch_inputs_events: {
|
|
1082
|
+
cluster: "genOnOff",
|
|
1083
|
+
type: ["commandOn", "commandOff", "commandToggle"],
|
|
1084
|
+
convert: (model, msg, publish, options, meta) => {
|
|
1085
|
+
const event = utils.getFromLookup(`${msg.endpoint.ID}_${msg.type}`, {
|
|
1086
|
+
"3_commandOn": "input_1_on",
|
|
1087
|
+
"3_commandOff": "input_1_off",
|
|
1088
|
+
"3_commandToggle": "input_1_toggle",
|
|
1089
|
+
"4_commandOn": "input_2_on",
|
|
1090
|
+
"4_commandOff": "input_2_off",
|
|
1091
|
+
"4_commandToggle": "input_2_toggle",
|
|
1092
|
+
});
|
|
1093
|
+
return { action: event };
|
|
1094
|
+
},
|
|
1095
|
+
},
|
|
1096
|
+
two_switch_inputs_scene_events: {
|
|
1097
|
+
cluster: "genScenes",
|
|
1098
|
+
type: ["commandRecall"],
|
|
1099
|
+
convert: (model, msg, publish, options, meta) => {
|
|
1100
|
+
const event = utils.getFromLookup(`${msg.endpoint.ID}_${msg.data.sceneid}`, {
|
|
1101
|
+
"3_5": "input_1_toggle",
|
|
1102
|
+
"4_5": "input_2_toggle",
|
|
1103
|
+
"3_11": "input_1_hold",
|
|
1104
|
+
"4_11": "input_2_hold",
|
|
1105
|
+
});
|
|
1106
|
+
return { action: event };
|
|
1107
|
+
},
|
|
1108
|
+
},
|
|
1109
|
+
one_switch_input_events: {
|
|
1110
|
+
cluster: "genOnOff",
|
|
1111
|
+
type: ["commandOn", "commandOff", "commandToggle"],
|
|
1112
|
+
convert: (model, msg, publish, options, meta) => {
|
|
1113
|
+
if (msg.endpoint.ID !== 2)
|
|
1114
|
+
return {};
|
|
1115
|
+
const event = utils.getFromLookup(msg.type, {
|
|
1116
|
+
commandOn: "input_1_on",
|
|
1117
|
+
commandOff: "input_1_off",
|
|
1118
|
+
commandToggle: "input_1_toggle",
|
|
1119
|
+
});
|
|
1120
|
+
return { action: event };
|
|
1121
|
+
},
|
|
1122
|
+
},
|
|
1123
|
+
one_switch_input_scene_events: {
|
|
1124
|
+
cluster: "genScenes",
|
|
1125
|
+
type: ["commandRecall"],
|
|
1126
|
+
convert: (model, msg, publish, options, meta) => {
|
|
1127
|
+
if (msg.endpoint.ID !== 2)
|
|
1128
|
+
return {};
|
|
1129
|
+
const event = utils.getFromLookup(`${msg.data.sceneid}`, { "5": "input_1_toggle", "11": "input_1_hold" });
|
|
1130
|
+
return { action: event };
|
|
1131
|
+
},
|
|
1132
|
+
},
|
|
1133
|
+
switch_input_type: {
|
|
1134
|
+
cluster: "genOnOffSwitchCfg",
|
|
1135
|
+
type: ["attributeReport", "readResponse"],
|
|
1136
|
+
convert: (model, msg, publish, options, meta) => {
|
|
1137
|
+
if (!Object.hasOwn(msg.data, "switchType"))
|
|
1138
|
+
return {};
|
|
1139
|
+
const epName = utils.getFromLookup(msg.endpoint.ID, { 2: "sw1", 3: "sw1", 4: "sw2" });
|
|
1140
|
+
if (!epName)
|
|
1141
|
+
return {};
|
|
1142
|
+
return { [`switch_type_${epName}`]: utils.getFromLookup(msg.data.switchType, { 0: "toggle", 1: "momentary" }) };
|
|
1143
|
+
},
|
|
1144
|
+
},
|
|
1145
|
+
blu_door_window: {
|
|
1146
|
+
cluster: "ssIasZone",
|
|
1147
|
+
type: ["commandStatusChangeNotification", "attributeReport", "readResponse"],
|
|
1148
|
+
convert: (model, msg, publish, options, meta) => {
|
|
1149
|
+
const zoneStatus = "zonestatus" in msg.data ? msg.data.zonestatus : msg.data.zoneStatus;
|
|
1150
|
+
if (zoneStatus === undefined)
|
|
1151
|
+
return;
|
|
1152
|
+
const alarm1 = (zoneStatus & 1) > 0;
|
|
1153
|
+
const alarm2 = (zoneStatus & (1 << 1)) > 0;
|
|
1154
|
+
// Zone type 0x0016 (door/window handle) per ZigBee spec Table 8-7:
|
|
1155
|
+
// alarm1=0, alarm2=0 -> closed
|
|
1156
|
+
// alarm1=1, alarm2=0 -> tilted (partly open)
|
|
1157
|
+
// alarm1=1, alarm2=1 -> open
|
|
1158
|
+
let position;
|
|
1159
|
+
if (!alarm1 && !alarm2)
|
|
1160
|
+
position = "closed";
|
|
1161
|
+
else if (alarm1 && !alarm2)
|
|
1162
|
+
position = "tilted";
|
|
1163
|
+
else
|
|
1164
|
+
position = "open";
|
|
1165
|
+
return {
|
|
1166
|
+
contact: position === "closed",
|
|
1167
|
+
handle_position: position,
|
|
1168
|
+
battery_low: (zoneStatus & (1 << 3)) > 0,
|
|
1169
|
+
};
|
|
1170
|
+
},
|
|
1171
|
+
},
|
|
1172
|
+
};
|
|
1173
|
+
const tzLocal = {
|
|
1174
|
+
switch_input_type: {
|
|
1175
|
+
key: ["switch_type"],
|
|
1176
|
+
convertSet: async (entity, key, value, meta) => {
|
|
1177
|
+
const lookup = { toggle: 0, momentary: 1 };
|
|
1178
|
+
const ep = (0, utils_1.determineEndpoint)(entity, meta, "genOnOffSwitchCfg");
|
|
1179
|
+
await ep.write("genOnOffSwitchCfg", { switchType: utils.getFromLookup(value, lookup) });
|
|
1180
|
+
return { state: { switch_type: value } };
|
|
1181
|
+
},
|
|
1182
|
+
convertGet: async (entity, key, meta) => {
|
|
1183
|
+
const ep = (0, utils_1.determineEndpoint)(entity, meta, "genOnOffSwitchCfg");
|
|
1184
|
+
await ep.read("genOnOffSwitchCfg", ["switchType"]);
|
|
1185
|
+
},
|
|
1186
|
+
},
|
|
868
1187
|
};
|
|
869
1188
|
// =============================================================================
|
|
870
1189
|
// Device Definitions
|
|
@@ -875,40 +1194,116 @@ exports.definitions = [
|
|
|
875
1194
|
model: "S4SW-001X8EU",
|
|
876
1195
|
vendor: "Shelly",
|
|
877
1196
|
description: "1 Mini Gen 4",
|
|
878
|
-
|
|
1197
|
+
ota: true,
|
|
1198
|
+
fromZigbee: [fzLocal.one_switch_input_events, fzLocal.one_switch_input_scene_events, fzLocal.switch_input_type],
|
|
1199
|
+
toZigbee: [tzLocal.switch_input_type],
|
|
1200
|
+
exposes: [
|
|
1201
|
+
e.action(["input_1_on", "input_1_off", "input_1_toggle", "input_1_hold"]),
|
|
1202
|
+
e.enum("switch_type", ea.ALL, ["toggle", "momentary"]).withDescription("Switch input type").withCategory("config").withEndpoint("sw1"),
|
|
1203
|
+
],
|
|
1204
|
+
extend: [
|
|
1205
|
+
m.deviceEndpoints({ endpoints: { sw1: 2 } }),
|
|
1206
|
+
m.onOff({ powerOnBehavior: false }),
|
|
1207
|
+
...shellyModernExtend.shellyCustomClusters(),
|
|
1208
|
+
shellyModernExtend.shellyRPCSetup(["1PMInputMode"]),
|
|
1209
|
+
shellyModernExtend.shellyWiFiSetup(),
|
|
1210
|
+
],
|
|
1211
|
+
configure: async (device, coordinatorEndpoint) => {
|
|
1212
|
+
const ep = device.getEndpoint(2);
|
|
1213
|
+
if (ep) {
|
|
1214
|
+
await ep.bind("genOnOff", coordinatorEndpoint);
|
|
1215
|
+
await ep.bind("genScenes", coordinatorEndpoint);
|
|
1216
|
+
await ep.read("genOnOffSwitchCfg", ["switchType"]);
|
|
1217
|
+
}
|
|
1218
|
+
},
|
|
879
1219
|
},
|
|
880
1220
|
{
|
|
881
1221
|
fingerprint: [{ modelID: "1", manufacturerName: "Shelly" }],
|
|
882
1222
|
model: "S4SW-001X16EU",
|
|
883
1223
|
vendor: "Shelly",
|
|
884
1224
|
description: "1 Gen 4",
|
|
885
|
-
|
|
1225
|
+
ota: true,
|
|
1226
|
+
fromZigbee: [fzLocal.one_switch_input_events, fzLocal.one_switch_input_scene_events, fzLocal.switch_input_type],
|
|
1227
|
+
toZigbee: [tzLocal.switch_input_type],
|
|
1228
|
+
exposes: [
|
|
1229
|
+
e.action(["input_1_on", "input_1_off", "input_1_toggle", "input_1_hold"]),
|
|
1230
|
+
e.enum("switch_type", ea.ALL, ["toggle", "momentary"]).withDescription("Switch input type").withCategory("config").withEndpoint("sw1"),
|
|
1231
|
+
],
|
|
1232
|
+
extend: [
|
|
1233
|
+
m.deviceEndpoints({ endpoints: { sw1: 2 } }),
|
|
1234
|
+
m.onOff({ powerOnBehavior: false }),
|
|
1235
|
+
...shellyModernExtend.shellyCustomClusters(),
|
|
1236
|
+
shellyModernExtend.shellyRPCSetup(["1PMInputMode"]),
|
|
1237
|
+
shellyModernExtend.shellyWiFiSetup(),
|
|
1238
|
+
],
|
|
1239
|
+
configure: async (device, coordinatorEndpoint) => {
|
|
1240
|
+
const ep = device.getEndpoint(2);
|
|
1241
|
+
if (ep) {
|
|
1242
|
+
await ep.bind("genOnOff", coordinatorEndpoint);
|
|
1243
|
+
await ep.bind("genScenes", coordinatorEndpoint);
|
|
1244
|
+
await ep.read("genOnOffSwitchCfg", ["switchType"]);
|
|
1245
|
+
}
|
|
1246
|
+
},
|
|
886
1247
|
},
|
|
887
1248
|
{
|
|
888
1249
|
zigbeeModel: ["Mini1PM", "1PM Mini"],
|
|
889
1250
|
model: "S4SW-001P8EU",
|
|
890
1251
|
vendor: "Shelly",
|
|
891
1252
|
description: "1PM Mini Gen 4",
|
|
1253
|
+
ota: true,
|
|
1254
|
+
fromZigbee: [fzLocal.one_switch_input_events, fzLocal.one_switch_input_scene_events, fzLocal.switch_input_type],
|
|
1255
|
+
toZigbee: [tzLocal.switch_input_type],
|
|
1256
|
+
exposes: [
|
|
1257
|
+
e.action(["input_1_on", "input_1_off", "input_1_toggle", "input_1_hold"]),
|
|
1258
|
+
e.enum("switch_type", ea.ALL, ["toggle", "momentary"]).withDescription("Switch input type").withCategory("config").withEndpoint("sw1"),
|
|
1259
|
+
],
|
|
892
1260
|
extend: [
|
|
1261
|
+
m.deviceEndpoints({ endpoints: { sw1: 2 } }),
|
|
893
1262
|
m.onOff({ powerOnBehavior: false }),
|
|
894
1263
|
m.electricityMeter({ producedEnergy: true, acFrequency: true }),
|
|
895
1264
|
shellyModernExtend.shellyPowerFactorInt16Fix(),
|
|
896
1265
|
...shellyModernExtend.shellyCustomClusters(),
|
|
1266
|
+
shellyModernExtend.shellyRPCSetup(["1PMInputMode"]),
|
|
897
1267
|
shellyModernExtend.shellyWiFiSetup(),
|
|
898
1268
|
],
|
|
1269
|
+
configure: async (device, coordinatorEndpoint) => {
|
|
1270
|
+
const ep = device.getEndpoint(2);
|
|
1271
|
+
if (ep) {
|
|
1272
|
+
await ep.bind("genOnOff", coordinatorEndpoint);
|
|
1273
|
+
await ep.bind("genScenes", coordinatorEndpoint);
|
|
1274
|
+
await ep.read("genOnOffSwitchCfg", ["switchType"]);
|
|
1275
|
+
}
|
|
1276
|
+
},
|
|
899
1277
|
},
|
|
900
1278
|
{
|
|
901
1279
|
zigbeeModel: ["1PM"],
|
|
902
1280
|
model: "S4SW-001P16EU",
|
|
903
1281
|
vendor: "Shelly",
|
|
904
1282
|
description: "1PM Gen 4",
|
|
1283
|
+
ota: true,
|
|
1284
|
+
fromZigbee: [fzLocal.one_switch_input_events, fzLocal.one_switch_input_scene_events, fzLocal.switch_input_type],
|
|
1285
|
+
toZigbee: [tzLocal.switch_input_type],
|
|
1286
|
+
exposes: [
|
|
1287
|
+
e.action(["input_1_on", "input_1_off", "input_1_toggle", "input_1_hold"]),
|
|
1288
|
+
e.enum("switch_type", ea.ALL, ["toggle", "momentary"]).withDescription("Switch input type").withCategory("config").withEndpoint("sw1"),
|
|
1289
|
+
],
|
|
905
1290
|
extend: [
|
|
1291
|
+
m.deviceEndpoints({ endpoints: { sw1: 2 } }),
|
|
906
1292
|
m.onOff({ powerOnBehavior: false }),
|
|
907
1293
|
m.electricityMeter({ producedEnergy: true, acFrequency: true }),
|
|
908
1294
|
shellyModernExtend.shellyPowerFactorInt16Fix(),
|
|
909
1295
|
...shellyModernExtend.shellyCustomClusters(),
|
|
1296
|
+
shellyModernExtend.shellyRPCSetup(["1PMInputMode"]),
|
|
910
1297
|
shellyModernExtend.shellyWiFiSetup(),
|
|
911
1298
|
],
|
|
1299
|
+
configure: async (device, coordinatorEndpoint) => {
|
|
1300
|
+
const ep = device.getEndpoint(2);
|
|
1301
|
+
if (ep) {
|
|
1302
|
+
await ep.bind("genOnOff", coordinatorEndpoint);
|
|
1303
|
+
await ep.bind("genScenes", coordinatorEndpoint);
|
|
1304
|
+
await ep.read("genOnOffSwitchCfg", ["switchType"]);
|
|
1305
|
+
}
|
|
1306
|
+
},
|
|
912
1307
|
},
|
|
913
1308
|
{
|
|
914
1309
|
zigbeeModel: ["EM Mini"],
|
|
@@ -922,6 +1317,25 @@ exports.definitions = [
|
|
|
922
1317
|
shellyModernExtend.shellyWiFiSetup(),
|
|
923
1318
|
],
|
|
924
1319
|
},
|
|
1320
|
+
{
|
|
1321
|
+
fingerprint: [{ modelID: "EM", manufacturerName: "Shelly" }],
|
|
1322
|
+
model: "S4EM-002CXCEU",
|
|
1323
|
+
vendor: "Shelly",
|
|
1324
|
+
description: "EM Gen4",
|
|
1325
|
+
extend: [
|
|
1326
|
+
m.deviceEndpoints({ endpoints: { "1": 1, "2": 2, "3": 3 } }),
|
|
1327
|
+
m.onOff({ powerOnBehavior: false, endpointNames: ["1"] }),
|
|
1328
|
+
m.electricityMeter({
|
|
1329
|
+
endpointNames: ["2", "3"],
|
|
1330
|
+
producedEnergy: true,
|
|
1331
|
+
acFrequency: true,
|
|
1332
|
+
}),
|
|
1333
|
+
m.forcePowerSource({ powerSource: "Mains (single phase)" }),
|
|
1334
|
+
shellyModernExtend.shellyPowerFactorInt16Fix(),
|
|
1335
|
+
...shellyModernExtend.shellyCustomClusters(),
|
|
1336
|
+
shellyModernExtend.shellyWiFiSetup(),
|
|
1337
|
+
],
|
|
1338
|
+
},
|
|
925
1339
|
{
|
|
926
1340
|
fingerprint: [
|
|
927
1341
|
{
|
|
@@ -934,11 +1348,48 @@ exports.definitions = [
|
|
|
934
1348
|
{ ID: 242, profileID: 41440, deviceID: 97, inputClusters: [], outputClusters: [33] },
|
|
935
1349
|
],
|
|
936
1350
|
},
|
|
1351
|
+
{
|
|
1352
|
+
type: "Router",
|
|
1353
|
+
manufacturerName: "Shelly",
|
|
1354
|
+
modelID: "2PM",
|
|
1355
|
+
endpoints: [
|
|
1356
|
+
{ ID: 1, profileID: 260, deviceID: 514, inputClusters: [0, 3, 4, 5, 258], outputClusters: [25] },
|
|
1357
|
+
{ ID: 2, inputClusters: [7], outputClusters: [3, 4, 5, 6] },
|
|
1358
|
+
{ ID: 3, inputClusters: [7], outputClusters: [3, 4, 5, 6] },
|
|
1359
|
+
{ ID: 4, inputClusters: [], outputClusters: [3, 4, 6, 8, 258] },
|
|
1360
|
+
{ ID: 239, profileID: 49153, deviceID: 8193, inputClusters: [64513, 64514], outputClusters: [] },
|
|
1361
|
+
{ ID: 242, profileID: 41440, deviceID: 97, inputClusters: [], outputClusters: [33] },
|
|
1362
|
+
],
|
|
1363
|
+
},
|
|
937
1364
|
],
|
|
938
1365
|
model: "S4SW-002P16EU-COVER",
|
|
939
1366
|
vendor: "Shelly",
|
|
940
1367
|
description: "2PM Gen4 (Cover mode)",
|
|
941
|
-
|
|
1368
|
+
ota: true,
|
|
1369
|
+
fromZigbee: [fzLocal.two_switch_inputs_events, fzLocal.two_switch_inputs_scene_events, fzLocal.switch_input_type],
|
|
1370
|
+
toZigbee: [tzLocal.switch_input_type],
|
|
1371
|
+
exposes: [
|
|
1372
|
+
e.action(["input_1_on", "input_1_off", "input_1_toggle", "input_1_hold", "input_2_on", "input_2_off", "input_2_toggle", "input_2_hold"]),
|
|
1373
|
+
e.enum("switch_type", ea.ALL, ["toggle", "momentary"]).withDescription("Switch input type").withCategory("config").withEndpoint("sw1"),
|
|
1374
|
+
e.enum("switch_type", ea.ALL, ["toggle", "momentary"]).withDescription("Switch input type").withCategory("config").withEndpoint("sw2"),
|
|
1375
|
+
],
|
|
1376
|
+
extend: [
|
|
1377
|
+
m.deviceEndpoints({ endpoints: { sw1: 2, sw2: 3 } }),
|
|
1378
|
+
m.windowCovering({ controls: ["lift", "tilt"] }),
|
|
1379
|
+
...shellyModernExtend.shellyCustomClusters(),
|
|
1380
|
+
shellyModernExtend.shellyRPCSetup(["2PMInputMode"]),
|
|
1381
|
+
shellyModernExtend.shellyWiFiSetup(),
|
|
1382
|
+
],
|
|
1383
|
+
configure: async (device, coordinatorEndpoint) => {
|
|
1384
|
+
for (const epID of [2, 3]) {
|
|
1385
|
+
const ep = device.getEndpoint(epID);
|
|
1386
|
+
if (ep) {
|
|
1387
|
+
await ep.bind("genOnOff", coordinatorEndpoint);
|
|
1388
|
+
await ep.bind("genScenes", coordinatorEndpoint);
|
|
1389
|
+
await ep.read("genOnOffSwitchCfg", ["switchType"]);
|
|
1390
|
+
}
|
|
1391
|
+
}
|
|
1392
|
+
},
|
|
942
1393
|
},
|
|
943
1394
|
{
|
|
944
1395
|
fingerprint: [
|
|
@@ -953,18 +1404,51 @@ exports.definitions = [
|
|
|
953
1404
|
{ ID: 242, profileID: 41440, deviceID: 97, inputClusters: [], outputClusters: [33] },
|
|
954
1405
|
],
|
|
955
1406
|
},
|
|
1407
|
+
{
|
|
1408
|
+
type: "Router",
|
|
1409
|
+
manufacturerName: "Shelly",
|
|
1410
|
+
modelID: "2PM",
|
|
1411
|
+
endpoints: [
|
|
1412
|
+
{ ID: 1, profileID: 260, deviceID: 266, inputClusters: [0, 3, 4, 5, 6, 2820, 1794], outputClusters: [25] },
|
|
1413
|
+
{ ID: 2, profileID: 260, deviceID: 266, inputClusters: [4, 5, 6, 2820, 1794], outputClusters: [] },
|
|
1414
|
+
{ ID: 3, inputClusters: [7], outputClusters: [3, 4, 5, 6] },
|
|
1415
|
+
{ ID: 4, inputClusters: [7], outputClusters: [3, 4, 5, 6] },
|
|
1416
|
+
{ ID: 5, inputClusters: [], outputClusters: [3, 4, 6, 8, 258] },
|
|
1417
|
+
{ ID: 239, profileID: 49153, deviceID: 8193, inputClusters: [64513, 64514], outputClusters: [] },
|
|
1418
|
+
{ ID: 242, profileID: 41440, deviceID: 97, inputClusters: [], outputClusters: [33] },
|
|
1419
|
+
],
|
|
1420
|
+
},
|
|
956
1421
|
],
|
|
957
1422
|
model: "S4SW-002P16EU-SWITCH",
|
|
958
1423
|
vendor: "Shelly",
|
|
959
1424
|
description: "2PM Gen4 (Switch mode)",
|
|
1425
|
+
ota: true,
|
|
1426
|
+
fromZigbee: [fzLocal.two_switch_inputs_events, fzLocal.two_switch_inputs_scene_events, fzLocal.switch_input_type],
|
|
1427
|
+
toZigbee: [tzLocal.switch_input_type],
|
|
1428
|
+
exposes: [
|
|
1429
|
+
e.action(["input_1_on", "input_1_off", "input_1_toggle", "input_1_hold", "input_2_on", "input_2_off", "input_2_toggle", "input_2_hold"]),
|
|
1430
|
+
e.enum("switch_type", ea.ALL, ["toggle", "momentary"]).withDescription("Switch input type").withCategory("config").withEndpoint("sw1"),
|
|
1431
|
+
e.enum("switch_type", ea.ALL, ["toggle", "momentary"]).withDescription("Switch input type").withCategory("config").withEndpoint("sw2"),
|
|
1432
|
+
],
|
|
960
1433
|
extend: [
|
|
961
|
-
m.deviceEndpoints({ endpoints: { l1: 1, l2: 2 } }),
|
|
1434
|
+
m.deviceEndpoints({ endpoints: { l1: 1, l2: 2, sw1: 3, sw2: 4 } }),
|
|
962
1435
|
m.onOff({ powerOnBehavior: false, endpointNames: ["l1", "l2"] }),
|
|
963
1436
|
m.electricityMeter({ producedEnergy: true, acFrequency: true, endpointNames: ["l1", "l2"] }),
|
|
964
1437
|
shellyModernExtend.shellyPowerFactorInt16Fix(),
|
|
965
1438
|
...shellyModernExtend.shellyCustomClusters(),
|
|
1439
|
+
shellyModernExtend.shellyRPCSetup(["2PMInputMode"]),
|
|
966
1440
|
shellyModernExtend.shellyWiFiSetup(),
|
|
967
1441
|
],
|
|
1442
|
+
configure: async (device, coordinatorEndpoint) => {
|
|
1443
|
+
for (const epID of [3, 4]) {
|
|
1444
|
+
const ep = device.getEndpoint(epID);
|
|
1445
|
+
if (ep) {
|
|
1446
|
+
await ep.bind("genOnOff", coordinatorEndpoint);
|
|
1447
|
+
await ep.bind("genScenes", coordinatorEndpoint);
|
|
1448
|
+
await ep.read("genOnOffSwitchCfg", ["switchType"]);
|
|
1449
|
+
}
|
|
1450
|
+
}
|
|
1451
|
+
},
|
|
968
1452
|
},
|
|
969
1453
|
{
|
|
970
1454
|
fingerprint: [{ modelID: "Plug US", manufacturerName: "Shelly" }],
|
|
@@ -984,13 +1468,23 @@ exports.definitions = [
|
|
|
984
1468
|
model: "S4PL-00416EU",
|
|
985
1469
|
vendor: "Shelly",
|
|
986
1470
|
description: "Power strip 4 Gen4",
|
|
1471
|
+
version: "0.0.1",
|
|
987
1472
|
extend: [
|
|
988
1473
|
m.deviceEndpoints({ endpoints: { "1": 1, "2": 2, "3": 3, "4": 4 } }),
|
|
989
1474
|
m.onOff({ powerOnBehavior: false, endpointNames: ["1", "2", "3", "4"] }),
|
|
990
|
-
m.electricityMeter({
|
|
1475
|
+
m.electricityMeter({
|
|
1476
|
+
endpointNames: ["1", "2", "3", "4"],
|
|
1477
|
+
// Reduce reporting to prevent crashes
|
|
1478
|
+
// https://github.com/Koenkk/zigbee2mqtt/issues/31183
|
|
1479
|
+
acFrequency: { change: 125 },
|
|
1480
|
+
current: { change: 60 },
|
|
1481
|
+
voltage: { change: 625 },
|
|
1482
|
+
power: { change: 6 },
|
|
1483
|
+
energy: { change: 125000 },
|
|
1484
|
+
}),
|
|
991
1485
|
shellyModernExtend.shellyPowerFactorInt16Fix(),
|
|
992
1486
|
...shellyModernExtend.shellyCustomClusters(),
|
|
993
|
-
shellyModernExtend.shellyRPCSetup(["PowerstripUI"]),
|
|
1487
|
+
shellyModernExtend.shellyRPCSetup(["PowerstripUI", "PowerstripPowerOnBehavior"]),
|
|
994
1488
|
shellyModernExtend.shellyWiFiSetup(),
|
|
995
1489
|
],
|
|
996
1490
|
},
|
|
@@ -1000,8 +1494,8 @@ exports.definitions = [
|
|
|
1000
1494
|
vendor: "Shelly",
|
|
1001
1495
|
description: "Flood Gen 4",
|
|
1002
1496
|
extend: [
|
|
1003
|
-
m.battery(),
|
|
1004
|
-
m.iasZoneAlarm({ zoneType: "water_leak", zoneAttributes: ["alarm_1", "tamper", "battery_low"] }),
|
|
1497
|
+
m.battery({ percentageReportingConfig: false }),
|
|
1498
|
+
m.iasZoneAlarm({ zoneType: "water_leak", zoneAttributes: ["alarm_1", "tamper", "battery_low", "trouble"] }),
|
|
1005
1499
|
...shellyModernExtend.shellyCustomClusters(),
|
|
1006
1500
|
shellyModernExtend.shellyWiFiSetup(),
|
|
1007
1501
|
],
|
|
@@ -1018,12 +1512,13 @@ exports.definitions = [
|
|
|
1018
1512
|
m.pressure(),
|
|
1019
1513
|
m.humidity(),
|
|
1020
1514
|
m.deviceAddCustomCluster("shellyWS90Wind", {
|
|
1515
|
+
name: "shellyWS90Wind",
|
|
1021
1516
|
ID: 0xfc01,
|
|
1022
1517
|
manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.SHELLY,
|
|
1023
1518
|
attributes: {
|
|
1024
|
-
windSpeed: { ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.UINT16 },
|
|
1025
|
-
windDirection: { ID: 0x0004, type: zigbee_herdsman_1.Zcl.DataType.UINT16 },
|
|
1026
|
-
gustSpeed: { ID: 0x0007, type: zigbee_herdsman_1.Zcl.DataType.UINT16 },
|
|
1519
|
+
windSpeed: { name: "windSpeed", ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.UINT16 },
|
|
1520
|
+
windDirection: { name: "windDirection", ID: 0x0004, type: zigbee_herdsman_1.Zcl.DataType.UINT16 },
|
|
1521
|
+
gustSpeed: { name: "gustSpeed", ID: 0x0007, type: zigbee_herdsman_1.Zcl.DataType.UINT16 },
|
|
1027
1522
|
},
|
|
1028
1523
|
commands: {},
|
|
1029
1524
|
commandsResponse: {},
|
|
@@ -1065,10 +1560,11 @@ exports.definitions = [
|
|
|
1065
1560
|
access: "STATE_GET",
|
|
1066
1561
|
}),
|
|
1067
1562
|
m.deviceAddCustomCluster("shellyWS90UV", {
|
|
1563
|
+
name: "shellyWS90UV",
|
|
1068
1564
|
ID: 0xfc02,
|
|
1069
1565
|
manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.SHELLY,
|
|
1070
1566
|
attributes: {
|
|
1071
|
-
uvIndex: { ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
|
|
1567
|
+
uvIndex: { name: "uvIndex", ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
|
|
1072
1568
|
},
|
|
1073
1569
|
commands: {},
|
|
1074
1570
|
commandsResponse: {},
|
|
@@ -1085,11 +1581,12 @@ exports.definitions = [
|
|
|
1085
1581
|
access: "STATE_GET",
|
|
1086
1582
|
}),
|
|
1087
1583
|
m.deviceAddCustomCluster("shellyWS90Rain", {
|
|
1584
|
+
name: "shellyWS90Rain",
|
|
1088
1585
|
ID: 0xfc03,
|
|
1089
1586
|
manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.SHELLY,
|
|
1090
1587
|
attributes: {
|
|
1091
|
-
rainStatus: { ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN },
|
|
1092
|
-
precipitation: { ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT24 },
|
|
1588
|
+
rainStatus: { name: "rainStatus", ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN },
|
|
1589
|
+
precipitation: { name: "precipitation", ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT24 },
|
|
1093
1590
|
},
|
|
1094
1591
|
commands: {},
|
|
1095
1592
|
commandsResponse: {},
|
|
@@ -1121,7 +1618,10 @@ exports.definitions = [
|
|
|
1121
1618
|
],
|
|
1122
1619
|
},
|
|
1123
1620
|
{
|
|
1124
|
-
fingerprint: [
|
|
1621
|
+
fingerprint: [
|
|
1622
|
+
{ modelID: "Dimmer", manufacturerName: "Shelly" },
|
|
1623
|
+
{ modelID: "Dimmer US", manufacturerName: "Shelly" },
|
|
1624
|
+
],
|
|
1125
1625
|
model: "S4DM-0A101WWL",
|
|
1126
1626
|
vendor: "Shelly",
|
|
1127
1627
|
description: "Dimmer Gen4",
|
|
@@ -1145,7 +1645,7 @@ exports.definitions = [
|
|
|
1145
1645
|
model: "SBHT-103C",
|
|
1146
1646
|
vendor: "Shelly",
|
|
1147
1647
|
description: "BLU H&T display Zigbee",
|
|
1148
|
-
extend: [m.battery(), m.temperature(), m.humidity()],
|
|
1648
|
+
extend: [m.battery(), m.temperature(), m.humidity(), ...shellyModernExtend.shellyLightLevel()],
|
|
1149
1649
|
},
|
|
1150
1650
|
{
|
|
1151
1651
|
fingerprint: [{ modelID: "BLU Remote Control ZB", manufacturerName: "Shelly" }],
|
|
@@ -1170,8 +1670,8 @@ exports.definitions = [
|
|
|
1170
1670
|
model: "SBBT-102C",
|
|
1171
1671
|
vendor: "Shelly",
|
|
1172
1672
|
description: "BLU Button Tough 1 ZB",
|
|
1173
|
-
fromZigbee: [fzLocal.one_button_events],
|
|
1174
|
-
exposes: [e.action(["single", "double", "triple"])],
|
|
1673
|
+
fromZigbee: [fzLocal.one_button_events, fzLocal.one_button_scene_events],
|
|
1674
|
+
exposes: [e.action(["single", "double", "triple", "single_long", "double_long", "triple_long"])],
|
|
1175
1675
|
extend: [m.battery(), m.deviceEndpoints({ endpoints: { "1": 1, "2": 2, "3": 3 } }), m.identify()],
|
|
1176
1676
|
version: "0.0.2",
|
|
1177
1677
|
configure: async (device, coordinatorEndpoint, definition) => {
|
|
@@ -1182,30 +1682,47 @@ exports.definitions = [
|
|
|
1182
1682
|
},
|
|
1183
1683
|
},
|
|
1184
1684
|
{
|
|
1185
|
-
|
|
1685
|
+
zigbeeModel: ["BLU RC Button 4 ZB", "BLU Wall Switch 4 ZB", "BLU Wall Switch 4 ZB DK"],
|
|
1186
1686
|
model: "SBBT-104CUS",
|
|
1187
1687
|
vendor: "Shelly",
|
|
1188
1688
|
description: "BLU RC Button 4 ZB",
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1689
|
+
whiteLabel: [
|
|
1690
|
+
{ vendor: "Shelly", model: "SBBT-004CEU", fingerprint: [{ modelID: "BLU Wall Switch 4 ZB" }], description: "BLU Wall Switch 4 ZB" },
|
|
1691
|
+
{ vendor: "Shelly", model: "SBBT-104CEU", fingerprint: [{ modelID: "BLU Wall Switch 4 ZB DK" }], description: "BLU Wall Switch 4 ZB DK" },
|
|
1692
|
+
],
|
|
1693
|
+
fromZigbee: [fzLocal.four_buttons_single_events, fzLocal.four_buttons_hold_events, fzLocal.four_buttons_scene_events],
|
|
1694
|
+
exposes: [
|
|
1695
|
+
e.action([
|
|
1696
|
+
"1_single",
|
|
1697
|
+
"2_single",
|
|
1698
|
+
"3_single",
|
|
1699
|
+
"4_single",
|
|
1700
|
+
"1_double",
|
|
1701
|
+
"2_double",
|
|
1702
|
+
"3_double",
|
|
1703
|
+
"4_double",
|
|
1704
|
+
"1_triple",
|
|
1705
|
+
"2_triple",
|
|
1706
|
+
"3_triple",
|
|
1707
|
+
"4_triple",
|
|
1708
|
+
"1_single_long",
|
|
1709
|
+
"2_single_long",
|
|
1710
|
+
"3_single_long",
|
|
1711
|
+
"4_single_long",
|
|
1712
|
+
"1_double_long",
|
|
1713
|
+
"2_double_long",
|
|
1714
|
+
"3_double_long",
|
|
1715
|
+
"4_double_long",
|
|
1716
|
+
"1_triple_long",
|
|
1717
|
+
"2_triple_long",
|
|
1718
|
+
"3_triple_long",
|
|
1719
|
+
"4_triple_long",
|
|
1720
|
+
"1_hold",
|
|
1721
|
+
"2_hold",
|
|
1722
|
+
"3_hold",
|
|
1723
|
+
"4_hold",
|
|
1724
|
+
]),
|
|
1725
|
+
],
|
|
1209
1726
|
extend: [m.battery(), m.deviceEndpoints({ endpoints: { "1": 1, "2": 2, "3": 3, "4": 4 } }), m.identify()],
|
|
1210
1727
|
version: "0.0.2",
|
|
1211
1728
|
configure: async (device, coordinatorEndpoint, definition) => {
|
|
@@ -1266,14 +1783,15 @@ exports.definitions = [
|
|
|
1266
1783
|
piHeatingDemand: { values: true },
|
|
1267
1784
|
}),
|
|
1268
1785
|
m.deviceAddCustomCluster("shellyTRVManualMode", {
|
|
1786
|
+
name: "shellyTRVManualMode",
|
|
1269
1787
|
ID: 0xfc24,
|
|
1270
1788
|
manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.SHELLY,
|
|
1271
1789
|
attributes: {
|
|
1272
|
-
manualMode: { ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
|
|
1273
|
-
position: { ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
|
|
1790
|
+
manualMode: { name: "manualMode", ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
|
|
1791
|
+
position: { name: "position", ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
|
|
1274
1792
|
},
|
|
1275
1793
|
commands: {
|
|
1276
|
-
calibrate: { ID: 0x0000, parameters: [] },
|
|
1794
|
+
calibrate: { name: "calibrate", ID: 0x0000, parameters: [] },
|
|
1277
1795
|
},
|
|
1278
1796
|
commandsResponse: {},
|
|
1279
1797
|
}),
|
|
@@ -1300,5 +1818,72 @@ exports.definitions = [
|
|
|
1300
1818
|
m.identify(),
|
|
1301
1819
|
],
|
|
1302
1820
|
},
|
|
1821
|
+
{
|
|
1822
|
+
fingerprint: [{ modelID: "Presence", manufacturerName: "Shelly" }],
|
|
1823
|
+
model: "S4SN-0U61X",
|
|
1824
|
+
vendor: "Shelly",
|
|
1825
|
+
description: "Presence Gen4 Zigbee",
|
|
1826
|
+
extend: [
|
|
1827
|
+
m.deviceEndpoints({ endpoints: { "1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9, "10": 10 } }),
|
|
1828
|
+
m.occupancy({ reporting: false, endpointNames: ["1"] }),
|
|
1829
|
+
m.occupancy({ reporting: false, endpointNames: ["2"] }),
|
|
1830
|
+
m.occupancy({ reporting: false, endpointNames: ["3"] }),
|
|
1831
|
+
m.occupancy({ reporting: false, endpointNames: ["4"] }),
|
|
1832
|
+
m.occupancy({ reporting: false, endpointNames: ["5"] }),
|
|
1833
|
+
m.occupancy({ reporting: false, endpointNames: ["6"] }),
|
|
1834
|
+
m.occupancy({ reporting: false, endpointNames: ["7"] }),
|
|
1835
|
+
m.occupancy({ reporting: false, endpointNames: ["8"] }),
|
|
1836
|
+
m.occupancy({ reporting: false, endpointNames: ["9"] }),
|
|
1837
|
+
m.occupancy({ reporting: false, endpointNames: ["10"] }),
|
|
1838
|
+
...shellyModernExtend.shellyLightLevel(),
|
|
1839
|
+
m.identify(),
|
|
1840
|
+
...shellyModernExtend.shellyCustomClusters(),
|
|
1841
|
+
shellyModernExtend.shellyWiFiSetup(),
|
|
1842
|
+
],
|
|
1843
|
+
},
|
|
1844
|
+
{
|
|
1845
|
+
fingerprint: [{ modelID: "BLU DoorWindow ZB", manufacturerName: "Shelly" }],
|
|
1846
|
+
model: "SBDW-103C",
|
|
1847
|
+
vendor: "Shelly",
|
|
1848
|
+
description: "BLU DoorWindow ZB",
|
|
1849
|
+
fromZigbee: [fzLocal.blu_door_window],
|
|
1850
|
+
toZigbee: [],
|
|
1851
|
+
exposes: [e.contact(), handlePosition, e.battery_low()],
|
|
1852
|
+
extend: [m.battery(), ...shellyModernExtend.shellyLightLevel(), m.identify()],
|
|
1853
|
+
configure: async (device, coordinatorEndpoint) => {
|
|
1854
|
+
const endpoint = device.getEndpoint(1);
|
|
1855
|
+
if (endpoint) {
|
|
1856
|
+
await endpoint.read("ssIasZone", ["zoneStatus"]);
|
|
1857
|
+
}
|
|
1858
|
+
},
|
|
1859
|
+
},
|
|
1860
|
+
{
|
|
1861
|
+
fingerprint: [{ modelID: "BLU Motion ZB", manufacturerName: "Shelly" }],
|
|
1862
|
+
model: "SBMO-103Z",
|
|
1863
|
+
vendor: "Shelly",
|
|
1864
|
+
description: "BLU Motion ZB",
|
|
1865
|
+
extend: [
|
|
1866
|
+
m.iasZoneAlarm({ zoneType: "occupancy", zoneAttributes: ["alarm_1", "battery_low"] }),
|
|
1867
|
+
m.battery(),
|
|
1868
|
+
...shellyModernExtend.shellyLightLevel(),
|
|
1869
|
+
m.enumLookup({
|
|
1870
|
+
name: "motion_sensitivity",
|
|
1871
|
+
cluster: "ssIasZone",
|
|
1872
|
+
attribute: "currentZoneSensitivityLevel",
|
|
1873
|
+
lookup: { low: 1, medium: 2, high: 3 },
|
|
1874
|
+
description: "Motion sensor sensitivity",
|
|
1875
|
+
access: "ALL",
|
|
1876
|
+
reporting: false,
|
|
1877
|
+
entityCategory: "config",
|
|
1878
|
+
}),
|
|
1879
|
+
m.identify(),
|
|
1880
|
+
],
|
|
1881
|
+
configure: async (device, coordinatorEndpoint) => {
|
|
1882
|
+
const endpoint = device.getEndpoint(1);
|
|
1883
|
+
if (endpoint) {
|
|
1884
|
+
await endpoint.read("ssIasZone", ["currentZoneSensitivityLevel"]);
|
|
1885
|
+
}
|
|
1886
|
+
},
|
|
1887
|
+
},
|
|
1303
1888
|
];
|
|
1304
1889
|
//# sourceMappingURL=shelly.js.map
|