@smarthome.exchange/integrations 1.0.0 → 2.0.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 +49 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/core/classes.configstore.d.ts +2 -0
- package/dist_ts/core/classes.configstore.js +84 -27
- package/dist_ts/core/classes.nativehomeadmission.d.ts +19 -0
- package/dist_ts/core/classes.nativehomeadmission.js +84 -0
- package/dist_ts/core/classes.nativeintegrationowner.d.ts +79 -0
- package/dist_ts/core/classes.nativeintegrationowner.js +269 -0
- package/dist_ts/core/index.d.ts +2 -0
- package/dist_ts/core/index.js +3 -1
- package/dist_ts/core/types.d.ts +14 -0
- package/dist_ts/integrations/braviatv/braviatv.classes.client.d.ts +23 -72
- package/dist_ts/integrations/braviatv/braviatv.classes.client.js +265 -625
- package/dist_ts/integrations/braviatv/braviatv.classes.configflow.d.ts +7 -7
- package/dist_ts/integrations/braviatv/braviatv.classes.configflow.js +51 -68
- package/dist_ts/integrations/braviatv/braviatv.classes.integration.d.ts +8 -11
- package/dist_ts/integrations/braviatv/braviatv.classes.integration.js +186 -135
- package/dist_ts/integrations/braviatv/braviatv.discovery.js +12 -11
- package/dist_ts/integrations/braviatv/braviatv.mapper.d.ts +6 -14
- package/dist_ts/integrations/braviatv/braviatv.mapper.js +37 -131
- package/dist_ts/integrations/braviatv/braviatv.types.d.ts +55 -133
- package/dist_ts/integrations/braviatv/braviatv.validation.d.ts +7 -0
- package/dist_ts/integrations/braviatv/braviatv.validation.js +72 -0
- package/dist_ts/integrations/broadlink/broadlink.actions.d.ts +2 -0
- package/dist_ts/integrations/broadlink/broadlink.actions.js +36 -0
- package/dist_ts/integrations/broadlink/broadlink.classes.client.d.ts +21 -19
- package/dist_ts/integrations/broadlink/broadlink.classes.client.js +185 -124
- package/dist_ts/integrations/broadlink/broadlink.classes.configflow.d.ts +5 -4
- package/dist_ts/integrations/broadlink/broadlink.classes.configflow.js +64 -83
- package/dist_ts/integrations/broadlink/broadlink.classes.integration.d.ts +16 -19
- package/dist_ts/integrations/broadlink/broadlink.classes.integration.js +114 -59
- package/dist_ts/integrations/broadlink/broadlink.mapper.d.ts +3 -2
- package/dist_ts/integrations/broadlink/broadlink.mapper.js +2 -1
- package/dist_ts/integrations/broadlink/broadlink.selected.mapper.d.ts +10 -0
- package/dist_ts/integrations/broadlink/broadlink.selected.mapper.js +41 -0
- package/dist_ts/integrations/broadlink/broadlink.types.d.ts +43 -7
- package/dist_ts/integrations/broadlink/broadlink.validation.d.ts +7 -0
- package/dist_ts/integrations/broadlink/broadlink.validation.js +63 -0
- package/dist_ts/integrations/daikin/daikin.classes.client.d.ts +10 -52
- package/dist_ts/integrations/daikin/daikin.classes.client.js +55 -614
- package/dist_ts/integrations/daikin/daikin.classes.configflow.d.ts +8 -12
- package/dist_ts/integrations/daikin/daikin.classes.configflow.js +77 -138
- package/dist_ts/integrations/daikin/daikin.classes.integration.d.ts +7 -24
- package/dist_ts/integrations/daikin/daikin.classes.integration.js +175 -67
- package/dist_ts/integrations/daikin/daikin.discovery.d.ts +11 -24
- package/dist_ts/integrations/daikin/daikin.discovery.js +98 -305
- package/dist_ts/integrations/daikin/daikin.mapper.d.ts +6 -7
- package/dist_ts/integrations/daikin/daikin.mapper.js +95 -155
- package/dist_ts/integrations/daikin/daikin.types.d.ts +24 -44
- package/dist_ts/integrations/daikin/daikin.types.js +1 -1
- package/dist_ts/integrations/daikin/daikin.validation.d.ts +5 -0
- package/dist_ts/integrations/daikin/daikin.validation.js +53 -0
- package/dist_ts/integrations/denonavr/denonavr.classes.client.d.ts +31 -40
- package/dist_ts/integrations/denonavr/denonavr.classes.client.js +149 -404
- package/dist_ts/integrations/denonavr/denonavr.classes.configflow.d.ts +7 -2
- package/dist_ts/integrations/denonavr/denonavr.classes.configflow.js +44 -36
- package/dist_ts/integrations/denonavr/denonavr.classes.integration.d.ts +6 -11
- package/dist_ts/integrations/denonavr/denonavr.classes.integration.js +192 -113
- package/dist_ts/integrations/denonavr/denonavr.discovery.d.ts +10 -18
- package/dist_ts/integrations/denonavr/denonavr.discovery.js +71 -193
- package/dist_ts/integrations/denonavr/denonavr.mapper.d.ts +5 -13
- package/dist_ts/integrations/denonavr/denonavr.mapper.js +35 -159
- package/dist_ts/integrations/denonavr/denonavr.types.d.ts +55 -90
- package/dist_ts/integrations/denonavr/denonavr.validation.d.ts +10 -0
- package/dist_ts/integrations/denonavr/denonavr.validation.js +86 -0
- package/dist_ts/integrations/kodi/kodi.classes.client.d.ts +11 -45
- package/dist_ts/integrations/kodi/kodi.classes.client.js +84 -310
- package/dist_ts/integrations/kodi/kodi.classes.configflow.d.ts +9 -8
- package/dist_ts/integrations/kodi/kodi.classes.configflow.js +53 -48
- package/dist_ts/integrations/kodi/kodi.classes.integration.d.ts +11 -11
- package/dist_ts/integrations/kodi/kodi.classes.integration.js +114 -171
- package/dist_ts/integrations/kodi/kodi.discovery.js +53 -29
- package/dist_ts/integrations/kodi/kodi.mapper.d.ts +7 -2
- package/dist_ts/integrations/kodi/kodi.mapper.js +48 -10
- package/dist_ts/integrations/kodi/kodi.types.d.ts +32 -28
- package/dist_ts/integrations/kodi/kodi.validation.d.ts +9 -0
- package/dist_ts/integrations/kodi/kodi.validation.js +62 -0
- package/dist_ts/integrations/modbus/modbus.classes.client.d.ts +15 -61
- package/dist_ts/integrations/modbus/modbus.classes.client.js +117 -776
- package/dist_ts/integrations/modbus/modbus.classes.configflow.d.ts +9 -5
- package/dist_ts/integrations/modbus/modbus.classes.configflow.js +70 -38
- package/dist_ts/integrations/modbus/modbus.classes.integration.d.ts +6 -17
- package/dist_ts/integrations/modbus/modbus.classes.integration.js +133 -57
- package/dist_ts/integrations/modbus/modbus.discovery.d.ts +5 -8
- package/dist_ts/integrations/modbus/modbus.discovery.js +38 -93
- package/dist_ts/integrations/modbus/modbus.mapper.d.ts +8 -32
- package/dist_ts/integrations/modbus/modbus.mapper.js +71 -431
- package/dist_ts/integrations/modbus/modbus.types.d.ts +82 -332
- package/dist_ts/integrations/modbus/modbus.validation.d.ts +10 -0
- package/dist_ts/integrations/modbus/modbus.validation.js +128 -0
- package/dist_ts/integrations/nanoleaf/nanoleaf.classes.client.d.ts +12 -34
- package/dist_ts/integrations/nanoleaf/nanoleaf.classes.client.js +143 -231
- package/dist_ts/integrations/nanoleaf/nanoleaf.classes.configflow.d.ts +6 -1
- package/dist_ts/integrations/nanoleaf/nanoleaf.classes.configflow.js +105 -18
- package/dist_ts/integrations/nanoleaf/nanoleaf.classes.integration.d.ts +8 -8
- package/dist_ts/integrations/nanoleaf/nanoleaf.classes.integration.js +141 -155
- package/dist_ts/integrations/nanoleaf/nanoleaf.credentials.d.ts +9 -0
- package/dist_ts/integrations/nanoleaf/nanoleaf.credentials.js +35 -0
- package/dist_ts/integrations/nanoleaf/nanoleaf.mapper.d.ts +6 -18
- package/dist_ts/integrations/nanoleaf/nanoleaf.mapper.js +45 -220
- package/dist_ts/integrations/nanoleaf/nanoleaf.types.d.ts +33 -147
- package/dist_ts/integrations/nanoleaf/nanoleaf.validation.d.ts +6 -0
- package/dist_ts/integrations/nanoleaf/nanoleaf.validation.js +82 -0
- package/dist_ts/integrations/onkyo/onkyo.classes.client.d.ts +15 -20
- package/dist_ts/integrations/onkyo/onkyo.classes.client.js +161 -404
- package/dist_ts/integrations/onkyo/onkyo.classes.configflow.d.ts +9 -4
- package/dist_ts/integrations/onkyo/onkyo.classes.configflow.js +51 -6
- package/dist_ts/integrations/onkyo/onkyo.classes.integration.d.ts +22 -6
- package/dist_ts/integrations/onkyo/onkyo.classes.integration.js +144 -11
- package/dist_ts/integrations/onkyo/onkyo.discovery.d.ts +6 -1
- package/dist_ts/integrations/onkyo/onkyo.discovery.js +40 -4
- package/dist_ts/integrations/onkyo/onkyo.mapper.d.ts +7 -8
- package/dist_ts/integrations/onkyo/onkyo.mapper.js +45 -12
- package/dist_ts/integrations/onkyo/onkyo.types.d.ts +58 -8
- package/dist_ts/integrations/onkyo/onkyo.types.js +13 -102
- package/dist_ts/integrations/onkyo/onkyo.validation.d.ts +16 -0
- package/dist_ts/integrations/onkyo/onkyo.validation.js +77 -0
- package/dist_ts/integrations/panasonic_viera/panasonic_viera.classes.client.d.ts +25 -25
- package/dist_ts/integrations/panasonic_viera/panasonic_viera.classes.client.js +116 -360
- package/dist_ts/integrations/panasonic_viera/panasonic_viera.classes.configflow.d.ts +11 -3
- package/dist_ts/integrations/panasonic_viera/panasonic_viera.classes.configflow.js +76 -6
- package/dist_ts/integrations/panasonic_viera/panasonic_viera.classes.integration.d.ts +26 -4
- package/dist_ts/integrations/panasonic_viera/panasonic_viera.classes.integration.js +142 -9
- package/dist_ts/integrations/panasonic_viera/panasonic_viera.discovery.d.ts +2 -1
- package/dist_ts/integrations/panasonic_viera/panasonic_viera.discovery.js +31 -4
- package/dist_ts/integrations/panasonic_viera/panasonic_viera.mapper.d.ts +9 -9
- package/dist_ts/integrations/panasonic_viera/panasonic_viera.mapper.js +31 -149
- package/dist_ts/integrations/panasonic_viera/panasonic_viera.types.d.ts +51 -11
- package/dist_ts/integrations/panasonic_viera/panasonic_viera.types.js +22 -87
- package/dist_ts/integrations/panasonic_viera/panasonic_viera.validation.d.ts +6 -0
- package/dist_ts/integrations/panasonic_viera/panasonic_viera.validation.js +56 -0
- package/dist_ts/integrations/pioneer/pioneer.classes.client.d.ts +31 -16
- package/dist_ts/integrations/pioneer/pioneer.classes.client.js +167 -409
- package/dist_ts/integrations/pioneer/pioneer.classes.configflow.d.ts +10 -3
- package/dist_ts/integrations/pioneer/pioneer.classes.configflow.js +66 -6
- package/dist_ts/integrations/pioneer/pioneer.classes.integration.d.ts +13 -5
- package/dist_ts/integrations/pioneer/pioneer.classes.integration.js +239 -11
- package/dist_ts/integrations/pioneer/pioneer.discovery.d.ts +14 -1
- package/dist_ts/integrations/pioneer/pioneer.discovery.js +51 -4
- package/dist_ts/integrations/pioneer/pioneer.mapper.d.ts +14 -8
- package/dist_ts/integrations/pioneer/pioneer.mapper.js +54 -12
- package/dist_ts/integrations/pioneer/pioneer.types.d.ts +79 -12
- package/dist_ts/integrations/pioneer/pioneer.types.js +12 -76
- package/dist_ts/integrations/pioneer/pioneer.validation.d.ts +10 -0
- package/dist_ts/integrations/pioneer/pioneer.validation.js +85 -0
- package/dist_ts/integrations/soundtouch/soundtouch.classes.client.d.ts +13 -36
- package/dist_ts/integrations/soundtouch/soundtouch.classes.client.js +179 -502
- package/dist_ts/integrations/soundtouch/soundtouch.classes.configflow.d.ts +6 -1
- package/dist_ts/integrations/soundtouch/soundtouch.classes.configflow.js +50 -40
- package/dist_ts/integrations/soundtouch/soundtouch.classes.integration.d.ts +14 -15
- package/dist_ts/integrations/soundtouch/soundtouch.classes.integration.js +108 -128
- package/dist_ts/integrations/soundtouch/soundtouch.discovery.d.ts +2 -20
- package/dist_ts/integrations/soundtouch/soundtouch.discovery.js +23 -113
- package/dist_ts/integrations/soundtouch/soundtouch.mapper.d.ts +3 -12
- package/dist_ts/integrations/soundtouch/soundtouch.mapper.js +35 -189
- package/dist_ts/integrations/soundtouch/soundtouch.types.d.ts +57 -142
- package/dist_ts/integrations/soundtouch/soundtouch.types.js +18 -3
- package/dist_ts/integrations/soundtouch/soundtouch.validation.d.ts +22 -0
- package/dist_ts/integrations/soundtouch/soundtouch.validation.js +65 -0
- package/dist_ts/integrations/wiz/index.d.ts +1 -0
- package/dist_ts/integrations/wiz/index.js +2 -1
- package/dist_ts/integrations/wiz/wiz.classes.client.d.ts +14 -28
- package/dist_ts/integrations/wiz/wiz.classes.client.js +93 -229
- package/dist_ts/integrations/wiz/wiz.classes.configflow.d.ts +6 -4
- package/dist_ts/integrations/wiz/wiz.classes.configflow.js +38 -67
- package/dist_ts/integrations/wiz/wiz.classes.integration.d.ts +10 -21
- package/dist_ts/integrations/wiz/wiz.classes.integration.js +204 -44
- package/dist_ts/integrations/wiz/wiz.discovery.d.ts +10 -31
- package/dist_ts/integrations/wiz/wiz.discovery.js +48 -249
- package/dist_ts/integrations/wiz/wiz.mapper.d.ts +7 -51
- package/dist_ts/integrations/wiz/wiz.mapper.js +82 -668
- package/dist_ts/integrations/wiz/wiz.types.d.ts +34 -208
- package/dist_ts/integrations/wiz/wiz.validation.d.ts +8 -0
- package/dist_ts/integrations/wiz/wiz.validation.js +72 -0
- package/dist_ts/integrations/yamaha/index.d.ts +1 -0
- package/dist_ts/integrations/yamaha/index.js +2 -1
- package/dist_ts/integrations/yamaha/yamaha.classes.client.d.ts +30 -4
- package/dist_ts/integrations/yamaha/yamaha.classes.client.js +162 -6
- package/dist_ts/integrations/yamaha/yamaha.classes.configflow.d.ts +10 -3
- package/dist_ts/integrations/yamaha/yamaha.classes.configflow.js +106 -6
- package/dist_ts/integrations/yamaha/yamaha.classes.integration.d.ts +22 -4
- package/dist_ts/integrations/yamaha/yamaha.classes.integration.js +243 -8
- package/dist_ts/integrations/yamaha/yamaha.discovery.d.ts +13 -1
- package/dist_ts/integrations/yamaha/yamaha.discovery.js +57 -4
- package/dist_ts/integrations/yamaha/yamaha.mapper.d.ts +16 -8
- package/dist_ts/integrations/yamaha/yamaha.mapper.js +58 -12
- package/dist_ts/integrations/yamaha/yamaha.types.d.ts +73 -6
- package/dist_ts/integrations/yamaha/yamaha.types.js +8 -94
- package/dist_ts/integrations/yamaha/yamaha.validation.d.ts +12 -0
- package/dist_ts/integrations/yamaha/yamaha.validation.js +89 -0
- package/package.json +3 -3
- package/readme.md +514 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/core/classes.configstore.ts +84 -27
- package/ts/core/classes.nativehomeadmission.ts +96 -0
- package/ts/core/classes.nativeintegrationowner.ts +297 -0
- package/ts/core/index.ts +2 -0
- package/ts/core/types.ts +16 -0
- package/ts/integrations/braviatv/braviatv.classes.client.ts +245 -709
- package/ts/integrations/braviatv/braviatv.classes.configflow.ts +47 -76
- package/ts/integrations/braviatv/braviatv.classes.integration.ts +167 -147
- package/ts/integrations/braviatv/braviatv.discovery.ts +11 -10
- package/ts/integrations/braviatv/braviatv.mapper.ts +39 -142
- package/ts/integrations/braviatv/braviatv.types.ts +53 -173
- package/ts/integrations/braviatv/braviatv.validation.ts +68 -0
- package/ts/integrations/broadlink/broadlink.actions.ts +31 -0
- package/ts/integrations/broadlink/broadlink.classes.client.ts +170 -144
- package/ts/integrations/broadlink/broadlink.classes.configflow.ts +59 -89
- package/ts/integrations/broadlink/broadlink.classes.integration.ts +110 -64
- package/ts/integrations/broadlink/broadlink.mapper.ts +5 -4
- package/ts/integrations/broadlink/broadlink.selected.mapper.ts +46 -0
- package/ts/integrations/broadlink/broadlink.types.ts +48 -8
- package/ts/integrations/broadlink/broadlink.validation.ts +66 -0
- package/ts/integrations/daikin/daikin.classes.client.ts +52 -661
- package/ts/integrations/daikin/daikin.classes.configflow.ts +72 -152
- package/ts/integrations/daikin/daikin.classes.integration.ts +166 -71
- package/ts/integrations/daikin/daikin.discovery.ts +94 -346
- package/ts/integrations/daikin/daikin.mapper.ts +83 -166
- package/ts/integrations/daikin/daikin.types.ts +27 -48
- package/ts/integrations/daikin/daikin.validation.ts +51 -0
- package/ts/integrations/daikin/readme.md +83 -0
- package/ts/integrations/denonavr/denonavr.classes.client.ts +132 -421
- package/ts/integrations/denonavr/denonavr.classes.configflow.ts +44 -37
- package/ts/integrations/denonavr/denonavr.classes.integration.ts +171 -117
- package/ts/integrations/denonavr/denonavr.discovery.ts +67 -220
- package/ts/integrations/denonavr/denonavr.mapper.ts +36 -182
- package/ts/integrations/denonavr/denonavr.types.ts +48 -111
- package/ts/integrations/denonavr/denonavr.validation.ts +87 -0
- package/ts/integrations/kodi/kodi.classes.client.ts +72 -352
- package/ts/integrations/kodi/kodi.classes.configflow.ts +52 -55
- package/ts/integrations/kodi/kodi.classes.integration.ts +97 -178
- package/ts/integrations/kodi/kodi.discovery.ts +49 -28
- package/ts/integrations/kodi/kodi.mapper.ts +52 -10
- package/ts/integrations/kodi/kodi.types.ts +33 -58
- package/ts/integrations/kodi/kodi.validation.ts +60 -0
- package/ts/integrations/modbus/modbus.classes.client.ts +100 -842
- package/ts/integrations/modbus/modbus.classes.configflow.ts +70 -41
- package/ts/integrations/modbus/modbus.classes.integration.ts +115 -60
- package/ts/integrations/modbus/modbus.discovery.ts +38 -106
- package/ts/integrations/modbus/modbus.mapper.ts +64 -467
- package/ts/integrations/modbus/modbus.types.ts +64 -381
- package/ts/integrations/modbus/modbus.validation.ts +119 -0
- package/ts/integrations/nanoleaf/nanoleaf.classes.client.ts +115 -249
- package/ts/integrations/nanoleaf/nanoleaf.classes.configflow.ts +90 -19
- package/ts/integrations/nanoleaf/nanoleaf.classes.integration.ts +130 -181
- package/ts/integrations/nanoleaf/nanoleaf.credentials.ts +39 -0
- package/ts/integrations/nanoleaf/nanoleaf.mapper.ts +47 -260
- package/ts/integrations/nanoleaf/nanoleaf.types.ts +29 -147
- package/ts/integrations/nanoleaf/nanoleaf.validation.ts +77 -0
- package/ts/integrations/onkyo/onkyo.classes.client.ts +148 -457
- package/ts/integrations/onkyo/onkyo.classes.configflow.ts +52 -6
- package/ts/integrations/onkyo/onkyo.classes.integration.ts +121 -12
- package/ts/integrations/onkyo/onkyo.discovery.ts +41 -3
- package/ts/integrations/onkyo/onkyo.mapper.ts +46 -19
- package/ts/integrations/onkyo/onkyo.types.ts +55 -110
- package/ts/integrations/onkyo/onkyo.validation.ts +85 -0
- package/ts/integrations/onkyo/readme.md +126 -0
- package/ts/integrations/panasonic_viera/panasonic_viera.classes.client.ts +101 -398
- package/ts/integrations/panasonic_viera/panasonic_viera.classes.configflow.ts +69 -5
- package/ts/integrations/panasonic_viera/panasonic_viera.classes.integration.ts +141 -9
- package/ts/integrations/panasonic_viera/panasonic_viera.discovery.ts +32 -3
- package/ts/integrations/panasonic_viera/panasonic_viera.mapper.ts +34 -161
- package/ts/integrations/panasonic_viera/panasonic_viera.types.ts +52 -96
- package/ts/integrations/panasonic_viera/panasonic_viera.validation.ts +56 -0
- package/ts/integrations/pioneer/pioneer.classes.client.ts +132 -428
- package/ts/integrations/pioneer/pioneer.classes.configflow.ts +67 -5
- package/ts/integrations/pioneer/pioneer.classes.integration.ts +225 -11
- package/ts/integrations/pioneer/pioneer.discovery.ts +45 -3
- package/ts/integrations/pioneer/pioneer.mapper.ts +57 -13
- package/ts/integrations/pioneer/pioneer.types.ts +87 -85
- package/ts/integrations/pioneer/pioneer.validation.ts +84 -0
- package/ts/integrations/soundtouch/soundtouch.classes.client.ts +152 -571
- package/ts/integrations/soundtouch/soundtouch.classes.configflow.ts +47 -42
- package/ts/integrations/soundtouch/soundtouch.classes.integration.ts +95 -150
- package/ts/integrations/soundtouch/soundtouch.discovery.ts +21 -133
- package/ts/integrations/soundtouch/soundtouch.mapper.ts +36 -207
- package/ts/integrations/soundtouch/soundtouch.types.ts +50 -195
- package/ts/integrations/soundtouch/soundtouch.validation.ts +60 -0
- package/ts/integrations/wiz/index.ts +1 -0
- package/ts/integrations/wiz/wiz.classes.client.ts +84 -254
- package/ts/integrations/wiz/wiz.classes.configflow.ts +39 -70
- package/ts/integrations/wiz/wiz.classes.integration.ts +189 -45
- package/ts/integrations/wiz/wiz.discovery.ts +48 -291
- package/ts/integrations/wiz/wiz.mapper.ts +81 -754
- package/ts/integrations/wiz/wiz.types.ts +24 -224
- package/ts/integrations/wiz/wiz.validation.ts +73 -0
- package/ts/integrations/yamaha/index.ts +1 -0
- package/ts/integrations/yamaha/yamaha.classes.client.ts +150 -6
- package/ts/integrations/yamaha/yamaha.classes.configflow.ts +100 -5
- package/ts/integrations/yamaha/yamaha.classes.integration.ts +236 -8
- package/ts/integrations/yamaha/yamaha.discovery.ts +52 -3
- package/ts/integrations/yamaha/yamaha.mapper.ts +65 -13
- package/ts/integrations/yamaha/yamaha.types.ts +77 -97
- package/ts/integrations/yamaha/yamaha.validation.ts +86 -0
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { type NativeIntegrationScope } from '../../core/classes.nativeintegrationowner.js';
|
|
2
|
+
import type { IConfigFlow, IConfigFlowStep, IDiscoveryCandidate, INativeConfigFlowContext } from '../../core/types.js';
|
|
3
|
+
import type { IOnkyoConfig, IOnkyoIntegrationOptions } from './onkyo.types.js';
|
|
4
|
+
export declare class OnkyoConfigFlow implements IConfigFlow<IOnkyoConfig> {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(optionsArg?: IOnkyoIntegrationOptions, scopeArg?: NativeIntegrationScope);
|
|
7
|
+
start(candidateArg: IDiscoveryCandidate, contextArg: INativeConfigFlowContext): Promise<IConfigFlowStep<IOnkyoConfig>>;
|
|
8
|
+
destroy(): Promise<void>;
|
|
9
|
+
retryCleanup(): Promise<void>;
|
|
5
10
|
}
|
|
@@ -1,8 +1,53 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { NativeIntegrationOwner } from '../../core/classes.nativeintegrationowner.js';
|
|
2
|
+
import { OnkyoClient } from './onkyo.classes.client.js';
|
|
3
|
+
import { createOnkyoDiscoveryDescriptor } from './onkyo.discovery.js';
|
|
4
|
+
import { normalizeOnkyoConfig, onkyoKeys, onkyoRecord } from './onkyo.validation.js';
|
|
5
|
+
export class OnkyoConfigFlow {
|
|
6
|
+
#scope;
|
|
7
|
+
constructor(optionsArg = {}, scopeArg) {
|
|
8
|
+
this.#scope = scopeArg ?? new NativeIntegrationOwner('onkyo', optionsArg).createFlowScope();
|
|
6
9
|
}
|
|
10
|
+
async start(candidateArg, contextArg) {
|
|
11
|
+
const context = this.#scope.admit(contextArg);
|
|
12
|
+
// The owned pure validator captures the selected candidate before yielding.
|
|
13
|
+
const validation = createOnkyoDiscoveryDescriptor().getValidators()[0].validate(candidateArg, {});
|
|
14
|
+
return this.#scope.run(context, undefined, async (leaseArg) => {
|
|
15
|
+
const matched = await validation;
|
|
16
|
+
leaseArg.assertOpen();
|
|
17
|
+
if (!matched.matched || !matched.candidate)
|
|
18
|
+
return { kind: 'error', error: matched.reason };
|
|
19
|
+
const candidate = matched.candidate;
|
|
20
|
+
return {
|
|
21
|
+
kind: 'form', title: 'Connect selected Onkyo main zone',
|
|
22
|
+
description: 'Acknowledge the cleartext LAN protocol and set an absolute raw-volume ceiling. Home, endpoint, MAC and model are fixed by the host and selected candidate.',
|
|
23
|
+
fields: [
|
|
24
|
+
{ name: 'allowUnencryptedLan', label: 'Acknowledge unauthenticated cleartext LAN', type: 'boolean', required: true },
|
|
25
|
+
{ name: 'volumeLimitRaw', label: 'Maximum integer raw volume (0–100)', type: 'number', required: true },
|
|
26
|
+
{ name: 'name', label: 'Name', type: 'text' },
|
|
27
|
+
],
|
|
28
|
+
submit: async (valuesArg) => {
|
|
29
|
+
try {
|
|
30
|
+
const values = onkyoRecord(valuesArg, 'config flow values');
|
|
31
|
+
onkyoKeys(values, ['homeId', 'allowUnencryptedLan', 'volumeLimitRaw', 'name', 'requestTimeoutMs', 'maxPendingOperations']);
|
|
32
|
+
if (values.homeId !== undefined && values.homeId !== context.homeId)
|
|
33
|
+
throw new TypeError('Onkyo submitted home must match the host-selected home.');
|
|
34
|
+
const config = normalizeOnkyoConfig({ ...values, homeId: context.homeId, host: candidate.host, port: candidate.port, macAddress: candidate.macAddress, model: candidate.model });
|
|
35
|
+
return await this.#scope.run(context, config.homeId, async (operationArg) => {
|
|
36
|
+
const client = new OnkyoClient(config, operationArg.context, operationArg.signal);
|
|
37
|
+
operationArg.own(() => client.destroy());
|
|
38
|
+
await client.getSnapshot(operationArg.signal);
|
|
39
|
+
operationArg.assertOpen();
|
|
40
|
+
return { kind: 'done', title: 'Onkyo receiver validated', config };
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
catch (errorArg) {
|
|
44
|
+
return { kind: 'error', error: errorArg instanceof Error ? errorArg.message : 'Onkyo setup validation failed.' };
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
destroy() { return this.#scope.close(); }
|
|
51
|
+
retryCleanup() { return this.#scope.retryCleanup(); }
|
|
7
52
|
}
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25reW8uY2xhc3Nlcy5jb25maWdmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvaW50ZWdyYXRpb25zL29ua3lvL29ua3lvLmNsYXNzZXMuY29uZmlnZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQStCLE1BQU0sOENBQThDLENBQUM7QUFFbkgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckYsTUFBTSxPQUFPLGVBQWU7SUFDakIsTUFBTSxDQUF5QjtJQUV4QyxZQUFZLFVBQVUsR0FBNkIsRUFBRSxFQUFFLFFBQWlDO1FBQ3RGLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxJQUFJLElBQUksc0JBQXNCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzlGLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQWlDLEVBQUUsVUFBb0M7UUFDeEYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUMsNEVBQTRFO1FBQzVFLE1BQU0sVUFBVSxHQUFHLDhCQUE4QixFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsRyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFnQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUMzRixNQUFNLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQztZQUNqQyxRQUFRLENB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
|
|
@@ -1,12 +1,28 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BaseIntegration } from '../../core/classes.baseintegration.js';
|
|
2
|
+
import type { IIntegrationRuntime, INativeIntegrationSetupContext } from '../../core/types.js';
|
|
2
3
|
import { OnkyoConfigFlow } from './onkyo.classes.configflow.js';
|
|
3
|
-
import type { IOnkyoConfig } from './onkyo.types.js';
|
|
4
|
-
export declare class OnkyoIntegration extends
|
|
4
|
+
import type { IOnkyoConfig, IOnkyoIntegrationOptions } from './onkyo.types.js';
|
|
5
|
+
export declare class OnkyoIntegration extends BaseIntegration<IOnkyoConfig> {
|
|
6
|
+
#private;
|
|
5
7
|
readonly domain = "onkyo";
|
|
6
|
-
readonly
|
|
8
|
+
readonly displayName = "Onkyo";
|
|
9
|
+
readonly status: 'control-runtime';
|
|
10
|
+
readonly metadata: {
|
|
11
|
+
readonly source: 'home-assistant/core';
|
|
12
|
+
readonly upstreamDomain: "onkyo";
|
|
13
|
+
readonly configFlow: true;
|
|
14
|
+
readonly localApi: {
|
|
15
|
+
readonly status: 'Selected native Onkyo main-zone eISCP TCP through devicemanager.';
|
|
16
|
+
readonly implemented: readonly ['selected unicast UDP advertisement', 'live MAC/model and enabled main-zone admission', 'explicit power/mute, advertised input selectors and bounded absolute integer raw volume', 'explicit captured host home and optional actual caller-owned NoSQL store', 'events from explicit observations and joined terminal shutdown'];
|
|
17
|
+
readonly explicitUnsupported: readonly ['broadcast discovery', 'cloud access', 'injected clients and snapshots', 'other zones', 'percentage or half-step volume conversion', 'toggle/increment/media transport/arbitrary commands', 'automatic reconnect, effect retry or replay', 'unsolicited push subscription', 'cryptographic LAN peer authentication'];
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
readonly discoveryDescriptor: import("../../index.js").DiscoveryDescriptor;
|
|
7
21
|
readonly configFlow: OnkyoConfigFlow;
|
|
8
|
-
constructor();
|
|
9
|
-
setup(configArg: IOnkyoConfig, contextArg:
|
|
22
|
+
constructor(optionsArg?: IOnkyoIntegrationOptions);
|
|
23
|
+
setup(configArg: IOnkyoConfig, contextArg: INativeIntegrationSetupContext): Promise<IIntegrationRuntime>;
|
|
24
|
+
destroy(): Promise<void>;
|
|
25
|
+
retryCleanup(): Promise<void>;
|
|
10
26
|
}
|
|
11
27
|
export declare class HomeAssistantOnkyoIntegration extends OnkyoIntegration {
|
|
12
28
|
}
|
|
@@ -1,20 +1,153 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import { BaseIntegration } from '../../core/classes.baseintegration.js';
|
|
3
|
+
import { NativeIntegrationOwner } from '../../core/classes.nativeintegrationowner.js';
|
|
2
4
|
import { OnkyoClient } from './onkyo.classes.client.js';
|
|
3
5
|
import { OnkyoConfigFlow } from './onkyo.classes.configflow.js';
|
|
4
6
|
import { createOnkyoDiscoveryDescriptor } from './onkyo.discovery.js';
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
import { OnkyoMapper } from './onkyo.mapper.js';
|
|
8
|
+
import { onkyoProfile } from './onkyo.types.js';
|
|
9
|
+
import { normalizeOnkyoConfig, onkyoBoolean, onkyoInputId, onkyoInteger, onkyoKeys, onkyoRecord } from './onkyo.validation.js';
|
|
10
|
+
export class OnkyoIntegration extends BaseIntegration {
|
|
11
|
+
domain = 'onkyo';
|
|
12
|
+
displayName = 'Onkyo';
|
|
13
|
+
status = 'control-runtime';
|
|
14
|
+
metadata = onkyoProfile.metadata;
|
|
8
15
|
discoveryDescriptor = createOnkyoDiscoveryDescriptor();
|
|
9
|
-
configFlow
|
|
10
|
-
|
|
11
|
-
|
|
16
|
+
configFlow;
|
|
17
|
+
#owner;
|
|
18
|
+
constructor(optionsArg = {}) {
|
|
19
|
+
super();
|
|
20
|
+
this.#owner = new NativeIntegrationOwner('onkyo', optionsArg);
|
|
21
|
+
this.configFlow = new OnkyoConfigFlow(optionsArg, this.#owner.createFlowScope());
|
|
12
22
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
23
|
+
setup(configArg, contextArg) {
|
|
24
|
+
let config;
|
|
25
|
+
try {
|
|
26
|
+
config = normalizeOnkyoConfig(configArg);
|
|
27
|
+
}
|
|
28
|
+
catch (errorArg) {
|
|
29
|
+
return Promise.reject(errorArg);
|
|
30
|
+
}
|
|
31
|
+
return this.#owner.runSetup(contextArg, config.homeId, async (leaseArg) => {
|
|
32
|
+
const client = new OnkyoClient(config, leaseArg.context, leaseArg.signal);
|
|
33
|
+
leaseArg.own(() => client.destroy());
|
|
34
|
+
const snapshot = await client.getSnapshot(leaseArg.signal);
|
|
35
|
+
leaseArg.assertOpen();
|
|
36
|
+
const runtime = new OnkyoRuntime(client, snapshot, () => leaseArg.close());
|
|
37
|
+
leaseArg.promoteToRuntime();
|
|
38
|
+
return runtime;
|
|
39
|
+
});
|
|
16
40
|
}
|
|
41
|
+
destroy() { return this.#owner.close(); }
|
|
42
|
+
retryCleanup() { return this.#owner.retryCleanup(); }
|
|
17
43
|
}
|
|
18
44
|
export class HomeAssistantOnkyoIntegration extends OnkyoIntegration {
|
|
19
45
|
}
|
|
20
|
-
|
|
46
|
+
class OnkyoRuntime {
|
|
47
|
+
client;
|
|
48
|
+
closeLease;
|
|
49
|
+
domain = 'onkyo';
|
|
50
|
+
#deviceId;
|
|
51
|
+
#entityId;
|
|
52
|
+
#closePromise;
|
|
53
|
+
constructor(client, snapshotArg, closeLease) {
|
|
54
|
+
this.client = client;
|
|
55
|
+
this.closeLease = closeLease;
|
|
56
|
+
this.#deviceId = OnkyoMapper.deviceId(snapshotArg);
|
|
57
|
+
this.#entityId = OnkyoMapper.mediaEntityId(snapshotArg);
|
|
58
|
+
}
|
|
59
|
+
isHealthy() { return this.client.isHealthy(); }
|
|
60
|
+
async devices(signalArg) { return OnkyoMapper.toDevices(await this.client.getSnapshot(signalArg)); }
|
|
61
|
+
async entities() { return OnkyoMapper.toEntities(await this.client.getSnapshot()); }
|
|
62
|
+
async subscribe(handlerArg, signalArg) {
|
|
63
|
+
if (typeof handlerArg !== 'function')
|
|
64
|
+
throw new TypeError('Onkyo runtime subscriber must be a function.');
|
|
65
|
+
const unsubscribe = this.client.subscribe((eventArg) => {
|
|
66
|
+
const event = {
|
|
67
|
+
type: eventArg.type === 'error' ? 'error' : 'state_changed', integrationDomain: 'onkyo', deviceId: this.#deviceId,
|
|
68
|
+
entityId: this.#entityId, timestamp: Date.now(),
|
|
69
|
+
data: eventArg.type === 'snapshot' ? { snapshot: eventArg.snapshot, entity: OnkyoMapper.toEntities(eventArg.snapshot)[0] } :
|
|
70
|
+
eventArg.type === 'control' ? { observation: eventArg.observation } : { message: eventArg.error.message },
|
|
71
|
+
};
|
|
72
|
+
handlerArg(event);
|
|
73
|
+
}, signalArg);
|
|
74
|
+
return async () => unsubscribe();
|
|
75
|
+
}
|
|
76
|
+
async callService(requestArg) {
|
|
77
|
+
try {
|
|
78
|
+
const request = onkyoRecord(requestArg, 'service request');
|
|
79
|
+
onkyoKeys(request, ['domain', 'service', 'target', 'data']);
|
|
80
|
+
if (typeof request.domain !== 'string' || typeof request.service !== 'string')
|
|
81
|
+
throw new TypeError('Onkyo service domain and service must be strings.');
|
|
82
|
+
this.#assertTarget(request.target);
|
|
83
|
+
const data = request.data === undefined ? {} : onkyoRecord(request.data, 'service data');
|
|
84
|
+
if (request.domain === 'onkyo' && ['status', 'snapshot', 'refresh'].includes(request.service)) {
|
|
85
|
+
onkyoKeys(data, []);
|
|
86
|
+
return { success: true, data: await this.client.getSnapshot() };
|
|
87
|
+
}
|
|
88
|
+
if (request.domain !== 'onkyo' && request.domain !== 'media_player')
|
|
89
|
+
throw new TypeError('Onkyo service domain is unsupported.');
|
|
90
|
+
if (request.service === 'set_power') {
|
|
91
|
+
onkyoKeys(data, ['power']);
|
|
92
|
+
return observed(await this.client.setPower(onkyoBoolean(data.power, 'power')));
|
|
93
|
+
}
|
|
94
|
+
if (request.service === 'set_mute' || request.service === 'volume_mute') {
|
|
95
|
+
onkyoKeys(data, ['muted']);
|
|
96
|
+
return observed(await this.client.setMuted(onkyoBoolean(data.muted, 'mute')));
|
|
97
|
+
}
|
|
98
|
+
if (request.service === 'set_volume_raw') {
|
|
99
|
+
onkyoKeys(data, ['volumeRaw']);
|
|
100
|
+
return observed(await this.client.setVolume(onkyoInteger(data.volumeRaw, 0, 100, 'raw volume')));
|
|
101
|
+
}
|
|
102
|
+
if (request.service === 'set_input' || request.service === 'select_source') {
|
|
103
|
+
onkyoKeys(data, ['inputId']);
|
|
104
|
+
return observed(await this.client.setInput(onkyoInputId(data.inputId)));
|
|
105
|
+
}
|
|
106
|
+
throw new TypeError('Onkyo service is unsupported.');
|
|
107
|
+
}
|
|
108
|
+
catch (errorArg) {
|
|
109
|
+
return failed(errorArg);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async writeFeature(requestArg, signalArg) {
|
|
113
|
+
try {
|
|
114
|
+
const request = onkyoRecord(requestArg, 'feature write');
|
|
115
|
+
onkyoKeys(request, ['device', 'feature', 'value']);
|
|
116
|
+
const device = onkyoRecord(request.device, 'feature device');
|
|
117
|
+
const feature = onkyoRecord(request.feature, 'feature');
|
|
118
|
+
if (device.id !== this.#deviceId || device.integrationDomain !== 'onkyo')
|
|
119
|
+
throw new TypeError('Onkyo feature device is not owned by this home runtime.');
|
|
120
|
+
if (typeof feature.id !== 'string')
|
|
121
|
+
throw new TypeError('Onkyo feature id must be a string.');
|
|
122
|
+
const value = request.value;
|
|
123
|
+
if (typeof value !== 'boolean' && typeof value !== 'number' && typeof value !== 'string')
|
|
124
|
+
throw new TypeError('Onkyo control requires an explicit primitive value.');
|
|
125
|
+
return observed(await this.client.writeFeature(feature.id, value, signalArg));
|
|
126
|
+
}
|
|
127
|
+
catch (errorArg) {
|
|
128
|
+
return failed(errorArg);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
destroy() {
|
|
132
|
+
this.#closePromise ??= Promise.resolve().then(() => this.closeLease());
|
|
133
|
+
return this.#closePromise;
|
|
134
|
+
}
|
|
135
|
+
#assertTarget(valueArg) {
|
|
136
|
+
const target = onkyoRecord(valueArg, 'service target');
|
|
137
|
+
onkyoKeys(target, ['deviceId', 'entityId']);
|
|
138
|
+
if (target.deviceId === undefined && target.entityId === undefined ||
|
|
139
|
+
target.deviceId !== undefined && target.deviceId !== this.#deviceId ||
|
|
140
|
+
target.entityId !== undefined && target.entityId !== this.#entityId)
|
|
141
|
+
throw new TypeError('Onkyo services require an exact owned device or main-zone entity target.');
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function observed(observationArg) {
|
|
145
|
+
return { success: true, data: { ...observationArg } };
|
|
146
|
+
}
|
|
147
|
+
function failed(errorArg) {
|
|
148
|
+
return { success: false, error: errorArg instanceof Error ? errorArg.message : 'Onkyo operation failed.', data: {
|
|
149
|
+
effectOutcome: errorArg instanceof plugins.ecobridgeDeviceManager.OnkyoProtocolError ? errorArg.effectOutcome : 'not-sent',
|
|
150
|
+
code: errorArg instanceof plugins.ecobridgeDeviceManager.OnkyoProtocolError ? errorArg.code : 'INVALID_OPERATION',
|
|
151
|
+
} };
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25reW8uY2xhc3Nlcy5pbnRlZ3JhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ludGVncmF0aW9ucy9vbmt5by9vbmt5by5jbGFzc2VzLmludGVncmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXRGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWhELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9ILE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxlQUE2QjtJQUNqRCxNQUFNLEdBQUcsT0FBTyxDQUFDO0lBQ2pCLFdBQVcsR0FBRyxPQUFPLENBQUM7SUFDdEIsTUFBTSxHQUFHLGlCQUEwQixDQUFDO0lBQ3BDLFFBQVEsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQ2pDLG1CQUFtQixHQUFHLDhCQUE4QixFQUFFLENBQUM7SUFDdkQsVUFBVSxDQUFrQjtJQUNuQyxNQUFNLENBQXlCO0lBRXhDLFlBQVksVUFBVSxHQUE2QixFQUFFO1FBQ25ELEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLHNC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
|
|
@@ -1 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { DiscoveryDescriptor } from '../../core/classes.discoverydescriptor.js';
|
|
2
|
+
import type { IDiscoveryCandidate } from '../../core/types.js';
|
|
3
|
+
import type { IOnkyoSelectedProbeOptions } from './onkyo.types.js';
|
|
4
|
+
export declare function createOnkyoDiscoveryDescriptor(): DiscoveryDescriptor;
|
|
5
|
+
/** One explicitly selected unicast UDP probe; TCP setup still validates the chosen identity. */
|
|
6
|
+
export declare function probeSelectedOnkyo(optionsArg: IOnkyoSelectedProbeOptions): Promise<IDiscoveryCandidate>;
|
|
@@ -1,4 +1,40 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import { DiscoveryDescriptor } from '../../core/classes.discoverydescriptor.js';
|
|
3
|
+
import { onkyoHost, onkyoInteger, onkyoKeys, onkyoName, onkyoRecord, readOnkyoEndpoint } from './onkyo.validation.js';
|
|
4
|
+
function matchCandidate(valueArg) {
|
|
5
|
+
try {
|
|
6
|
+
const input = onkyoRecord(valueArg, 'discovery candidate');
|
|
7
|
+
if (input.source !== 'manual' && input.source !== 'custom' || input.integrationDomain !== 'onkyo') {
|
|
8
|
+
return { matched: false, confidence: 'low', reason: 'An explicit manual/custom Onkyo candidate is required.' };
|
|
9
|
+
}
|
|
10
|
+
const candidate = {
|
|
11
|
+
source: input.source, integrationDomain: 'onkyo', ...readOnkyoEndpoint(input.host, input.macAddress, input.model, input.port),
|
|
12
|
+
name: input.name === undefined ? undefined : onkyoName(input.name, 'candidate name'),
|
|
13
|
+
};
|
|
14
|
+
return { matched: true, confidence: 'medium', reason: 'Explicit endpoint/MAC/model binding; live identity and main zone are checked during setup.', candidate };
|
|
15
|
+
}
|
|
16
|
+
catch (errorArg) {
|
|
17
|
+
return { matched: false, confidence: 'low', reason: errorArg instanceof Error ? errorArg.message : 'Invalid Onkyo candidate.' };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export function createOnkyoDiscoveryDescriptor() {
|
|
21
|
+
return new DiscoveryDescriptor({ integrationDomain: 'onkyo', displayName: 'Onkyo' })
|
|
22
|
+
.addMatcher({ id: 'onkyo-manual-match', source: 'manual', matches: async (inputArg) => matchCandidate(inputArg) })
|
|
23
|
+
.addMatcher({ id: 'onkyo-custom-match', source: 'custom', matches: async (inputArg) => matchCandidate(inputArg) })
|
|
24
|
+
.addValidator({ id: 'onkyo-explicit-endpoint', validate: async (candidateArg) => matchCandidate(candidateArg) });
|
|
25
|
+
}
|
|
26
|
+
/** One explicitly selected unicast UDP probe; TCP setup still validates the chosen identity. */
|
|
27
|
+
export async function probeSelectedOnkyo(optionsArg) {
|
|
28
|
+
const options = onkyoRecord(optionsArg, 'selected probe options');
|
|
29
|
+
onkyoKeys(options, ['host', 'port', 'requestTimeoutMs', 'signal']);
|
|
30
|
+
if (options.signal !== undefined && !(options.signal instanceof AbortSignal))
|
|
31
|
+
throw new TypeError('Onkyo probe signal must be an AbortSignal.');
|
|
32
|
+
const advertisement = await plugins.ecobridgeDeviceManager.probeOnkyo({
|
|
33
|
+
address: onkyoHost(options.host), port: options.port === undefined ? undefined : onkyoInteger(options.port, 1, 65535, 'probe port'),
|
|
34
|
+
timeoutMs: options.requestTimeoutMs === undefined ? undefined : onkyoInteger(options.requestTimeoutMs, 1, 60000, 'probe deadline'),
|
|
35
|
+
signal: options.signal,
|
|
36
|
+
});
|
|
37
|
+
return { source: 'custom', integrationDomain: 'onkyo', host: advertisement.address, port: advertisement.port,
|
|
38
|
+
model: advertisement.model, macAddress: advertisement.macAddress, manufacturer: 'Onkyo', metadata: { area: advertisement.area } };
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25reW8uZGlzY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvaW50ZWdyYXRpb25zL29ua3lvL29ua3lvLmRpc2NvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBR2hGLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEgsU0FBUyxjQUFjLENBQUMsUUFBaUI7SUFDdkMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQzNELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLGlCQUFpQixLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ2xHLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLHdEQUF3RCxFQUFFLENBQUM7UUFDakgsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUF3QjtZQUNyQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQzdILElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUks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
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import type * as
|
|
2
|
-
import {
|
|
3
|
-
import type {
|
|
1
|
+
import type * as plugins from '../../plugins.js';
|
|
2
|
+
import type { IIntegrationEntity } from '../../core/types.js';
|
|
3
|
+
import type { IOnkyoSnapshot } from './onkyo.types.js';
|
|
4
4
|
export declare class OnkyoMapper {
|
|
5
|
-
static
|
|
6
|
-
static
|
|
7
|
-
static toDevices(snapshotArg:
|
|
8
|
-
static toEntities(snapshotArg:
|
|
9
|
-
static slug(valueArg: unknown): string;
|
|
5
|
+
static deviceId(snapshotArg: Pick<IOnkyoSnapshot, 'homeId' | 'receiver'>): string;
|
|
6
|
+
static mediaEntityId(snapshotArg: Pick<IOnkyoSnapshot, 'homeId' | 'receiver'>): string;
|
|
7
|
+
static toDevices(snapshotArg: IOnkyoSnapshot): plugins.shxInterfaces.data.IDeviceDefinition[];
|
|
8
|
+
static toEntities(snapshotArg: IOnkyoSnapshot): IIntegrationEntity[];
|
|
10
9
|
}
|
|
@@ -1,20 +1,53 @@
|
|
|
1
|
-
import { SimpleLocalMapper } from '../../core/index.js';
|
|
2
|
-
import { onkyoProfile } from './onkyo.types.js';
|
|
3
1
|
export class OnkyoMapper {
|
|
4
|
-
static
|
|
5
|
-
return
|
|
2
|
+
static deviceId(snapshotArg) {
|
|
3
|
+
return `onkyo:${encodeURIComponent(snapshotArg.homeId)}:${snapshotArg.receiver.macAddress}`;
|
|
6
4
|
}
|
|
7
|
-
static
|
|
8
|
-
return
|
|
5
|
+
static mediaEntityId(snapshotArg) {
|
|
6
|
+
return `${this.deviceId(snapshotArg)}:main`;
|
|
9
7
|
}
|
|
10
8
|
static toDevices(snapshotArg) {
|
|
11
|
-
|
|
9
|
+
const receiver = snapshotArg.receiver;
|
|
10
|
+
const features = [
|
|
11
|
+
{ id: 'connectivity', capability: 'sensor', name: 'Connectivity', readable: true, writable: false },
|
|
12
|
+
{ id: 'identity', capability: 'sensor', name: 'Receiver identity', readable: true, writable: false },
|
|
13
|
+
{ id: 'inputs', capability: 'sensor', name: 'Advertised main-zone inputs', readable: true, writable: false },
|
|
14
|
+
];
|
|
15
|
+
const state = [
|
|
16
|
+
{ featureId: 'connectivity', value: 'online', updatedAt: snapshotArg.observedAt },
|
|
17
|
+
{ featureId: 'identity', value: { macAddress: receiver.macAddress, model: receiver.model, brand: receiver.brand }, updatedAt: snapshotArg.observedAt },
|
|
18
|
+
{ featureId: 'inputs', value: { inputs: receiver.inputs.map((inputArg) => ({ ...inputArg })) }, updatedAt: snapshotArg.observedAt },
|
|
19
|
+
];
|
|
20
|
+
const add = (idArg, nameArg, valueArg, writableArg, unitArg) => {
|
|
21
|
+
features.push({ id: idArg, capability: 'media', name: nameArg, readable: true, writable: writableArg, ...(unitArg ? { unit: unitArg } : {}) });
|
|
22
|
+
state.push({ featureId: idArg, value: valueArg, updatedAt: snapshotArg.observedAt });
|
|
23
|
+
};
|
|
24
|
+
if (snapshotArg.power !== undefined)
|
|
25
|
+
add('power', 'Power', snapshotArg.power, true);
|
|
26
|
+
if (snapshotArg.muted !== undefined)
|
|
27
|
+
add('mute', 'Mute', snapshotArg.muted, true);
|
|
28
|
+
if (snapshotArg.volumeRaw !== undefined)
|
|
29
|
+
add('volume_raw', 'Absolute raw volume', snapshotArg.volumeRaw, receiver.integerVolumeMaximum !== undefined && snapshotArg.volumeRaw <= receiver.integerVolumeMaximum, 'receiver raw units');
|
|
30
|
+
if (snapshotArg.inputId !== undefined)
|
|
31
|
+
add('input', 'Input selector', snapshotArg.inputId, receiver.inputs.length > 0);
|
|
32
|
+
return [{
|
|
33
|
+
id: this.deviceId(snapshotArg), integrationDomain: 'onkyo', name: snapshotArg.name, manufacturer: 'Onkyo',
|
|
34
|
+
model: receiver.model, protocol: 'tcp', online: snapshotArg.online, features, state,
|
|
35
|
+
metadata: { homeId: snapshotArg.homeId, macAddress: receiver.macAddress, zone: 'main', wireProtocol: 'eiscp', lanAuthenticated: false,
|
|
36
|
+
inputs: receiver.inputs.map((inputArg) => ({ ...inputArg })), integerVolumeMaximum: receiver.integerVolumeMaximum,
|
|
37
|
+
volumeLimitRaw: snapshotArg.volumeLimitRaw,
|
|
38
|
+
...(receiver.integerVolumeMaximum === undefined ? {} : { volumeRange: { minimumRaw: 0, maximumRaw: Math.min(receiver.integerVolumeMaximum, snapshotArg.volumeLimitRaw) } }),
|
|
39
|
+
observedAt: snapshotArg.observedAt },
|
|
40
|
+
}];
|
|
12
41
|
}
|
|
13
42
|
static toEntities(snapshotArg) {
|
|
14
|
-
return
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
43
|
+
return [{
|
|
44
|
+
id: this.mediaEntityId(snapshotArg), uniqueId: this.mediaEntityId(snapshotArg), deviceId: this.deviceId(snapshotArg),
|
|
45
|
+
integrationDomain: 'onkyo', platform: 'media_player', name: snapshotArg.name,
|
|
46
|
+
state: snapshotArg.power === undefined ? 'unknown' : snapshotArg.power ? 'on' : 'off', available: snapshotArg.online,
|
|
47
|
+
attributes: { power: snapshotArg.power, muted: snapshotArg.muted, volumeRaw: snapshotArg.volumeRaw, inputId: snapshotArg.inputId,
|
|
48
|
+
inputs: snapshotArg.receiver.inputs.map((inputArg) => ({ ...inputArg })), integerVolumeMaximum: snapshotArg.receiver.integerVolumeMaximum,
|
|
49
|
+
volumeLimitRaw: snapshotArg.volumeLimitRaw, zone: 'main', observedAt: snapshotArg.observedAt },
|
|
50
|
+
}];
|
|
18
51
|
}
|
|
19
52
|
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25reW8ubWFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvaW50ZWdyYXRpb25zL29ua3lvL29ua3lvLm1hcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLE9BQU8sV0FBVztJQUNmLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBd0Q7UUFDN0UsT0FBTyxTQUFTLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzlGLENBQUM7SUFDTSxNQUFNLENBQUMsYUFBYSxDQUFDLFdBQXdEO1FBQ2xGLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7SUFDOUMsQ0FBQztJQUNNLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBMkI7UUFDakQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQztRQUN0QyxNQUFNLFFBQVEsR0FBZ0Q7WUFDNUQsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7WUFDbkcsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtZQUNwRyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsNkJBQTZCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO1NBQzdHLENBQUM7UUFDRixNQUFNLEtBQUssR0FBOEM7WUFDdkQsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUU7WUFDakYsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUU7WUFDdEosRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUU7U0FDcEksQ0FBQztRQUNGLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBYSxFQUFFLE9BQWUsRUFBRSxRQUFtQyxFQUFFLFdBQW9CLEVBQUUsT0FBZ0IsRUFBUSxFQUFFO1lBQ2hJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUN2RixDQUFDLENBQUM7UUFDRixJQUFJLFdBQVcsQ0FBQyxLQUFLLEtBQUssU0FBUztZQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEYsSUFBSSxXQUFXLENBQUMsS0FBSyxLQUFLLFNBQVM7WUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xGLElBQUksV0FBVyxDQUFDLFNBQVMsS0FBSyxTQUFTO1lBQUUsR0FBRyxDQUFDLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxXQUFXLENBQUMsU0FBUyxFQUNyRyxRQUFRLENBQUMsb0JBQW9CLEtBQUssU0FBUyxJQUFJLFdBQVcsQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDLG9CQUFvQixFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDL0gsSUFBSSxXQUFXLENBQUMsT0FBTyxLQUFLLFNBQVM7WUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkgsT0FBTyxDQUFDO2dCQUNOLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTztnQkFDekcsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSztnQkFDbkYsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLEtBQUs7b0JBQ25JLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsQ0FBQyxvQkFBb0I7b0JBQ2pILGNBQWMsRUFBRSxXQUFXLENBQUMsY0FBYztvQkFDMUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUMzSyxVQUFVLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRTthQUN2QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ00sTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUEyQjtRQUNsRCxPQUFPLENBQUM7Z0JBQ04sRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO2dCQUNwSCxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7Z0JBQzVFLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLE1BQU07Z0JBQ3BILFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsT0FBTztvQkFDOUgsTUFBTSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsb0JBQW9CO29CQUN6SSxjQUFjLEVBQUUsV0FBVyxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFO2FBQ2pHLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiJ9
|
|
@@ -1,16 +1,66 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type * as plugins from '../../plugins.js';
|
|
2
2
|
export declare const onkyoDomain = "onkyo";
|
|
3
3
|
export declare const onkyoDefaultName = "Onkyo";
|
|
4
4
|
export declare const onkyoDefaultPort = 60128;
|
|
5
5
|
export declare const onkyoDefaultTimeoutMs = 5000;
|
|
6
|
-
export
|
|
7
|
-
|
|
6
|
+
export interface IOnkyoIntegrationOptions {
|
|
7
|
+
/** A consistency binding; setup and flow still require explicit host home. */
|
|
8
|
+
readonly homeId?: string;
|
|
9
|
+
/** Shared pending/runtime/flow/retained-cleanup capacity; defaults to 16. */
|
|
10
|
+
readonly capacity?: number;
|
|
8
11
|
}
|
|
9
|
-
export interface IOnkyoConfig
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
export interface IOnkyoConfig {
|
|
13
|
+
homeId: string;
|
|
14
|
+
host: string;
|
|
15
|
+
macAddress: string;
|
|
16
|
+
model: string;
|
|
17
|
+
/** The selected identity does not authenticate the cleartext LAN peer. */
|
|
18
|
+
allowUnencryptedLan: true;
|
|
19
|
+
/** Absolute integer receiver units; no percent or half-step conversion. */
|
|
20
|
+
volumeLimitRaw: number;
|
|
21
|
+
port?: number;
|
|
22
|
+
name?: string;
|
|
23
|
+
requestTimeoutMs?: number;
|
|
24
|
+
maxPendingOperations?: number;
|
|
13
25
|
}
|
|
14
26
|
export interface IHomeAssistantOnkyoConfig extends IOnkyoConfig {
|
|
15
27
|
}
|
|
16
|
-
|
|
28
|
+
/** Sequential live observations, never an injectable production data source. */
|
|
29
|
+
export interface IOnkyoSnapshot extends plugins.ecobridgeDeviceManager.IOnkyoState {
|
|
30
|
+
readonly homeId: string;
|
|
31
|
+
readonly name: string;
|
|
32
|
+
readonly volumeLimitRaw: number;
|
|
33
|
+
readonly online: true;
|
|
34
|
+
}
|
|
35
|
+
export type TOnkyoRawData = IOnkyoSnapshot;
|
|
36
|
+
export type TOnkyoClientEvent = {
|
|
37
|
+
type: 'snapshot';
|
|
38
|
+
snapshot: IOnkyoSnapshot;
|
|
39
|
+
} | {
|
|
40
|
+
type: 'control';
|
|
41
|
+
observation: plugins.ecobridgeDeviceManager.IOnkyoControlObservation;
|
|
42
|
+
} | {
|
|
43
|
+
type: 'error';
|
|
44
|
+
error: Error;
|
|
45
|
+
};
|
|
46
|
+
export interface IOnkyoSelectedProbeOptions {
|
|
47
|
+
host: string;
|
|
48
|
+
port?: number;
|
|
49
|
+
requestTimeoutMs?: number;
|
|
50
|
+
signal?: AbortSignal;
|
|
51
|
+
}
|
|
52
|
+
export declare const onkyoProfile: {
|
|
53
|
+
readonly domain: "onkyo";
|
|
54
|
+
readonly displayName: "Onkyo";
|
|
55
|
+
readonly status: 'control-runtime';
|
|
56
|
+
readonly metadata: {
|
|
57
|
+
readonly source: 'home-assistant/core';
|
|
58
|
+
readonly upstreamDomain: "onkyo";
|
|
59
|
+
readonly configFlow: true;
|
|
60
|
+
readonly localApi: {
|
|
61
|
+
readonly status: 'Selected native Onkyo main-zone eISCP TCP through devicemanager.';
|
|
62
|
+
readonly implemented: readonly ['selected unicast UDP advertisement', 'live MAC/model and enabled main-zone admission', 'explicit power/mute, advertised input selectors and bounded absolute integer raw volume', 'explicit captured host home and optional actual caller-owned NoSQL store', 'events from explicit observations and joined terminal shutdown'];
|
|
63
|
+
readonly explicitUnsupported: readonly ['broadcast discovery', 'cloud access', 'injected clients and snapshots', 'other zones', 'percentage or half-step volume conversion', 'toggle/increment/media transport/arbitrary commands', 'automatic reconnect, effect retry or replay', 'unsolicited push subscription', 'cryptographic LAN peer authentication'];
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
};
|