@fastybird/smart-panel-backend 0.1.0-alpha.6 → 0.1.0-alpha.8
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/dist/app.module.js +5 -0
- package/dist/app.module.js.map +1 -1
- package/dist/migrations/1000000000000-InitialSetup.js +23 -13
- package/dist/migrations/1000000000000-InitialSetup.js.map +1 -1
- package/dist/migrations/1000000000001-AddSceneIcon.d.ts +6 -0
- package/dist/migrations/1000000000001-AddSceneIcon.js +22 -0
- package/dist/migrations/1000000000001-AddSceneIcon.js.map +1 -0
- package/dist/modules/auth/auth.module.js +1 -1
- package/dist/modules/auth/auth.module.js.map +1 -1
- package/dist/modules/dashboard/dashboard.module.js +1 -1
- package/dist/modules/dashboard/dashboard.module.js.map +1 -1
- package/dist/modules/devices/services/devices-type-mapper.service.d.ts +1 -1
- package/dist/modules/devices/services/devices.service.d.ts +1 -0
- package/dist/modules/devices/services/devices.service.js +22 -23
- package/dist/modules/devices/services/devices.service.js.map +1 -1
- package/dist/modules/scenes/dto/create-scene.dto.d.ts +1 -0
- package/dist/modules/scenes/dto/create-scene.dto.js +13 -0
- package/dist/modules/scenes/dto/create-scene.dto.js.map +1 -1
- package/dist/modules/scenes/dto/update-scene.dto.d.ts +1 -0
- package/dist/modules/scenes/dto/update-scene.dto.js +13 -0
- package/dist/modules/scenes/dto/update-scene.dto.js.map +1 -1
- package/dist/modules/scenes/entities/scenes.entity.d.ts +1 -0
- package/dist/modules/scenes/entities/scenes.entity.js +13 -0
- package/dist/modules/scenes/entities/scenes.entity.js.map +1 -1
- package/dist/modules/storage/models/config.model.js +2 -4
- package/dist/modules/storage/models/config.model.js.map +1 -1
- package/dist/modules/storage/storage.constants.d.ts +2 -0
- package/dist/modules/storage/storage.constants.js +3 -1
- package/dist/modules/storage/storage.constants.js.map +1 -1
- package/dist/modules/storage/storage.module.js +1 -3
- package/dist/modules/storage/storage.module.js.map +1 -1
- package/dist/modules/system/commands/update-panel.command.js +7 -12
- package/dist/modules/system/commands/update-panel.command.js.map +1 -1
- package/dist/modules/system/services/update.service.d.ts +2 -0
- package/dist/modules/system/services/update.service.js +37 -17
- package/dist/modules/system/services/update.service.js.map +1 -1
- package/dist/plugins/data-sources-device-channel/data-sources-device-channel.plugin.js +1 -1
- package/dist/plugins/data-sources-device-channel/data-sources-device-channel.plugin.js.map +1 -1
- package/dist/plugins/data-sources-weather/data-sources-weather.plugin.js +1 -1
- package/dist/plugins/data-sources-weather/data-sources-weather.plugin.js.map +1 -1
- package/dist/plugins/devices-home-assistant/devices-home-assistant.openapi.d.ts +2 -2
- package/dist/plugins/devices-home-assistant/devices-home-assistant.plugin.js +3 -1
- package/dist/plugins/devices-home-assistant/devices-home-assistant.plugin.js.map +1 -1
- package/dist/plugins/devices-home-assistant/dto/helper-mapping-preview.dto.d.ts +1 -0
- package/dist/plugins/devices-home-assistant/dto/helper-mapping-preview.dto.js +14 -0
- package/dist/plugins/devices-home-assistant/dto/helper-mapping-preview.dto.js.map +1 -1
- package/dist/plugins/devices-home-assistant/models/config.model.d.ts +1 -0
- package/dist/plugins/devices-home-assistant/models/config.model.js +12 -0
- package/dist/plugins/devices-home-assistant/models/config.model.js.map +1 -1
- package/dist/plugins/devices-home-assistant/platforms/home-assistant.device.platform.d.ts +3 -1
- package/dist/plugins/devices-home-assistant/platforms/home-assistant.device.platform.js +14 -2
- package/dist/plugins/devices-home-assistant/platforms/home-assistant.device.platform.js.map +1 -1
- package/dist/plugins/devices-home-assistant/services/device-adoption.service.js +2 -2
- package/dist/plugins/devices-home-assistant/services/device-adoption.service.js.map +1 -1
- package/dist/plugins/devices-home-assistant/services/ha-supervisor.service.d.ts +10 -0
- package/dist/plugins/devices-home-assistant/services/ha-supervisor.service.js +47 -0
- package/dist/plugins/devices-home-assistant/services/ha-supervisor.service.js.map +1 -0
- package/dist/plugins/devices-home-assistant/services/helper-adoption.service.js +1 -7
- package/dist/plugins/devices-home-assistant/services/helper-adoption.service.js.map +1 -1
- package/dist/plugins/devices-home-assistant/services/home-assistant-config-validator.service.d.ts +3 -1
- package/dist/plugins/devices-home-assistant/services/home-assistant-config-validator.service.js +9 -3
- package/dist/plugins/devices-home-assistant/services/home-assistant-config-validator.service.js.map +1 -1
- package/dist/plugins/devices-home-assistant/services/home-assistant.http.service.d.ts +3 -1
- package/dist/plugins/devices-home-assistant/services/home-assistant.http.service.js +19 -7
- package/dist/plugins/devices-home-assistant/services/home-assistant.http.service.js.map +1 -1
- package/dist/plugins/devices-home-assistant/services/home-assistant.ws.service.d.ts +3 -1
- package/dist/plugins/devices-home-assistant/services/home-assistant.ws.service.js +23 -4
- package/dist/plugins/devices-home-assistant/services/home-assistant.ws.service.js.map +1 -1
- package/dist/plugins/devices-reterminal/devices-reterminal.plugin.js +1 -1
- package/dist/plugins/devices-reterminal/devices-reterminal.plugin.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/delegates/delegates-manager.service.d.ts +11 -1
- package/dist/plugins/devices-shelly-ng/delegates/delegates-manager.service.js +226 -49
- package/dist/plugins/devices-shelly-ng/delegates/delegates-manager.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/devices-shelly-ng.constants.d.ts +5 -0
- package/dist/plugins/devices-shelly-ng/devices-shelly-ng.constants.js +10 -1
- package/dist/plugins/devices-shelly-ng/devices-shelly-ng.constants.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/devices-shelly-ng.plugin.d.ts +5 -1
- package/dist/plugins/devices-shelly-ng/devices-shelly-ng.plugin.js +23 -4
- package/dist/plugins/devices-shelly-ng/devices-shelly-ng.plugin.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/dto/create-device.dto.d.ts +1 -1
- package/dist/plugins/devices-shelly-ng/dto/create-device.dto.js +11 -12
- package/dist/plugins/devices-shelly-ng/dto/create-device.dto.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/dto/update-device.dto.d.ts +2 -1
- package/dist/plugins/devices-shelly-ng/dto/update-device.dto.js +19 -4
- package/dist/plugins/devices-shelly-ng/dto/update-device.dto.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/entities/devices-shelly-ng.entity.d.ts +6 -1
- package/dist/plugins/devices-shelly-ng/entities/devices-shelly-ng.entity.js +38 -6
- package/dist/plugins/devices-shelly-ng/entities/devices-shelly-ng.entity.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/entities/shelly-ng-device-address.entity.d.ts +10 -0
- package/dist/plugins/devices-shelly-ng/entities/shelly-ng-device-address.entity.js +69 -0
- package/dist/plugins/devices-shelly-ng/entities/shelly-ng-device-address.entity.js.map +1 -0
- package/dist/plugins/devices-shelly-ng/services/database-discoverer.service.d.ts +3 -1
- package/dist/plugins/devices-shelly-ng/services/database-discoverer.service.js +19 -7
- package/dist/plugins/devices-shelly-ng/services/database-discoverer.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/services/device-address.service.d.ts +22 -0
- package/dist/plugins/devices-shelly-ng/services/device-address.service.js +149 -0
- package/dist/plugins/devices-shelly-ng/services/device-address.service.js.map +1 -0
- package/dist/plugins/devices-shelly-ng/services/device-manager.service.d.ts +3 -1
- package/dist/plugins/devices-shelly-ng/services/device-manager.service.js +20 -7
- package/dist/plugins/devices-shelly-ng/services/device-manager.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/services/shelly-ng.service.js +18 -3
- package/dist/plugins/devices-shelly-ng/services/shelly-ng.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/subscribers/device-entity.subscriber.d.ts +6 -2
- package/dist/plugins/devices-shelly-ng/subscribers/device-entity.subscriber.js +75 -6
- package/dist/plugins/devices-shelly-ng/subscribers/device-entity.subscriber.js.map +1 -1
- package/dist/plugins/devices-shelly-v1/devices-shelly-v1.plugin.js +1 -1
- package/dist/plugins/devices-shelly-v1/devices-shelly-v1.plugin.js.map +1 -1
- package/dist/plugins/devices-third-party/devices-third-party.plugin.js +1 -1
- package/dist/plugins/devices-third-party/devices-third-party.plugin.js.map +1 -1
- package/dist/plugins/devices-wled/devices-wled.plugin.js +1 -1
- package/dist/plugins/devices-wled/devices-wled.plugin.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/devices-zigbee2mqtt.constants.d.ts +4 -0
- package/dist/plugins/devices-zigbee2mqtt/devices-zigbee2mqtt.constants.js +5 -1
- package/dist/plugins/devices-zigbee2mqtt/devices-zigbee2mqtt.constants.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/devices-zigbee2mqtt.openapi.d.ts +2 -2
- package/dist/plugins/devices-zigbee2mqtt/devices-zigbee2mqtt.openapi.js +2 -0
- package/dist/plugins/devices-zigbee2mqtt/devices-zigbee2mqtt.openapi.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/devices-zigbee2mqtt.plugin.js +12 -7
- package/dist/plugins/devices-zigbee2mqtt/devices-zigbee2mqtt.plugin.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/dto/update-config.dto.d.ts +10 -0
- package/dist/plugins/devices-zigbee2mqtt/dto/update-config.dto.js +117 -3
- package/dist/plugins/devices-zigbee2mqtt/dto/update-config.dto.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/interfaces/zigbee2mqtt.interface.d.ts +8 -0
- package/dist/plugins/devices-zigbee2mqtt/mappings/definitions/covers.yaml +5 -4
- package/dist/plugins/devices-zigbee2mqtt/models/config.model.d.ts +10 -0
- package/dist/plugins/devices-zigbee2mqtt/models/config.model.js +108 -3
- package/dist/plugins/devices-zigbee2mqtt/models/config.model.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/platforms/zigbee2mqtt.device.platform.d.ts +3 -4
- package/dist/plugins/devices-zigbee2mqtt/platforms/zigbee2mqtt.device.platform.js +11 -22
- package/dist/plugins/devices-zigbee2mqtt/platforms/zigbee2mqtt.device.platform.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/services/base-client-adapter.d.ts +35 -0
- package/dist/plugins/devices-zigbee2mqtt/services/base-client-adapter.js +265 -0
- package/dist/plugins/devices-zigbee2mqtt/services/base-client-adapter.js.map +1 -0
- package/dist/plugins/devices-zigbee2mqtt/services/device-mapper.service.js +6 -5
- package/dist/plugins/devices-zigbee2mqtt/services/device-mapper.service.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/services/mqtt-client-adapter.service.d.ts +4 -26
- package/dist/plugins/devices-zigbee2mqtt/services/mqtt-client-adapter.service.js +16 -265
- package/dist/plugins/devices-zigbee2mqtt/services/mqtt-client-adapter.service.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/services/virtual-property.types.js +0 -16
- package/dist/plugins/devices-zigbee2mqtt/services/virtual-property.types.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/services/ws-client-adapter.service.d.ts +14 -0
- package/dist/plugins/devices-zigbee2mqtt/services/ws-client-adapter.service.js +199 -0
- package/dist/plugins/devices-zigbee2mqtt/services/ws-client-adapter.service.js.map +1 -0
- package/dist/plugins/devices-zigbee2mqtt/services/zigbee2mqtt-config-validator.service.d.ts +2 -0
- package/dist/plugins/devices-zigbee2mqtt/services/zigbee2mqtt-config-validator.service.js +69 -0
- package/dist/plugins/devices-zigbee2mqtt/services/zigbee2mqtt-config-validator.service.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/services/zigbee2mqtt.service.d.ts +8 -1
- package/dist/plugins/devices-zigbee2mqtt/services/zigbee2mqtt.service.js +86 -32
- package/dist/plugins/devices-zigbee2mqtt/services/zigbee2mqtt.service.js.map +1 -1
- package/dist/{modules/storage/plugins/influx-v1/influx-v1.update-config.dto.d.ts → plugins/influx-v1/dto/update-config.dto.d.ts} +1 -1
- package/dist/{modules/storage/plugins/influx-v1/influx-v1.update-config.dto.js → plugins/influx-v1/dto/update-config.dto.js} +3 -3
- package/dist/plugins/influx-v1/dto/update-config.dto.js.map +1 -0
- package/dist/plugins/influx-v1/influx-v1.constants.js.map +1 -0
- package/dist/{modules/storage/plugins → plugins}/influx-v1/influx-v1.openapi.d.ts +1 -1
- package/dist/plugins/influx-v1/influx-v1.openapi.js +7 -0
- package/dist/plugins/influx-v1/influx-v1.openapi.js.map +1 -0
- package/dist/{modules/storage/plugins/influx-v1/influx-v1.module.d.ts → plugins/influx-v1/influx-v1.plugin.d.ts} +6 -6
- package/dist/{modules/storage/plugins/influx-v1/influx-v1.module.js → plugins/influx-v1/influx-v1.plugin.js} +22 -22
- package/dist/plugins/influx-v1/influx-v1.plugin.js.map +1 -0
- package/dist/{modules/storage/plugins/influx-v1/influx-v1.config.model.d.ts → plugins/influx-v1/models/config.model.d.ts} +1 -1
- package/dist/{modules/storage/plugins/influx-v1/influx-v1.config.model.js → plugins/influx-v1/models/config.model.js} +3 -3
- package/dist/plugins/influx-v1/models/config.model.js.map +1 -0
- package/dist/{modules/storage/plugins/influx-v1/influx-v1.plugin.d.ts → plugins/influx-v1/services/influx-v1.storage.d.ts} +3 -3
- package/dist/{modules/storage/plugins/influx-v1/influx-v1.plugin.js → plugins/influx-v1/services/influx-v1.storage.js} +9 -9
- package/dist/plugins/influx-v1/services/influx-v1.storage.js.map +1 -0
- package/dist/{modules/storage/plugins/memory/memory.update-config.dto.d.ts → plugins/memory-storage/dto/update-config.dto.d.ts} +1 -1
- package/dist/{modules/storage/plugins/memory/memory.update-config.dto.js → plugins/memory-storage/dto/update-config.dto.js} +5 -5
- package/dist/plugins/memory-storage/dto/update-config.dto.js.map +1 -0
- package/dist/{modules/storage/plugins/memory/memory.constants.js → plugins/memory-storage/memory-storage.constants.js} +1 -1
- package/dist/plugins/memory-storage/memory-storage.constants.js.map +1 -0
- package/dist/{modules/storage/plugins/memory/memory.openapi.d.ts → plugins/memory-storage/memory-storage.openapi.d.ts} +1 -1
- package/dist/plugins/memory-storage/memory-storage.openapi.js +7 -0
- package/dist/plugins/memory-storage/memory-storage.openapi.js.map +1 -0
- package/dist/plugins/memory-storage/memory-storage.plugin.d.ts +13 -0
- package/dist/{modules/storage/plugins/memory/memory.module.js → plugins/memory-storage/memory-storage.plugin.js} +24 -24
- package/dist/plugins/memory-storage/memory-storage.plugin.js.map +1 -0
- package/dist/{modules/storage/plugins/memory/memory.config.model.d.ts → plugins/memory-storage/models/config.model.d.ts} +1 -1
- package/dist/{modules/storage/plugins/memory/memory.config.model.js → plugins/memory-storage/models/config.model.js} +5 -5
- package/dist/plugins/memory-storage/models/config.model.js.map +1 -0
- package/dist/{modules/storage/plugins/memory → plugins/memory-storage/services}/in-memory-timeseries.store.d.ts +1 -1
- package/dist/{modules/storage/plugins/memory → plugins/memory-storage/services}/in-memory-timeseries.store.js +3 -3
- package/dist/plugins/memory-storage/services/in-memory-timeseries.store.js.map +1 -0
- package/dist/plugins/memory-storage/services/influxql-parser.js.map +1 -0
- package/dist/{modules/storage/plugins/memory/memory.plugin.d.ts → plugins/memory-storage/services/memory-storage.storage.d.ts} +3 -3
- package/dist/{modules/storage/plugins/memory/memory.plugin.js → plugins/memory-storage/services/memory-storage.storage.js} +8 -8
- package/dist/plugins/memory-storage/services/memory-storage.storage.js.map +1 -0
- package/dist/plugins/simulator/simulator.plugin.js +4 -4
- package/dist/plugins/simulator/simulator.plugin.js.map +1 -1
- package/dist/plugins/tiles-device-preview/tiles-device-preview.plugin.js +1 -1
- package/dist/plugins/tiles-device-preview/tiles-device-preview.plugin.js.map +1 -1
- package/dist/plugins/tiles-scene/tiles-scene.plugin.js +1 -1
- package/dist/plugins/tiles-scene/tiles-scene.plugin.js.map +1 -1
- package/dist/plugins/tiles-time/tiles-time.plugin.js +1 -1
- package/dist/plugins/weather-openweathermap-onecall/weather-openweathermap-onecall.plugin.js +1 -1
- package/dist/plugins/weather-openweathermap-onecall/weather-openweathermap-onecall.plugin.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/dist/modules/storage/plugins/influx-v1/influx-v1.config.model.js.map +0 -1
- package/dist/modules/storage/plugins/influx-v1/influx-v1.constants.js.map +0 -1
- package/dist/modules/storage/plugins/influx-v1/influx-v1.module.js.map +0 -1
- package/dist/modules/storage/plugins/influx-v1/influx-v1.openapi.js +0 -7
- package/dist/modules/storage/plugins/influx-v1/influx-v1.openapi.js.map +0 -1
- package/dist/modules/storage/plugins/influx-v1/influx-v1.plugin.js.map +0 -1
- package/dist/modules/storage/plugins/influx-v1/influx-v1.update-config.dto.js.map +0 -1
- package/dist/modules/storage/plugins/memory/in-memory-timeseries.store.js.map +0 -1
- package/dist/modules/storage/plugins/memory/influxql-parser.js.map +0 -1
- package/dist/modules/storage/plugins/memory/memory.config.model.js.map +0 -1
- package/dist/modules/storage/plugins/memory/memory.constants.js.map +0 -1
- package/dist/modules/storage/plugins/memory/memory.module.d.ts +0 -13
- package/dist/modules/storage/plugins/memory/memory.module.js.map +0 -1
- package/dist/modules/storage/plugins/memory/memory.openapi.js +0 -7
- package/dist/modules/storage/plugins/memory/memory.openapi.js.map +0 -1
- package/dist/modules/storage/plugins/memory/memory.plugin.js.map +0 -1
- package/dist/modules/storage/plugins/memory/memory.update-config.dto.js.map +0 -1
- /package/dist/{modules/storage/plugins → plugins}/influx-v1/influx-v1.constants.d.ts +0 -0
- /package/dist/{modules/storage/plugins → plugins}/influx-v1/influx-v1.constants.js +0 -0
- /package/dist/{modules/storage/plugins/memory/memory.constants.d.ts → plugins/memory-storage/memory-storage.constants.d.ts} +0 -0
- /package/dist/{modules/storage/plugins/memory → plugins/memory-storage/services}/influxql-parser.d.ts +0 -0
- /package/dist/{modules/storage/plugins/memory → plugins/memory-storage/services}/influxql-parser.js +0 -0
|
@@ -24,16 +24,18 @@ const devices_shelly_ng_exceptions_1 = require("../devices-shelly-ng.exceptions"
|
|
|
24
24
|
const update_channel_property_dto_1 = require("../dto/update-channel-property.dto");
|
|
25
25
|
const mappings_1 = require("../mappings");
|
|
26
26
|
const transformers_1 = require("../mappings/transformers/transformers");
|
|
27
|
+
const device_address_service_1 = require("../services/device-address.service");
|
|
27
28
|
const device_manager_service_1 = require("../services/device-manager.service");
|
|
28
29
|
const transform_utils_2 = require("../utils/transform.utils");
|
|
29
30
|
const shelly_device_delegate_1 = require("./shelly-device.delegate");
|
|
30
31
|
let DelegatesManagerService = class DelegatesManagerService {
|
|
31
|
-
constructor(devicesService, channelsService, channelsPropertiesService, deviceConnectivityService, deviceManagerService, propertyMappingStorage, transformerRegistry) {
|
|
32
|
+
constructor(devicesService, channelsService, channelsPropertiesService, deviceConnectivityService, deviceManagerService, deviceAddressService, propertyMappingStorage, transformerRegistry) {
|
|
32
33
|
this.devicesService = devicesService;
|
|
33
34
|
this.channelsService = channelsService;
|
|
34
35
|
this.channelsPropertiesService = channelsPropertiesService;
|
|
35
36
|
this.deviceConnectivityService = deviceConnectivityService;
|
|
36
37
|
this.deviceManagerService = deviceManagerService;
|
|
38
|
+
this.deviceAddressService = deviceAddressService;
|
|
37
39
|
this.propertyMappingStorage = propertyMappingStorage;
|
|
38
40
|
this.transformerRegistry = transformerRegistry;
|
|
39
41
|
this.logger = (0, logger_1.createExtensionLogger)(devices_shelly_ng_constants_1.DEVICES_SHELLY_NG_PLUGIN_NAME, 'DelegatesManagerService');
|
|
@@ -46,8 +48,13 @@ let DelegatesManagerService = class DelegatesManagerService {
|
|
|
46
48
|
this.pendingWrites = new Map();
|
|
47
49
|
this.propertiesMap = new Map();
|
|
48
50
|
this.delegateDeviceIds = new Map();
|
|
51
|
+
this.delegateToIdentifier = new Map();
|
|
52
|
+
this.identifierToDelegates = new Map();
|
|
53
|
+
this.delegateConnectedState = new Map();
|
|
49
54
|
this.insertGeneration = new Map();
|
|
50
55
|
this.deviceLocks = new Map();
|
|
56
|
+
this.canonicalMacLocks = new Map();
|
|
57
|
+
this.connectedDelegatesPerDevice = new Map();
|
|
51
58
|
}
|
|
52
59
|
get(id) {
|
|
53
60
|
return this.delegates.get(id);
|
|
@@ -68,34 +75,57 @@ let DelegatesManagerService = class DelegatesManagerService {
|
|
|
68
75
|
this.insertGeneration.set(shelly.id, generation);
|
|
69
76
|
const delegate = new shelly_device_delegate_1.ShellyDeviceDelegate(shelly);
|
|
70
77
|
this.delegates.set(shelly.id, delegate);
|
|
71
|
-
const
|
|
72
|
-
|
|
78
|
+
const wifiIp = shelly.wifi?.sta_ip ?? null;
|
|
79
|
+
const ethernetIp = shelly.ethernet?.ip ?? null;
|
|
80
|
+
if (ethernetIp === null && wifiIp === null) {
|
|
73
81
|
throw new devices_shelly_ng_exceptions_1.DevicesShellyNgException('Missing device hostname or IP address');
|
|
74
82
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
hostname,
|
|
84
|
-
name: shelly.system.config.device.name ?? shelly.modelName,
|
|
85
|
-
});
|
|
86
|
-
isNewDevice = true;
|
|
83
|
+
const canonicalMac = shelly.system?.config?.device?.mac ?? null;
|
|
84
|
+
const { device: resolvedDevice, isNewDevice } = await this.withCanonicalMacLock(canonicalMac, async () => {
|
|
85
|
+
let dev = await this.devicesService.findOneBy('identifier', shelly.id, devices_shelly_ng_constants_1.DEVICES_SHELLY_NG_TYPE);
|
|
86
|
+
if (!dev && canonicalMac) {
|
|
87
|
+
dev = (await this.deviceAddressService.findDeviceByCanonicalMac(canonicalMac)) ?? null;
|
|
88
|
+
if (dev) {
|
|
89
|
+
this.logger.log(`Device=${shelly.id} matched existing device=${dev.identifier} by canonical MAC=${canonicalMac} (multi-interface merge)`, { resource: dev.id });
|
|
90
|
+
}
|
|
87
91
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
+
let created = false;
|
|
93
|
+
if (dev === null) {
|
|
94
|
+
try {
|
|
95
|
+
dev = await this.devicesService.create({
|
|
96
|
+
type: devices_shelly_ng_constants_1.DEVICES_SHELLY_NG_TYPE,
|
|
97
|
+
category: this.determineCategory(delegate),
|
|
98
|
+
identifier: shelly.id,
|
|
99
|
+
name: shelly.system.config.device.name ?? shelly.modelName,
|
|
100
|
+
});
|
|
101
|
+
created = true;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
dev = await this.devicesService.findOneBy('identifier', shelly.id, devices_shelly_ng_constants_1.DEVICES_SHELLY_NG_TYPE);
|
|
105
|
+
if (!dev && canonicalMac) {
|
|
106
|
+
dev = (await this.deviceAddressService.findDeviceByCanonicalMac(canonicalMac)) ?? null;
|
|
107
|
+
}
|
|
108
|
+
if (dev === null) {
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
92
111
|
}
|
|
93
112
|
}
|
|
94
|
-
|
|
113
|
+
if (canonicalMac && dev.canonicalMac !== (0, device_address_service_1.normalizeMac)(canonicalMac)) {
|
|
114
|
+
await this.deviceAddressService.setCanonicalMac(dev.id, canonicalMac);
|
|
115
|
+
}
|
|
116
|
+
return { device: dev, isNewDevice: created };
|
|
117
|
+
});
|
|
118
|
+
let device = resolvedDevice;
|
|
95
119
|
this.delegateDeviceIds.set(delegate.id, device.id);
|
|
96
|
-
|
|
120
|
+
this.delegateToIdentifier.set(delegate.id, device.identifier);
|
|
121
|
+
const delegateSet = this.identifierToDelegates.get(device.identifier) ?? new Set();
|
|
122
|
+
delegateSet.add(delegate.id);
|
|
123
|
+
this.identifierToDelegates.set(device.identifier, delegateSet);
|
|
124
|
+
await this.deviceAddressService.syncAddresses(device.id, wifiIp, ethernetIp);
|
|
125
|
+
const existingChannel = await this.channelsService.findOneBy('category', devices_constants_1.ChannelCategory.DEVICE_INFORMATION, device.id, devices_shelly_ng_constants_1.DEVICES_SHELLY_NG_TYPE);
|
|
126
|
+
if (isNewDevice || existingChannel === null) {
|
|
97
127
|
await this.deviceManagerService.createOrUpdate(device.id);
|
|
98
|
-
device = await this.devicesService.
|
|
128
|
+
device = await this.devicesService.findOne(device.id, devices_shelly_ng_constants_1.DEVICES_SHELLY_NG_TYPE);
|
|
99
129
|
if (device === null) {
|
|
100
130
|
throw new devices_shelly_ng_exceptions_1.DevicesShellyNgException('Device not found after provisioning');
|
|
101
131
|
}
|
|
@@ -839,27 +869,84 @@ let DelegatesManagerService = class DelegatesManagerService {
|
|
|
839
869
|
delegate.on('value', valueHandler);
|
|
840
870
|
this.delegateValueHandlers.set(delegate.id, valueHandler);
|
|
841
871
|
const connectionHandler = (state) => {
|
|
842
|
-
this.
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
872
|
+
const deviceDbId = this.delegateDeviceIds.get(delegate.id) ?? device.id;
|
|
873
|
+
const wasConnected = this.delegateConnectedState.get(delegate.id) ?? false;
|
|
874
|
+
if (state === true) {
|
|
875
|
+
if (wasConnected)
|
|
876
|
+
return;
|
|
877
|
+
this.delegateConnectedState.set(delegate.id, true);
|
|
878
|
+
const count = (this.connectedDelegatesPerDevice.get(deviceDbId) ?? 0) + 1;
|
|
879
|
+
this.connectedDelegatesPerDevice.set(deviceDbId, count);
|
|
880
|
+
this.deviceConnectivityService
|
|
881
|
+
.setConnectionState(deviceDbId, { state: devices_constants_1.ConnectionState.CONNECTED })
|
|
882
|
+
.catch((err) => {
|
|
883
|
+
this.logger.error(`Failed to set state=${devices_constants_1.ConnectionState.CONNECTED} for device=${delegate.id}`, {
|
|
884
|
+
resource: deviceDbId,
|
|
885
|
+
message: err.message,
|
|
886
|
+
stack: err.stack,
|
|
887
|
+
});
|
|
888
|
+
});
|
|
889
|
+
}
|
|
890
|
+
else if (state === false) {
|
|
891
|
+
if (!wasConnected)
|
|
892
|
+
return;
|
|
893
|
+
this.delegateConnectedState.set(delegate.id, false);
|
|
894
|
+
const count = Math.max(0, (this.connectedDelegatesPerDevice.get(deviceDbId) ?? 1) - 1);
|
|
895
|
+
this.connectedDelegatesPerDevice.set(deviceDbId, count);
|
|
896
|
+
if (count === 0) {
|
|
897
|
+
this.deviceConnectivityService
|
|
898
|
+
.setConnectionState(deviceDbId, { state: devices_constants_1.ConnectionState.DISCONNECTED })
|
|
899
|
+
.catch((err) => {
|
|
900
|
+
this.logger.error(`Failed to set state=DISCONNECTED for device=${delegate.id}`, {
|
|
901
|
+
resource: deviceDbId,
|
|
902
|
+
message: err.message,
|
|
903
|
+
stack: err.stack,
|
|
904
|
+
});
|
|
905
|
+
});
|
|
848
906
|
}
|
|
849
907
|
else {
|
|
908
|
+
this.logger.debug(`Device=${delegate.id} disconnected but ${count} other delegate(s) still connected`, {
|
|
909
|
+
resource: deviceDbId,
|
|
910
|
+
});
|
|
850
911
|
}
|
|
851
|
-
}
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
912
|
+
}
|
|
913
|
+
else {
|
|
914
|
+
const identifier = this.delegateToIdentifier.get(delegate.id);
|
|
915
|
+
const siblingDelegates = identifier ? this.identifierToDelegates.get(identifier) : undefined;
|
|
916
|
+
const otherDelegatesRemain = siblingDelegates ? siblingDelegates.size > 1 : false;
|
|
917
|
+
const targetState = otherDelegatesRemain ? devices_constants_1.ConnectionState.DISCONNECTED : devices_constants_1.ConnectionState.UNKNOWN;
|
|
918
|
+
if (wasConnected) {
|
|
919
|
+
const count = Math.max(0, (this.connectedDelegatesPerDevice.get(deviceDbId) ?? 1) - 1);
|
|
920
|
+
this.connectedDelegatesPerDevice.set(deviceDbId, count);
|
|
921
|
+
if (count === 0) {
|
|
922
|
+
this.deviceConnectivityService
|
|
923
|
+
.setConnectionState(deviceDbId, { state: targetState })
|
|
924
|
+
.catch((err) => {
|
|
925
|
+
this.logger.error(`Failed to set state=${targetState} for device=${delegate.id}`, {
|
|
926
|
+
resource: deviceDbId,
|
|
927
|
+
message: err.message,
|
|
928
|
+
stack: err.stack,
|
|
929
|
+
});
|
|
930
|
+
});
|
|
931
|
+
}
|
|
932
|
+
}
|
|
933
|
+
else if ((this.connectedDelegatesPerDevice.get(deviceDbId) ?? 0) === 0) {
|
|
934
|
+
this.deviceConnectivityService.setConnectionState(deviceDbId, { state: targetState }).catch((err) => {
|
|
935
|
+
this.logger.error(`Failed to set state=${targetState} for device=${delegate.id}`, {
|
|
936
|
+
resource: deviceDbId,
|
|
937
|
+
message: err.message,
|
|
938
|
+
stack: err.stack,
|
|
939
|
+
});
|
|
940
|
+
});
|
|
941
|
+
}
|
|
942
|
+
this.delegateConnectedState.delete(delegate.id);
|
|
943
|
+
}
|
|
859
944
|
};
|
|
860
945
|
delegate.on('connected', connectionHandler);
|
|
861
946
|
this.delegateConnectionHandlers.set(delegate.id, connectionHandler);
|
|
862
|
-
|
|
947
|
+
if (delegate.connected) {
|
|
948
|
+
connectionHandler(true);
|
|
949
|
+
}
|
|
863
950
|
this.logger.log(`Attached Shelly device=${delegate.id}`, { resource: device.id });
|
|
864
951
|
return delegate;
|
|
865
952
|
}
|
|
@@ -881,15 +968,21 @@ let DelegatesManagerService = class DelegatesManagerService {
|
|
|
881
968
|
}
|
|
882
969
|
else {
|
|
883
970
|
const deviceDbId = this.delegateDeviceIds.get(deviceId) ?? deviceId;
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
.
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
971
|
+
if ((this.connectedDelegatesPerDevice.get(deviceDbId) ?? 0) === 0) {
|
|
972
|
+
const identifier = this.delegateToIdentifier.get(deviceId);
|
|
973
|
+
const siblingDelegates = identifier ? this.identifierToDelegates.get(identifier) : undefined;
|
|
974
|
+
const otherDelegatesRemain = siblingDelegates ? siblingDelegates.size > 1 : false;
|
|
975
|
+
const targetState = otherDelegatesRemain ? devices_constants_1.ConnectionState.DISCONNECTED : devices_constants_1.ConnectionState.UNKNOWN;
|
|
976
|
+
void this.deviceConnectivityService
|
|
977
|
+
.setConnectionState(deviceDbId, { state: targetState })
|
|
978
|
+
.catch((err) => {
|
|
979
|
+
this.logger.warn(`Failed to mark device=${delegate.id} as ${targetState} while removing delegate`, {
|
|
980
|
+
resource: delegate.id,
|
|
981
|
+
message: err.message,
|
|
982
|
+
stack: err.stack,
|
|
983
|
+
});
|
|
891
984
|
});
|
|
892
|
-
}
|
|
985
|
+
}
|
|
893
986
|
}
|
|
894
987
|
if (valueHandler) {
|
|
895
988
|
delegate.off('value', valueHandler);
|
|
@@ -914,6 +1007,20 @@ let DelegatesManagerService = class DelegatesManagerService {
|
|
|
914
1007
|
this.setChannelsHandlers.delete(key);
|
|
915
1008
|
}
|
|
916
1009
|
}
|
|
1010
|
+
const identifier = this.delegateToIdentifier.get(deviceId);
|
|
1011
|
+
if (identifier) {
|
|
1012
|
+
const delegateSet = this.identifierToDelegates.get(identifier);
|
|
1013
|
+
if (delegateSet) {
|
|
1014
|
+
delegateSet.delete(deviceId);
|
|
1015
|
+
if (delegateSet.size === 0) {
|
|
1016
|
+
this.identifierToDelegates.delete(identifier);
|
|
1017
|
+
const deviceDbId = this.delegateDeviceIds.get(deviceId);
|
|
1018
|
+
if (deviceDbId) {
|
|
1019
|
+
this.connectedDelegatesPerDevice.delete(deviceDbId);
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1023
|
+
}
|
|
917
1024
|
const ids = this.propertiesMap.get(deviceId);
|
|
918
1025
|
if (ids) {
|
|
919
1026
|
for (const pid of ids) {
|
|
@@ -923,12 +1030,13 @@ let DelegatesManagerService = class DelegatesManagerService {
|
|
|
923
1030
|
this.propertiesMap.delete(deviceId);
|
|
924
1031
|
}
|
|
925
1032
|
this.delegateDeviceIds.delete(deviceId);
|
|
1033
|
+
this.delegateToIdentifier.delete(deviceId);
|
|
926
1034
|
this.insertGeneration.delete(deviceId);
|
|
927
1035
|
this.delegates.delete(deviceId);
|
|
928
1036
|
this.logger.log(`Detached Shelly device=${deviceId}`, { resource: deviceId });
|
|
929
1037
|
}
|
|
930
1038
|
async setChannelValue(device, channel, updates) {
|
|
931
|
-
const handler = this.
|
|
1039
|
+
const handler = this.resolveChannelHandler(device.identifier, channel.id);
|
|
932
1040
|
if (!handler) {
|
|
933
1041
|
return Promise.reject(new devices_shelly_ng_exceptions_1.DevicesShellyNgNotImplementedException('Multiple property writes are not supported by the component.'));
|
|
934
1042
|
}
|
|
@@ -946,7 +1054,7 @@ let DelegatesManagerService = class DelegatesManagerService {
|
|
|
946
1054
|
return handler(transformedUpdates);
|
|
947
1055
|
}
|
|
948
1056
|
async setPropertyValue(device, property, value) {
|
|
949
|
-
const handler = this.
|
|
1057
|
+
const handler = this.resolvePropertyHandler(device.identifier, property.id);
|
|
950
1058
|
if (!handler) {
|
|
951
1059
|
this.logger.warn(`Trying to write to device=${device.identifier} to not writable property=${property.id} value=${value}`, { resource: device.id });
|
|
952
1060
|
return Promise.resolve(false);
|
|
@@ -1067,10 +1175,51 @@ let DelegatesManagerService = class DelegatesManagerService {
|
|
|
1067
1175
|
value,
|
|
1068
1176
|
}));
|
|
1069
1177
|
}
|
|
1178
|
+
resolvePropertyHandler(deviceIdentifier, propertyId) {
|
|
1179
|
+
const delegateIds = this.identifierToDelegates.get(deviceIdentifier);
|
|
1180
|
+
if (!delegateIds)
|
|
1181
|
+
return undefined;
|
|
1182
|
+
let fallback;
|
|
1183
|
+
for (const delegateId of delegateIds) {
|
|
1184
|
+
const handler = this.setPropertiesHandlers.get(`${delegateId}|${propertyId}`);
|
|
1185
|
+
if (!handler)
|
|
1186
|
+
continue;
|
|
1187
|
+
if (this.delegateConnectedState.get(delegateId))
|
|
1188
|
+
return handler;
|
|
1189
|
+
fallback ??= handler;
|
|
1190
|
+
}
|
|
1191
|
+
return fallback;
|
|
1192
|
+
}
|
|
1193
|
+
resolveChannelHandler(deviceIdentifier, channelId) {
|
|
1194
|
+
const delegateIds = this.identifierToDelegates.get(deviceIdentifier);
|
|
1195
|
+
if (!delegateIds)
|
|
1196
|
+
return undefined;
|
|
1197
|
+
let fallback;
|
|
1198
|
+
for (const delegateId of delegateIds) {
|
|
1199
|
+
const handler = this.setChannelsHandlers.get(`${delegateId}|${channelId}`);
|
|
1200
|
+
if (!handler)
|
|
1201
|
+
continue;
|
|
1202
|
+
if (this.delegateConnectedState.get(delegateId))
|
|
1203
|
+
return handler;
|
|
1204
|
+
fallback ??= handler;
|
|
1205
|
+
}
|
|
1206
|
+
return fallback;
|
|
1207
|
+
}
|
|
1070
1208
|
detach() {
|
|
1071
|
-
for (const [
|
|
1072
|
-
this.
|
|
1209
|
+
for (const [, delegate] of this.delegates.entries()) {
|
|
1210
|
+
const valueHandler = this.delegateValueHandlers.get(delegate.id);
|
|
1211
|
+
const connectionHandler = this.delegateConnectionHandlers.get(delegate.id);
|
|
1212
|
+
if (valueHandler) {
|
|
1213
|
+
delegate.off('value', valueHandler);
|
|
1214
|
+
}
|
|
1215
|
+
if (connectionHandler) {
|
|
1216
|
+
delegate.off('connected', connectionHandler);
|
|
1217
|
+
}
|
|
1073
1218
|
}
|
|
1219
|
+
this.delegates.clear();
|
|
1220
|
+
this.delegateValueHandlers.clear();
|
|
1221
|
+
this.delegateConnectionHandlers.clear();
|
|
1222
|
+
this.delegateDeviceIds.clear();
|
|
1074
1223
|
this.changeHandlers.clear();
|
|
1075
1224
|
this.setPropertiesHandlers.clear();
|
|
1076
1225
|
this.setChannelsHandlers.clear();
|
|
@@ -1080,10 +1229,37 @@ let DelegatesManagerService = class DelegatesManagerService {
|
|
|
1080
1229
|
}
|
|
1081
1230
|
this.pendingWrites.clear();
|
|
1082
1231
|
this.deviceLocks.clear();
|
|
1232
|
+
this.canonicalMacLocks.clear();
|
|
1233
|
+
this.connectedDelegatesPerDevice.clear();
|
|
1234
|
+
this.delegateToIdentifier.clear();
|
|
1235
|
+
this.identifierToDelegates.clear();
|
|
1236
|
+
this.delegateConnectedState.clear();
|
|
1237
|
+
this.insertGeneration.clear();
|
|
1083
1238
|
}
|
|
1084
1239
|
destroy() {
|
|
1085
1240
|
this.detach();
|
|
1086
1241
|
}
|
|
1242
|
+
async withCanonicalMacLock(canonicalMac, fn) {
|
|
1243
|
+
if (!canonicalMac) {
|
|
1244
|
+
return fn();
|
|
1245
|
+
}
|
|
1246
|
+
const pending = this.canonicalMacLocks.get(canonicalMac) ?? Promise.resolve();
|
|
1247
|
+
let resolveLock;
|
|
1248
|
+
const lock = new Promise((r) => {
|
|
1249
|
+
resolveLock = r;
|
|
1250
|
+
});
|
|
1251
|
+
this.canonicalMacLocks.set(canonicalMac, lock);
|
|
1252
|
+
await pending.catch(() => { });
|
|
1253
|
+
try {
|
|
1254
|
+
return await fn();
|
|
1255
|
+
}
|
|
1256
|
+
finally {
|
|
1257
|
+
resolveLock();
|
|
1258
|
+
if (this.canonicalMacLocks.get(canonicalMac) === lock) {
|
|
1259
|
+
this.canonicalMacLocks.delete(canonicalMac);
|
|
1260
|
+
}
|
|
1261
|
+
}
|
|
1262
|
+
}
|
|
1087
1263
|
async withDeviceLock(deviceId, fn) {
|
|
1088
1264
|
const pending = this.deviceLocks.get(deviceId) ?? Promise.resolve();
|
|
1089
1265
|
let resolveLock;
|
|
@@ -1111,6 +1287,7 @@ exports.DelegatesManagerService = DelegatesManagerService = __decorate([
|
|
|
1111
1287
|
channels_properties_service_1.ChannelsPropertiesService,
|
|
1112
1288
|
device_connectivity_service_1.DeviceConnectivityService,
|
|
1113
1289
|
device_manager_service_1.DeviceManagerService,
|
|
1290
|
+
device_address_service_1.DeviceAddressService,
|
|
1114
1291
|
mappings_1.PropertyMappingStorageService,
|
|
1115
1292
|
mappings_1.TransformerRegistry])
|
|
1116
1293
|
], DelegatesManagerService);
|