@fastybird/smart-panel-backend 1.1.0-alpha.0 → 1.1.0-alpha.10
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 +14 -0
- package/dist/app.module.js.map +1 -1
- package/dist/common/filters/conflict-exception.filter.d.ts +6 -0
- package/dist/common/filters/conflict-exception.filter.js +59 -0
- package/dist/common/filters/conflict-exception.filter.js.map +1 -0
- package/dist/common/filters/global-error.filter.js +1 -4
- package/dist/common/filters/global-error.filter.js.map +1 -1
- package/dist/common/filters/global-filters.d.ts +3 -0
- package/dist/common/filters/global-filters.js +22 -0
- package/dist/common/filters/global-filters.js.map +1 -0
- package/dist/common/filters/unprocessable-entity-exception.filter.d.ts +1 -0
- package/dist/common/filters/unprocessable-entity-exception.filter.js +15 -3
- package/dist/common/filters/unprocessable-entity-exception.filter.js.map +1 -1
- package/dist/common/utils/transform.utils.js +3 -0
- package/dist/common/utils/transform.utils.js.map +1 -1
- package/dist/main.js +2 -7
- package/dist/main.js.map +1 -1
- package/dist/modules/devices/controllers/channels.properties.controller.js +16 -4
- package/dist/modules/devices/controllers/channels.properties.controller.js.map +1 -1
- package/dist/modules/devices/controllers/devices.channels.properties.controller.js +16 -4
- package/dist/modules/devices/controllers/devices.channels.properties.controller.js.map +1 -1
- package/dist/modules/devices/devices.module.js +12 -0
- package/dist/modules/devices/devices.module.js.map +1 -1
- package/dist/modules/devices/services/channels.properties.service.d.ts +27 -3
- package/dist/modules/devices/services/channels.properties.service.js +304 -28
- package/dist/modules/devices/services/channels.properties.service.js.map +1 -1
- package/dist/modules/devices/services/channels.service.js +42 -38
- package/dist/modules/devices/services/channels.service.js.map +1 -1
- package/dist/modules/devices/services/command-latency-trace-collector.service.d.ts +101 -0
- package/dist/modules/devices/services/command-latency-trace-collector.service.js +451 -0
- package/dist/modules/devices/services/command-latency-trace-collector.service.js.map +1 -0
- package/dist/modules/devices/services/device-structure-lock.service.d.ts +10 -2
- package/dist/modules/devices/services/device-structure-lock.service.js +86 -7
- package/dist/modules/devices/services/device-structure-lock.service.js.map +1 -1
- package/dist/modules/devices/services/devices.service.js +37 -33
- package/dist/modules/devices/services/devices.service.js.map +1 -1
- package/dist/modules/devices/services/module-reset.service.d.ts +3 -1
- package/dist/modules/devices/services/module-reset.service.js +21 -16
- package/dist/modules/devices/services/module-reset.service.js.map +1 -1
- package/dist/modules/devices/services/property-command-dispatch.service.d.ts +45 -0
- package/dist/modules/devices/services/property-command-dispatch.service.js +227 -0
- package/dist/modules/devices/services/property-command-dispatch.service.js.map +1 -0
- package/dist/modules/devices/services/property-command-window.service.d.ts +71 -0
- package/dist/modules/devices/services/property-command-window.service.js +204 -0
- package/dist/modules/devices/services/property-command-window.service.js.map +1 -0
- package/dist/modules/devices/services/property-command.service.d.ts +28 -3
- package/dist/modules/devices/services/property-command.service.js +171 -10
- package/dist/modules/devices/services/property-command.service.js.map +1 -1
- package/dist/modules/devices/services/property-state-coordinator.service.d.ts +4 -0
- package/dist/modules/devices/services/property-state-coordinator.service.js +35 -0
- package/dist/modules/devices/services/property-state-coordinator.service.js.map +1 -0
- package/dist/modules/devices/services/property-value.service.d.ts +1 -0
- package/dist/modules/devices/services/property-value.service.js +4 -0
- package/dist/modules/devices/services/property-value.service.js.map +1 -1
- package/dist/modules/mcp/oauth/mcp-oauth-provider.factory.js.map +1 -1
- package/dist/modules/platform/services/platform.service.d.ts +13 -4
- package/dist/modules/platform/services/platform.service.js +57 -35
- package/dist/modules/platform/services/platform.service.js.map +1 -1
- package/dist/modules/remote-access/dto/update-config.dto.js +5 -0
- package/dist/modules/remote-access/dto/update-config.dto.js.map +1 -1
- package/dist/modules/remote-access/services/remote-access-proxy-contribution.service.js +4 -0
- package/dist/modules/remote-access/services/remote-access-proxy-contribution.service.js.map +1 -1
- package/dist/modules/remote-access/services/remote-access-status.service.d.ts +5 -1
- package/dist/modules/remote-access/services/remote-access-status.service.js +38 -4
- package/dist/modules/remote-access/services/remote-access-status.service.js.map +1 -1
- package/dist/modules/remote-access/services/remote-access-url.service.js +4 -0
- package/dist/modules/remote-access/services/remote-access-url.service.js.map +1 -1
- package/dist/modules/remote-access/validators/is-remote-access-url.validator.js +5 -2
- package/dist/modules/remote-access/validators/is-remote-access-url.validator.js.map +1 -1
- package/dist/modules/system/commands/command.utils.d.ts +2 -0
- package/dist/modules/system/commands/command.utils.js +14 -0
- package/dist/modules/system/commands/command.utils.js.map +1 -1
- package/dist/modules/system/commands/update-check.command.js +2 -3
- package/dist/modules/system/commands/update-check.command.js.map +1 -1
- package/dist/modules/system/commands/update-panel.command.js +2 -2
- package/dist/modules/system/commands/update-panel.command.js.map +1 -1
- package/dist/modules/system/commands/update-server.command.d.ts +1 -0
- package/dist/modules/system/commands/update-server.command.js +36 -11
- package/dist/modules/system/commands/update-server.command.js.map +1 -1
- package/dist/modules/system/dto/update-config.dto.d.ts +2 -1
- package/dist/modules/system/dto/update-config.dto.js +15 -0
- package/dist/modules/system/dto/update-config.dto.js.map +1 -1
- package/dist/modules/system/models/config.model.d.ts +2 -1
- package/dist/modules/system/models/config.model.js +13 -0
- package/dist/modules/system/models/config.model.js.map +1 -1
- package/dist/modules/system/services/privileged-worker.service.d.ts +10 -0
- package/dist/modules/system/services/privileged-worker.service.js +137 -11
- package/dist/modules/system/services/privileged-worker.service.js.map +1 -1
- package/dist/modules/system/services/update.service.d.ts +11 -1
- package/dist/modules/system/services/update.service.js +97 -35
- package/dist/modules/system/services/update.service.js.map +1 -1
- package/dist/modules/system/system.constants.d.ts +6 -0
- package/dist/modules/system/system.constants.js +8 -1
- package/dist/modules/system/system.constants.js.map +1 -1
- package/dist/modules/websocket/gateway/websocket.gateway.d.ts +7 -1
- package/dist/modules/websocket/gateway/websocket.gateway.js +67 -9
- package/dist/modules/websocket/gateway/websocket.gateway.js.map +1 -1
- package/dist/modules/websocket/services/command-acknowledgement-trace.service.d.ts +143 -0
- package/dist/modules/websocket/services/command-acknowledgement-trace.service.js +523 -0
- package/dist/modules/websocket/services/command-acknowledgement-trace.service.js.map +1 -0
- package/dist/modules/websocket/websocket.module.js +9 -1
- package/dist/modules/websocket/websocket.module.js.map +1 -1
- package/dist/plugins/devices-home-assistant/services/home-assistant.ws.service.js +2 -1
- package/dist/plugins/devices-home-assistant/services/home-assistant.ws.service.js.map +1 -1
- package/dist/plugins/devices-home-assistant/services/state-changed.event.service.js +2 -3
- package/dist/plugins/devices-home-assistant/services/state-changed.event.service.js.map +1 -1
- package/dist/plugins/devices-homekit/controllers/homekit-bridge.controller.d.ts +14 -0
- package/dist/plugins/devices-homekit/controllers/homekit-bridge.controller.js +125 -0
- package/dist/plugins/devices-homekit/controllers/homekit-bridge.controller.js.map +1 -0
- package/dist/plugins/devices-homekit/devices-homekit.constants.d.ts +16 -0
- package/dist/plugins/devices-homekit/devices-homekit.constants.js +57 -0
- package/dist/plugins/devices-homekit/devices-homekit.constants.js.map +1 -0
- package/dist/plugins/devices-homekit/devices-homekit.exceptions.d.ts +12 -0
- package/dist/plugins/devices-homekit/devices-homekit.exceptions.js +32 -0
- package/dist/plugins/devices-homekit/devices-homekit.exceptions.js.map +1 -0
- package/dist/plugins/devices-homekit/devices-homekit.openapi.d.ts +6 -0
- package/dist/plugins/devices-homekit/devices-homekit.openapi.js +19 -0
- package/dist/plugins/devices-homekit/devices-homekit.openapi.js.map +1 -0
- package/dist/plugins/devices-homekit/devices-homekit.plugin.d.ts +24 -0
- package/dist/plugins/devices-homekit/devices-homekit.plugin.js +183 -0
- package/dist/plugins/devices-homekit/devices-homekit.plugin.js.map +1 -0
- package/dist/plugins/devices-homekit/dto/bridge-map.dto.d.ts +6 -0
- package/dist/plugins/devices-homekit/dto/bridge-map.dto.js +50 -0
- package/dist/plugins/devices-homekit/dto/bridge-map.dto.js.map +1 -0
- package/dist/plugins/devices-homekit/dto/update-config.dto.d.ts +11 -0
- package/dist/plugins/devices-homekit/dto/update-config.dto.js +138 -0
- package/dist/plugins/devices-homekit/dto/update-config.dto.js.map +1 -0
- package/dist/plugins/devices-homekit/listeners/homekit-event.listener.d.ts +8 -0
- package/dist/plugins/devices-homekit/listeners/homekit-event.listener.js +77 -0
- package/dist/plugins/devices-homekit/listeners/homekit-event.listener.js.map +1 -0
- package/dist/plugins/devices-homekit/mappers/base.mapper.d.ts +15 -0
- package/dist/plugins/devices-homekit/mappers/base.mapper.js +97 -0
- package/dist/plugins/devices-homekit/mappers/base.mapper.js.map +1 -0
- package/dist/plugins/devices-homekit/mappers/battery.mapper.d.ts +6 -0
- package/dist/plugins/devices-homekit/mappers/battery.mapper.js +130 -0
- package/dist/plugins/devices-homekit/mappers/battery.mapper.js.map +1 -0
- package/dist/plugins/devices-homekit/mappers/homekit-mapper.interface.d.ts +36 -0
- package/dist/plugins/devices-homekit/mappers/homekit-mapper.interface.js +3 -0
- package/dist/plugins/devices-homekit/mappers/homekit-mapper.interface.js.map +1 -0
- package/dist/plugins/devices-homekit/mappers/lightbulb.mapper.d.ts +9 -0
- package/dist/plugins/devices-homekit/mappers/lightbulb.mapper.js +115 -0
- package/dist/plugins/devices-homekit/mappers/lightbulb.mapper.js.map +1 -0
- package/dist/plugins/devices-homekit/mappers/lock.mapper.d.ts +10 -0
- package/dist/plugins/devices-homekit/mappers/lock.mapper.js +59 -0
- package/dist/plugins/devices-homekit/mappers/lock.mapper.js.map +1 -0
- package/dist/plugins/devices-homekit/mappers/outlet.mapper.d.ts +9 -0
- package/dist/plugins/devices-homekit/mappers/outlet.mapper.js +44 -0
- package/dist/plugins/devices-homekit/mappers/outlet.mapper.js.map +1 -0
- package/dist/plugins/devices-homekit/mappers/sensor.mapper.d.ts +10 -0
- package/dist/plugins/devices-homekit/mappers/sensor.mapper.js +168 -0
- package/dist/plugins/devices-homekit/mappers/sensor.mapper.js.map +1 -0
- package/dist/plugins/devices-homekit/mappers/switch.mapper.d.ts +9 -0
- package/dist/plugins/devices-homekit/mappers/switch.mapper.js +35 -0
- package/dist/plugins/devices-homekit/mappers/switch.mapper.js.map +1 -0
- package/dist/plugins/devices-homekit/mappers/thermostat-coordinator.d.ts +50 -0
- package/dist/plugins/devices-homekit/mappers/thermostat-coordinator.js +441 -0
- package/dist/plugins/devices-homekit/mappers/thermostat-coordinator.js.map +1 -0
- package/dist/plugins/devices-homekit/mappers/thermostat.mapper.d.ts +11 -0
- package/dist/plugins/devices-homekit/mappers/thermostat.mapper.js +97 -0
- package/dist/plugins/devices-homekit/mappers/thermostat.mapper.js.map +1 -0
- package/dist/plugins/devices-homekit/mappers/window-covering.mapper.d.ts +10 -0
- package/dist/plugins/devices-homekit/mappers/window-covering.mapper.js +94 -0
- package/dist/plugins/devices-homekit/mappers/window-covering.mapper.js.map +1 -0
- package/dist/plugins/devices-homekit/models/bridge-candidate.model.d.ts +15 -0
- package/dist/plugins/devices-homekit/models/bridge-candidate.model.js +150 -0
- package/dist/plugins/devices-homekit/models/bridge-candidate.model.js.map +1 -0
- package/dist/plugins/devices-homekit/models/bridge-status.model.d.ts +16 -0
- package/dist/plugins/devices-homekit/models/bridge-status.model.js +156 -0
- package/dist/plugins/devices-homekit/models/bridge-status.model.js.map +1 -0
- package/dist/plugins/devices-homekit/models/config.model.d.ts +12 -0
- package/dist/plugins/devices-homekit/models/config.model.js +134 -0
- package/dist/plugins/devices-homekit/models/config.model.js.map +1 -0
- package/dist/plugins/devices-homekit/services/homekit-actions.service.d.ts +14 -0
- package/dist/plugins/devices-homekit/services/homekit-actions.service.js +92 -0
- package/dist/plugins/devices-homekit/services/homekit-actions.service.js.map +1 -0
- package/dist/plugins/devices-homekit/services/homekit-bridge.service.d.ts +43 -0
- package/dist/plugins/devices-homekit/services/homekit-bridge.service.js +497 -0
- package/dist/plugins/devices-homekit/services/homekit-bridge.service.js.map +1 -0
- package/dist/plugins/devices-homekit/services/homekit-command.dispatcher.d.ts +11 -0
- package/dist/plugins/devices-homekit/services/homekit-command.dispatcher.js +68 -0
- package/dist/plugins/devices-homekit/services/homekit-command.dispatcher.js.map +1 -0
- package/dist/plugins/devices-homekit/services/homekit-mapper-registry.service.d.ts +34 -0
- package/dist/plugins/devices-homekit/services/homekit-mapper-registry.service.js +179 -0
- package/dist/plugins/devices-homekit/services/homekit-mapper-registry.service.js.map +1 -0
- package/dist/plugins/devices-homekit/services/homekit-wizard.service.d.ts +15 -0
- package/dist/plugins/devices-homekit/services/homekit-wizard.service.js +75 -0
- package/dist/plugins/devices-homekit/services/homekit-wizard.service.js.map +1 -0
- package/dist/plugins/devices-homekit/validators/is-not-forbidden-homekit-pin.validator.d.ts +2 -0
- package/dist/plugins/devices-homekit/validators/is-not-forbidden-homekit-pin.validator.js +30 -0
- package/dist/plugins/devices-homekit/validators/is-not-forbidden-homekit-pin.validator.js.map +1 -0
- package/dist/plugins/devices-shelly-ng/delegates/delegates-manager.service.d.ts +18 -1
- package/dist/plugins/devices-shelly-ng/delegates/delegates-manager.service.js +338 -119
- 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 +13 -1
- package/dist/plugins/devices-shelly-ng/delegates/shelly-device.delegate.js +109 -10
- 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 +8 -11
- package/dist/plugins/devices-shelly-ng/devices-shelly-ng.constants.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/mappings/mapping-loader.service.js +4 -0
- package/dist/plugins/devices-shelly-ng/mappings/mapping-loader.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/services/device-manager.service.js +5 -0
- package/dist/plugins/devices-shelly-ng/services/device-manager.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/services/shelly-ng.service.d.ts +9 -1
- package/dist/plugins/devices-shelly-ng/services/shelly-ng.service.js +59 -24
- package/dist/plugins/devices-shelly-ng/services/shelly-ng.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/services/shelly-ws-server.service.d.ts +0 -1
- package/dist/plugins/devices-shelly-ng/services/shelly-ws-server.service.js +5 -12
- package/dist/plugins/devices-shelly-ng/services/shelly-ws-server.service.js.map +1 -1
- package/dist/plugins/devices-shelly-ng/utils/transform.utils.d.ts +2 -0
- package/dist/plugins/devices-shelly-ng/utils/transform.utils.js +14 -1
- package/dist/plugins/devices-shelly-ng/utils/transform.utils.js.map +1 -1
- package/dist/plugins/remote-access-cloudflare-tunnel/controllers/setup.controller.d.ts +17 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/controllers/setup.controller.js +147 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/controllers/setup.controller.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/controllers/status.controller.d.ts +15 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/controllers/status.controller.js +98 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/controllers/status.controller.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/dto/update-config.dto.d.ts +9 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/dto/update-config.dto.js +94 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/dto/update-config.dto.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/config.model.d.ts +9 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/config.model.js +92 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/config.model.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/install.model.d.ts +7 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/install.model.js +48 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/install.model.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/status.model.d.ts +42 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/status.model.js +352 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/models/status.model.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.constants.d.ts +24 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.constants.js +27 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.constants.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.exceptions.d.ts +8 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.exceptions.js +19 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.exceptions.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.openapi.d.ts +4 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.openapi.js +20 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.openapi.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.plugin.d.ts +21 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.plugin.js +135 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/remote-access-cloudflare-tunnel.plugin.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/scripts/cloudflared-setup.sh +185 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-managed.service.d.ts +82 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-managed.service.js +507 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-managed.service.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-provider.service.d.ts +10 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-provider.service.js +37 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-provider.service.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-setup.service.d.ts +38 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-setup.service.js +147 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-setup.service.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-cli.service.d.ts +15 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-cli.service.js +67 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-cli.service.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-metrics.service.d.ts +8 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-metrics.service.js +46 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-metrics.service.js.map +1 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-process.service.d.ts +27 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-process.service.js +139 -0
- package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-process.service.js.map +1 -0
- package/dist/plugins/remote-access-tailscale/controllers/setup.controller.d.ts +1 -0
- package/dist/plugins/remote-access-tailscale/controllers/setup.controller.js +26 -10
- package/dist/plugins/remote-access-tailscale/controllers/setup.controller.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/controllers/status.controller.d.ts +6 -1
- package/dist/plugins/remote-access-tailscale/controllers/status.controller.js +28 -3
- package/dist/plugins/remote-access-tailscale/controllers/status.controller.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/models/status.model.d.ts +19 -0
- package/dist/plugins/remote-access-tailscale/models/status.model.js +158 -1
- package/dist/plugins/remote-access-tailscale/models/status.model.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.constants.d.ts +2 -0
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.constants.js +3 -1
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.constants.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.exceptions.d.ts +13 -0
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.exceptions.js +27 -0
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.exceptions.js.map +1 -0
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.openapi.d.ts +2 -2
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.openapi.js +2 -0
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.openapi.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/remote-access-tailscale.plugin.js +1 -1
- package/dist/plugins/remote-access-tailscale/scripts/tailscale-setup.sh +61 -0
- package/dist/plugins/remote-access-tailscale/services/tailscale-cli.service.d.ts +9 -0
- package/dist/plugins/remote-access-tailscale/services/tailscale-cli.service.js +12 -0
- package/dist/plugins/remote-access-tailscale/services/tailscale-cli.service.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/services/tailscale-login.service.d.ts +1 -0
- package/dist/plugins/remote-access-tailscale/services/tailscale-login.service.js +27 -2
- package/dist/plugins/remote-access-tailscale/services/tailscale-login.service.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/services/tailscale-node-managed.service.d.ts +30 -1
- package/dist/plugins/remote-access-tailscale/services/tailscale-node-managed.service.js +300 -30
- package/dist/plugins/remote-access-tailscale/services/tailscale-node-managed.service.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/services/tailscale-serve.service.d.ts +8 -3
- package/dist/plugins/remote-access-tailscale/services/tailscale-serve.service.js +39 -12
- package/dist/plugins/remote-access-tailscale/services/tailscale-serve.service.js.map +1 -1
- package/dist/plugins/remote-access-tailscale/services/tailscale-setup.service.d.ts +14 -5
- package/dist/plugins/remote-access-tailscale/services/tailscale-setup.service.js +51 -16
- package/dist/plugins/remote-access-tailscale/services/tailscale-setup.service.js.map +1 -1
- package/dist/plugins/scenes-local/platforms/local-scene.platform.d.ts +3 -1
- package/dist/plugins/scenes-local/platforms/local-scene.platform.js +12 -7
- package/dist/plugins/scenes-local/platforms/local-scene.platform.js.map +1 -1
- package/dist/plugins/spaces-home-control/services/climate-intent.service.d.ts +3 -1
- package/dist/plugins/spaces-home-control/services/climate-intent.service.js +6 -3
- package/dist/plugins/spaces-home-control/services/climate-intent.service.js.map +1 -1
- package/dist/plugins/spaces-home-control/services/covers-intent.service.d.ts +3 -1
- package/dist/plugins/spaces-home-control/services/covers-intent.service.js +6 -3
- package/dist/plugins/spaces-home-control/services/covers-intent.service.js.map +1 -1
- package/dist/plugins/spaces-home-control/services/lighting-intent.service.d.ts +3 -1
- package/dist/plugins/spaces-home-control/services/lighting-intent.service.js +7 -4
- package/dist/plugins/spaces-home-control/services/lighting-intent.service.js.map +1 -1
- package/dist/plugins/spaces-home-control/services/space-media-activity.service.d.ts +3 -1
- package/dist/plugins/spaces-home-control/services/space-media-activity.service.js +11 -5
- package/dist/plugins/spaces-home-control/services/space-media-activity.service.js.map +1 -1
- package/dist/plugins/spaces-home-control/services/space-undo-history.service.d.ts +3 -1
- package/dist/plugins/spaces-home-control/services/space-undo-history.service.js +8 -5
- package/dist/plugins/spaces-home-control/services/space-undo-history.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +5 -2
|
@@ -8,16 +8,19 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
11
14
|
var DelegatesManagerService_1;
|
|
12
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
16
|
exports.DelegatesManagerService = void 0;
|
|
14
|
-
const class_transformer_1 = require("class-transformer");
|
|
15
17
|
const common_1 = require("@nestjs/common");
|
|
16
18
|
const logger_1 = require("../../../common/logger");
|
|
17
19
|
const transform_utils_1 = require("../../../common/utils/transform.utils");
|
|
18
20
|
const devices_constants_1 = require("../../../modules/devices/devices.constants");
|
|
19
21
|
const channels_properties_service_1 = require("../../../modules/devices/services/channels.properties.service");
|
|
20
22
|
const channels_service_1 = require("../../../modules/devices/services/channels.service");
|
|
23
|
+
const command_latency_trace_collector_service_1 = require("../../../modules/devices/services/command-latency-trace-collector.service");
|
|
21
24
|
const device_connectivity_service_1 = require("../../../modules/devices/services/device-connectivity.service");
|
|
22
25
|
const devices_service_1 = require("../../../modules/devices/services/devices.service");
|
|
23
26
|
const devices_shelly_ng_constants_1 = require("../devices-shelly-ng.constants");
|
|
@@ -30,7 +33,7 @@ const device_manager_service_1 = require("../services/device-manager.service");
|
|
|
30
33
|
const transform_utils_2 = require("../utils/transform.utils");
|
|
31
34
|
const shelly_device_delegate_1 = require("./shelly-device.delegate");
|
|
32
35
|
let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManagerService {
|
|
33
|
-
constructor(devicesService, channelsService, channelsPropertiesService, deviceConnectivityService, deviceManagerService, deviceAddressService, propertyMappingStorage, transformerRegistry) {
|
|
36
|
+
constructor(devicesService, channelsService, channelsPropertiesService, deviceConnectivityService, deviceManagerService, deviceAddressService, propertyMappingStorage, transformerRegistry, commandLatencyTraceCollector = new command_latency_trace_collector_service_1.CommandLatencyTraceCollectorService()) {
|
|
34
37
|
this.devicesService = devicesService;
|
|
35
38
|
this.channelsService = channelsService;
|
|
36
39
|
this.channelsPropertiesService = channelsPropertiesService;
|
|
@@ -39,6 +42,7 @@ let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManager
|
|
|
39
42
|
this.deviceAddressService = deviceAddressService;
|
|
40
43
|
this.propertyMappingStorage = propertyMappingStorage;
|
|
41
44
|
this.transformerRegistry = transformerRegistry;
|
|
45
|
+
this.commandLatencyTraceCollector = commandLatencyTraceCollector;
|
|
42
46
|
this.logger = (0, logger_1.createExtensionLogger)(devices_shelly_ng_constants_1.DEVICES_SHELLY_NG_PLUGIN_NAME, 'DelegatesManagerService');
|
|
43
47
|
this.delegates = new Map();
|
|
44
48
|
this.delegateValueHandlers = new Map();
|
|
@@ -47,6 +51,10 @@ let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManager
|
|
|
47
51
|
this.setChannelsHandlers = new Map();
|
|
48
52
|
this.setPropertiesHandlers = new Map();
|
|
49
53
|
this.pendingWrites = new Map();
|
|
54
|
+
this.pendingPollWrites = new Map();
|
|
55
|
+
this.activePollWrites = new Map();
|
|
56
|
+
this.delegatePollGenerations = new Map();
|
|
57
|
+
this.currentValueUpdateContext = null;
|
|
50
58
|
this.propertiesMap = new Map();
|
|
51
59
|
this.delegateDeviceIds = new Map();
|
|
52
60
|
this.delegateToIdentifier = new Map();
|
|
@@ -75,6 +83,7 @@ let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManager
|
|
|
75
83
|
}
|
|
76
84
|
const generation = (this.insertGeneration.get(shelly.id) ?? 0) + 1;
|
|
77
85
|
this.insertGeneration.set(shelly.id, generation);
|
|
86
|
+
this.delegatePollGenerations.set(shelly.id, (this.delegatePollGenerations.get(shelly.id) ?? 0) + 1);
|
|
78
87
|
const delegate = new shelly_device_delegate_1.ShellyDeviceDelegate(shelly);
|
|
79
88
|
this.delegates.set(shelly.id, delegate);
|
|
80
89
|
const wifiIp = shelly.wifi?.sta_ip ?? null;
|
|
@@ -199,60 +208,7 @@ let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManager
|
|
|
199
208
|
await comp.set(val);
|
|
200
209
|
return true;
|
|
201
210
|
});
|
|
202
|
-
|
|
203
|
-
const electricalEnergy = await this.channelsService.findOneBy('identifier', `energy:${comp.id}`, device.id, devices_shelly_ng_constants_1.DEVICES_SHELLY_NG_TYPE);
|
|
204
|
-
if (electricalEnergy === null) {
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
const consumption = await this.channelsPropertiesService.findOneBy('identifier', 'aenergy', electricalEnergy.id);
|
|
208
|
-
if (consumption === null) {
|
|
209
|
-
}
|
|
210
|
-
else {
|
|
211
|
-
await this.setDefaultPropertyValue(device.id, consumption, (0, transform_utils_2.toEnergy)(comp.aenergy));
|
|
212
|
-
this.changeHandlers.set(`${delegate.id}|${comp.key}|aenergy`, (val) => {
|
|
213
|
-
this.handleNumericChange(comp.key, 'aenergy', consumption.id, val, (n) => this.handleChange(consumption, (0, transform_utils_2.toEnergy)(n), false));
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
if (typeof comp.apower !== 'undefined') {
|
|
219
|
-
const electricalPower = await this.channelsService.findOneBy('identifier', `power:${comp.id}`, device.id, devices_shelly_ng_constants_1.DEVICES_SHELLY_NG_TYPE);
|
|
220
|
-
if (electricalPower === null) {
|
|
221
|
-
}
|
|
222
|
-
else {
|
|
223
|
-
const power = await this.channelsPropertiesService.findOneBy('identifier', 'apower', electricalPower.id);
|
|
224
|
-
if (power === null) {
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
await this.setDefaultPropertyValue(device.id, power, Math.max(0, comp.apower));
|
|
228
|
-
this.changeHandlers.set(`${delegate.id}|${comp.key}|apower`, (val) => {
|
|
229
|
-
this.handleNumericChange(comp.key, 'apower', power.id, val, (n) => this.handleChange(power, Math.max(0, n), false));
|
|
230
|
-
});
|
|
231
|
-
if (typeof comp.voltage !== 'undefined') {
|
|
232
|
-
const voltage = await this.channelsPropertiesService.findOneBy('identifier', 'voltage', electricalPower.id);
|
|
233
|
-
if (voltage === null) {
|
|
234
|
-
}
|
|
235
|
-
else {
|
|
236
|
-
await this.setDefaultPropertyValue(device.id, voltage, comp.voltage);
|
|
237
|
-
this.changeHandlers.set(`${delegate.id}|${comp.key}|voltage`, (val) => {
|
|
238
|
-
this.handleNumericChange(comp.key, 'voltage', voltage.id, val, (n) => this.handleChange(voltage, n, false));
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
if (typeof comp.current !== 'undefined') {
|
|
243
|
-
const current = await this.channelsPropertiesService.findOneBy('identifier', 'current', electricalPower.id);
|
|
244
|
-
if (current === null) {
|
|
245
|
-
}
|
|
246
|
-
else {
|
|
247
|
-
await this.setDefaultPropertyValue(device.id, current, comp.current);
|
|
248
|
-
this.changeHandlers.set(`${delegate.id}|${comp.key}|current`, (val) => {
|
|
249
|
-
this.handleNumericChange(comp.key, 'current', current.id, val, (n) => this.handleChange(current, n, false));
|
|
250
|
-
});
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
}
|
|
211
|
+
await this.wireElectricalChannels(delegate, device, comp);
|
|
256
212
|
}
|
|
257
213
|
if (this.insertGeneration.get(shelly.id) !== generation)
|
|
258
214
|
return delegate;
|
|
@@ -314,6 +270,7 @@ let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManager
|
|
|
314
270
|
await comp.stop();
|
|
315
271
|
return true;
|
|
316
272
|
});
|
|
273
|
+
await this.wireElectricalChannels(delegate, device, comp);
|
|
317
274
|
}
|
|
318
275
|
if (this.insertGeneration.get(shelly.id) !== generation)
|
|
319
276
|
return delegate;
|
|
@@ -362,6 +319,7 @@ let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManager
|
|
|
362
319
|
return true;
|
|
363
320
|
});
|
|
364
321
|
}
|
|
322
|
+
await this.wireElectricalChannels(delegate, device, comp);
|
|
365
323
|
}
|
|
366
324
|
if (this.insertGeneration.get(shelly.id) !== generation)
|
|
367
325
|
return delegate;
|
|
@@ -495,6 +453,7 @@ let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManager
|
|
|
495
453
|
]);
|
|
496
454
|
return true;
|
|
497
455
|
});
|
|
456
|
+
await this.wireElectricalChannels(delegate, device, comp);
|
|
498
457
|
}
|
|
499
458
|
if (this.insertGeneration.get(shelly.id) !== generation)
|
|
500
459
|
return delegate;
|
|
@@ -653,6 +612,7 @@ let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManager
|
|
|
653
612
|
], Math.round((0, transform_utils_1.clampNumber)(whiteValue, 0, 255)));
|
|
654
613
|
return true;
|
|
655
614
|
});
|
|
615
|
+
await this.wireElectricalChannels(delegate, device, comp);
|
|
656
616
|
}
|
|
657
617
|
if (this.insertGeneration.get(shelly.id) !== generation)
|
|
658
618
|
return delegate;
|
|
@@ -746,6 +706,7 @@ let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManager
|
|
|
746
706
|
await comp.set(outputValue, Math.round((0, transform_utils_1.clampNumber)(brightnessValue, 0, 100)), Math.round((0, transform_utils_1.clampNumber)(ctValue, 2_700, 6_500)));
|
|
747
707
|
return true;
|
|
748
708
|
});
|
|
709
|
+
await this.wireElectricalChannels(delegate, device, comp);
|
|
749
710
|
}
|
|
750
711
|
if (this.insertGeneration.get(shelly.id) !== generation)
|
|
751
712
|
return delegate;
|
|
@@ -800,63 +761,69 @@ let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManager
|
|
|
800
761
|
if (this.insertGeneration.get(shelly.id) !== generation)
|
|
801
762
|
return delegate;
|
|
802
763
|
for (const comp of delegate.pm1.values()) {
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
}
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
}
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
const consumption = await this.channelsPropertiesService.findOneBy('identifier', 'aenergy', electricalEnergy.id);
|
|
841
|
-
if (consumption === null) {
|
|
842
|
-
}
|
|
843
|
-
else {
|
|
844
|
-
await this.setDefaultPropertyValue(device.id, consumption, (0, transform_utils_2.toEnergy)(comp.aenergy));
|
|
845
|
-
this.changeHandlers.set(`${delegate.id}|${comp.key}|aenergy`, (val) => {
|
|
846
|
-
this.handleNumericChange(comp.key, 'aenergy', consumption.id, val, (n) => this.handleChange(consumption, (0, transform_utils_2.toEnergy)(n), false));
|
|
847
|
-
});
|
|
848
|
-
}
|
|
849
|
-
}
|
|
850
|
-
}
|
|
764
|
+
await this.wireElectricalChannels(delegate, device, comp);
|
|
765
|
+
}
|
|
766
|
+
if (this.insertGeneration.get(shelly.id) !== generation)
|
|
767
|
+
return delegate;
|
|
768
|
+
for (const comp of delegate.em.values()) {
|
|
769
|
+
const phases = [
|
|
770
|
+
{ id: 'a', power: comp.a_act_power, voltage: comp.a_voltage, current: comp.a_current, freq: comp.a_freq },
|
|
771
|
+
{ id: 'b', power: comp.b_act_power, voltage: comp.b_voltage, current: comp.b_current, freq: comp.b_freq },
|
|
772
|
+
{ id: 'c', power: comp.c_act_power, voltage: comp.c_voltage, current: comp.c_current, freq: comp.c_freq },
|
|
773
|
+
];
|
|
774
|
+
for (const phase of phases) {
|
|
775
|
+
const channelIdentifier = `power:${comp.id}:${phase.id}`;
|
|
776
|
+
await this.wireMeterProperty(delegate, device, comp.key, channelIdentifier, `${phase.id}_act_power`, `${phase.id}_act_power`, phase.power, true);
|
|
777
|
+
await this.wireMeterProperty(delegate, device, comp.key, channelIdentifier, `${phase.id}_voltage`, `${phase.id}_voltage`, phase.voltage, true);
|
|
778
|
+
await this.wireMeterProperty(delegate, device, comp.key, channelIdentifier, `${phase.id}_current`, `${phase.id}_current`, phase.current, true);
|
|
779
|
+
await this.wireMeterProperty(delegate, device, comp.key, channelIdentifier, `${phase.id}_freq`, `${phase.id}_freq`, phase.freq, true);
|
|
780
|
+
}
|
|
781
|
+
const totalChannelIdentifier = `power:${comp.id}:total`;
|
|
782
|
+
await this.wireMeterProperty(delegate, device, comp.key, totalChannelIdentifier, 'total_act_power', 'total_act_power', comp.total_act_power, true);
|
|
783
|
+
await this.wireMeterProperty(delegate, device, comp.key, totalChannelIdentifier, 'total_current', 'total_current', comp.total_current, true);
|
|
784
|
+
}
|
|
785
|
+
if (this.insertGeneration.get(shelly.id) !== generation)
|
|
786
|
+
return delegate;
|
|
787
|
+
for (const comp of delegate.emData.values()) {
|
|
788
|
+
const phases = [
|
|
789
|
+
{ id: 'a', energy: comp.a_total_act_energy, returned: comp.a_total_act_ret_energy },
|
|
790
|
+
{ id: 'b', energy: comp.b_total_act_energy, returned: comp.b_total_act_ret_energy },
|
|
791
|
+
{ id: 'c', energy: comp.c_total_act_energy, returned: comp.c_total_act_ret_energy },
|
|
792
|
+
];
|
|
793
|
+
for (const phase of phases) {
|
|
794
|
+
const channelIdentifier = `energy:${comp.id}:${phase.id}`;
|
|
795
|
+
await this.wireMeterProperty(delegate, device, comp.key, channelIdentifier, `${phase.id}_total_act_energy`, `${phase.id}_total_act_energy`, phase.energy, false);
|
|
796
|
+
await this.wireMeterProperty(delegate, device, comp.key, channelIdentifier, `${phase.id}_total_act_ret_energy`, `${phase.id}_total_act_ret_energy`, phase.returned, false);
|
|
797
|
+
}
|
|
798
|
+
const totalChannelIdentifier = `energy:${comp.id}:total`;
|
|
799
|
+
await this.wireMeterProperty(delegate, device, comp.key, totalChannelIdentifier, 'total_act', 'total_act', comp.total_act, false);
|
|
800
|
+
await this.wireMeterProperty(delegate, device, comp.key, totalChannelIdentifier, 'total_act_ret', 'total_act_ret', comp.total_act_ret, false);
|
|
851
801
|
}
|
|
852
802
|
if (this.insertGeneration.get(shelly.id) !== generation)
|
|
853
803
|
return delegate;
|
|
854
|
-
const
|
|
804
|
+
for (const comp of delegate.em1.values()) {
|
|
805
|
+
const channelIdentifier = `power:${comp.id}`;
|
|
806
|
+
await this.wireMeterProperty(delegate, device, comp.key, channelIdentifier, 'act_power', 'act_power', comp.act_power, true);
|
|
807
|
+
await this.wireMeterProperty(delegate, device, comp.key, channelIdentifier, 'voltage', 'voltage', comp.voltage, true);
|
|
808
|
+
await this.wireMeterProperty(delegate, device, comp.key, channelIdentifier, 'current', 'current', comp.current, true);
|
|
809
|
+
await this.wireMeterProperty(delegate, device, comp.key, channelIdentifier, 'freq', 'freq', comp.freq, true);
|
|
810
|
+
}
|
|
811
|
+
if (this.insertGeneration.get(shelly.id) !== generation)
|
|
812
|
+
return delegate;
|
|
813
|
+
for (const comp of delegate.em1Data.values()) {
|
|
814
|
+
const channelIdentifier = `energy:${comp.id}`;
|
|
815
|
+
await this.wireMeterProperty(delegate, device, comp.key, channelIdentifier, 'total_act_energy', 'total_act_energy', comp.total_act_energy, false);
|
|
816
|
+
await this.wireMeterProperty(delegate, device, comp.key, channelIdentifier, 'total_act_ret_energy', 'total_act_ret_energy', comp.total_act_ret_energy, false);
|
|
817
|
+
}
|
|
818
|
+
if (this.insertGeneration.get(shelly.id) !== generation)
|
|
819
|
+
return delegate;
|
|
820
|
+
const valueHandler = (compKey, attr, val, origin = 'notify') => {
|
|
855
821
|
const handler = this.changeHandlers.get(`${delegate.id}|${compKey}|${attr}`);
|
|
856
822
|
if (!handler) {
|
|
857
823
|
return;
|
|
858
824
|
}
|
|
859
825
|
try {
|
|
826
|
+
this.currentValueUpdateContext = { delegateId: delegate.id, deviceId: device.id, origin };
|
|
860
827
|
handler(val);
|
|
861
828
|
}
|
|
862
829
|
catch (error) {
|
|
@@ -867,6 +834,9 @@ let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManager
|
|
|
867
834
|
stack: err.stack,
|
|
868
835
|
});
|
|
869
836
|
}
|
|
837
|
+
finally {
|
|
838
|
+
this.currentValueUpdateContext = null;
|
|
839
|
+
}
|
|
870
840
|
};
|
|
871
841
|
delegate.on('value', valueHandler);
|
|
872
842
|
this.delegateValueHandlers.set(delegate.id, valueHandler);
|
|
@@ -982,6 +952,8 @@ let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManager
|
|
|
982
952
|
if (!delegate) {
|
|
983
953
|
return;
|
|
984
954
|
}
|
|
955
|
+
this.delegatePollGenerations.set(deviceId, (this.delegatePollGenerations.get(deviceId) ?? 0) + 1);
|
|
956
|
+
this.cancelPollWritesForDelegate(deviceId);
|
|
985
957
|
const valueHandler = this.delegateValueHandlers.get(delegate.id);
|
|
986
958
|
const connectionHandler = this.delegateConnectionHandlers.get(delegate.id);
|
|
987
959
|
if (connectionHandler) {
|
|
@@ -1118,7 +1090,24 @@ let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManager
|
|
|
1118
1090
|
}
|
|
1119
1091
|
}
|
|
1120
1092
|
async handleChange(property, value, immediately = true) {
|
|
1093
|
+
const context = this.currentValueUpdateContext;
|
|
1094
|
+
if (context !== null) {
|
|
1095
|
+
this.commandLatencyTraceCollector.recordProviderReceipt(property.id, value, context.origin, {
|
|
1096
|
+
delegateId: context.delegateId,
|
|
1097
|
+
deviceId: context.deviceId,
|
|
1098
|
+
});
|
|
1099
|
+
}
|
|
1100
|
+
if (context?.origin === 'poll') {
|
|
1101
|
+
this.commandLatencyTraceCollector.recordPollActivity(property.id, 'poll-coalescer-admission', {
|
|
1102
|
+
delegateId: context.delegateId,
|
|
1103
|
+
deviceId: context.deviceId,
|
|
1104
|
+
});
|
|
1105
|
+
this.schedulePollWrite(context, property, value);
|
|
1106
|
+
return;
|
|
1107
|
+
}
|
|
1121
1108
|
if (immediately) {
|
|
1109
|
+
this.cancelScheduledWrite(property.id);
|
|
1110
|
+
this.cancelPollWrite(property.id);
|
|
1122
1111
|
await this.writeValueToProperty(property, value);
|
|
1123
1112
|
}
|
|
1124
1113
|
else {
|
|
@@ -1142,6 +1131,87 @@ let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManager
|
|
|
1142
1131
|
}
|
|
1143
1132
|
set.add(property.id);
|
|
1144
1133
|
}
|
|
1134
|
+
async wireElectricalChannels(delegate, device, comp) {
|
|
1135
|
+
if (typeof comp.aenergy !== 'undefined') {
|
|
1136
|
+
const electricalEnergy = await this.channelsService.findOneBy('identifier', `energy:${comp.id}`, device.id, devices_shelly_ng_constants_1.DEVICES_SHELLY_NG_TYPE);
|
|
1137
|
+
if (electricalEnergy === null) {
|
|
1138
|
+
}
|
|
1139
|
+
else {
|
|
1140
|
+
const consumption = await this.channelsPropertiesService.findOneBy('identifier', 'aenergy', electricalEnergy.id);
|
|
1141
|
+
if (consumption === null) {
|
|
1142
|
+
}
|
|
1143
|
+
else {
|
|
1144
|
+
await this.setDefaultPropertyValue(device.id, consumption, (0, transform_utils_2.toEnergy)(comp.aenergy));
|
|
1145
|
+
this.changeHandlers.set(`${delegate.id}|${comp.key}|aenergy.total`, (val) => {
|
|
1146
|
+
this.handleNumericChange(comp.key, 'aenergy.total', consumption.id, val, (n) => this.handleChange(consumption, (0, transform_utils_2.toEnergy)(n), false));
|
|
1147
|
+
});
|
|
1148
|
+
}
|
|
1149
|
+
}
|
|
1150
|
+
}
|
|
1151
|
+
if (typeof comp.apower !== 'undefined' ||
|
|
1152
|
+
typeof comp.voltage !== 'undefined' ||
|
|
1153
|
+
typeof comp.current !== 'undefined') {
|
|
1154
|
+
const electricalPower = await this.channelsService.findOneBy('identifier', `power:${comp.id}`, device.id, devices_shelly_ng_constants_1.DEVICES_SHELLY_NG_TYPE);
|
|
1155
|
+
if (electricalPower === null) {
|
|
1156
|
+
}
|
|
1157
|
+
else {
|
|
1158
|
+
if (typeof comp.apower !== 'undefined') {
|
|
1159
|
+
const power = await this.channelsPropertiesService.findOneBy('identifier', 'apower', electricalPower.id);
|
|
1160
|
+
if (power === null) {
|
|
1161
|
+
}
|
|
1162
|
+
else {
|
|
1163
|
+
await this.setDefaultPropertyValue(device.id, power, Math.max(0, comp.apower));
|
|
1164
|
+
this.changeHandlers.set(`${delegate.id}|${comp.key}|apower`, (val) => {
|
|
1165
|
+
this.handleNumericChange(comp.key, 'apower', power.id, val, (n) => this.handleChange(power, Math.max(0, n), false));
|
|
1166
|
+
});
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
1169
|
+
if (typeof comp.voltage !== 'undefined') {
|
|
1170
|
+
const voltage = await this.channelsPropertiesService.findOneBy('identifier', 'voltage', electricalPower.id);
|
|
1171
|
+
if (voltage === null) {
|
|
1172
|
+
}
|
|
1173
|
+
else {
|
|
1174
|
+
await this.setDefaultPropertyValue(device.id, voltage, comp.voltage);
|
|
1175
|
+
this.changeHandlers.set(`${delegate.id}|${comp.key}|voltage`, (val) => {
|
|
1176
|
+
this.handleNumericChange(comp.key, 'voltage', voltage.id, val, (n) => this.handleChange(voltage, n, false));
|
|
1177
|
+
});
|
|
1178
|
+
}
|
|
1179
|
+
}
|
|
1180
|
+
if (typeof comp.current !== 'undefined') {
|
|
1181
|
+
const current = await this.channelsPropertiesService.findOneBy('identifier', 'current', electricalPower.id);
|
|
1182
|
+
if (current === null) {
|
|
1183
|
+
}
|
|
1184
|
+
else {
|
|
1185
|
+
await this.setDefaultPropertyValue(device.id, current, comp.current);
|
|
1186
|
+
this.changeHandlers.set(`${delegate.id}|${comp.key}|current`, (val) => {
|
|
1187
|
+
this.handleNumericChange(comp.key, 'current', current.id, val, (n) => this.handleChange(current, n, false));
|
|
1188
|
+
});
|
|
1189
|
+
}
|
|
1190
|
+
}
|
|
1191
|
+
}
|
|
1192
|
+
}
|
|
1193
|
+
}
|
|
1194
|
+
async wireMeterProperty(delegate, device, compKey, channelIdentifier, attr, propertyIdentifier, value, allowNull) {
|
|
1195
|
+
if (typeof value === 'undefined') {
|
|
1196
|
+
return;
|
|
1197
|
+
}
|
|
1198
|
+
const channel = await this.channelsService.findOneBy('identifier', channelIdentifier, device.id, devices_shelly_ng_constants_1.DEVICES_SHELLY_NG_TYPE);
|
|
1199
|
+
if (channel === null) {
|
|
1200
|
+
return;
|
|
1201
|
+
}
|
|
1202
|
+
const property = await this.channelsPropertiesService.findOneBy('identifier', propertyIdentifier, channel.id);
|
|
1203
|
+
if (property === null) {
|
|
1204
|
+
return;
|
|
1205
|
+
}
|
|
1206
|
+
if (value !== null) {
|
|
1207
|
+
await this.setDefaultPropertyValue(device.id, property, value);
|
|
1208
|
+
}
|
|
1209
|
+
this.changeHandlers.set(`${delegate.id}|${compKey}|${attr}`, (val) => {
|
|
1210
|
+
this.handleNumericChange(compKey, attr, property.id, val, (n) => this.handleChange(property, n, false), {
|
|
1211
|
+
allowNull,
|
|
1212
|
+
});
|
|
1213
|
+
});
|
|
1214
|
+
}
|
|
1145
1215
|
determineCategory(delegate) {
|
|
1146
1216
|
if (delegate.descriptor && delegate.descriptor.categories.length > 0) {
|
|
1147
1217
|
return delegate.descriptor.categories[0];
|
|
@@ -1164,6 +1234,9 @@ let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManager
|
|
|
1164
1234
|
return devices_constants_1.DeviceCategory.GENERIC;
|
|
1165
1235
|
}
|
|
1166
1236
|
handleNumericChange(compKey, attr, propertyId, val, write, opts) {
|
|
1237
|
+
if (val === null && opts?.allowNull) {
|
|
1238
|
+
return;
|
|
1239
|
+
}
|
|
1167
1240
|
const n = (0, transform_utils_1.coerceNumberSafe)(val, opts);
|
|
1168
1241
|
if (n === null || Number.isNaN(n)) {
|
|
1169
1242
|
this.logger.warn(`Dropping invalid numeric update for ${compKey}.${attr} -> ${(0, transform_utils_1.safeToString)(val)} (property=${propertyId})`);
|
|
@@ -1193,9 +1266,123 @@ let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManager
|
|
|
1193
1266
|
}, 250);
|
|
1194
1267
|
this.pendingWrites.set(property.id, t);
|
|
1195
1268
|
}
|
|
1269
|
+
schedulePollWrite(context, property, value) {
|
|
1270
|
+
let bucket = this.pendingPollWrites.get(context.deviceId);
|
|
1271
|
+
if (!bucket) {
|
|
1272
|
+
const values = new Map();
|
|
1273
|
+
const timer = setTimeout(() => {
|
|
1274
|
+
void this.flushPollWrites(context.deviceId);
|
|
1275
|
+
}, 250);
|
|
1276
|
+
bucket = { timer, values };
|
|
1277
|
+
this.pendingPollWrites.set(context.deviceId, bucket);
|
|
1278
|
+
}
|
|
1279
|
+
bucket.values.set(property.id, {
|
|
1280
|
+
delegateId: context.delegateId,
|
|
1281
|
+
delegateGeneration: this.delegatePollGenerations.get(context.delegateId) ?? 0,
|
|
1282
|
+
property,
|
|
1283
|
+
value,
|
|
1284
|
+
});
|
|
1285
|
+
}
|
|
1286
|
+
async flushPollWrites(deviceId) {
|
|
1287
|
+
const bucket = this.pendingPollWrites.get(deviceId);
|
|
1288
|
+
if (!bucket) {
|
|
1289
|
+
return;
|
|
1290
|
+
}
|
|
1291
|
+
this.pendingPollWrites.delete(deviceId);
|
|
1292
|
+
clearTimeout(bucket.timer);
|
|
1293
|
+
let activeBuckets = this.activePollWrites.get(deviceId);
|
|
1294
|
+
if (activeBuckets === undefined) {
|
|
1295
|
+
activeBuckets = new Set();
|
|
1296
|
+
this.activePollWrites.set(deviceId, activeBuckets);
|
|
1297
|
+
}
|
|
1298
|
+
activeBuckets.add(bucket);
|
|
1299
|
+
try {
|
|
1300
|
+
for (const [propertyId, pending] of [...bucket.values.entries()]) {
|
|
1301
|
+
if (bucket.values.get(propertyId) !== pending) {
|
|
1302
|
+
continue;
|
|
1303
|
+
}
|
|
1304
|
+
if (!this.delegates.has(pending.delegateId) ||
|
|
1305
|
+
(this.delegatePollGenerations.get(pending.delegateId) ?? 0) !== pending.delegateGeneration) {
|
|
1306
|
+
continue;
|
|
1307
|
+
}
|
|
1308
|
+
try {
|
|
1309
|
+
this.commandLatencyTraceCollector.recordPollActivity(pending.property.id, 'poll-drain', {
|
|
1310
|
+
delegateId: pending.delegateId,
|
|
1311
|
+
deviceId,
|
|
1312
|
+
});
|
|
1313
|
+
await this.writeValueToProperty(pending.property, pending.value);
|
|
1314
|
+
}
|
|
1315
|
+
catch (error) {
|
|
1316
|
+
const err = error;
|
|
1317
|
+
this.logger.error(`Failed to process poll write of value=${(0, transform_utils_1.safeToString)(pending.value)} to property=${pending.property.id}`, { message: err.message, stack: err.stack });
|
|
1318
|
+
}
|
|
1319
|
+
}
|
|
1320
|
+
}
|
|
1321
|
+
finally {
|
|
1322
|
+
activeBuckets.delete(bucket);
|
|
1323
|
+
if (activeBuckets.size === 0 && this.activePollWrites.get(deviceId) === activeBuckets) {
|
|
1324
|
+
this.activePollWrites.delete(deviceId);
|
|
1325
|
+
}
|
|
1326
|
+
}
|
|
1327
|
+
}
|
|
1328
|
+
cancelScheduledWrite(propertyId) {
|
|
1329
|
+
const timer = this.pendingWrites.get(propertyId);
|
|
1330
|
+
if (timer) {
|
|
1331
|
+
clearTimeout(timer);
|
|
1332
|
+
this.pendingWrites.delete(propertyId);
|
|
1333
|
+
}
|
|
1334
|
+
}
|
|
1335
|
+
cancelPollWrite(propertyId) {
|
|
1336
|
+
for (const [deviceId, bucket] of this.pendingPollWrites.entries()) {
|
|
1337
|
+
bucket.values.delete(propertyId);
|
|
1338
|
+
if (bucket.values.size === 0) {
|
|
1339
|
+
clearTimeout(bucket.timer);
|
|
1340
|
+
this.pendingPollWrites.delete(deviceId);
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1343
|
+
for (const buckets of this.activePollWrites.values()) {
|
|
1344
|
+
for (const bucket of buckets) {
|
|
1345
|
+
bucket.values.delete(propertyId);
|
|
1346
|
+
}
|
|
1347
|
+
}
|
|
1348
|
+
}
|
|
1349
|
+
cancelPollWritesForDelegate(delegateId) {
|
|
1350
|
+
for (const [deviceId, bucket] of this.pendingPollWrites.entries()) {
|
|
1351
|
+
for (const [propertyId, pending] of bucket.values.entries()) {
|
|
1352
|
+
if (pending.delegateId === delegateId) {
|
|
1353
|
+
bucket.values.delete(propertyId);
|
|
1354
|
+
}
|
|
1355
|
+
}
|
|
1356
|
+
if (bucket.values.size === 0) {
|
|
1357
|
+
clearTimeout(bucket.timer);
|
|
1358
|
+
this.pendingPollWrites.delete(deviceId);
|
|
1359
|
+
}
|
|
1360
|
+
}
|
|
1361
|
+
for (const buckets of this.activePollWrites.values()) {
|
|
1362
|
+
for (const bucket of buckets) {
|
|
1363
|
+
for (const [propertyId, pending] of bucket.values.entries()) {
|
|
1364
|
+
if (pending.delegateId === delegateId) {
|
|
1365
|
+
bucket.values.delete(propertyId);
|
|
1366
|
+
}
|
|
1367
|
+
}
|
|
1368
|
+
}
|
|
1369
|
+
}
|
|
1370
|
+
}
|
|
1371
|
+
clearPollWrites() {
|
|
1372
|
+
for (const bucket of this.pendingPollWrites.values()) {
|
|
1373
|
+
clearTimeout(bucket.timer);
|
|
1374
|
+
}
|
|
1375
|
+
this.pendingPollWrites.clear();
|
|
1376
|
+
for (const buckets of this.activePollWrites.values()) {
|
|
1377
|
+
for (const bucket of buckets) {
|
|
1378
|
+
bucket.values.clear();
|
|
1379
|
+
}
|
|
1380
|
+
}
|
|
1381
|
+
this.activePollWrites.clear();
|
|
1382
|
+
}
|
|
1196
1383
|
async writeValueToProperty(property, value) {
|
|
1197
1384
|
return await this.channelsPropertiesService.update(property.id, (0, transform_utils_1.toInstance)(update_channel_property_dto_1.UpdateShellyNgChannelPropertyDto, {
|
|
1198
|
-
|
|
1385
|
+
type: devices_shelly_ng_constants_1.DEVICES_SHELLY_NG_TYPE,
|
|
1199
1386
|
value,
|
|
1200
1387
|
}));
|
|
1201
1388
|
}
|
|
@@ -1252,6 +1439,9 @@ let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManager
|
|
|
1252
1439
|
clearTimeout(pendingWrite);
|
|
1253
1440
|
}
|
|
1254
1441
|
this.pendingWrites.clear();
|
|
1442
|
+
this.clearPollWrites();
|
|
1443
|
+
this.delegatePollGenerations.clear();
|
|
1444
|
+
this.currentValueUpdateContext = null;
|
|
1255
1445
|
this.deviceLocks.clear();
|
|
1256
1446
|
this.canonicalMacLocks.clear();
|
|
1257
1447
|
this.connectedDelegatesPerDevice.clear();
|
|
@@ -1295,20 +1485,47 @@ let DelegatesManagerService = DelegatesManagerService_1 = class DelegatesManager
|
|
|
1295
1485
|
await Promise.all(tasks.slice(i, i + CONCURRENCY).map((fn) => fn()));
|
|
1296
1486
|
}
|
|
1297
1487
|
}
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1488
|
+
getConnectedDelegateIds() {
|
|
1489
|
+
return Array.from(this.delegates.entries())
|
|
1490
|
+
.filter(([, delegate]) => delegate.connected)
|
|
1491
|
+
.map(([id]) => id)
|
|
1492
|
+
.sort();
|
|
1493
|
+
}
|
|
1494
|
+
invalidateStatusPolls() {
|
|
1495
|
+
for (const delegateId of this.delegates.keys()) {
|
|
1496
|
+
this.delegatePollGenerations.set(delegateId, (this.delegatePollGenerations.get(delegateId) ?? 0) + 1);
|
|
1497
|
+
}
|
|
1498
|
+
this.clearPollWrites();
|
|
1499
|
+
}
|
|
1500
|
+
async pollDevice(deviceId, timeoutMs = 10_000) {
|
|
1501
|
+
const delegate = this.delegates.get(deviceId);
|
|
1502
|
+
if (!delegate || !delegate.connected) {
|
|
1503
|
+
return;
|
|
1504
|
+
}
|
|
1505
|
+
const generation = this.delegatePollGenerations.get(deviceId) ?? 0;
|
|
1506
|
+
const traceDeviceId = this.delegateDeviceIds.get(deviceId) ?? deviceId;
|
|
1507
|
+
this.commandLatencyTraceCollector.recordPollRpc(traceDeviceId, 'poll-rpc-start', { timeoutMs });
|
|
1508
|
+
let ok;
|
|
1509
|
+
try {
|
|
1510
|
+
ok = await delegate.pollStatus(timeoutMs, () => this.delegates.get(deviceId) === delegate &&
|
|
1511
|
+
delegate.connected &&
|
|
1512
|
+
this.delegatePollGenerations.get(deviceId) === generation);
|
|
1513
|
+
}
|
|
1514
|
+
catch (error) {
|
|
1515
|
+
this.commandLatencyTraceCollector.recordPollRpc(traceDeviceId, 'poll-rpc-complete', {
|
|
1516
|
+
ok: false,
|
|
1517
|
+
error: error instanceof Error ? error.message : 'unknown failure',
|
|
1310
1518
|
});
|
|
1519
|
+
throw error;
|
|
1520
|
+
}
|
|
1521
|
+
this.commandLatencyTraceCollector.recordPollRpc(traceDeviceId, 'poll-rpc-complete', { ok });
|
|
1522
|
+
if (!ok && this.delegates.get(deviceId) === delegate && this.delegatePollGenerations.get(deviceId) === generation) {
|
|
1523
|
+
this.logger.warn(`Status poll failed for device=${deviceId}`);
|
|
1311
1524
|
}
|
|
1525
|
+
}
|
|
1526
|
+
async pollAllDevices(timeoutMs = 10_000) {
|
|
1527
|
+
const CONCURRENCY = 10;
|
|
1528
|
+
const tasks = this.getConnectedDelegateIds().map((id) => () => this.pollDevice(id, timeoutMs));
|
|
1312
1529
|
for (let i = 0; i < tasks.length; i += CONCURRENCY) {
|
|
1313
1530
|
await Promise.all(tasks.slice(i, i + CONCURRENCY).map((fn) => fn()));
|
|
1314
1531
|
}
|
|
@@ -1357,6 +1574,7 @@ exports.DelegatesManagerService = DelegatesManagerService;
|
|
|
1357
1574
|
DelegatesManagerService.DISCONNECT_GRACE_MS = 15_000;
|
|
1358
1575
|
exports.DelegatesManagerService = DelegatesManagerService = DelegatesManagerService_1 = __decorate([
|
|
1359
1576
|
(0, common_1.Injectable)(),
|
|
1577
|
+
__param(8, (0, common_1.Optional)()),
|
|
1360
1578
|
__metadata("design:paramtypes", [devices_service_1.DevicesService,
|
|
1361
1579
|
channels_service_1.ChannelsService,
|
|
1362
1580
|
channels_properties_service_1.ChannelsPropertiesService,
|
|
@@ -1364,6 +1582,7 @@ exports.DelegatesManagerService = DelegatesManagerService = DelegatesManagerServ
|
|
|
1364
1582
|
device_manager_service_1.DeviceManagerService,
|
|
1365
1583
|
device_address_service_1.DeviceAddressService,
|
|
1366
1584
|
mappings_1.PropertyMappingStorageService,
|
|
1367
|
-
mappings_1.TransformerRegistry
|
|
1585
|
+
mappings_1.TransformerRegistry,
|
|
1586
|
+
command_latency_trace_collector_service_1.CommandLatencyTraceCollectorService])
|
|
1368
1587
|
], DelegatesManagerService);
|
|
1369
1588
|
//# sourceMappingURL=delegates-manager.service.js.map
|