@camstack/addon-provider-homematic 1.0.4 → 1.0.5

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/addon.js CHANGED
@@ -5005,6 +5005,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
5005
5005
  */
5006
5006
  EventCategory["PipelineEngineMetricsSnapshot"] = "pipeline.engine-metrics-snapshot";
5007
5007
  /**
5008
+ * Per-node detection-engine runtime-provisioning transition. Emitted by
5009
+ * the detection-pipeline provider on every state change of its lazy
5010
+ * engine-provisioning machine (idle → installing → verifying → ready,
5011
+ * or → failed with a `nextRetryAt`). Payload is the
5012
+ * `EngineProvisioningState` snapshot; `event.source.nodeId` carries the
5013
+ * node. The Pipeline page subscribes to drive a live "installing
5014
+ * OpenVINO… / ready" indicator per node without polling
5015
+ * `pipelineExecutor.getEngineProvisioning`. Telemetry-grade (D8): the UI
5016
+ * also reads the cap snapshot on mount / reconnect. Phase 2.
5017
+ */
5018
+ EventCategory["PipelineEngineProvisioning"] = "pipeline.engine-provisioning";
5019
+ /**
5008
5020
  * Cluster topology snapshot. Carries the same payload returned by
5009
5021
  * `nodes.topology` (every reachable node + addons + processes).
5010
5022
  * Emitted by the hub on any agent / addon lifecycle change
@@ -10378,6 +10390,24 @@ var DetectorOutputSchema = object({
10378
10390
  inferenceMs: number(),
10379
10391
  modelId: string()
10380
10392
  });
10393
+ var EngineProvisioningSchema = object({
10394
+ runtimeId: _enum([
10395
+ "onnx",
10396
+ "openvino",
10397
+ "coreml"
10398
+ ]).nullable(),
10399
+ device: string().nullable(),
10400
+ state: _enum([
10401
+ "idle",
10402
+ "installing",
10403
+ "verifying",
10404
+ "ready",
10405
+ "failed"
10406
+ ]),
10407
+ progress: number().optional(),
10408
+ error: string().optional(),
10409
+ nextRetryAt: number().optional()
10410
+ });
10381
10411
  var PipelineStepInputSchema = lazy(() => object({
10382
10412
  addonId: string(),
10383
10413
  modelId: string(),
@@ -10446,7 +10476,7 @@ var PipelineRunResultBridge = custom();
10446
10476
  method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(), PipelineEngineChoiceSchema, {
10447
10477
  kind: "mutation",
10448
10478
  auth: "admin"
10449
- }), method(_void(), record(string(), object({
10479
+ }), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
10450
10480
  modelId: string(),
10451
10481
  settings: record(string(), unknown()).readonly()
10452
10482
  }))), method(object({ steps: record(string(), object({
@@ -15668,7 +15698,10 @@ var AgentAddonConfigSchema = object({
15668
15698
  modelId: string(),
15669
15699
  settings: record(string(), unknown()).readonly()
15670
15700
  });
15671
- var AgentPipelineSettingsSchema = object({ addonDefaults: record(string(), AgentAddonConfigSchema).readonly() });
15701
+ var AgentPipelineSettingsSchema = object({
15702
+ addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
15703
+ maxCameras: number().int().nonnegative().nullable().default(null)
15704
+ });
15672
15705
  var CameraPipelineForAgentSchema = object({
15673
15706
  steps: array(PipelineStepInputSchema).readonly(),
15674
15707
  audio: object({
@@ -15770,6 +15803,133 @@ var GlobalMetricsSchema = object({
15770
15803
  * capability providers.
15771
15804
  */
15772
15805
  var CapabilityBindingsSchema = record(string(), string());
15806
+ /** Source block — always present; derives from the stream catalog. */
15807
+ var CameraSourceStatusSchema = object({ streams: array(object({
15808
+ camStreamId: string(),
15809
+ codec: string(),
15810
+ width: number(),
15811
+ height: number(),
15812
+ fps: number(),
15813
+ kind: string()
15814
+ })).readonly() });
15815
+ /** Assignment block — always present (orchestrator-local, no remote call). */
15816
+ var CameraAssignmentStatusSchema = object({
15817
+ detectionNodeId: string().nullable(),
15818
+ decoderNodeId: string().nullable(),
15819
+ audioNodeId: string().nullable(),
15820
+ pinned: object({
15821
+ detection: boolean(),
15822
+ decoder: boolean(),
15823
+ audio: boolean()
15824
+ }),
15825
+ reasons: object({
15826
+ detection: string().optional(),
15827
+ decoder: string().optional(),
15828
+ audio: string().optional()
15829
+ })
15830
+ });
15831
+ /** Broker block — null when the broker stage is unreachable or inactive. */
15832
+ var CameraBrokerStatusSchema = object({
15833
+ profiles: array(object({
15834
+ profile: string(),
15835
+ status: string(),
15836
+ codec: string(),
15837
+ width: number(),
15838
+ height: number(),
15839
+ subscribers: number(),
15840
+ inFps: number(),
15841
+ outFps: number()
15842
+ })).readonly(),
15843
+ webrtcSessions: number(),
15844
+ rtspRestream: boolean()
15845
+ });
15846
+ /** Shared-memory ring statistics within the decoder block. */
15847
+ var CameraDecoderShmSchema = object({
15848
+ framesWritten: number(),
15849
+ getFrameHits: number(),
15850
+ getFrameMisses: number(),
15851
+ budgetMb: number()
15852
+ });
15853
+ /** Decoder block — null when the decoder stage is unreachable or inactive. */
15854
+ var CameraDecoderStatusSchema = object({
15855
+ nodeId: string(),
15856
+ formats: array(string()).readonly(),
15857
+ sessionCount: number(),
15858
+ shm: CameraDecoderShmSchema
15859
+ });
15860
+ /** Motion block — null when motion detection is not active for this device. */
15861
+ var CameraMotionStatusSchema = object({
15862
+ enabled: boolean(),
15863
+ fps: number()
15864
+ });
15865
+ /** Detection provisioning sub-block. */
15866
+ var CameraDetectionProvisioningSchema = object({
15867
+ state: _enum([
15868
+ "idle",
15869
+ "installing",
15870
+ "verifying",
15871
+ "ready",
15872
+ "failed"
15873
+ ]),
15874
+ error: string().optional()
15875
+ });
15876
+ /** Detection phase — derived from the runner's engine phase. */
15877
+ var CameraDetectionPhaseSchema = _enum([
15878
+ "idle",
15879
+ "watching",
15880
+ "active"
15881
+ ]);
15882
+ /** Detection block — null when no detection node is assigned or reachable. */
15883
+ var CameraDetectionStatusSchema = object({
15884
+ nodeId: string(),
15885
+ engine: object({
15886
+ backend: string(),
15887
+ device: string()
15888
+ }),
15889
+ phase: CameraDetectionPhaseSchema,
15890
+ configuredFps: number(),
15891
+ actualFps: number(),
15892
+ queueDepth: number(),
15893
+ avgInferenceMs: number(),
15894
+ provisioning: CameraDetectionProvisioningSchema
15895
+ });
15896
+ /** Audio block — null when no audio node is assigned or reachable. */
15897
+ var CameraAudioStatusSchema = object({
15898
+ nodeId: string(),
15899
+ enabled: boolean()
15900
+ });
15901
+ /** Recording block — null when no recording cap is active for this device. */
15902
+ var CameraRecordingStatusSchema = object({
15903
+ mode: _enum([
15904
+ "off",
15905
+ "continuous",
15906
+ "events"
15907
+ ]),
15908
+ active: boolean(),
15909
+ storageBytes: number()
15910
+ });
15911
+ /**
15912
+ * Aggregated per-camera pipeline status — server-composed, single call.
15913
+ *
15914
+ * The `assignment` and `source` blocks are always present.
15915
+ * Every other block is `null` when the stage is inactive or unreachable
15916
+ * during the bounded parallel fan-out in the orchestrator implementation.
15917
+ *
15918
+ * See spec: `docs/superpowers/specs/2026-06-24-camera-status-aggregator-cap.md`
15919
+ */
15920
+ var CameraStatusSchema = object({
15921
+ deviceId: number(),
15922
+ assignment: CameraAssignmentStatusSchema,
15923
+ source: CameraSourceStatusSchema,
15924
+ broker: CameraBrokerStatusSchema.nullable(),
15925
+ decoder: CameraDecoderStatusSchema.nullable(),
15926
+ motion: CameraMotionStatusSchema.nullable(),
15927
+ detection: CameraDetectionStatusSchema.nullable(),
15928
+ audio: CameraAudioStatusSchema.nullable(),
15929
+ recording: CameraRecordingStatusSchema.nullable(),
15930
+ /** Unix timestamp (ms) when this snapshot was composed server-side. */
15931
+ fetchedAt: number()
15932
+ });
15773
15933
  method(object({
15774
15934
  deviceId: number(),
15775
15935
  agentNodeId: string()
@@ -15837,6 +15997,12 @@ method(object({
15837
15997
  }), {
15838
15998
  kind: "mutation",
15839
15999
  auth: "admin"
16000
+ }), method(object({
16001
+ agentNodeId: string(),
16002
+ maxCameras: number().int().nonnegative().nullable()
16003
+ }), object({ success: literal(true) }), {
16004
+ kind: "mutation",
16005
+ auth: "admin"
15840
16006
  }), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
15841
16007
  deviceId: number(),
15842
16008
  addonId: string(),
@@ -15862,7 +16028,7 @@ method(object({
15862
16028
  }), method(object({
15863
16029
  deviceId: number(),
15864
16030
  agentNodeId: string().optional()
15865
- }), CameraPipelineConfigSchema), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
16031
+ }), CameraPipelineConfigSchema), method(object({ deviceId: number() }), CameraStatusSchema), method(object({ deviceIds: array(number()).optional() }), array(CameraStatusSchema).readonly()), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
15866
16032
  name: string(),
15867
16033
  description: string().optional(),
15868
16034
  config: CameraPipelineConfigSchema
@@ -21654,6 +21820,12 @@ Object.freeze({
21654
21820
  addonId: null,
21655
21821
  access: "view"
21656
21822
  },
21823
+ "pipelineExecutor.getEngineProvisioning": {
21824
+ capName: "pipeline-executor",
21825
+ capScope: "system",
21826
+ addonId: null,
21827
+ access: "view"
21828
+ },
21657
21829
  "pipelineExecutor.getGlobalPipelineConfig": {
21658
21830
  capName: "pipeline-executor",
21659
21831
  capScope: "system",
@@ -21858,6 +22030,18 @@ Object.freeze({
21858
22030
  addonId: null,
21859
22031
  access: "view"
21860
22032
  },
22033
+ "pipelineOrchestrator.getCameraStatus": {
22034
+ capName: "pipeline-orchestrator",
22035
+ capScope: "system",
22036
+ addonId: null,
22037
+ access: "view"
22038
+ },
22039
+ "pipelineOrchestrator.getCameraStatuses": {
22040
+ capName: "pipeline-orchestrator",
22041
+ capScope: "system",
22042
+ addonId: null,
22043
+ access: "view"
22044
+ },
21861
22045
  "pipelineOrchestrator.getCameraStepOverrides": {
21862
22046
  capName: "pipeline-orchestrator",
21863
22047
  capScope: "system",
@@ -21942,6 +22126,12 @@ Object.freeze({
21942
22126
  addonId: null,
21943
22127
  access: "create"
21944
22128
  },
22129
+ "pipelineOrchestrator.setAgentMaxCameras": {
22130
+ capName: "pipeline-orchestrator",
22131
+ capScope: "system",
22132
+ addonId: null,
22133
+ access: "create"
22134
+ },
21945
22135
  "pipelineOrchestrator.setCameraPipelineForAgent": {
21946
22136
  capName: "pipeline-orchestrator",
21947
22137
  capScope: "system",
package/dist/addon.mjs CHANGED
@@ -5006,6 +5006,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
5006
5006
  */
5007
5007
  EventCategory["PipelineEngineMetricsSnapshot"] = "pipeline.engine-metrics-snapshot";
5008
5008
  /**
5009
+ * Per-node detection-engine runtime-provisioning transition. Emitted by
5010
+ * the detection-pipeline provider on every state change of its lazy
5011
+ * engine-provisioning machine (idle → installing → verifying → ready,
5012
+ * or → failed with a `nextRetryAt`). Payload is the
5013
+ * `EngineProvisioningState` snapshot; `event.source.nodeId` carries the
5014
+ * node. The Pipeline page subscribes to drive a live "installing
5015
+ * OpenVINO… / ready" indicator per node without polling
5016
+ * `pipelineExecutor.getEngineProvisioning`. Telemetry-grade (D8): the UI
5017
+ * also reads the cap snapshot on mount / reconnect. Phase 2.
5018
+ */
5019
+ EventCategory["PipelineEngineProvisioning"] = "pipeline.engine-provisioning";
5020
+ /**
5009
5021
  * Cluster topology snapshot. Carries the same payload returned by
5010
5022
  * `nodes.topology` (every reachable node + addons + processes).
5011
5023
  * Emitted by the hub on any agent / addon lifecycle change
@@ -10379,6 +10391,24 @@ var DetectorOutputSchema = object({
10379
10391
  inferenceMs: number(),
10380
10392
  modelId: string()
10381
10393
  });
10394
+ var EngineProvisioningSchema = object({
10395
+ runtimeId: _enum([
10396
+ "onnx",
10397
+ "openvino",
10398
+ "coreml"
10399
+ ]).nullable(),
10400
+ device: string().nullable(),
10401
+ state: _enum([
10402
+ "idle",
10403
+ "installing",
10404
+ "verifying",
10405
+ "ready",
10406
+ "failed"
10407
+ ]),
10408
+ progress: number().optional(),
10409
+ error: string().optional(),
10410
+ nextRetryAt: number().optional()
10411
+ });
10382
10412
  var PipelineStepInputSchema = lazy(() => object({
10383
10413
  addonId: string(),
10384
10414
  modelId: string(),
@@ -10447,7 +10477,7 @@ var PipelineRunResultBridge = custom();
10447
10477
  method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(), PipelineEngineChoiceSchema, {
10448
10478
  kind: "mutation",
10449
10479
  auth: "admin"
10450
- }), method(_void(), record(string(), object({
10480
+ }), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
10451
10481
  modelId: string(),
10452
10482
  settings: record(string(), unknown()).readonly()
10453
10483
  }))), method(object({ steps: record(string(), object({
@@ -15669,7 +15699,10 @@ var AgentAddonConfigSchema = object({
15669
15699
  modelId: string(),
15670
15700
  settings: record(string(), unknown()).readonly()
15671
15701
  });
15672
- var AgentPipelineSettingsSchema = object({ addonDefaults: record(string(), AgentAddonConfigSchema).readonly() });
15702
+ var AgentPipelineSettingsSchema = object({
15703
+ addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
15704
+ maxCameras: number().int().nonnegative().nullable().default(null)
15705
+ });
15673
15706
  var CameraPipelineForAgentSchema = object({
15674
15707
  steps: array(PipelineStepInputSchema).readonly(),
15675
15708
  audio: object({
@@ -15771,6 +15804,133 @@ var GlobalMetricsSchema = object({
15771
15804
  * capability providers.
15772
15805
  */
15773
15806
  var CapabilityBindingsSchema = record(string(), string());
15807
+ /** Source block — always present; derives from the stream catalog. */
15808
+ var CameraSourceStatusSchema = object({ streams: array(object({
15809
+ camStreamId: string(),
15810
+ codec: string(),
15811
+ width: number(),
15812
+ height: number(),
15813
+ fps: number(),
15814
+ kind: string()
15815
+ })).readonly() });
15816
+ /** Assignment block — always present (orchestrator-local, no remote call). */
15817
+ var CameraAssignmentStatusSchema = object({
15818
+ detectionNodeId: string().nullable(),
15819
+ decoderNodeId: string().nullable(),
15820
+ audioNodeId: string().nullable(),
15821
+ pinned: object({
15822
+ detection: boolean(),
15823
+ decoder: boolean(),
15824
+ audio: boolean()
15825
+ }),
15826
+ reasons: object({
15827
+ detection: string().optional(),
15828
+ decoder: string().optional(),
15829
+ audio: string().optional()
15830
+ })
15831
+ });
15832
+ /** Broker block — null when the broker stage is unreachable or inactive. */
15833
+ var CameraBrokerStatusSchema = object({
15834
+ profiles: array(object({
15835
+ profile: string(),
15836
+ status: string(),
15837
+ codec: string(),
15838
+ width: number(),
15839
+ height: number(),
15840
+ subscribers: number(),
15841
+ inFps: number(),
15842
+ outFps: number()
15843
+ })).readonly(),
15844
+ webrtcSessions: number(),
15845
+ rtspRestream: boolean()
15846
+ });
15847
+ /** Shared-memory ring statistics within the decoder block. */
15848
+ var CameraDecoderShmSchema = object({
15849
+ framesWritten: number(),
15850
+ getFrameHits: number(),
15851
+ getFrameMisses: number(),
15852
+ budgetMb: number()
15853
+ });
15854
+ /** Decoder block — null when the decoder stage is unreachable or inactive. */
15855
+ var CameraDecoderStatusSchema = object({
15856
+ nodeId: string(),
15857
+ formats: array(string()).readonly(),
15858
+ sessionCount: number(),
15859
+ shm: CameraDecoderShmSchema
15860
+ });
15861
+ /** Motion block — null when motion detection is not active for this device. */
15862
+ var CameraMotionStatusSchema = object({
15863
+ enabled: boolean(),
15864
+ fps: number()
15865
+ });
15866
+ /** Detection provisioning sub-block. */
15867
+ var CameraDetectionProvisioningSchema = object({
15868
+ state: _enum([
15869
+ "idle",
15870
+ "installing",
15871
+ "verifying",
15872
+ "ready",
15873
+ "failed"
15874
+ ]),
15875
+ error: string().optional()
15876
+ });
15877
+ /** Detection phase — derived from the runner's engine phase. */
15878
+ var CameraDetectionPhaseSchema = _enum([
15879
+ "idle",
15880
+ "watching",
15881
+ "active"
15882
+ ]);
15883
+ /** Detection block — null when no detection node is assigned or reachable. */
15884
+ var CameraDetectionStatusSchema = object({
15885
+ nodeId: string(),
15886
+ engine: object({
15887
+ backend: string(),
15888
+ device: string()
15889
+ }),
15890
+ phase: CameraDetectionPhaseSchema,
15891
+ configuredFps: number(),
15892
+ actualFps: number(),
15893
+ queueDepth: number(),
15894
+ avgInferenceMs: number(),
15895
+ provisioning: CameraDetectionProvisioningSchema
15896
+ });
15897
+ /** Audio block — null when no audio node is assigned or reachable. */
15898
+ var CameraAudioStatusSchema = object({
15899
+ nodeId: string(),
15900
+ enabled: boolean()
15901
+ });
15902
+ /** Recording block — null when no recording cap is active for this device. */
15903
+ var CameraRecordingStatusSchema = object({
15904
+ mode: _enum([
15905
+ "off",
15906
+ "continuous",
15907
+ "events"
15908
+ ]),
15909
+ active: boolean(),
15910
+ storageBytes: number()
15911
+ });
15912
+ /**
15913
+ * Aggregated per-camera pipeline status — server-composed, single call.
15914
+ *
15915
+ * The `assignment` and `source` blocks are always present.
15916
+ * Every other block is `null` when the stage is inactive or unreachable
15917
+ * during the bounded parallel fan-out in the orchestrator implementation.
15918
+ *
15919
+ * See spec: `docs/superpowers/specs/2026-06-24-camera-status-aggregator-cap.md`
15920
+ */
15921
+ var CameraStatusSchema = object({
15922
+ deviceId: number(),
15923
+ assignment: CameraAssignmentStatusSchema,
15924
+ source: CameraSourceStatusSchema,
15925
+ broker: CameraBrokerStatusSchema.nullable(),
15926
+ decoder: CameraDecoderStatusSchema.nullable(),
15927
+ motion: CameraMotionStatusSchema.nullable(),
15928
+ detection: CameraDetectionStatusSchema.nullable(),
15929
+ audio: CameraAudioStatusSchema.nullable(),
15930
+ recording: CameraRecordingStatusSchema.nullable(),
15931
+ /** Unix timestamp (ms) when this snapshot was composed server-side. */
15932
+ fetchedAt: number()
15933
+ });
15774
15934
  method(object({
15775
15935
  deviceId: number(),
15776
15936
  agentNodeId: string()
@@ -15838,6 +15998,12 @@ method(object({
15838
15998
  }), {
15839
15999
  kind: "mutation",
15840
16000
  auth: "admin"
16001
+ }), method(object({
16002
+ agentNodeId: string(),
16003
+ maxCameras: number().int().nonnegative().nullable()
16004
+ }), object({ success: literal(true) }), {
16005
+ kind: "mutation",
16006
+ auth: "admin"
15841
16007
  }), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
15842
16008
  deviceId: number(),
15843
16009
  addonId: string(),
@@ -15863,7 +16029,7 @@ method(object({
15863
16029
  }), method(object({
15864
16030
  deviceId: number(),
15865
16031
  agentNodeId: string().optional()
15866
- }), CameraPipelineConfigSchema), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
16032
+ }), CameraPipelineConfigSchema), method(object({ deviceId: number() }), CameraStatusSchema), method(object({ deviceIds: array(number()).optional() }), array(CameraStatusSchema).readonly()), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
15867
16033
  name: string(),
15868
16034
  description: string().optional(),
15869
16035
  config: CameraPipelineConfigSchema
@@ -21655,6 +21821,12 @@ Object.freeze({
21655
21821
  addonId: null,
21656
21822
  access: "view"
21657
21823
  },
21824
+ "pipelineExecutor.getEngineProvisioning": {
21825
+ capName: "pipeline-executor",
21826
+ capScope: "system",
21827
+ addonId: null,
21828
+ access: "view"
21829
+ },
21658
21830
  "pipelineExecutor.getGlobalPipelineConfig": {
21659
21831
  capName: "pipeline-executor",
21660
21832
  capScope: "system",
@@ -21859,6 +22031,18 @@ Object.freeze({
21859
22031
  addonId: null,
21860
22032
  access: "view"
21861
22033
  },
22034
+ "pipelineOrchestrator.getCameraStatus": {
22035
+ capName: "pipeline-orchestrator",
22036
+ capScope: "system",
22037
+ addonId: null,
22038
+ access: "view"
22039
+ },
22040
+ "pipelineOrchestrator.getCameraStatuses": {
22041
+ capName: "pipeline-orchestrator",
22042
+ capScope: "system",
22043
+ addonId: null,
22044
+ access: "view"
22045
+ },
21862
22046
  "pipelineOrchestrator.getCameraStepOverrides": {
21863
22047
  capName: "pipeline-orchestrator",
21864
22048
  capScope: "system",
@@ -21943,6 +22127,12 @@ Object.freeze({
21943
22127
  addonId: null,
21944
22128
  access: "create"
21945
22129
  },
22130
+ "pipelineOrchestrator.setAgentMaxCameras": {
22131
+ capName: "pipeline-orchestrator",
22132
+ capScope: "system",
22133
+ addonId: null,
22134
+ access: "create"
22135
+ },
21946
22136
  "pipelineOrchestrator.setCameraPipelineForAgent": {
21947
22137
  capName: "pipeline-orchestrator",
21948
22138
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-homematic",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "Homematic / HomematicIP (CCU3 / RaspberryMatic) device-provider addon for CamStack — wraps the nodehomematic library",
5
5
  "keywords": [
6
6
  "camstack",