@fastybird/smart-panel-backend 1.1.0-alpha.12 → 1.1.0-alpha.13
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/migrations/1000000000026-AddHardwareInputCategories.d.ts +7 -0
- package/dist/migrations/1000000000026-AddHardwareInputCategories.js +364 -0
- package/dist/migrations/1000000000026-AddHardwareInputCategories.js.map +1 -0
- package/dist/modules/devices/controllers/channels.controller.d.ts +5 -1
- package/dist/modules/devices/controllers/channels.controller.js +34 -2
- package/dist/modules/devices/controllers/channels.controller.js.map +1 -1
- package/dist/modules/devices/controllers/channels.properties.controller.js +5 -0
- package/dist/modules/devices/controllers/channels.properties.controller.js.map +1 -1
- package/dist/modules/devices/controllers/devices.channels.controller.d.ts +5 -1
- package/dist/modules/devices/controllers/devices.channels.controller.js +38 -2
- package/dist/modules/devices/controllers/devices.channels.controller.js.map +1 -1
- package/dist/modules/devices/controllers/devices.channels.properties.controller.js +5 -0
- package/dist/modules/devices/controllers/devices.channels.properties.controller.js.map +1 -1
- package/dist/modules/devices/devices.constants.d.ts +6 -0
- package/dist/modules/devices/devices.constants.js +6 -0
- package/dist/modules/devices/devices.constants.js.map +1 -1
- package/dist/modules/devices/devices.module.js +6 -0
- package/dist/modules/devices/devices.module.js.map +1 -1
- package/dist/modules/devices/devices.openapi.d.ts +3 -1
- package/dist/modules/devices/devices.openapi.js +7 -0
- package/dist/modules/devices/devices.openapi.js.map +1 -1
- package/dist/modules/devices/dto/channel-input-occurrence.dto.d.ts +10 -0
- package/dist/modules/devices/dto/channel-input-occurrence.dto.js +99 -0
- package/dist/modules/devices/dto/channel-input-occurrence.dto.js.map +1 -0
- package/dist/modules/devices/models/channel-input-capabilities.model.d.ts +20 -0
- package/dist/modules/devices/models/channel-input-capabilities.model.js +111 -0
- package/dist/modules/devices/models/channel-input-capabilities.model.js.map +1 -0
- package/dist/modules/devices/models/channel-input-occurrence.model.d.ts +22 -0
- package/dist/modules/devices/models/channel-input-occurrence.model.js +154 -0
- package/dist/modules/devices/models/channel-input-occurrence.model.js.map +1 -0
- package/dist/modules/devices/services/channel-input-deduplication.service.d.ts +17 -0
- package/dist/modules/devices/services/channel-input-deduplication.service.js +88 -0
- package/dist/modules/devices/services/channel-input-deduplication.service.js.map +1 -0
- package/dist/modules/devices/services/channel-input-occurrences.service.d.ts +21 -0
- package/dist/modules/devices/services/channel-input-occurrences.service.js +163 -0
- package/dist/modules/devices/services/channel-input-occurrences.service.js.map +1 -0
- package/dist/plugins/devices-shelly-ng/delegates/delegates-manager.service.d.ts +19 -3
- package/dist/plugins/devices-shelly-ng/delegates/delegates-manager.service.js +514 -50
- package/dist/plugins/devices-shelly-ng/delegates/delegates-manager.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/delegates/shelly-device.delegate.d.ts +2 -0
- package/dist/plugins/devices-shelly-ng/delegates/shelly-device.delegate.js +10 -2
- package/dist/plugins/devices-shelly-ng/delegates/shelly-device.delegate.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/devices-shelly-ng.constants.js +3 -2
- package/dist/plugins/devices-shelly-ng/devices-shelly-ng.constants.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/mappings/definitions/inputs.yaml +80 -0
- package/dist/plugins/devices-shelly-ng/mappings/mapping-loader.service.js +7 -1
- package/dist/plugins/devices-shelly-ng/mappings/mapping-loader.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/mappings/mapping.types.d.ts +6 -3
- package/dist/plugins/devices-shelly-ng/mappings/schema/mapping-schema.json +5 -0
- package/dist/plugins/devices-shelly-ng/services/device-manager.service.js +130 -7
- package/dist/plugins/devices-shelly-ng/services/device-manager.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/services/poll-placement-diagnostics.service.js +3 -2
- package/dist/plugins/devices-shelly-ng/services/poll-placement-diagnostics.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/services/shelly-ng.service.js +1 -1
- package/dist/plugins/devices-shelly-ng/services/shelly-ng.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/services/shelly-rpc-client.service.js +3 -0
- package/dist/plugins/devices-shelly-ng/services/shelly-rpc-client.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/services/shelly-ws-server.service.d.ts +1 -0
- package/dist/plugins/devices-shelly-ng/services/shelly-ws-server.service.js +13 -1
- package/dist/plugins/devices-shelly-ng/services/shelly-ws-server.service.js.map +1 -1
- package/dist/plugins/devices-shelly-v1/devices-shelly-v1.constants.d.ts +2 -0
- package/dist/plugins/devices-shelly-v1/devices-shelly-v1.constants.js +66 -4
- package/dist/plugins/devices-shelly-v1/devices-shelly-v1.constants.js.map +1 -1
- package/dist/plugins/devices-shelly-v1/devices-shelly-v1.plugin.js +2 -0
- package/dist/plugins/devices-shelly-v1/devices-shelly-v1.plugin.js.map +1 -1
- package/dist/plugins/devices-shelly-v1/platforms/shelly-v1.device.platform.js +7 -0
- package/dist/plugins/devices-shelly-v1/platforms/shelly-v1.device.platform.js.map +1 -1
- package/dist/plugins/devices-shelly-v1/services/device-mapper.service.d.ts +3 -1
- package/dist/plugins/devices-shelly-v1/services/device-mapper.service.js +20 -2
- package/dist/plugins/devices-shelly-v1/services/device-mapper.service.js.map +1 -1
- package/dist/plugins/devices-shelly-v1/services/shelly-v1-input-tracker.service.d.ts +16 -0
- package/dist/plugins/devices-shelly-v1/services/shelly-v1-input-tracker.service.js +107 -0
- package/dist/plugins/devices-shelly-v1/services/shelly-v1-input-tracker.service.js.map +1 -0
- package/dist/plugins/devices-shelly-v1/services/shelly-v1.service.d.ts +7 -1
- package/dist/plugins/devices-shelly-v1/services/shelly-v1.service.js +98 -3
- package/dist/plugins/devices-shelly-v1/services/shelly-v1.service.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/devices-zigbee2mqtt.constants.d.ts +3 -0
- package/dist/plugins/devices-zigbee2mqtt/devices-zigbee2mqtt.constants.js +41 -5
- package/dist/plugins/devices-zigbee2mqtt/devices-zigbee2mqtt.constants.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/interfaces/zigbee2mqtt.interface.d.ts +7 -1
- package/dist/plugins/devices-zigbee2mqtt/mappings/config-driven.converter.js +16 -15
- package/dist/plugins/devices-zigbee2mqtt/mappings/config-driven.converter.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/mappings/definitions/remotes.yaml +505 -74
- package/dist/plugins/devices-zigbee2mqtt/mappings/schema/mapping-schema.json +3 -3
- package/dist/plugins/devices-zigbee2mqtt/mappings/transformers/transformer.types.d.ts +1 -1
- package/dist/plugins/devices-zigbee2mqtt/services/base-client-adapter.d.ts +8 -2
- package/dist/plugins/devices-zigbee2mqtt/services/base-client-adapter.js +6 -5
- package/dist/plugins/devices-zigbee2mqtt/services/base-client-adapter.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/services/device-adoption.service.js +18 -11
- package/dist/plugins/devices-zigbee2mqtt/services/device-adoption.service.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/services/device-mapper.service.d.ts +9 -3
- package/dist/plugins/devices-zigbee2mqtt/services/device-mapper.service.js +166 -3
- package/dist/plugins/devices-zigbee2mqtt/services/device-mapper.service.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/services/mqtt-client-adapter.service.js +5 -2
- package/dist/plugins/devices-zigbee2mqtt/services/mqtt-client-adapter.service.js.map +1 -1
- package/dist/plugins/devices-zigbee2mqtt/services/zigbee2mqtt.service.d.ts +1 -0
- package/dist/plugins/devices-zigbee2mqtt/services/zigbee2mqtt.service.js +44 -4
- package/dist/plugins/devices-zigbee2mqtt/services/zigbee2mqtt.service.js.map +1 -1
- package/dist/spec/channels.d.ts +51 -1
- package/dist/spec/channels.js +64 -1
- package/dist/spec/channels.js.map +1 -1
- package/dist/spec/devices.d.ts +155 -2
- package/dist/spec/devices.js +161 -2
- package/dist/spec/devices.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ChannelInputOccurrencesService = void 0;
|
|
13
|
+
const crypto_1 = require("crypto");
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
16
|
+
const extension_logger_service_1 = require("../../../common/logger/extension-logger.service");
|
|
17
|
+
const devices_constants_1 = require("../devices.constants");
|
|
18
|
+
const devices_exceptions_1 = require("../devices.exceptions");
|
|
19
|
+
const channel_input_deduplication_service_1 = require("./channel-input-deduplication.service");
|
|
20
|
+
const channels_properties_service_1 = require("./channels.properties.service");
|
|
21
|
+
const channels_service_1 = require("./channels.service");
|
|
22
|
+
const devices_service_1 = require("./devices.service");
|
|
23
|
+
let ChannelInputOccurrencesService = class ChannelInputOccurrencesService {
|
|
24
|
+
constructor(devicesService, channelsService, channelsPropertiesService, deduplicationService, eventEmitter) {
|
|
25
|
+
this.devicesService = devicesService;
|
|
26
|
+
this.channelsService = channelsService;
|
|
27
|
+
this.channelsPropertiesService = channelsPropertiesService;
|
|
28
|
+
this.deduplicationService = deduplicationService;
|
|
29
|
+
this.eventEmitter = eventEmitter;
|
|
30
|
+
this.logger = (0, extension_logger_service_1.createExtensionLogger)(devices_constants_1.DEVICES_MODULE_NAME, 'ChannelInputOccurrencesService');
|
|
31
|
+
}
|
|
32
|
+
async ingestOccurrence(dto) {
|
|
33
|
+
return this.publishOccurrence(dto);
|
|
34
|
+
}
|
|
35
|
+
async publishOccurrence(dto) {
|
|
36
|
+
const device = await this.devicesService.findOne(dto.deviceId);
|
|
37
|
+
if (!device) {
|
|
38
|
+
throw new devices_exceptions_1.DevicesNotFoundException(`Device with ID ${dto.deviceId} was not found.`);
|
|
39
|
+
}
|
|
40
|
+
if (!device.enabled) {
|
|
41
|
+
this.logger.warn(`[OCCURRENCE DROPPED] Device ${device.id} is disabled. Occurrence dropped.`);
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
const channel = await this.channelsService.findOne(dto.channelId);
|
|
45
|
+
if (!channel) {
|
|
46
|
+
throw new devices_exceptions_1.DevicesNotFoundException(`Channel with ID ${dto.channelId} was not found.`);
|
|
47
|
+
}
|
|
48
|
+
const channelDeviceId = typeof channel.device === 'string' ? channel.device : channel.device?.id;
|
|
49
|
+
if (channelDeviceId !== dto.deviceId) {
|
|
50
|
+
throw new devices_exceptions_1.DevicesValidationException(`Channel ${dto.channelId} does not belong to device ${dto.deviceId}.`);
|
|
51
|
+
}
|
|
52
|
+
const property = await this.channelsPropertiesService.findOne(dto.propertyId);
|
|
53
|
+
if (!property) {
|
|
54
|
+
throw new devices_exceptions_1.DevicesNotFoundException(`Property with ID ${dto.propertyId} was not found.`);
|
|
55
|
+
}
|
|
56
|
+
const propertyChannelId = typeof property.channel === 'string' ? property.channel : property.channel?.id;
|
|
57
|
+
if (propertyChannelId !== dto.channelId) {
|
|
58
|
+
throw new devices_exceptions_1.DevicesValidationException(`Property ${dto.propertyId} does not belong to channel ${dto.channelId}.`);
|
|
59
|
+
}
|
|
60
|
+
const hasInputPermission = property.permissions.some((p) => [devices_constants_1.PermissionType.EVENT_ONLY, devices_constants_1.PermissionType.READ_ONLY].includes(p));
|
|
61
|
+
if (!hasInputPermission) {
|
|
62
|
+
throw new devices_exceptions_1.DevicesValidationException(`Property ${property.id} does not permit input occurrences (permissions: ${property.permissions.join(',')}).`);
|
|
63
|
+
}
|
|
64
|
+
const isInputChannel = [devices_constants_1.ChannelCategory.BUTTON, devices_constants_1.ChannelCategory.BINARY_INPUT, devices_constants_1.ChannelCategory.ANALOG_INPUT].includes(channel.category) ||
|
|
65
|
+
property.permissions.includes(devices_constants_1.PermissionType.EVENT_ONLY);
|
|
66
|
+
if (!isInputChannel) {
|
|
67
|
+
throw new devices_exceptions_1.DevicesValidationException(`Channel ${channel.id} is not an input channel and property ${property.id} does not have EVENT_ONLY permission.`);
|
|
68
|
+
}
|
|
69
|
+
if (property.dataType === devices_constants_1.DataTypeType.ENUM && Array.isArray(property.format) && property.format.length > 0) {
|
|
70
|
+
const allowedValues = property.format.map((val) => String(val));
|
|
71
|
+
if (!allowedValues.includes(String(dto.event))) {
|
|
72
|
+
throw new devices_exceptions_1.DevicesValidationException(`Event '${dto.event}' is not supported for property ${property.id}. Allowed values: ${allowedValues.join(', ')}.`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (this.deduplicationService.isDuplicate(device.id, channel.id, dto.sourceOccurrenceId, property.id, dto.event, dto.nativeEventType)) {
|
|
76
|
+
this.logger.debug(`[OCCURRENCE DROPPED] Duplicate redelivery detected for device=${device.id} channel=${channel.id} property=${property.id} event=${dto.event} sourceOccurrenceId=${dto.sourceOccurrenceId}`);
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
const occurrence = {
|
|
80
|
+
id: (0, crypto_1.randomUUID)(),
|
|
81
|
+
deviceId: device.id,
|
|
82
|
+
channelId: channel.id,
|
|
83
|
+
propertyId: property.id,
|
|
84
|
+
deviceCategory: device.category,
|
|
85
|
+
channelCategory: channel.category,
|
|
86
|
+
propertyCategory: property.category,
|
|
87
|
+
event: dto.event,
|
|
88
|
+
timestamp: new Date().toISOString(),
|
|
89
|
+
sourceTimestamp: dto.sourceTimestamp,
|
|
90
|
+
sourceOccurrenceId: dto.sourceOccurrenceId,
|
|
91
|
+
nativeEventType: dto.nativeEventType,
|
|
92
|
+
data: dto.data,
|
|
93
|
+
integration: device.type,
|
|
94
|
+
endpoint: device.identifier ?? null,
|
|
95
|
+
};
|
|
96
|
+
this.eventEmitter.emit(devices_constants_1.EventType.CHANNEL_INPUT_OCCURRENCE, occurrence);
|
|
97
|
+
return occurrence;
|
|
98
|
+
}
|
|
99
|
+
subscribe(listener) {
|
|
100
|
+
const reportError = (error) => {
|
|
101
|
+
const err = error;
|
|
102
|
+
this.logger.error(`Error in occurrence subscriber callback: ${err.message}`, {
|
|
103
|
+
message: err.message,
|
|
104
|
+
stack: err.stack,
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
const handler = (payload) => {
|
|
108
|
+
try {
|
|
109
|
+
void Promise.resolve(listener(payload)).catch(reportError);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
reportError(error);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
this.eventEmitter.on(devices_constants_1.EventType.CHANNEL_INPUT_OCCURRENCE, handler);
|
|
116
|
+
return () => {
|
|
117
|
+
this.eventEmitter.off(devices_constants_1.EventType.CHANNEL_INPUT_OCCURRENCE, handler);
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
async getInputCapabilities(channelId) {
|
|
121
|
+
const channel = await this.channelsService.findOne(channelId);
|
|
122
|
+
if (!channel) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
const deviceId = typeof channel.device === 'string' ? channel.device : channel.device?.id;
|
|
126
|
+
const properties = (channel.properties ?? []).filter((prop) => prop.permissions.some((p) => [devices_constants_1.PermissionType.EVENT_ONLY, devices_constants_1.PermissionType.READ_ONLY].includes(p)));
|
|
127
|
+
const isInputChannel = [devices_constants_1.ChannelCategory.BUTTON, devices_constants_1.ChannelCategory.BINARY_INPUT, devices_constants_1.ChannelCategory.ANALOG_INPUT].includes(channel.category) ||
|
|
128
|
+
properties.some((p) => p.permissions.includes(devices_constants_1.PermissionType.EVENT_ONLY));
|
|
129
|
+
const supportedEvents = new Set();
|
|
130
|
+
for (const prop of properties) {
|
|
131
|
+
if (prop.dataType === devices_constants_1.DataTypeType.ENUM && Array.isArray(prop.format)) {
|
|
132
|
+
for (const item of prop.format) {
|
|
133
|
+
supportedEvents.add(String(item));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const propertyModels = properties.map((prop) => ({
|
|
138
|
+
id: prop.id,
|
|
139
|
+
category: prop.category,
|
|
140
|
+
permissions: prop.permissions,
|
|
141
|
+
data_type: prop.dataType,
|
|
142
|
+
format: Array.isArray(prop.format) ? prop.format : null,
|
|
143
|
+
}));
|
|
144
|
+
return {
|
|
145
|
+
channel_id: channel.id,
|
|
146
|
+
device_id: deviceId ?? '',
|
|
147
|
+
category: channel.category,
|
|
148
|
+
is_input: isInputChannel,
|
|
149
|
+
supported_events: Array.from(supportedEvents),
|
|
150
|
+
properties: propertyModels,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
exports.ChannelInputOccurrencesService = ChannelInputOccurrencesService;
|
|
155
|
+
exports.ChannelInputOccurrencesService = ChannelInputOccurrencesService = __decorate([
|
|
156
|
+
(0, common_1.Injectable)(),
|
|
157
|
+
__metadata("design:paramtypes", [devices_service_1.DevicesService,
|
|
158
|
+
channels_service_1.ChannelsService,
|
|
159
|
+
channels_properties_service_1.ChannelsPropertiesService,
|
|
160
|
+
channel_input_deduplication_service_1.ChannelInputDeduplicationService,
|
|
161
|
+
event_emitter_1.EventEmitter2])
|
|
162
|
+
], ChannelInputOccurrencesService);
|
|
163
|
+
//# sourceMappingURL=channel-input-occurrences.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-input-occurrences.service.js","sourceRoot":"","sources":["../../../../src/modules/devices/services/channel-input-occurrences.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Device, Ethernet, WiFi } from 'shellies-ds9';
|
|
2
|
+
import { ChannelInputOccurrencesService } from '../../../modules/devices/services/channel-input-occurrences.service';
|
|
2
3
|
import { ChannelsPropertiesService } from '../../../modules/devices/services/channels.properties.service';
|
|
3
4
|
import { ChannelsService } from '../../../modules/devices/services/channels.service';
|
|
4
5
|
import { CommandLatencyTraceCollectorService } from '../../../modules/devices/services/command-latency-trace-collector.service';
|
|
@@ -29,16 +30,24 @@ export declare class DelegatesManagerService {
|
|
|
29
30
|
private readonly transformerRegistry;
|
|
30
31
|
private readonly commandLatencyTraceCollector;
|
|
31
32
|
private readonly pollPlacementDiagnostics;
|
|
33
|
+
private readonly channelInputOccurrencesService?;
|
|
32
34
|
private readonly logger;
|
|
33
35
|
private readonly delegates;
|
|
34
36
|
private readonly delegateValueHandlers;
|
|
35
37
|
private readonly delegateConnectionHandlers;
|
|
38
|
+
private readonly delegateEventHandlers;
|
|
39
|
+
private readonly delegateEventQueues;
|
|
40
|
+
private readonly delegateEventGenerations;
|
|
36
41
|
private readonly changeHandlers;
|
|
37
42
|
private readonly setChannelsHandlers;
|
|
38
43
|
private readonly setPropertiesHandlers;
|
|
39
44
|
private readonly pendingWrites;
|
|
45
|
+
private readonly delegatePendingWrites;
|
|
46
|
+
private readonly delegateActiveWrites;
|
|
40
47
|
private readonly pendingPollWrites;
|
|
41
48
|
private readonly activePollWrites;
|
|
49
|
+
private readonly activePollDrainPromises;
|
|
50
|
+
private readonly delegatePollDeviceIds;
|
|
42
51
|
private readonly delegatePollGenerations;
|
|
43
52
|
private currentValueUpdateContext;
|
|
44
53
|
private readonly propertiesMap;
|
|
@@ -52,11 +61,12 @@ export declare class DelegatesManagerService {
|
|
|
52
61
|
private readonly connectedDelegatesPerDevice;
|
|
53
62
|
private static readonly DISCONNECT_GRACE_MS;
|
|
54
63
|
private readonly disconnectTimers;
|
|
55
|
-
constructor(devicesService: DevicesService, channelsService: ChannelsService, channelsPropertiesService: ChannelsPropertiesService, deviceConnectivityService: DeviceConnectivityService, deviceManagerService: DeviceManagerService, deviceAddressService: DeviceAddressService, propertyMappingStorage: PropertyMappingStorageService, transformerRegistry: TransformerRegistry, commandLatencyTraceCollector?: CommandLatencyTraceCollectorService, pollPlacementDiagnostics?: PollPlacementDiagnosticsService);
|
|
64
|
+
constructor(devicesService: DevicesService, channelsService: ChannelsService, channelsPropertiesService: ChannelsPropertiesService, deviceConnectivityService: DeviceConnectivityService, deviceManagerService: DeviceManagerService, deviceAddressService: DeviceAddressService, propertyMappingStorage: PropertyMappingStorageService, transformerRegistry: TransformerRegistry, commandLatencyTraceCollector?: CommandLatencyTraceCollectorService, pollPlacementDiagnostics?: PollPlacementDiagnosticsService, channelInputOccurrencesService?: ChannelInputOccurrencesService);
|
|
56
65
|
get(id: Device['id']): ShellyDeviceDelegate | undefined;
|
|
57
66
|
insert(shelly: Device & MaybeNet, force?: boolean): Promise<ShellyDeviceDelegate>;
|
|
58
67
|
private performInsert;
|
|
59
68
|
remove(deviceId: string): Promise<void>;
|
|
69
|
+
private teardownDelegateEvents;
|
|
60
70
|
private performRemove;
|
|
61
71
|
setChannelValue(device: ShellyNgDeviceEntity, channel: ShellyNgChannelEntity, updates: {
|
|
62
72
|
property: ShellyNgChannelPropertyEntity;
|
|
@@ -64,6 +74,7 @@ export declare class DelegatesManagerService {
|
|
|
64
74
|
}[]): Promise<boolean>;
|
|
65
75
|
setPropertyValue(device: ShellyNgDeviceEntity, property: ShellyNgChannelPropertyEntity, value: string | number | boolean): Promise<boolean>;
|
|
66
76
|
private applyTransformer;
|
|
77
|
+
private handleDeviceEvent;
|
|
67
78
|
private handleChange;
|
|
68
79
|
private setDefaultPropertyValue;
|
|
69
80
|
private wireElectricalChannels;
|
|
@@ -74,14 +85,19 @@ export declare class DelegatesManagerService {
|
|
|
74
85
|
private schedulePollWrite;
|
|
75
86
|
private flushPollWrites;
|
|
76
87
|
private cancelScheduledWrite;
|
|
88
|
+
private cancelPendingWritesForDelegate;
|
|
89
|
+
private awaitActiveWritesForDelegate;
|
|
90
|
+
private awaitAllActiveWrites;
|
|
91
|
+
private awaitActivePollDrainsForDelegate;
|
|
92
|
+
private awaitAllActivePollDrains;
|
|
77
93
|
private cancelPollWrite;
|
|
78
94
|
private cancelPollWritesForDelegate;
|
|
79
95
|
private clearPollWrites;
|
|
80
96
|
private writeValueToProperty;
|
|
81
97
|
private resolvePropertyHandler;
|
|
82
98
|
private resolveChannelHandler;
|
|
83
|
-
detach(): void
|
|
84
|
-
destroy(): void
|
|
99
|
+
detach(): Promise<void>;
|
|
100
|
+
destroy(): Promise<void>;
|
|
85
101
|
checkHealth(pingTimeoutMs?: number): Promise<void>;
|
|
86
102
|
getConnectedDelegateIds(): string[];
|
|
87
103
|
invalidateStatusPolls(): void;
|