@willieee802/zigbee-herdsman-converters 19.44.3 → 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 +3143 -815
- 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/livolo.js
CHANGED
|
@@ -39,6 +39,7 @@ const tz = __importStar(require("../converters/toZigbee"));
|
|
|
39
39
|
const exposes = __importStar(require("../lib/exposes"));
|
|
40
40
|
const logger_1 = require("../lib/logger");
|
|
41
41
|
const m = __importStar(require("../lib/modernExtend"));
|
|
42
|
+
const utils = __importStar(require("../lib/utils"));
|
|
42
43
|
const NS = "zhc:livolo";
|
|
43
44
|
const e = exposes.presets;
|
|
44
45
|
const ea = exposes.access;
|
|
@@ -62,6 +63,274 @@ const mLocal = {
|
|
|
62
63
|
return { ...extend, configure: [poll] };
|
|
63
64
|
},
|
|
64
65
|
};
|
|
66
|
+
const tzLocal = {
|
|
67
|
+
livolo_socket_switch_on_off: {
|
|
68
|
+
key: ["state"],
|
|
69
|
+
convertSet: async (entity, key, value, meta) => {
|
|
70
|
+
if (typeof value !== "string") {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const state = value.toLowerCase();
|
|
74
|
+
let oldstate = 1;
|
|
75
|
+
if (state === "on") {
|
|
76
|
+
oldstate = 108;
|
|
77
|
+
}
|
|
78
|
+
let channel = 1.0;
|
|
79
|
+
const postfix = meta.endpoint_name || "left";
|
|
80
|
+
await entity.command("genOnOff", "toggle", {}, { transactionSequenceNumber: 0 });
|
|
81
|
+
const payloadOn = { 1: { value: Buffer.from([1, 0, 0, 0, 0, 0, 0, 0]), type: 1 } };
|
|
82
|
+
const payloadOff = { 1: { value: Buffer.from([0, 0, 0, 0, 0, 0, 0, 0]), type: 1 } };
|
|
83
|
+
const payloadOnRight = { 1: { value: Buffer.from([2, 0, 0, 0, 0, 0, 0, 0]), type: 2 } };
|
|
84
|
+
const payloadOffRight = { 1: { value: Buffer.from([0, 0, 0, 0, 0, 0, 0, 0]), type: 2 } };
|
|
85
|
+
const payloadOnBottomLeft = { 1: { value: Buffer.from([4, 0, 0, 0, 0, 0, 0, 0]), type: 4 } };
|
|
86
|
+
const payloadOffBottomLeft = { 1: { value: Buffer.from([0, 0, 0, 0, 0, 0, 0, 0]), type: 4 } };
|
|
87
|
+
const payloadOnBottomRight = { 1: { value: Buffer.from([8, 0, 0, 0, 0, 0, 0, 0]), type: 136 } };
|
|
88
|
+
const payloadOffBottomRight = { 1: { value: Buffer.from([0, 0, 0, 0, 0, 0, 0, 0]), type: 136 } };
|
|
89
|
+
if (postfix === "left") {
|
|
90
|
+
await entity.command("genLevelCtrl", "moveToLevelWithOnOff", {
|
|
91
|
+
level: oldstate,
|
|
92
|
+
transtime: channel,
|
|
93
|
+
optionsMask: 0,
|
|
94
|
+
optionsOverride: 0,
|
|
95
|
+
});
|
|
96
|
+
await entity.write("genPowerCfg", state === "on" ? payloadOn : payloadOff, {
|
|
97
|
+
manufacturerCode: 0x1ad2,
|
|
98
|
+
disableDefaultResponse: true,
|
|
99
|
+
disableResponse: true,
|
|
100
|
+
reservedBits: 3,
|
|
101
|
+
direction: 1,
|
|
102
|
+
transactionSequenceNumber: 0xe9,
|
|
103
|
+
});
|
|
104
|
+
return { state: { state: value.toUpperCase() } };
|
|
105
|
+
}
|
|
106
|
+
if (postfix === "right") {
|
|
107
|
+
channel = 2.0;
|
|
108
|
+
await entity.command("genLevelCtrl", "moveToLevelWithOnOff", {
|
|
109
|
+
level: oldstate,
|
|
110
|
+
transtime: channel,
|
|
111
|
+
optionsMask: 0,
|
|
112
|
+
optionsOverride: 0,
|
|
113
|
+
});
|
|
114
|
+
await entity.write("genPowerCfg", state === "on" ? payloadOnRight : payloadOffRight, {
|
|
115
|
+
manufacturerCode: 0x1ad2,
|
|
116
|
+
disableDefaultResponse: true,
|
|
117
|
+
disableResponse: true,
|
|
118
|
+
reservedBits: 3,
|
|
119
|
+
direction: 1,
|
|
120
|
+
transactionSequenceNumber: 0xe9,
|
|
121
|
+
});
|
|
122
|
+
return { state: { state: value.toUpperCase() } };
|
|
123
|
+
}
|
|
124
|
+
if (postfix === "bottom_right") {
|
|
125
|
+
await entity.write("genPowerCfg", state === "on" ? payloadOnBottomRight : payloadOffBottomRight, {
|
|
126
|
+
manufacturerCode: 0x1ad2,
|
|
127
|
+
disableDefaultResponse: true,
|
|
128
|
+
disableResponse: true,
|
|
129
|
+
reservedBits: 3,
|
|
130
|
+
direction: 1,
|
|
131
|
+
transactionSequenceNumber: 0xe9,
|
|
132
|
+
});
|
|
133
|
+
return { state: { state: value.toUpperCase() } };
|
|
134
|
+
}
|
|
135
|
+
if (postfix === "bottom_left") {
|
|
136
|
+
await entity.write("genPowerCfg", state === "on" ? payloadOnBottomLeft : payloadOffBottomLeft, {
|
|
137
|
+
manufacturerCode: 0x1ad2,
|
|
138
|
+
disableDefaultResponse: true,
|
|
139
|
+
disableResponse: true,
|
|
140
|
+
reservedBits: 3,
|
|
141
|
+
direction: 1,
|
|
142
|
+
transactionSequenceNumber: 0xe9,
|
|
143
|
+
});
|
|
144
|
+
return { state: { state: value.toUpperCase() } };
|
|
145
|
+
}
|
|
146
|
+
return { state: { state: value.toUpperCase() } };
|
|
147
|
+
},
|
|
148
|
+
convertGet: async (entity, key, meta) => {
|
|
149
|
+
await entity.command("genOnOff", "toggle", {}, { transactionSequenceNumber: 0 });
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
livolo_switch_on_off: {
|
|
153
|
+
key: ["state"],
|
|
154
|
+
convertSet: async (entity, key, value, meta) => {
|
|
155
|
+
utils.assertString(value, key);
|
|
156
|
+
const postfix = meta.endpoint_name || "left";
|
|
157
|
+
const state = value.toLowerCase() === "on" ? 108 : 1;
|
|
158
|
+
let channel = 1;
|
|
159
|
+
if (postfix === "left") {
|
|
160
|
+
channel = 1.0;
|
|
161
|
+
}
|
|
162
|
+
else if (postfix === "right") {
|
|
163
|
+
channel = 2.0;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
await entity.command("genLevelCtrl", "moveToLevelWithOnOff", { level: state, transtime: channel, optionsMask: 0, optionsOverride: 0 });
|
|
169
|
+
return { state: { state: value.toUpperCase() } };
|
|
170
|
+
},
|
|
171
|
+
convertGet: async (entity, key, meta) => {
|
|
172
|
+
await entity.command("genOnOff", "toggle", {}, { transactionSequenceNumber: 0 });
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
livolo_dimmer_level: {
|
|
176
|
+
key: ["brightness", "brightness_percent", "level"],
|
|
177
|
+
convertSet: async (entity, key, value, meta) => {
|
|
178
|
+
// upscale to 100
|
|
179
|
+
value = Number(value);
|
|
180
|
+
utils.assertNumber(value, key);
|
|
181
|
+
// biome-ignore lint/suspicious/noImplicitAnyLet: ignored using `--suppress`
|
|
182
|
+
let newValue;
|
|
183
|
+
if (key === "level") {
|
|
184
|
+
if (value >= 0 && value <= 1000) {
|
|
185
|
+
newValue = utils.mapNumberRange(value, 0, 1000, 0, 100);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
throw new Error("Dimmer level is out of range 0..1000");
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
else if (key === "brightness_percent") {
|
|
192
|
+
if (value >= 0 && value <= 100) {
|
|
193
|
+
newValue = Math.round(value);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
throw new Error("Dimmer brightness_percent is out of range 0..100");
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
if (value >= 0 && value <= 255) {
|
|
201
|
+
newValue = utils.mapNumberRange(value, 0, 255, 0, 100);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
throw new Error("Dimmer brightness is out of range 0..255");
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
await entity.command("genOnOff", "toggle", {}, { transactionSequenceNumber: 0 });
|
|
208
|
+
const payload = { 769: { value: Buffer.from([newValue, 0, 0, 0, 0, 0, 0, 0]), type: 1 } };
|
|
209
|
+
await entity.write("genPowerCfg", payload, {
|
|
210
|
+
manufacturerCode: 0x1ad2,
|
|
211
|
+
disableDefaultResponse: true,
|
|
212
|
+
disableResponse: true,
|
|
213
|
+
reservedBits: 3,
|
|
214
|
+
direction: 1,
|
|
215
|
+
transactionSequenceNumber: 0xe9,
|
|
216
|
+
writeUndiv: true,
|
|
217
|
+
});
|
|
218
|
+
return {
|
|
219
|
+
state: { brightness_percent: newValue, brightness: utils.mapNumberRange(newValue, 0, 100, 0, 255), level: newValue * 10 },
|
|
220
|
+
};
|
|
221
|
+
},
|
|
222
|
+
convertGet: async (entity, key, meta) => {
|
|
223
|
+
await entity.command("genOnOff", "toggle", {}, { transactionSequenceNumber: 0 });
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
livolo_cover_state: {
|
|
227
|
+
key: ["state"],
|
|
228
|
+
convertSet: async (entity, key, value, meta) => {
|
|
229
|
+
utils.assertEndpoint(entity);
|
|
230
|
+
// biome-ignore lint/suspicious/noImplicitAnyLet: ignored using `--suppress`
|
|
231
|
+
let payload;
|
|
232
|
+
const options = {
|
|
233
|
+
frameType: 0,
|
|
234
|
+
manufacturerCode: 0x1ad2,
|
|
235
|
+
disableDefaultResponse: true,
|
|
236
|
+
disableResponse: true,
|
|
237
|
+
reservedBits: 3,
|
|
238
|
+
direction: 1,
|
|
239
|
+
writeUndiv: true,
|
|
240
|
+
transactionSequenceNumber: 0xe9,
|
|
241
|
+
};
|
|
242
|
+
switch (value) {
|
|
243
|
+
case "OPEN":
|
|
244
|
+
payload = { attrId: 0x0000, selector: null, elementData: [0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] };
|
|
245
|
+
break;
|
|
246
|
+
case "CLOSE":
|
|
247
|
+
payload = { attrId: 0x0000, selector: null, elementData: [0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] };
|
|
248
|
+
break;
|
|
249
|
+
case "STOP":
|
|
250
|
+
payload = { attrId: 0x0000, selector: null, elementData: [0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] };
|
|
251
|
+
break;
|
|
252
|
+
default:
|
|
253
|
+
throw new Error(`Value '${value}' is not a valid cover position (must be one of 'OPEN' or 'CLOSE')`);
|
|
254
|
+
}
|
|
255
|
+
await entity.writeStructured("genPowerCfg",
|
|
256
|
+
// @ts-expect-error workaround write custom payload
|
|
257
|
+
[payload], options);
|
|
258
|
+
return {
|
|
259
|
+
state: {
|
|
260
|
+
moving: true,
|
|
261
|
+
},
|
|
262
|
+
};
|
|
263
|
+
},
|
|
264
|
+
},
|
|
265
|
+
livolo_cover_position: {
|
|
266
|
+
key: ["position"],
|
|
267
|
+
convertSet: async (entity, key, value, meta) => {
|
|
268
|
+
utils.assertNumber(value, key);
|
|
269
|
+
const position = 100 - value;
|
|
270
|
+
await entity.command("genOnOff", "toggle", {}, { transactionSequenceNumber: 0 });
|
|
271
|
+
const payload = { 1025: { value: [position, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], type: 1 } };
|
|
272
|
+
await entity.write("genPowerCfg", payload, {
|
|
273
|
+
manufacturerCode: 0x1ad2,
|
|
274
|
+
disableDefaultResponse: true,
|
|
275
|
+
disableResponse: true,
|
|
276
|
+
reservedBits: 3,
|
|
277
|
+
direction: 1,
|
|
278
|
+
transactionSequenceNumber: 0xe9,
|
|
279
|
+
writeUndiv: true,
|
|
280
|
+
});
|
|
281
|
+
return {
|
|
282
|
+
state: {
|
|
283
|
+
position: value,
|
|
284
|
+
moving: true,
|
|
285
|
+
},
|
|
286
|
+
};
|
|
287
|
+
},
|
|
288
|
+
},
|
|
289
|
+
livolo_cover_options: {
|
|
290
|
+
key: ["options"],
|
|
291
|
+
convertSet: async (entity, key, value, meta) => {
|
|
292
|
+
utils.assertObject(value);
|
|
293
|
+
const options = {
|
|
294
|
+
frameType: 0,
|
|
295
|
+
manufacturerCode: 0x1ad2,
|
|
296
|
+
disableDefaultResponse: true,
|
|
297
|
+
disableResponse: true,
|
|
298
|
+
reservedBits: 3,
|
|
299
|
+
direction: 1,
|
|
300
|
+
writeUndiv: true,
|
|
301
|
+
transactionSequenceNumber: 0xe9,
|
|
302
|
+
};
|
|
303
|
+
if (value.motor_direction != null) {
|
|
304
|
+
// biome-ignore lint/suspicious/noImplicitAnyLet: ignored using `--suppress`
|
|
305
|
+
let direction;
|
|
306
|
+
switch (value.motor_direction) {
|
|
307
|
+
case "FORWARD":
|
|
308
|
+
direction = 0x00;
|
|
309
|
+
break;
|
|
310
|
+
case "REVERSE":
|
|
311
|
+
direction = 0x80;
|
|
312
|
+
break;
|
|
313
|
+
default:
|
|
314
|
+
throw new Error(`livolo_cover_options: ${value.motor_direction} is not a valid motor direction \
|
|
315
|
+
(must be one of 'FORWARD' or 'REVERSE')`);
|
|
316
|
+
}
|
|
317
|
+
const payload = { 4865: { value: [direction, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] } };
|
|
318
|
+
await entity.write("genPowerCfg",
|
|
319
|
+
// @ts-expect-error workaround write custom payload
|
|
320
|
+
payload, options);
|
|
321
|
+
}
|
|
322
|
+
if (value.motor_speed != null) {
|
|
323
|
+
if (value.motor_speed < 20 || value.motor_speed > 40) {
|
|
324
|
+
throw new Error("livolo_cover_options: Motor speed is out of range (20-40)");
|
|
325
|
+
}
|
|
326
|
+
const payload = { 4609: { value: [value.motor_speed, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] } };
|
|
327
|
+
await entity.write("genPowerCfg",
|
|
328
|
+
// @ts-expect-error workaround write custom payload
|
|
329
|
+
payload, options);
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
},
|
|
333
|
+
};
|
|
65
334
|
const fzLocal = {
|
|
66
335
|
// biome-ignore lint/suspicious/noExplicitAny: ignore
|
|
67
336
|
prevent_disconnect: (args) => {
|
|
@@ -91,6 +360,329 @@ const fzLocal = {
|
|
|
91
360
|
},
|
|
92
361
|
};
|
|
93
362
|
},
|
|
363
|
+
livolo_switch_state: {
|
|
364
|
+
cluster: "genOnOff",
|
|
365
|
+
type: ["attributeReport", "readResponse"],
|
|
366
|
+
convert: (model, msg, publish, options, meta) => {
|
|
367
|
+
const status = msg.data.onOff;
|
|
368
|
+
return {
|
|
369
|
+
state_left: status & 1 ? "ON" : "OFF",
|
|
370
|
+
state_right: status & 2 ? "ON" : "OFF",
|
|
371
|
+
};
|
|
372
|
+
},
|
|
373
|
+
},
|
|
374
|
+
livolo_socket_state: {
|
|
375
|
+
cluster: "genPowerCfg",
|
|
376
|
+
type: ["raw"],
|
|
377
|
+
convert: (model, msg, publish, options, meta) => {
|
|
378
|
+
const stateHeader = Buffer.from([122, 209]);
|
|
379
|
+
if (msg.data.indexOf(stateHeader) === 0) {
|
|
380
|
+
const status = msg.data[14];
|
|
381
|
+
return { state: status & 1 ? "ON" : "OFF" };
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
},
|
|
385
|
+
livolo_new_switch_state: {
|
|
386
|
+
cluster: "genPowerCfg",
|
|
387
|
+
type: ["raw"],
|
|
388
|
+
convert: (model, msg, publish, options, meta) => {
|
|
389
|
+
const stateHeader = Buffer.from([122, 209]);
|
|
390
|
+
if (msg.data.indexOf(stateHeader) === 0) {
|
|
391
|
+
const status = msg.data[14];
|
|
392
|
+
return { state: status & 1 ? "ON" : "OFF" };
|
|
393
|
+
}
|
|
394
|
+
},
|
|
395
|
+
},
|
|
396
|
+
livolo_new_switch_state_2gang: {
|
|
397
|
+
cluster: "genPowerCfg",
|
|
398
|
+
type: ["raw"],
|
|
399
|
+
convert: (model, msg, publish, options, meta) => {
|
|
400
|
+
const stateHeader = Buffer.from([122, 209]);
|
|
401
|
+
if (msg.data.indexOf(stateHeader) === 0) {
|
|
402
|
+
if (msg.data[10] === 7) {
|
|
403
|
+
const status = msg.data[14];
|
|
404
|
+
return {
|
|
405
|
+
state_left: status & 1 ? "ON" : "OFF",
|
|
406
|
+
state_right: status & 2 ? "ON" : "OFF",
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
},
|
|
411
|
+
},
|
|
412
|
+
livolo_new_switch_state_4gang: {
|
|
413
|
+
cluster: "genPowerCfg",
|
|
414
|
+
type: ["raw"],
|
|
415
|
+
convert: (model, msg, publish, options, meta) => {
|
|
416
|
+
const stateHeader = Buffer.from([122, 209]);
|
|
417
|
+
if (msg.data.indexOf(stateHeader) === 0) {
|
|
418
|
+
if (msg.data[10] === 7) {
|
|
419
|
+
const status = msg.data[14];
|
|
420
|
+
return {
|
|
421
|
+
state_left: status & 1 ? "ON" : "OFF",
|
|
422
|
+
state_right: status & 2 ? "ON" : "OFF",
|
|
423
|
+
state_bottom_left: status & 4 ? "ON" : "OFF",
|
|
424
|
+
state_bottom_right: status & 8 ? "ON" : "OFF",
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
if (msg.data[10] === 13) {
|
|
428
|
+
const status = msg.data[13];
|
|
429
|
+
return {
|
|
430
|
+
state_left: status & 1 ? "ON" : "OFF",
|
|
431
|
+
state_right: status & 2 ? "ON" : "OFF",
|
|
432
|
+
state_bottom_left: status & 4 ? "ON" : "OFF",
|
|
433
|
+
state_bottom_right: status & 8 ? "ON" : "OFF",
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
},
|
|
438
|
+
},
|
|
439
|
+
livolo_curtain_switch_state: {
|
|
440
|
+
cluster: "genPowerCfg",
|
|
441
|
+
type: ["raw"],
|
|
442
|
+
convert: (model, msg, publish, options, meta) => {
|
|
443
|
+
const stateHeader = Buffer.from([122, 209]);
|
|
444
|
+
if (msg.data.indexOf(stateHeader) === 0) {
|
|
445
|
+
if (msg.data[10] === 5 || msg.data[10] === 2) {
|
|
446
|
+
const status = msg.data[14];
|
|
447
|
+
return {
|
|
448
|
+
state_left: status === 1 ? "ON" : "OFF",
|
|
449
|
+
state_right: status === 0 ? "ON" : "OFF",
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
},
|
|
454
|
+
},
|
|
455
|
+
livolo_dimmer_state: {
|
|
456
|
+
cluster: "genPowerCfg",
|
|
457
|
+
type: ["raw"],
|
|
458
|
+
convert: (model, msg, publish, options, meta) => {
|
|
459
|
+
const stateHeader = Buffer.from([122, 209]);
|
|
460
|
+
if (msg.data.indexOf(stateHeader) === 0) {
|
|
461
|
+
if (msg.data[10] === 7) {
|
|
462
|
+
const status = msg.data[14];
|
|
463
|
+
return { state: status & 1 ? "ON" : "OFF" };
|
|
464
|
+
}
|
|
465
|
+
if (msg.data[10] === 13) {
|
|
466
|
+
const status = msg.data[13];
|
|
467
|
+
return { state: status & 1 ? "ON" : "OFF" };
|
|
468
|
+
}
|
|
469
|
+
if (msg.data[10] === 5) {
|
|
470
|
+
// TODO: Unknown dp, assumed value type
|
|
471
|
+
const value = msg.data[14] * 10;
|
|
472
|
+
return {
|
|
473
|
+
brightness: utils.mapNumberRange(value, 0, 1000, 0, 255),
|
|
474
|
+
brightness_percent: utils.mapNumberRange(value, 0, 1000, 0, 100),
|
|
475
|
+
level: value,
|
|
476
|
+
};
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
},
|
|
480
|
+
},
|
|
481
|
+
livolo_cover_state: {
|
|
482
|
+
cluster: "genPowerCfg",
|
|
483
|
+
type: ["raw"],
|
|
484
|
+
convert: (model, msg, publish, options, meta) => {
|
|
485
|
+
const dp = msg.data[10];
|
|
486
|
+
const defaults = { motor_direction: "FORWARD", motor_speed: 40 };
|
|
487
|
+
if (msg.data[0] === 0x7a && msg.data[1] === 0xd1) {
|
|
488
|
+
const reportType = msg.data[12];
|
|
489
|
+
switch (dp) {
|
|
490
|
+
case 0x0c:
|
|
491
|
+
case 0x0f:
|
|
492
|
+
if (reportType === 0x04) {
|
|
493
|
+
// Position report
|
|
494
|
+
const position = 100 - msg.data[13];
|
|
495
|
+
const state = position > 0 ? "OPEN" : "CLOSE";
|
|
496
|
+
const moving = dp === 0x0f;
|
|
497
|
+
return { ...defaults, ...meta.state, position, state, moving };
|
|
498
|
+
}
|
|
499
|
+
if (reportType === 0x12) {
|
|
500
|
+
// Speed report
|
|
501
|
+
const motorSpeed = msg.data[13];
|
|
502
|
+
return { ...defaults, ...meta.state, motor_speed: motorSpeed };
|
|
503
|
+
}
|
|
504
|
+
if (reportType === 0x13) {
|
|
505
|
+
// Direction report
|
|
506
|
+
const direction = msg.data[13];
|
|
507
|
+
if (direction < 0x80) {
|
|
508
|
+
return { ...defaults, ...meta.state, motor_direction: "FORWARD" };
|
|
509
|
+
}
|
|
510
|
+
return { ...defaults, ...meta.state, motor_direction: "REVERSE" };
|
|
511
|
+
}
|
|
512
|
+
break;
|
|
513
|
+
case 0x02:
|
|
514
|
+
case 0x03:
|
|
515
|
+
// Ignore special commands used only when pairing, as these will rather be handled by `onEvent`
|
|
516
|
+
return null;
|
|
517
|
+
case 0x08:
|
|
518
|
+
// Ignore general command acknowledgements, as they provide no useful information.
|
|
519
|
+
return null;
|
|
520
|
+
default:
|
|
521
|
+
// Unknown dps
|
|
522
|
+
logger_1.logger.debug(`Unhandled DP ${dp} for ${meta.device.manufacturerName}: ${msg.data.toString("hex")}`, NS);
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
},
|
|
526
|
+
},
|
|
527
|
+
livolo_hygrometer_state: {
|
|
528
|
+
cluster: "genPowerCfg",
|
|
529
|
+
type: ["raw"],
|
|
530
|
+
convert: (model, msg, publish, options, meta) => {
|
|
531
|
+
const dp = msg.data[10];
|
|
532
|
+
switch (dp) {
|
|
533
|
+
case 14:
|
|
534
|
+
return {
|
|
535
|
+
temperature: Number(msg.data[13]),
|
|
536
|
+
};
|
|
537
|
+
case 12:
|
|
538
|
+
return {
|
|
539
|
+
humidity: Number(msg.data[13]),
|
|
540
|
+
};
|
|
541
|
+
}
|
|
542
|
+
},
|
|
543
|
+
},
|
|
544
|
+
livolo_illuminance_state: {
|
|
545
|
+
cluster: "genPowerCfg",
|
|
546
|
+
type: ["raw"],
|
|
547
|
+
convert: (model, msg, publish, options, meta) => {
|
|
548
|
+
const dp = msg.data[12];
|
|
549
|
+
const noiseLookup = { 1: "silent", 2: "normal", 3: "lively", 4: "noisy" };
|
|
550
|
+
switch (dp) {
|
|
551
|
+
case 13:
|
|
552
|
+
return {
|
|
553
|
+
illuminance: Number(msg.data[13]),
|
|
554
|
+
};
|
|
555
|
+
case 14:
|
|
556
|
+
return {
|
|
557
|
+
noise_detected: msg.data[13] > 2,
|
|
558
|
+
noise_level: noiseLookup[msg.data[13]],
|
|
559
|
+
};
|
|
560
|
+
}
|
|
561
|
+
},
|
|
562
|
+
},
|
|
563
|
+
livolo_pir_state: {
|
|
564
|
+
cluster: "genPowerCfg",
|
|
565
|
+
type: ["raw"],
|
|
566
|
+
convert: (model, msg, publish, options, meta) => {
|
|
567
|
+
const stateHeader = Buffer.from([122, 209]);
|
|
568
|
+
if (msg.data.indexOf(stateHeader) === 0) {
|
|
569
|
+
if (msg.data[10] === 7) {
|
|
570
|
+
const status = msg.data[14];
|
|
571
|
+
return {
|
|
572
|
+
occupancy: !!(status & 1),
|
|
573
|
+
};
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
},
|
|
577
|
+
},
|
|
578
|
+
livolo_switch_state_raw: {
|
|
579
|
+
cluster: "genPowerCfg",
|
|
580
|
+
type: ["raw"],
|
|
581
|
+
convert: (model, msg, publish, options, meta) => {
|
|
582
|
+
/*
|
|
583
|
+
header ieee address info data
|
|
584
|
+
new socket
|
|
585
|
+
[124,210,21,216,128, 199,147,3,24,0,75,18,0, 19,7,0] after interview
|
|
586
|
+
[122,209, 199,147,3,24,0,75,18,0, 7,1,6,1,0,11] off
|
|
587
|
+
[122,209, 199,147,3,24,0,75,18,0, 7,1,6,1,1,11] on
|
|
588
|
+
|
|
589
|
+
new switch
|
|
590
|
+
[124,210,21,216,128, 228,41,3,24,0,75,18,0, 19,1,0] after interview
|
|
591
|
+
[122,209, 228,41,3,24,0,75,18,0, 7,1,0,1,0,11] off
|
|
592
|
+
[122,209, 228,41,3,24,0,75,18,0, 7,1,0,1,1,11] on
|
|
593
|
+
|
|
594
|
+
old switch
|
|
595
|
+
[124,210,21,216,128, 170, 10,2,24,0,75,18,0, 17,0,1] after interview
|
|
596
|
+
[124,210,21,216,0, 18, 15,5,24,0,75,18,0, 34,0,0] left: 0, right: 0
|
|
597
|
+
[124,210,21,216,0, 18, 15,5,24,0,75,18,0, 34,0,1] left: 1, right: 0
|
|
598
|
+
[124,210,21,216,0, 18, 15,5,24,0,75,18,0, 34,0,2] left: 0, right: 1
|
|
599
|
+
[124,210,21,216,0, 18, 15,5,24,0,75,18,0, 34,0,3] left: 1, right: 1
|
|
600
|
+
|
|
601
|
+
curtain switch
|
|
602
|
+
[124,210,21,216,128, 110,74,116,33,0,75,18,0, 19,5,0] after interview
|
|
603
|
+
[122,209, 110,74,116,33,0,75,18,0, 5,1,5,0,2,11] left: 0, right: 0 (off)
|
|
604
|
+
[122,209, 110,74,116,33,0,75,18,0, 5,1,5,0,1,11] left: 1, right: 0 (left on)
|
|
605
|
+
[122,209, 110,74,116,33,0,75,18,0, 5,1,5,0,0,11] left: 0, right: 1 (right on)
|
|
606
|
+
|
|
607
|
+
pir sensor
|
|
608
|
+
[124,210,21,216,128, 225,52,225,34,0,75,18,0, 19,13,0] after interview
|
|
609
|
+
[122,209, 245,94,225,34,0,75,18,0, 7,1,7,1,1,11] occupancy: true
|
|
610
|
+
[122,209, 245,94,225,34,0,75,18,0, 7,1,7,1,0,11] occupancy: false
|
|
611
|
+
|
|
612
|
+
hygrometer
|
|
613
|
+
[122,209, 191,22,3,24,0,75,18,0, 14,1,8,21,14,11] temperature: 21 degrees Celsius
|
|
614
|
+
[122,209, 191,22,3,24,0,75,18,0, 12,1,9,73,12,11] humidity: 73%
|
|
615
|
+
|
|
616
|
+
illuminance
|
|
617
|
+
[124,210,21,216,128, 221,0,115,33,0,75,18,0, 19,12,0] after interview
|
|
618
|
+
[122,209, 221,0,115,33,0,75,18,0, 12,1,14,4,12,11] noise: 4 (noisy)
|
|
619
|
+
[122,209, 221,0,115,33,0,75,18,0, 12,1,14,3,12,11] noise: 3 (lively)
|
|
620
|
+
[122,209, 221,0,115,33,0,75,18,0, 12,1,14,2,12,11] noise: 2 (normal)
|
|
621
|
+
[122,209, 221,0,115,33,0,75,18,0, 12,1,14,1,12,11] noise: 1 (silent)
|
|
622
|
+
[122,209, 221,0,115,33,0,75,18,0, 12,1,13,20,12,11] lux: 20
|
|
623
|
+
[122,209, 221,0,115,33,0,75,18,0, 2,0,12,199,1,11] ??
|
|
624
|
+
*/
|
|
625
|
+
const malformedHeader = Buffer.from([0x7c, 0xd2, 0x15, 0xd8, 0x00]);
|
|
626
|
+
const infoHeader = Buffer.from([0x7c, 0xd2, 0x15, 0xd8, 0x80]);
|
|
627
|
+
// status of old devices
|
|
628
|
+
if (msg.data.indexOf(malformedHeader) === 0) {
|
|
629
|
+
const status = msg.data[15];
|
|
630
|
+
return {
|
|
631
|
+
state_left: status & 1 ? "ON" : "OFF",
|
|
632
|
+
state_right: status & 2 ? "ON" : "OFF",
|
|
633
|
+
};
|
|
634
|
+
}
|
|
635
|
+
// info about device
|
|
636
|
+
if (msg.data.indexOf(infoHeader) === 0) {
|
|
637
|
+
if (msg.data.includes(Buffer.from([19, 7, 0]), 13)) {
|
|
638
|
+
// new socket, hack
|
|
639
|
+
meta.device.modelID = "TI0001-socket";
|
|
640
|
+
meta.device.save();
|
|
641
|
+
}
|
|
642
|
+
// No need to detect this switches, will be done by universal procedure
|
|
643
|
+
/* if (msg.data.includes(Buffer.from([19, 1, 0]), 13)) {
|
|
644
|
+
// new switch, hack
|
|
645
|
+
meta.device.modelID = 'TI0001-switch';
|
|
646
|
+
meta.device.save();
|
|
647
|
+
}
|
|
648
|
+
if (msg.data.includes(Buffer.from([19, 2, 0]), 13)) {
|
|
649
|
+
// new switch, hack
|
|
650
|
+
meta.device.modelID = 'TI0001-switch-2gang';
|
|
651
|
+
meta.device.save();
|
|
652
|
+
}*/
|
|
653
|
+
if (msg.data.includes(Buffer.from([19, 5, 0]), 13)) {
|
|
654
|
+
logger_1.logger.debug("Detected Livolo Curtain Switch", NS);
|
|
655
|
+
// curtain switch, hack
|
|
656
|
+
meta.device.modelID = "TI0001-curtain-switch";
|
|
657
|
+
meta.device.save();
|
|
658
|
+
}
|
|
659
|
+
if (msg.data.includes(Buffer.from([19, 20, 0]), 13)) {
|
|
660
|
+
// new dimmer, hack
|
|
661
|
+
meta.device.modelID = "TI0001-dimmer";
|
|
662
|
+
meta.device.save();
|
|
663
|
+
}
|
|
664
|
+
if (msg.data.includes(Buffer.from([19, 21, 0]), 13)) {
|
|
665
|
+
meta.device.modelID = "TI0001-cover";
|
|
666
|
+
meta.device.save();
|
|
667
|
+
}
|
|
668
|
+
if (msg.data.includes(Buffer.from([19, 13, 0]), 13)) {
|
|
669
|
+
logger_1.logger.debug("Detected Livolo Pir Sensor", NS);
|
|
670
|
+
meta.device.modelID = "TI0001-pir";
|
|
671
|
+
meta.device.save();
|
|
672
|
+
}
|
|
673
|
+
if (msg.data.includes(Buffer.from([19, 15, 0]), 13)) {
|
|
674
|
+
logger_1.logger.debug("Detected Livolo Digital Hygrometer", NS);
|
|
675
|
+
meta.device.modelID = "TI0001-hygrometer";
|
|
676
|
+
meta.device.save();
|
|
677
|
+
}
|
|
678
|
+
if (msg.data.includes(Buffer.from([19, 12, 0]), 13)) {
|
|
679
|
+
logger_1.logger.debug("Detected Livolo Digital Illuminance and Sound Sensor", NS);
|
|
680
|
+
meta.device.modelID = "TI0001-illuminance";
|
|
681
|
+
meta.device.save();
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
},
|
|
685
|
+
},
|
|
94
686
|
};
|
|
95
687
|
exports.definitions = [
|
|
96
688
|
{
|
|
@@ -105,12 +697,12 @@ exports.definitions = [
|
|
|
105
697
|
e.switch().withEndpoint("bottom_right"),
|
|
106
698
|
],
|
|
107
699
|
fromZigbee: [
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
700
|
+
fzLocal.livolo_switch_state,
|
|
701
|
+
fzLocal.livolo_switch_state_raw,
|
|
702
|
+
fzLocal.livolo_new_switch_state_4gang,
|
|
111
703
|
fzLocal.prevent_disconnect({ dp: 1, payload: { 8194: { value: 0n, type: 0x0e } } }),
|
|
112
704
|
],
|
|
113
|
-
toZigbee: [
|
|
705
|
+
toZigbee: [tzLocal.livolo_socket_switch_on_off],
|
|
114
706
|
endpoint: (device) => {
|
|
115
707
|
return { left: 6, right: 6, bottom_left: 6, bottom_right: 6 };
|
|
116
708
|
},
|
|
@@ -121,8 +713,8 @@ exports.definitions = [
|
|
|
121
713
|
model: "TI0001-switch",
|
|
122
714
|
description: "Zigbee switch 1 gang",
|
|
123
715
|
vendor: "Livolo",
|
|
124
|
-
fromZigbee: [
|
|
125
|
-
toZigbee: [
|
|
716
|
+
fromZigbee: [fzLocal.livolo_new_switch_state, fz.power_on_behavior],
|
|
717
|
+
toZigbee: [tzLocal.livolo_socket_switch_on_off, tz.power_on_behavior],
|
|
126
718
|
exposes: [e.switch()],
|
|
127
719
|
endpoint: (device) => {
|
|
128
720
|
return { left: 6, right: 6 };
|
|
@@ -134,8 +726,8 @@ exports.definitions = [
|
|
|
134
726
|
model: "TI0001-switch-2gang",
|
|
135
727
|
description: "Zigbee Switch 2 gang",
|
|
136
728
|
vendor: "Livolo",
|
|
137
|
-
fromZigbee: [
|
|
138
|
-
toZigbee: [
|
|
729
|
+
fromZigbee: [fzLocal.livolo_new_switch_state_2gang],
|
|
730
|
+
toZigbee: [tzLocal.livolo_socket_switch_on_off],
|
|
139
731
|
exposes: [e.switch().withEndpoint("left"), e.switch().withEndpoint("right")],
|
|
140
732
|
endpoint: (device) => {
|
|
141
733
|
return { left: 6, right: 6 };
|
|
@@ -147,9 +739,9 @@ exports.definitions = [
|
|
|
147
739
|
model: "TI0001-curtain-switch",
|
|
148
740
|
description: "Zigbee curtain switch (can only read status, control does not work yet)",
|
|
149
741
|
vendor: "Livolo",
|
|
150
|
-
fromZigbee: [
|
|
151
|
-
toZigbee: [
|
|
152
|
-
// toZigbee: [
|
|
742
|
+
fromZigbee: [fzLocal.livolo_curtain_switch_state],
|
|
743
|
+
toZigbee: [tzLocal.livolo_socket_switch_on_off],
|
|
744
|
+
// toZigbee: [tzLocal.livolo_curtain_switch_on_off],
|
|
153
745
|
exposes: [e.switch().withEndpoint("left"), e.switch().withEndpoint("right")],
|
|
154
746
|
endpoint: (device) => {
|
|
155
747
|
return { left: 6, right: 6 };
|
|
@@ -162,8 +754,8 @@ exports.definitions = [
|
|
|
162
754
|
description: "Zigbee socket",
|
|
163
755
|
vendor: "Livolo",
|
|
164
756
|
exposes: [e.switch()],
|
|
165
|
-
fromZigbee: [
|
|
166
|
-
toZigbee: [
|
|
757
|
+
fromZigbee: [fzLocal.livolo_socket_state, fz.power_on_behavior],
|
|
758
|
+
toZigbee: [tzLocal.livolo_socket_switch_on_off, tz.power_on_behavior],
|
|
167
759
|
extend: [mLocal.poll()],
|
|
168
760
|
},
|
|
169
761
|
{
|
|
@@ -171,8 +763,8 @@ exports.definitions = [
|
|
|
171
763
|
model: "TI0001-dimmer",
|
|
172
764
|
description: "Zigbee dimmer",
|
|
173
765
|
vendor: "Livolo",
|
|
174
|
-
fromZigbee: [
|
|
175
|
-
toZigbee: [
|
|
766
|
+
fromZigbee: [fzLocal.livolo_dimmer_state],
|
|
767
|
+
toZigbee: [tzLocal.livolo_socket_switch_on_off, tzLocal.livolo_dimmer_level],
|
|
176
768
|
exposes: [e.light_brightness()],
|
|
177
769
|
endpoint: (device) => {
|
|
178
770
|
return { left: 6, right: 6 };
|
|
@@ -185,7 +777,7 @@ exports.definitions = [
|
|
|
185
777
|
description: "Zigbee roller blind motor",
|
|
186
778
|
vendor: "Livolo",
|
|
187
779
|
fromZigbee: [
|
|
188
|
-
|
|
780
|
+
fzLocal.livolo_cover_state,
|
|
189
781
|
fz.command_off,
|
|
190
782
|
fzLocal.prevent_disconnect({
|
|
191
783
|
dp: 0x02,
|
|
@@ -194,7 +786,7 @@ exports.definitions = [
|
|
|
194
786
|
},
|
|
195
787
|
}),
|
|
196
788
|
],
|
|
197
|
-
toZigbee: [
|
|
789
|
+
toZigbee: [tzLocal.livolo_cover_state, tzLocal.livolo_cover_position, tzLocal.livolo_cover_options],
|
|
198
790
|
exposes: [
|
|
199
791
|
e.cover_position().setAccess("position", ea.STATE_SET),
|
|
200
792
|
e
|
|
@@ -213,7 +805,7 @@ exports.definitions = [
|
|
|
213
805
|
vendor: "Livolo",
|
|
214
806
|
exposes: [e.occupancy()],
|
|
215
807
|
fromZigbee: [
|
|
216
|
-
|
|
808
|
+
fzLocal.livolo_pir_state,
|
|
217
809
|
fzLocal.prevent_disconnect({
|
|
218
810
|
dp: 0x01,
|
|
219
811
|
payload: { 8194: { value: 0n, type: 0x0e } },
|
|
@@ -228,7 +820,7 @@ exports.definitions = [
|
|
|
228
820
|
vendor: "Livolo",
|
|
229
821
|
exposes: [e.humidity(), e.temperature()],
|
|
230
822
|
fromZigbee: [
|
|
231
|
-
|
|
823
|
+
fzLocal.livolo_hygrometer_state,
|
|
232
824
|
fzLocal.prevent_disconnect({
|
|
233
825
|
dp: 0x02,
|
|
234
826
|
payload(data) {
|
|
@@ -249,7 +841,7 @@ exports.definitions = [
|
|
|
249
841
|
e.enum("noise_level", ea.STATE, ["silent", "normal", "lively", "noisy"]).withDescription("Detected noise level"),
|
|
250
842
|
],
|
|
251
843
|
fromZigbee: [
|
|
252
|
-
|
|
844
|
+
fzLocal.livolo_illuminance_state,
|
|
253
845
|
fzLocal.prevent_disconnect({
|
|
254
846
|
dp: 0x02,
|
|
255
847
|
payload(data) {
|