camstack 1.2.101 → 1.2.103
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.
|
@@ -23633,9 +23633,9 @@ var require_zod = __commonJS({
|
|
|
23633
23633
|
}
|
|
23634
23634
|
});
|
|
23635
23635
|
|
|
23636
|
-
// ../system/dist/dist-
|
|
23637
|
-
var
|
|
23638
|
-
"../system/dist/dist-
|
|
23636
|
+
// ../system/dist/dist-C7g13BfN.js
|
|
23637
|
+
var require_dist_C7g13BfN = __commonJS({
|
|
23638
|
+
"../system/dist/dist-C7g13BfN.js"(exports) {
|
|
23639
23639
|
"use strict";
|
|
23640
23640
|
var zod = require_zod();
|
|
23641
23641
|
var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
|
|
@@ -23719,6 +23719,7 @@ var require_dist_DyO7xSEt = __commonJS({
|
|
|
23719
23719
|
EventCategory2["DeviceStateChanged"] = "device.state-changed";
|
|
23720
23720
|
EventCategory2["ZoneAnalyticsOccupancyChanged"] = "zone-analytics.occupancy-changed";
|
|
23721
23721
|
EventCategory2["BatteryOnStatusChanged"] = "battery.onStatusChanged";
|
|
23722
|
+
EventCategory2["NetworkLinkOnStatusChanged"] = "network-link.onStatusChanged";
|
|
23722
23723
|
EventCategory2["BatteryOnWakeStarted"] = "battery.onWakeStarted";
|
|
23723
23724
|
EventCategory2["DoorbellOnPressed"] = "doorbell.onPressed";
|
|
23724
23725
|
EventCategory2["EventEmitted"] = "event-emitter.event";
|
|
@@ -42710,6 +42711,83 @@ var require_dist_DyO7xSEt = __commonJS({
|
|
|
42710
42711
|
* whether persisting is worth a SQLite commit. */
|
|
42711
42712
|
volatileStateFields: ["lastUpdated"]
|
|
42712
42713
|
};
|
|
42714
|
+
var NetworkLinkStatusSchema = zod.z.object({
|
|
42715
|
+
/** The link the device is on. `'unknown'` = not read yet, not "no link". */
|
|
42716
|
+
type: zod.z.enum([
|
|
42717
|
+
"wifi",
|
|
42718
|
+
"ethernet",
|
|
42719
|
+
"cellular",
|
|
42720
|
+
"unknown"
|
|
42721
|
+
]),
|
|
42722
|
+
/**
|
|
42723
|
+
* Link quality, 0..100 inclusive, normalised by the provider from whatever
|
|
42724
|
+
* the firmware reports (bars, RSSI, a vendor scale). **`null` means NOT
|
|
42725
|
+
* KNOWN or NOT APPLICABLE** — a wired link has no signal, and a wireless
|
|
42726
|
+
* one whose reading has not landed must not be drawn at 0 %. Consumers
|
|
42727
|
+
* SKIP a null rather than coerce it.
|
|
42728
|
+
*/
|
|
42729
|
+
signalPercent: zod.z.number().min(0).max(100).nullable(),
|
|
42730
|
+
/** Raw received signal strength in dBm, when the firmware reports one. */
|
|
42731
|
+
rssiDbm: zod.z.number().optional(),
|
|
42732
|
+
/** Network name of a wireless link, when the firmware reports it. */
|
|
42733
|
+
ssid: zod.z.string().optional(),
|
|
42734
|
+
/** Ms epoch of the last observation. Lets consumers reason about freshness. */
|
|
42735
|
+
lastUpdated: zod.z.number()
|
|
42736
|
+
});
|
|
42737
|
+
var networkLinkCapability = {
|
|
42738
|
+
name: "network-link",
|
|
42739
|
+
scope: "device",
|
|
42740
|
+
deviceNative: true,
|
|
42741
|
+
mode: "singleton",
|
|
42742
|
+
deviceTypes: [
|
|
42743
|
+
DeviceType.Camera,
|
|
42744
|
+
DeviceType.Sensor,
|
|
42745
|
+
DeviceType.Button,
|
|
42746
|
+
DeviceType.Switch,
|
|
42747
|
+
DeviceType.Light,
|
|
42748
|
+
DeviceType.Lock,
|
|
42749
|
+
DeviceType.Siren
|
|
42750
|
+
],
|
|
42751
|
+
methods: {},
|
|
42752
|
+
events: {
|
|
42753
|
+
/**
|
|
42754
|
+
* Emitted whenever the cached status changes (a link switch, a signal
|
|
42755
|
+
* reading that moved). Mirrored on the parent chain by the
|
|
42756
|
+
* DeviceEventPropagator like `battery.onStatusChanged`.
|
|
42757
|
+
*/
|
|
42758
|
+
onStatusChanged: { data: zod.z.object({
|
|
42759
|
+
deviceId: zod.z.number(),
|
|
42760
|
+
status: NetworkLinkStatusSchema
|
|
42761
|
+
}) }
|
|
42762
|
+
},
|
|
42763
|
+
status: {
|
|
42764
|
+
schema: NetworkLinkStatusSchema,
|
|
42765
|
+
kind: "push",
|
|
42766
|
+
empty: {
|
|
42767
|
+
type: "unknown",
|
|
42768
|
+
signalPercent: null,
|
|
42769
|
+
lastUpdated: 0
|
|
42770
|
+
}
|
|
42771
|
+
},
|
|
42772
|
+
/**
|
|
42773
|
+
* Runtime-state slice — every provider stores the same shape under
|
|
42774
|
+
* `device.runtimeState['network-link']`, read once by the badge and the
|
|
42775
|
+
* Home Assistant projector regardless of the driver.
|
|
42776
|
+
*/
|
|
42777
|
+
runtimeState: NetworkLinkStatusSchema,
|
|
42778
|
+
/**
|
|
42779
|
+
* Runtime-state durability: **restored** — a link reading is slow to
|
|
42780
|
+
* change and a sleeping battery camera may not report for hours; the
|
|
42781
|
+
* restored slice is what the badge shows until the next read.
|
|
42782
|
+
*
|
|
42783
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
42784
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
42785
|
+
*/
|
|
42786
|
+
durability: "restored",
|
|
42787
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
42788
|
+
* whether persisting is worth a SQLite commit. */
|
|
42789
|
+
volatileStateFields: ["lastUpdated"]
|
|
42790
|
+
};
|
|
42713
42791
|
var BinaryStatusSchema = zod.z.object({
|
|
42714
42792
|
on: zod.z.boolean(),
|
|
42715
42793
|
/** Ms epoch of the last transition. 0 if never observed. */
|
|
@@ -47415,6 +47493,169 @@ var require_dist_DyO7xSEt = __commonJS({
|
|
|
47415
47493
|
*/
|
|
47416
47494
|
durability: "session"
|
|
47417
47495
|
};
|
|
47496
|
+
var NavigationMoveCommandSchema = zod.z.object({
|
|
47497
|
+
pan: zod.z.number().min(-1).max(1).optional(),
|
|
47498
|
+
tilt: zod.z.number().min(-1).max(1).optional(),
|
|
47499
|
+
speed: zod.z.number().min(0).max(1).optional()
|
|
47500
|
+
});
|
|
47501
|
+
var NavigationActionIdSchema = zod.z.enum([
|
|
47502
|
+
"goHome",
|
|
47503
|
+
"locate",
|
|
47504
|
+
"spotClean",
|
|
47505
|
+
"findPet",
|
|
47506
|
+
"personFollow",
|
|
47507
|
+
"stop",
|
|
47508
|
+
"startClean",
|
|
47509
|
+
"pauseClean",
|
|
47510
|
+
"dockWash",
|
|
47511
|
+
"autoEmpty",
|
|
47512
|
+
"flashOn",
|
|
47513
|
+
"flashOff"
|
|
47514
|
+
]);
|
|
47515
|
+
var NavigationEntryKindSchema = zod.z.enum(["action", "sound"]);
|
|
47516
|
+
var NavigationActionEntrySchema = zod.z.object({
|
|
47517
|
+
id: zod.z.string(),
|
|
47518
|
+
kind: NavigationEntryKindSchema,
|
|
47519
|
+
label: zod.z.string(),
|
|
47520
|
+
icon: zod.z.string(),
|
|
47521
|
+
/** Present only on `kind:'sound'` entries — the id to pass to `playSound`. */
|
|
47522
|
+
soundId: zod.z.number().int().optional(),
|
|
47523
|
+
/** Per-device feature flag — render this entry only when true. */
|
|
47524
|
+
enabled: zod.z.boolean()
|
|
47525
|
+
});
|
|
47526
|
+
var NavigationPointSchema = zod.z.object({
|
|
47527
|
+
x: zod.z.number(),
|
|
47528
|
+
y: zod.z.number()
|
|
47529
|
+
});
|
|
47530
|
+
var NavigationFeaturesSchema = zod.z.object({
|
|
47531
|
+
move: zod.z.boolean(),
|
|
47532
|
+
stop: zod.z.boolean(),
|
|
47533
|
+
goToPoint: zod.z.boolean(),
|
|
47534
|
+
runAction: zod.z.boolean(),
|
|
47535
|
+
playSound: zod.z.boolean(),
|
|
47536
|
+
light: zod.z.boolean(),
|
|
47537
|
+
lightMode: zod.z.boolean()
|
|
47538
|
+
});
|
|
47539
|
+
var NavigationLightModeSchema = zod.z.enum(["auto", "manual"]);
|
|
47540
|
+
var NavigationModeSchema = zod.z.enum([
|
|
47541
|
+
"idle",
|
|
47542
|
+
"cleaning",
|
|
47543
|
+
"spot",
|
|
47544
|
+
"following",
|
|
47545
|
+
"goto",
|
|
47546
|
+
"returning",
|
|
47547
|
+
"paused",
|
|
47548
|
+
"unknown"
|
|
47549
|
+
]);
|
|
47550
|
+
var NavigationStatusSchema = zod.z.object({
|
|
47551
|
+
mode: NavigationModeSchema,
|
|
47552
|
+
following: zod.z.boolean(),
|
|
47553
|
+
flash: zod.z.boolean(),
|
|
47554
|
+
lightMode: NavigationLightModeSchema,
|
|
47555
|
+
lightLevel: zod.z.number().min(40).max(100),
|
|
47556
|
+
/** Ms epoch when the slice was last updated. */
|
|
47557
|
+
lastChangedAt: zod.z.number()
|
|
47558
|
+
});
|
|
47559
|
+
var NavigationRuntimeStateSchema = NavigationStatusSchema.extend({ lastFetchedAt: zod.z.number() });
|
|
47560
|
+
var navigationCapability = {
|
|
47561
|
+
name: "navigation",
|
|
47562
|
+
scope: "device",
|
|
47563
|
+
deviceNative: true,
|
|
47564
|
+
mode: "singleton",
|
|
47565
|
+
deviceTypes: [DeviceType.Camera],
|
|
47566
|
+
deviceConfig: { ui: {
|
|
47567
|
+
kind: "widget",
|
|
47568
|
+
widgetId: "host/navigation-panel",
|
|
47569
|
+
tab: "navigation",
|
|
47570
|
+
topTab: true,
|
|
47571
|
+
label: "Navigation",
|
|
47572
|
+
order: 0
|
|
47573
|
+
} },
|
|
47574
|
+
methods: {
|
|
47575
|
+
/**
|
|
47576
|
+
* Momentary drive nudge (the robot moves). `protected` — mirrors
|
|
47577
|
+
* `ptz.continuousMove` so the Viewer navigation panel (and the PTZ-mimic
|
|
47578
|
+
* path) works for any authenticated user, not admin-only. The UI sends
|
|
47579
|
+
* these at ~1 Hz while a control is held; the provider forwards each one to
|
|
47580
|
+
* a single drive write WITHOUT debouncing.
|
|
47581
|
+
*/
|
|
47582
|
+
move: method(NavigationMoveCommandSchema.extend({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
|
|
47583
|
+
/** Halt all motion immediately (zero drive vector). */
|
|
47584
|
+
stop: method(zod.z.object({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
|
|
47585
|
+
/** Send the robot to a point on its live map. */
|
|
47586
|
+
goToPoint: method(NavigationPointSchema.extend({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
|
|
47587
|
+
/**
|
|
47588
|
+
* Enumerate the discrete controls THIS device supports (data-driven UI +
|
|
47589
|
+
* PTZ mimic). Camera-probed subset of {@link NAVIGATION_ACTION_CATALOG}.
|
|
47590
|
+
*/
|
|
47591
|
+
listActions: method(zod.z.object({ deviceId: zod.z.number() }), zod.z.array(NavigationActionEntrySchema)),
|
|
47592
|
+
/**
|
|
47593
|
+
* Run one discrete action (a `kind:'action'` dictionary entry). Invalid /
|
|
47594
|
+
* unsupported action ids are rejected by the provider.
|
|
47595
|
+
*/
|
|
47596
|
+
runAction: method(zod.z.object({
|
|
47597
|
+
deviceId: zod.z.number(),
|
|
47598
|
+
actionId: NavigationActionIdSchema
|
|
47599
|
+
}), zod.z.void(), { kind: "mutation" }),
|
|
47600
|
+
/** Play a sound by its wire id (the `soundId` of a `kind:'sound'` entry). */
|
|
47601
|
+
playSound: method(zod.z.object({
|
|
47602
|
+
deviceId: zod.z.number(),
|
|
47603
|
+
soundId: zod.z.number().int()
|
|
47604
|
+
}), zod.z.void(), { kind: "mutation" }),
|
|
47605
|
+
/**
|
|
47606
|
+
* Turn the on-camera fill light on / off (the `OpenFullLight` control —
|
|
47607
|
+
* works anytime, no active stream required).
|
|
47608
|
+
*/
|
|
47609
|
+
setLightOn: method(zod.z.object({
|
|
47610
|
+
deviceId: zod.z.number(),
|
|
47611
|
+
on: zod.z.boolean()
|
|
47612
|
+
}), zod.z.void(), { kind: "mutation" }),
|
|
47613
|
+
/**
|
|
47614
|
+
* Set the fill-light mode (auto vs manual). `manual` optionally carries the
|
|
47615
|
+
* initial `level`. The auto/manual + level control is a CAMERA-service
|
|
47616
|
+
* action that generally needs an active camera stream/monitor session — the
|
|
47617
|
+
* UI shows the manual level slider ONLY when `mode === 'manual'`.
|
|
47618
|
+
*/
|
|
47619
|
+
setLightMode: method(zod.z.object({
|
|
47620
|
+
deviceId: zod.z.number(),
|
|
47621
|
+
mode: NavigationLightModeSchema,
|
|
47622
|
+
level: zod.z.number().min(40).max(100).optional()
|
|
47623
|
+
}), zod.z.void(), { kind: "mutation" }),
|
|
47624
|
+
/** Set the MANUAL fill-light level (40..100). Implies `manual` mode. */
|
|
47625
|
+
setLightLevel: method(zod.z.object({
|
|
47626
|
+
deviceId: zod.z.number(),
|
|
47627
|
+
level: zod.z.number().min(40).max(100)
|
|
47628
|
+
}), zod.z.void(), { kind: "mutation" }),
|
|
47629
|
+
/**
|
|
47630
|
+
* Per-device FEATURE-FLAG report for the general primitives — drives which
|
|
47631
|
+
* controls the UI shows (the per-entry flags for the dictionary come back on
|
|
47632
|
+
* `listActions`).
|
|
47633
|
+
*/
|
|
47634
|
+
getFeatures: method(zod.z.object({ deviceId: zod.z.number() }), NavigationFeaturesSchema)
|
|
47635
|
+
},
|
|
47636
|
+
events: { onStatusChanged: { data: zod.z.object({
|
|
47637
|
+
deviceId: zod.z.number(),
|
|
47638
|
+
status: NavigationStatusSchema
|
|
47639
|
+
}) } },
|
|
47640
|
+
status: {
|
|
47641
|
+
schema: NavigationStatusSchema,
|
|
47642
|
+
kind: "push"
|
|
47643
|
+
},
|
|
47644
|
+
/**
|
|
47645
|
+
* Runtime-state slice mirrored by the kernel. The navigation panel watches it
|
|
47646
|
+
* for live mode / follow / flash changes.
|
|
47647
|
+
*/
|
|
47648
|
+
runtimeState: NavigationRuntimeStateSchema,
|
|
47649
|
+
/**
|
|
47650
|
+
* Runtime-state durability: **session** — like `vacuum-control`, a restored
|
|
47651
|
+
* `mode: cleaning` / `following: true` is a robot that is not actually doing
|
|
47652
|
+
* that. The live handle re-publishes on connect.
|
|
47653
|
+
*
|
|
47654
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
47655
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
47656
|
+
*/
|
|
47657
|
+
durability: "session"
|
|
47658
|
+
};
|
|
47418
47659
|
var rebootCapability = {
|
|
47419
47660
|
name: "reboot",
|
|
47420
47661
|
scope: "device",
|
|
@@ -50735,6 +50976,8 @@ var require_dist_DyO7xSEt = __commonJS({
|
|
|
50735
50976
|
"motion-zones",
|
|
50736
50977
|
"mqtt-broker",
|
|
50737
50978
|
"native-object-detection",
|
|
50979
|
+
"navigation",
|
|
50980
|
+
"network-link",
|
|
50738
50981
|
"notifier",
|
|
50739
50982
|
"numeric-sensor",
|
|
50740
50983
|
"osd",
|
|
@@ -50851,7 +51094,9 @@ var require_dist_DyO7xSEt = __commonJS({
|
|
|
50851
51094
|
motionZonesCapability,
|
|
50852
51095
|
mqttBrokerCapability,
|
|
50853
51096
|
nativeObjectDetectionCapability,
|
|
51097
|
+
navigationCapability,
|
|
50854
51098
|
networkAccessCapability,
|
|
51099
|
+
networkLinkCapability,
|
|
50855
51100
|
networkQualityCapability,
|
|
50856
51101
|
nodesCapability,
|
|
50857
51102
|
notificationOutputCapability,
|
|
@@ -53652,6 +53897,66 @@ var require_dist_DyO7xSEt = __commonJS({
|
|
|
53652
53897
|
addonId: null,
|
|
53653
53898
|
access: "create"
|
|
53654
53899
|
},
|
|
53900
|
+
"navigation.getFeatures": {
|
|
53901
|
+
capName: "navigation",
|
|
53902
|
+
capScope: "device",
|
|
53903
|
+
addonId: null,
|
|
53904
|
+
access: "view"
|
|
53905
|
+
},
|
|
53906
|
+
"navigation.goToPoint": {
|
|
53907
|
+
capName: "navigation",
|
|
53908
|
+
capScope: "device",
|
|
53909
|
+
addonId: null,
|
|
53910
|
+
access: "create"
|
|
53911
|
+
},
|
|
53912
|
+
"navigation.listActions": {
|
|
53913
|
+
capName: "navigation",
|
|
53914
|
+
capScope: "device",
|
|
53915
|
+
addonId: null,
|
|
53916
|
+
access: "view"
|
|
53917
|
+
},
|
|
53918
|
+
"navigation.move": {
|
|
53919
|
+
capName: "navigation",
|
|
53920
|
+
capScope: "device",
|
|
53921
|
+
addonId: null,
|
|
53922
|
+
access: "create"
|
|
53923
|
+
},
|
|
53924
|
+
"navigation.playSound": {
|
|
53925
|
+
capName: "navigation",
|
|
53926
|
+
capScope: "device",
|
|
53927
|
+
addonId: null,
|
|
53928
|
+
access: "create"
|
|
53929
|
+
},
|
|
53930
|
+
"navigation.runAction": {
|
|
53931
|
+
capName: "navigation",
|
|
53932
|
+
capScope: "device",
|
|
53933
|
+
addonId: null,
|
|
53934
|
+
access: "create"
|
|
53935
|
+
},
|
|
53936
|
+
"navigation.setLightLevel": {
|
|
53937
|
+
capName: "navigation",
|
|
53938
|
+
capScope: "device",
|
|
53939
|
+
addonId: null,
|
|
53940
|
+
access: "create"
|
|
53941
|
+
},
|
|
53942
|
+
"navigation.setLightMode": {
|
|
53943
|
+
capName: "navigation",
|
|
53944
|
+
capScope: "device",
|
|
53945
|
+
addonId: null,
|
|
53946
|
+
access: "create"
|
|
53947
|
+
},
|
|
53948
|
+
"navigation.setLightOn": {
|
|
53949
|
+
capName: "navigation",
|
|
53950
|
+
capScope: "device",
|
|
53951
|
+
addonId: null,
|
|
53952
|
+
access: "create"
|
|
53953
|
+
},
|
|
53954
|
+
"navigation.stop": {
|
|
53955
|
+
capName: "navigation",
|
|
53956
|
+
capScope: "device",
|
|
53957
|
+
addonId: null,
|
|
53958
|
+
access: "create"
|
|
53959
|
+
},
|
|
53655
53960
|
"networkAccess.getEndpoint": {
|
|
53656
53961
|
capName: "network-access",
|
|
53657
53962
|
capScope: "system",
|
|
@@ -57747,6 +58052,56 @@ var require_dist_DyO7xSEt = __commonJS({
|
|
|
57747
58052
|
form: "single",
|
|
57748
58053
|
optional: false
|
|
57749
58054
|
}],
|
|
58055
|
+
"navigation.getFeatures": [{
|
|
58056
|
+
name: "deviceId",
|
|
58057
|
+
form: "single",
|
|
58058
|
+
optional: false
|
|
58059
|
+
}],
|
|
58060
|
+
"navigation.goToPoint": [{
|
|
58061
|
+
name: "deviceId",
|
|
58062
|
+
form: "single",
|
|
58063
|
+
optional: false
|
|
58064
|
+
}],
|
|
58065
|
+
"navigation.listActions": [{
|
|
58066
|
+
name: "deviceId",
|
|
58067
|
+
form: "single",
|
|
58068
|
+
optional: false
|
|
58069
|
+
}],
|
|
58070
|
+
"navigation.move": [{
|
|
58071
|
+
name: "deviceId",
|
|
58072
|
+
form: "single",
|
|
58073
|
+
optional: false
|
|
58074
|
+
}],
|
|
58075
|
+
"navigation.playSound": [{
|
|
58076
|
+
name: "deviceId",
|
|
58077
|
+
form: "single",
|
|
58078
|
+
optional: false
|
|
58079
|
+
}],
|
|
58080
|
+
"navigation.runAction": [{
|
|
58081
|
+
name: "deviceId",
|
|
58082
|
+
form: "single",
|
|
58083
|
+
optional: false
|
|
58084
|
+
}],
|
|
58085
|
+
"navigation.setLightLevel": [{
|
|
58086
|
+
name: "deviceId",
|
|
58087
|
+
form: "single",
|
|
58088
|
+
optional: false
|
|
58089
|
+
}],
|
|
58090
|
+
"navigation.setLightMode": [{
|
|
58091
|
+
name: "deviceId",
|
|
58092
|
+
form: "single",
|
|
58093
|
+
optional: false
|
|
58094
|
+
}],
|
|
58095
|
+
"navigation.setLightOn": [{
|
|
58096
|
+
name: "deviceId",
|
|
58097
|
+
form: "single",
|
|
58098
|
+
optional: false
|
|
58099
|
+
}],
|
|
58100
|
+
"navigation.stop": [{
|
|
58101
|
+
name: "deviceId",
|
|
58102
|
+
form: "single",
|
|
58103
|
+
optional: false
|
|
58104
|
+
}],
|
|
57750
58105
|
"networkQuality.getDeviceStats": [{
|
|
57751
58106
|
name: "deviceId",
|
|
57752
58107
|
form: "single",
|
|
@@ -58944,6 +59299,14 @@ var require_dist_DyO7xSEt = __commonJS({
|
|
|
58944
59299
|
durability: "restored",
|
|
58945
59300
|
volatileFields: ["lastFetchedAt"]
|
|
58946
59301
|
},
|
|
59302
|
+
"navigation": {
|
|
59303
|
+
durability: "session",
|
|
59304
|
+
volatileFields: []
|
|
59305
|
+
},
|
|
59306
|
+
"network-link": {
|
|
59307
|
+
durability: "restored",
|
|
59308
|
+
volatileFields: ["lastUpdated"]
|
|
59309
|
+
},
|
|
58947
59310
|
"notifier": {
|
|
58948
59311
|
durability: "session",
|
|
58949
59312
|
volatileFields: []
|
|
@@ -60194,7 +60557,7 @@ var require_alerts_addon = __commonJS({
|
|
|
60194
60557
|
[Symbol.toStringTag]: { value: "Module" }
|
|
60195
60558
|
});
|
|
60196
60559
|
require_chunk_Cek0wNdY();
|
|
60197
|
-
var require_dist10 =
|
|
60560
|
+
var require_dist10 = require_dist_C7g13BfN();
|
|
60198
60561
|
function selectExpired(alerts, cutoffMs) {
|
|
60199
60562
|
return alerts.filter((a) => a.createdAt < cutoffMs).sort((a, b) => a.createdAt - b.createdAt).map((a) => a.id);
|
|
60200
60563
|
}
|
|
@@ -61013,7 +61376,7 @@ var require_console_logging = __commonJS({
|
|
|
61013
61376
|
[Symbol.toStringTag]: { value: "Module" }
|
|
61014
61377
|
});
|
|
61015
61378
|
require_chunk_Cek0wNdY();
|
|
61016
|
-
var require_dist10 =
|
|
61379
|
+
var require_dist10 = require_dist_C7g13BfN();
|
|
61017
61380
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
61018
61381
|
var LEVEL_RANK = {
|
|
61019
61382
|
debug: 0,
|
|
@@ -61107,7 +61470,7 @@ var require_core_blocks_addon = __commonJS({
|
|
|
61107
61470
|
"use strict";
|
|
61108
61471
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
61109
61472
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
61110
|
-
var require_dist10 =
|
|
61473
|
+
var require_dist10 = require_dist_C7g13BfN();
|
|
61111
61474
|
var node_crypto = __require("crypto");
|
|
61112
61475
|
var node_fs_promises = __require("fs/promises");
|
|
61113
61476
|
node_fs_promises = require_chunk.__toESM(node_fs_promises);
|
|
@@ -62004,11 +62367,11 @@ var require_core_blocks = __commonJS({
|
|
|
62004
62367
|
}
|
|
62005
62368
|
});
|
|
62006
62369
|
|
|
62007
|
-
// ../system/dist/retired-settings-keys-
|
|
62008
|
-
var
|
|
62009
|
-
"../system/dist/retired-settings-keys-
|
|
62370
|
+
// ../system/dist/retired-settings-keys-BT_YDV75.js
|
|
62371
|
+
var require_retired_settings_keys_BT_YDV75 = __commonJS({
|
|
62372
|
+
"../system/dist/retired-settings-keys-BT_YDV75.js"(exports) {
|
|
62010
62373
|
"use strict";
|
|
62011
|
-
var require_dist10 =
|
|
62374
|
+
var require_dist10 = require_dist_C7g13BfN();
|
|
62012
62375
|
function settingsStoreIsAuthoritativeHere(env) {
|
|
62013
62376
|
const raw = (env["CAMSTACK_ROLE"] ?? "").trim().toLowerCase();
|
|
62014
62377
|
return raw === "" || raw === "hub";
|
|
@@ -64222,8 +64585,8 @@ var require_device_manager_addon = __commonJS({
|
|
|
64222
64585
|
[Symbol.toStringTag]: { value: "Module" }
|
|
64223
64586
|
});
|
|
64224
64587
|
require_chunk_Cek0wNdY();
|
|
64225
|
-
var require_dist10 =
|
|
64226
|
-
var require_retired_settings_keys =
|
|
64588
|
+
var require_dist10 = require_dist_C7g13BfN();
|
|
64589
|
+
var require_retired_settings_keys = require_retired_settings_keys_BT_YDV75();
|
|
64227
64590
|
var node_crypto = __require("crypto");
|
|
64228
64591
|
var _camstack_types_node = require_node();
|
|
64229
64592
|
var JOB_HISTORY = 20;
|
|
@@ -69738,7 +70101,7 @@ var require_hub_forwarder = __commonJS({
|
|
|
69738
70101
|
[Symbol.toStringTag]: { value: "Module" }
|
|
69739
70102
|
});
|
|
69740
70103
|
require_chunk_Cek0wNdY();
|
|
69741
|
-
var require_dist10 =
|
|
70104
|
+
var require_dist10 = require_dist_C7g13BfN();
|
|
69742
70105
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
69743
70106
|
var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
|
|
69744
70107
|
var HubForwarderDestination = class {
|
|
@@ -69875,7 +70238,7 @@ var require_liveness_monitor_addon = __commonJS({
|
|
|
69875
70238
|
"use strict";
|
|
69876
70239
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
69877
70240
|
require_chunk_Cek0wNdY();
|
|
69878
|
-
var require_dist10 =
|
|
70241
|
+
var require_dist10 = require_dist_C7g13BfN();
|
|
69879
70242
|
var NO_DEVICES = "liveness:no-devices";
|
|
69880
70243
|
var ALL_OFFLINE = "liveness:all-devices-offline";
|
|
69881
70244
|
var NO_FOOTAGE_PREFIX = "liveness:no-footage:";
|
|
@@ -70071,7 +70434,7 @@ var require_local_auth_addon = __commonJS({
|
|
|
70071
70434
|
[Symbol.toStringTag]: { value: "Module" }
|
|
70072
70435
|
});
|
|
70073
70436
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
70074
|
-
var require_dist10 =
|
|
70437
|
+
var require_dist10 = require_dist_C7g13BfN();
|
|
70075
70438
|
var node_crypto = __require("crypto");
|
|
70076
70439
|
node_crypto = require_chunk.__toESM(node_crypto);
|
|
70077
70440
|
var crypto$1 = __require("crypto");
|
|
@@ -77884,7 +78247,7 @@ var require_loki_logging = __commonJS({
|
|
|
77884
78247
|
[Symbol.toStringTag]: { value: "Module" }
|
|
77885
78248
|
});
|
|
77886
78249
|
require_chunk_Cek0wNdY();
|
|
77887
|
-
var require_dist10 =
|
|
78250
|
+
var require_dist10 = require_dist_C7g13BfN();
|
|
77888
78251
|
function sanitizeLabelName(raw) {
|
|
77889
78252
|
const replaced = raw.replaceAll(/[^a-zA-Z0-9_]/g, "_");
|
|
77890
78253
|
return /^[a-zA-Z_]/.test(replaced) ? replaced : `_${replaced}`;
|
|
@@ -78449,7 +78812,7 @@ var require_native_metrics_addon = __commonJS({
|
|
|
78449
78812
|
[Symbol.toStringTag]: { value: "Module" }
|
|
78450
78813
|
});
|
|
78451
78814
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
78452
|
-
var require_dist10 =
|
|
78815
|
+
var require_dist10 = require_dist_C7g13BfN();
|
|
78453
78816
|
var node_fs_promises = __require("fs/promises");
|
|
78454
78817
|
var node_child_process = __require("child_process");
|
|
78455
78818
|
var node_util = __require("util");
|
|
@@ -81033,7 +81396,7 @@ var require_filesystem_storage_addon = __commonJS({
|
|
|
81033
81396
|
[Symbol.toStringTag]: { value: "Module" }
|
|
81034
81397
|
});
|
|
81035
81398
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
81036
|
-
var require_dist10 =
|
|
81399
|
+
var require_dist10 = require_dist_C7g13BfN();
|
|
81037
81400
|
var node_crypto = __require("crypto");
|
|
81038
81401
|
var node_fs_promises = __require("fs/promises");
|
|
81039
81402
|
var node_path = __require("path");
|
|
@@ -82149,8 +82512,8 @@ var require_sqlite_settings_addon = __commonJS({
|
|
|
82149
82512
|
[Symbol.toStringTag]: { value: "Module" }
|
|
82150
82513
|
});
|
|
82151
82514
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
82152
|
-
var require_dist10 =
|
|
82153
|
-
var require_retired_settings_keys =
|
|
82515
|
+
var require_dist10 = require_dist_C7g13BfN();
|
|
82516
|
+
var require_retired_settings_keys = require_retired_settings_keys_BT_YDV75();
|
|
82154
82517
|
var node_crypto = __require("crypto");
|
|
82155
82518
|
var node_fs = __require("fs");
|
|
82156
82519
|
var node_module = __require("module");
|
|
@@ -84640,7 +85003,7 @@ var require_storage_orchestrator_addon = __commonJS({
|
|
|
84640
85003
|
[Symbol.toStringTag]: { value: "Module" }
|
|
84641
85004
|
});
|
|
84642
85005
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
84643
|
-
var require_dist10 =
|
|
85006
|
+
var require_dist10 = require_dist_C7g13BfN();
|
|
84644
85007
|
var require_hub_cap_forward = require_hub_cap_forward_DmHNjbB0();
|
|
84645
85008
|
var zod = require_zod();
|
|
84646
85009
|
var node_crypto = __require("crypto");
|
|
@@ -87591,7 +87954,7 @@ var require_system_config_addon = __commonJS({
|
|
|
87591
87954
|
[Symbol.toStringTag]: { value: "Module" }
|
|
87592
87955
|
});
|
|
87593
87956
|
require_chunk_Cek0wNdY();
|
|
87594
|
-
var require_dist10 =
|
|
87957
|
+
var require_dist10 = require_dist_C7g13BfN();
|
|
87595
87958
|
var SECTION_TITLES = {
|
|
87596
87959
|
server: "Server",
|
|
87597
87960
|
auth: "Authentication"
|
|
@@ -105652,7 +106015,7 @@ var require_winston_logging = __commonJS({
|
|
|
105652
106015
|
[Symbol.toStringTag]: { value: "Module" }
|
|
105653
106016
|
});
|
|
105654
106017
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
105655
|
-
var require_dist10 =
|
|
106018
|
+
var require_dist10 = require_dist_C7g13BfN();
|
|
105656
106019
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
105657
106020
|
var node_path = __require("path");
|
|
105658
106021
|
node_path = require_chunk.__toESM(node_path);
|
|
@@ -107428,9 +107791,9 @@ ${(0, node_fs.readFileSync)(ca.caCertPath, "utf-8").trimEnd()}
|
|
|
107428
107791
|
}
|
|
107429
107792
|
});
|
|
107430
107793
|
|
|
107431
|
-
// ../types/dist/event-category-
|
|
107432
|
-
var
|
|
107433
|
-
"../types/dist/event-category-
|
|
107794
|
+
// ../types/dist/event-category-b8kBSOTT.js
|
|
107795
|
+
var require_event_category_b8kBSOTT = __commonJS({
|
|
107796
|
+
"../types/dist/event-category-b8kBSOTT.js"(exports) {
|
|
107434
107797
|
"use strict";
|
|
107435
107798
|
var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
|
|
107436
107799
|
EventCategory2["SystemBoot"] = "system.boot";
|
|
@@ -107513,6 +107876,7 @@ var require_event_category_BaEgqJNv = __commonJS({
|
|
|
107513
107876
|
EventCategory2["DeviceStateChanged"] = "device.state-changed";
|
|
107514
107877
|
EventCategory2["ZoneAnalyticsOccupancyChanged"] = "zone-analytics.occupancy-changed";
|
|
107515
107878
|
EventCategory2["BatteryOnStatusChanged"] = "battery.onStatusChanged";
|
|
107879
|
+
EventCategory2["NetworkLinkOnStatusChanged"] = "network-link.onStatusChanged";
|
|
107516
107880
|
EventCategory2["BatteryOnWakeStarted"] = "battery.onWakeStarted";
|
|
107517
107881
|
EventCategory2["DoorbellOnPressed"] = "doorbell.onPressed";
|
|
107518
107882
|
EventCategory2["EventEmitted"] = "event-emitter.event";
|
|
@@ -107595,11 +107959,11 @@ var require_event_category_BaEgqJNv = __commonJS({
|
|
|
107595
107959
|
}
|
|
107596
107960
|
});
|
|
107597
107961
|
|
|
107598
|
-
// ../types/dist/sleep-
|
|
107599
|
-
var
|
|
107600
|
-
"../types/dist/sleep-
|
|
107962
|
+
// ../types/dist/sleep-Dp0uukHR.js
|
|
107963
|
+
var require_sleep_Dp0uukHR = __commonJS({
|
|
107964
|
+
"../types/dist/sleep-Dp0uukHR.js"(exports) {
|
|
107601
107965
|
"use strict";
|
|
107602
|
-
var require_event_category =
|
|
107966
|
+
var require_event_category = require_event_category_b8kBSOTT();
|
|
107603
107967
|
var zod = require_zod();
|
|
107604
107968
|
var WELL_KNOWN_TABS = [
|
|
107605
107969
|
{
|
|
@@ -109992,6 +110356,8 @@ var require_sleep_DVTaZZHP = __commonJS({
|
|
|
109992
110356
|
motionTrigger: createSliceHandle(stateSource, binding.deviceId, "motion-trigger"),
|
|
109993
110357
|
motionZones: createSliceHandle(stateSource, binding.deviceId, "motion-zones"),
|
|
109994
110358
|
nativeObjectDetection: createSliceHandle(stateSource, binding.deviceId, "native-object-detection"),
|
|
110359
|
+
navigation: createSliceHandle(stateSource, binding.deviceId, "navigation"),
|
|
110360
|
+
networkLink: createSliceHandle(stateSource, binding.deviceId, "network-link"),
|
|
109995
110361
|
notifier: createSliceHandle(stateSource, binding.deviceId, "notifier"),
|
|
109996
110362
|
numericSensor: createSliceHandle(stateSource, binding.deviceId, "numeric-sensor"),
|
|
109997
110363
|
petFeeder: createSliceHandle(stateSource, binding.deviceId, "pet-feeder"),
|
|
@@ -110225,6 +110591,20 @@ var require_sleep_DVTaZZHP = __commonJS({
|
|
|
110225
110591
|
setEnabled: (input) => dispatch("native-object-detection", "nativeObjectDetection", "setEnabled", "mutation", input),
|
|
110226
110592
|
getStatus: (input) => dispatch("native-object-detection", "nativeObjectDetection", "getStatus", "query", input)
|
|
110227
110593
|
},
|
|
110594
|
+
navigation: {
|
|
110595
|
+
move: (input) => dispatch("navigation", "navigation", "move", "mutation", input),
|
|
110596
|
+
stop: (input) => dispatch("navigation", "navigation", "stop", "mutation", input),
|
|
110597
|
+
goToPoint: (input) => dispatch("navigation", "navigation", "goToPoint", "mutation", input),
|
|
110598
|
+
listActions: (input) => dispatch("navigation", "navigation", "listActions", "query", input),
|
|
110599
|
+
runAction: (input) => dispatch("navigation", "navigation", "runAction", "mutation", input),
|
|
110600
|
+
playSound: (input) => dispatch("navigation", "navigation", "playSound", "mutation", input),
|
|
110601
|
+
setLightOn: (input) => dispatch("navigation", "navigation", "setLightOn", "mutation", input),
|
|
110602
|
+
setLightMode: (input) => dispatch("navigation", "navigation", "setLightMode", "mutation", input),
|
|
110603
|
+
setLightLevel: (input) => dispatch("navigation", "navigation", "setLightLevel", "mutation", input),
|
|
110604
|
+
getFeatures: (input) => dispatch("navigation", "navigation", "getFeatures", "query", input),
|
|
110605
|
+
getStatus: (input) => dispatch("navigation", "navigation", "getStatus", "query", input)
|
|
110606
|
+
},
|
|
110607
|
+
networkLink: { getStatus: (input) => dispatch("network-link", "networkLink", "getStatus", "query", input) },
|
|
110228
110608
|
notificationRules: {
|
|
110229
110609
|
listRules: (input) => dispatch("notification-rules", "notificationRules", "listRules", "query", input),
|
|
110230
110610
|
getRule: (input) => dispatch("notification-rules", "notificationRules", "getRule", "query", input),
|
|
@@ -110671,6 +111051,8 @@ var require_sleep_DVTaZZHP = __commonJS({
|
|
|
110671
111051
|
"motion-trigger",
|
|
110672
111052
|
"motion-zones",
|
|
110673
111053
|
"native-object-detection",
|
|
111054
|
+
"navigation",
|
|
111055
|
+
"network-link",
|
|
110674
111056
|
"notifier",
|
|
110675
111057
|
"numeric-sensor",
|
|
110676
111058
|
"osd",
|
|
@@ -111286,8 +111668,8 @@ var require_addon = __commonJS({
|
|
|
111286
111668
|
"../types/dist/addon.js"(exports) {
|
|
111287
111669
|
"use strict";
|
|
111288
111670
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
111289
|
-
var require_event_category =
|
|
111290
|
-
var require_sleep =
|
|
111671
|
+
var require_event_category = require_event_category_b8kBSOTT();
|
|
111672
|
+
var require_sleep = require_sleep_Dp0uukHR();
|
|
111291
111673
|
var require_err_msg = require_err_msg_COpsHMw2();
|
|
111292
111674
|
var CAP_INPUT_DEFAULTS = Object.freeze({
|
|
111293
111675
|
"addons": { "getLogs": { "limit": 100 } },
|
|
@@ -130247,7 +130629,7 @@ var require_dist3 = __commonJS({
|
|
|
130247
130629
|
"use strict";
|
|
130248
130630
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
130249
130631
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
130250
|
-
var require_dist10 =
|
|
130632
|
+
var require_dist10 = require_dist_C7g13BfN();
|
|
130251
130633
|
var require_builtins_alerts_alerts_addon = require_alerts_addon();
|
|
130252
130634
|
require_alerts();
|
|
130253
130635
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
@@ -211343,7 +211725,7 @@ var require_enums = __commonJS({
|
|
|
211343
211725
|
"../types/dist/enums.js"(exports) {
|
|
211344
211726
|
"use strict";
|
|
211345
211727
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
211346
|
-
var require_event_category =
|
|
211728
|
+
var require_event_category = require_event_category_b8kBSOTT();
|
|
211347
211729
|
var EventSourceType = /* @__PURE__ */ (function(EventSourceType2) {
|
|
211348
211730
|
EventSourceType2["Addon"] = "addon";
|
|
211349
211731
|
EventSourceType2["Core"] = "core";
|
|
@@ -211363,8 +211745,8 @@ var require_dist4 = __commonJS({
|
|
|
211363
211745
|
"../types/dist/index.js"(exports) {
|
|
211364
211746
|
"use strict";
|
|
211365
211747
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
211366
|
-
var require_event_category =
|
|
211367
|
-
var require_sleep =
|
|
211748
|
+
var require_event_category = require_event_category_b8kBSOTT();
|
|
211749
|
+
var require_sleep = require_sleep_Dp0uukHR();
|
|
211368
211750
|
var require_canonical_hash = require_canonical_hash_DNV8S5ET();
|
|
211369
211751
|
var require_enums2 = require_enums();
|
|
211370
211752
|
var require_err_msg = require_err_msg_COpsHMw2();
|
|
@@ -231288,6 +231670,94 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
231288
231670
|
* whether persisting is worth a SQLite commit. */
|
|
231289
231671
|
volatileStateFields: ["lastUpdated"]
|
|
231290
231672
|
};
|
|
231673
|
+
var NETWORK_LINK_TYPES = [
|
|
231674
|
+
"wifi",
|
|
231675
|
+
"ethernet",
|
|
231676
|
+
"cellular",
|
|
231677
|
+
"unknown"
|
|
231678
|
+
];
|
|
231679
|
+
var NetworkLinkStatusSchema = zod.z.object({
|
|
231680
|
+
/** The link the device is on. `'unknown'` = not read yet, not "no link". */
|
|
231681
|
+
type: zod.z.enum(NETWORK_LINK_TYPES),
|
|
231682
|
+
/**
|
|
231683
|
+
* Link quality, 0..100 inclusive, normalised by the provider from whatever
|
|
231684
|
+
* the firmware reports (bars, RSSI, a vendor scale). **`null` means NOT
|
|
231685
|
+
* KNOWN or NOT APPLICABLE** — a wired link has no signal, and a wireless
|
|
231686
|
+
* one whose reading has not landed must not be drawn at 0 %. Consumers
|
|
231687
|
+
* SKIP a null rather than coerce it.
|
|
231688
|
+
*/
|
|
231689
|
+
signalPercent: zod.z.number().min(0).max(100).nullable(),
|
|
231690
|
+
/** Raw received signal strength in dBm, when the firmware reports one. */
|
|
231691
|
+
rssiDbm: zod.z.number().optional(),
|
|
231692
|
+
/** Network name of a wireless link, when the firmware reports it. */
|
|
231693
|
+
ssid: zod.z.string().optional(),
|
|
231694
|
+
/** Ms epoch of the last observation. Lets consumers reason about freshness. */
|
|
231695
|
+
lastUpdated: zod.z.number()
|
|
231696
|
+
});
|
|
231697
|
+
var NETWORK_LINK_UNKNOWN = {
|
|
231698
|
+
type: "unknown",
|
|
231699
|
+
signalPercent: null,
|
|
231700
|
+
lastUpdated: 0
|
|
231701
|
+
};
|
|
231702
|
+
function signalPercentFromBars(bars, maxBars) {
|
|
231703
|
+
if (bars === void 0 || !Number.isFinite(bars) || maxBars <= 0) return null;
|
|
231704
|
+
if (bars < 0 || bars > maxBars) return null;
|
|
231705
|
+
return Math.round(bars / maxBars * 100);
|
|
231706
|
+
}
|
|
231707
|
+
function signalPercentFromRssi(rssiDbm) {
|
|
231708
|
+
if (rssiDbm === void 0 || !Number.isFinite(rssiDbm) || rssiDbm > 0) return null;
|
|
231709
|
+
return Math.round((Math.min(-50, Math.max(-100, rssiDbm)) + 100) * 2);
|
|
231710
|
+
}
|
|
231711
|
+
var networkLinkCapability = {
|
|
231712
|
+
name: "network-link",
|
|
231713
|
+
scope: "device",
|
|
231714
|
+
deviceNative: true,
|
|
231715
|
+
mode: "singleton",
|
|
231716
|
+
deviceTypes: [
|
|
231717
|
+
require_sleep.DeviceType.Camera,
|
|
231718
|
+
require_sleep.DeviceType.Sensor,
|
|
231719
|
+
require_sleep.DeviceType.Button,
|
|
231720
|
+
require_sleep.DeviceType.Switch,
|
|
231721
|
+
require_sleep.DeviceType.Light,
|
|
231722
|
+
require_sleep.DeviceType.Lock,
|
|
231723
|
+
require_sleep.DeviceType.Siren
|
|
231724
|
+
],
|
|
231725
|
+
methods: {},
|
|
231726
|
+
events: {
|
|
231727
|
+
/**
|
|
231728
|
+
* Emitted whenever the cached status changes (a link switch, a signal
|
|
231729
|
+
* reading that moved). Mirrored on the parent chain by the
|
|
231730
|
+
* DeviceEventPropagator like `battery.onStatusChanged`.
|
|
231731
|
+
*/
|
|
231732
|
+
onStatusChanged: { data: zod.z.object({
|
|
231733
|
+
deviceId: zod.z.number(),
|
|
231734
|
+
status: NetworkLinkStatusSchema
|
|
231735
|
+
}) }
|
|
231736
|
+
},
|
|
231737
|
+
status: {
|
|
231738
|
+
schema: NetworkLinkStatusSchema,
|
|
231739
|
+
kind: "push",
|
|
231740
|
+
empty: NETWORK_LINK_UNKNOWN
|
|
231741
|
+
},
|
|
231742
|
+
/**
|
|
231743
|
+
* Runtime-state slice — every provider stores the same shape under
|
|
231744
|
+
* `device.runtimeState['network-link']`, read once by the badge and the
|
|
231745
|
+
* Home Assistant projector regardless of the driver.
|
|
231746
|
+
*/
|
|
231747
|
+
runtimeState: NetworkLinkStatusSchema,
|
|
231748
|
+
/**
|
|
231749
|
+
* Runtime-state durability: **restored** — a link reading is slow to
|
|
231750
|
+
* change and a sleeping battery camera may not report for hours; the
|
|
231751
|
+
* restored slice is what the badge shows until the next read.
|
|
231752
|
+
*
|
|
231753
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
231754
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
231755
|
+
*/
|
|
231756
|
+
durability: "restored",
|
|
231757
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
231758
|
+
* whether persisting is worth a SQLite commit. */
|
|
231759
|
+
volatileStateFields: ["lastUpdated"]
|
|
231760
|
+
};
|
|
231291
231761
|
var BinaryStatusSchema = zod.z.object({
|
|
231292
231762
|
on: zod.z.boolean(),
|
|
231293
231763
|
/** Ms epoch of the last transition. 0 if never observed. */
|
|
@@ -236000,6 +236470,297 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
236000
236470
|
*/
|
|
236001
236471
|
durability: "session"
|
|
236002
236472
|
};
|
|
236473
|
+
var NavigationMoveCommandSchema = zod.z.object({
|
|
236474
|
+
pan: zod.z.number().min(-1).max(1).optional(),
|
|
236475
|
+
tilt: zod.z.number().min(-1).max(1).optional(),
|
|
236476
|
+
speed: zod.z.number().min(0).max(1).optional()
|
|
236477
|
+
});
|
|
236478
|
+
var NavigationActionIdSchema = zod.z.enum([
|
|
236479
|
+
"goHome",
|
|
236480
|
+
"locate",
|
|
236481
|
+
"spotClean",
|
|
236482
|
+
"findPet",
|
|
236483
|
+
"personFollow",
|
|
236484
|
+
"stop",
|
|
236485
|
+
"startClean",
|
|
236486
|
+
"pauseClean",
|
|
236487
|
+
"dockWash",
|
|
236488
|
+
"autoEmpty",
|
|
236489
|
+
"flashOn",
|
|
236490
|
+
"flashOff"
|
|
236491
|
+
]);
|
|
236492
|
+
var NavigationEntryKindSchema = zod.z.enum(["action", "sound"]);
|
|
236493
|
+
var NavigationActionEntrySchema = zod.z.object({
|
|
236494
|
+
id: zod.z.string(),
|
|
236495
|
+
kind: NavigationEntryKindSchema,
|
|
236496
|
+
label: zod.z.string(),
|
|
236497
|
+
icon: zod.z.string(),
|
|
236498
|
+
/** Present only on `kind:'sound'` entries — the id to pass to `playSound`. */
|
|
236499
|
+
soundId: zod.z.number().int().optional(),
|
|
236500
|
+
/** Per-device feature flag — render this entry only when true. */
|
|
236501
|
+
enabled: zod.z.boolean()
|
|
236502
|
+
});
|
|
236503
|
+
var NAVIGATION_ACTION_CATALOG = [
|
|
236504
|
+
{
|
|
236505
|
+
id: "startClean",
|
|
236506
|
+
kind: "action",
|
|
236507
|
+
label: "Start cleaning",
|
|
236508
|
+
icon: "play",
|
|
236509
|
+
enabled: true
|
|
236510
|
+
},
|
|
236511
|
+
{
|
|
236512
|
+
id: "pauseClean",
|
|
236513
|
+
kind: "action",
|
|
236514
|
+
label: "Pause cleaning",
|
|
236515
|
+
icon: "pause",
|
|
236516
|
+
enabled: true
|
|
236517
|
+
},
|
|
236518
|
+
{
|
|
236519
|
+
id: "stop",
|
|
236520
|
+
kind: "action",
|
|
236521
|
+
label: "Stop",
|
|
236522
|
+
icon: "hand",
|
|
236523
|
+
enabled: true
|
|
236524
|
+
},
|
|
236525
|
+
{
|
|
236526
|
+
id: "goHome",
|
|
236527
|
+
kind: "action",
|
|
236528
|
+
label: "Return to dock",
|
|
236529
|
+
icon: "home",
|
|
236530
|
+
enabled: true
|
|
236531
|
+
},
|
|
236532
|
+
{
|
|
236533
|
+
id: "locate",
|
|
236534
|
+
kind: "action",
|
|
236535
|
+
label: "Locate",
|
|
236536
|
+
icon: "bell",
|
|
236537
|
+
enabled: true
|
|
236538
|
+
},
|
|
236539
|
+
{
|
|
236540
|
+
id: "spotClean",
|
|
236541
|
+
kind: "action",
|
|
236542
|
+
label: "Spot clean here",
|
|
236543
|
+
icon: "crosshair",
|
|
236544
|
+
enabled: true
|
|
236545
|
+
},
|
|
236546
|
+
{
|
|
236547
|
+
id: "findPet",
|
|
236548
|
+
kind: "action",
|
|
236549
|
+
label: "Find pet",
|
|
236550
|
+
icon: "paw-print",
|
|
236551
|
+
enabled: true
|
|
236552
|
+
},
|
|
236553
|
+
{
|
|
236554
|
+
id: "personFollow",
|
|
236555
|
+
kind: "action",
|
|
236556
|
+
label: "Follow me",
|
|
236557
|
+
icon: "footprints",
|
|
236558
|
+
enabled: true
|
|
236559
|
+
},
|
|
236560
|
+
{
|
|
236561
|
+
id: "dockWash",
|
|
236562
|
+
kind: "action",
|
|
236563
|
+
label: "Wash mop",
|
|
236564
|
+
icon: "droplets",
|
|
236565
|
+
enabled: true
|
|
236566
|
+
},
|
|
236567
|
+
{
|
|
236568
|
+
id: "autoEmpty",
|
|
236569
|
+
kind: "action",
|
|
236570
|
+
label: "Empty dustbin",
|
|
236571
|
+
icon: "trash-2",
|
|
236572
|
+
enabled: true
|
|
236573
|
+
},
|
|
236574
|
+
{
|
|
236575
|
+
id: "flashOn",
|
|
236576
|
+
kind: "action",
|
|
236577
|
+
label: "Flash on",
|
|
236578
|
+
icon: "flashlight",
|
|
236579
|
+
enabled: true
|
|
236580
|
+
},
|
|
236581
|
+
{
|
|
236582
|
+
id: "flashOff",
|
|
236583
|
+
kind: "action",
|
|
236584
|
+
label: "Flash off",
|
|
236585
|
+
icon: "flashlight-off",
|
|
236586
|
+
enabled: true
|
|
236587
|
+
},
|
|
236588
|
+
{
|
|
236589
|
+
id: "sound:meow",
|
|
236590
|
+
kind: "sound",
|
|
236591
|
+
label: "Meow",
|
|
236592
|
+
icon: "cat",
|
|
236593
|
+
soundId: 684,
|
|
236594
|
+
enabled: true
|
|
236595
|
+
},
|
|
236596
|
+
{
|
|
236597
|
+
id: "sound:bark",
|
|
236598
|
+
kind: "sound",
|
|
236599
|
+
label: "Woof",
|
|
236600
|
+
icon: "dog",
|
|
236601
|
+
soundId: 685,
|
|
236602
|
+
enabled: true
|
|
236603
|
+
},
|
|
236604
|
+
{
|
|
236605
|
+
id: "sound:footsteps",
|
|
236606
|
+
kind: "sound",
|
|
236607
|
+
label: "Footsteps",
|
|
236608
|
+
icon: "footprints",
|
|
236609
|
+
soundId: 686,
|
|
236610
|
+
enabled: true
|
|
236611
|
+
},
|
|
236612
|
+
{
|
|
236613
|
+
id: "sound:purring",
|
|
236614
|
+
kind: "sound",
|
|
236615
|
+
label: "Purring",
|
|
236616
|
+
icon: "cat",
|
|
236617
|
+
soundId: 687,
|
|
236618
|
+
enabled: true
|
|
236619
|
+
},
|
|
236620
|
+
{
|
|
236621
|
+
id: "sound:tickTock",
|
|
236622
|
+
kind: "sound",
|
|
236623
|
+
label: "Tick-tock",
|
|
236624
|
+
icon: "clock",
|
|
236625
|
+
soundId: 688,
|
|
236626
|
+
enabled: true
|
|
236627
|
+
}
|
|
236628
|
+
];
|
|
236629
|
+
var NavigationPointSchema = zod.z.object({
|
|
236630
|
+
x: zod.z.number(),
|
|
236631
|
+
y: zod.z.number()
|
|
236632
|
+
});
|
|
236633
|
+
var NavigationFeaturesSchema = zod.z.object({
|
|
236634
|
+
move: zod.z.boolean(),
|
|
236635
|
+
stop: zod.z.boolean(),
|
|
236636
|
+
goToPoint: zod.z.boolean(),
|
|
236637
|
+
runAction: zod.z.boolean(),
|
|
236638
|
+
playSound: zod.z.boolean(),
|
|
236639
|
+
light: zod.z.boolean(),
|
|
236640
|
+
lightMode: zod.z.boolean()
|
|
236641
|
+
});
|
|
236642
|
+
var NavigationLightModeSchema = zod.z.enum(["auto", "manual"]);
|
|
236643
|
+
var NAVIGATION_LIGHT_LEVEL_MIN = 40;
|
|
236644
|
+
var NAVIGATION_LIGHT_LEVEL_MAX = 100;
|
|
236645
|
+
var NavigationModeSchema = zod.z.enum([
|
|
236646
|
+
"idle",
|
|
236647
|
+
"cleaning",
|
|
236648
|
+
"spot",
|
|
236649
|
+
"following",
|
|
236650
|
+
"goto",
|
|
236651
|
+
"returning",
|
|
236652
|
+
"paused",
|
|
236653
|
+
"unknown"
|
|
236654
|
+
]);
|
|
236655
|
+
var NavigationStatusSchema = zod.z.object({
|
|
236656
|
+
mode: NavigationModeSchema,
|
|
236657
|
+
following: zod.z.boolean(),
|
|
236658
|
+
flash: zod.z.boolean(),
|
|
236659
|
+
lightMode: NavigationLightModeSchema,
|
|
236660
|
+
lightLevel: zod.z.number().min(40).max(100),
|
|
236661
|
+
/** Ms epoch when the slice was last updated. */
|
|
236662
|
+
lastChangedAt: zod.z.number()
|
|
236663
|
+
});
|
|
236664
|
+
var NavigationRuntimeStateSchema = NavigationStatusSchema.extend({ lastFetchedAt: zod.z.number() });
|
|
236665
|
+
var navigationCapability = {
|
|
236666
|
+
name: "navigation",
|
|
236667
|
+
scope: "device",
|
|
236668
|
+
deviceNative: true,
|
|
236669
|
+
mode: "singleton",
|
|
236670
|
+
deviceTypes: [require_sleep.DeviceType.Camera],
|
|
236671
|
+
deviceConfig: { ui: {
|
|
236672
|
+
kind: "widget",
|
|
236673
|
+
widgetId: "host/navigation-panel",
|
|
236674
|
+
tab: "navigation",
|
|
236675
|
+
topTab: true,
|
|
236676
|
+
label: "Navigation",
|
|
236677
|
+
order: 0
|
|
236678
|
+
} },
|
|
236679
|
+
methods: {
|
|
236680
|
+
/**
|
|
236681
|
+
* Momentary drive nudge (the robot moves). `protected` — mirrors
|
|
236682
|
+
* `ptz.continuousMove` so the Viewer navigation panel (and the PTZ-mimic
|
|
236683
|
+
* path) works for any authenticated user, not admin-only. The UI sends
|
|
236684
|
+
* these at ~1 Hz while a control is held; the provider forwards each one to
|
|
236685
|
+
* a single drive write WITHOUT debouncing.
|
|
236686
|
+
*/
|
|
236687
|
+
move: require_sleep.method(NavigationMoveCommandSchema.extend({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
|
|
236688
|
+
/** Halt all motion immediately (zero drive vector). */
|
|
236689
|
+
stop: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
|
|
236690
|
+
/** Send the robot to a point on its live map. */
|
|
236691
|
+
goToPoint: require_sleep.method(NavigationPointSchema.extend({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
|
|
236692
|
+
/**
|
|
236693
|
+
* Enumerate the discrete controls THIS device supports (data-driven UI +
|
|
236694
|
+
* PTZ mimic). Camera-probed subset of {@link NAVIGATION_ACTION_CATALOG}.
|
|
236695
|
+
*/
|
|
236696
|
+
listActions: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), zod.z.array(NavigationActionEntrySchema)),
|
|
236697
|
+
/**
|
|
236698
|
+
* Run one discrete action (a `kind:'action'` dictionary entry). Invalid /
|
|
236699
|
+
* unsupported action ids are rejected by the provider.
|
|
236700
|
+
*/
|
|
236701
|
+
runAction: require_sleep.method(zod.z.object({
|
|
236702
|
+
deviceId: zod.z.number(),
|
|
236703
|
+
actionId: NavigationActionIdSchema
|
|
236704
|
+
}), zod.z.void(), { kind: "mutation" }),
|
|
236705
|
+
/** Play a sound by its wire id (the `soundId` of a `kind:'sound'` entry). */
|
|
236706
|
+
playSound: require_sleep.method(zod.z.object({
|
|
236707
|
+
deviceId: zod.z.number(),
|
|
236708
|
+
soundId: zod.z.number().int()
|
|
236709
|
+
}), zod.z.void(), { kind: "mutation" }),
|
|
236710
|
+
/**
|
|
236711
|
+
* Turn the on-camera fill light on / off (the `OpenFullLight` control —
|
|
236712
|
+
* works anytime, no active stream required).
|
|
236713
|
+
*/
|
|
236714
|
+
setLightOn: require_sleep.method(zod.z.object({
|
|
236715
|
+
deviceId: zod.z.number(),
|
|
236716
|
+
on: zod.z.boolean()
|
|
236717
|
+
}), zod.z.void(), { kind: "mutation" }),
|
|
236718
|
+
/**
|
|
236719
|
+
* Set the fill-light mode (auto vs manual). `manual` optionally carries the
|
|
236720
|
+
* initial `level`. The auto/manual + level control is a CAMERA-service
|
|
236721
|
+
* action that generally needs an active camera stream/monitor session — the
|
|
236722
|
+
* UI shows the manual level slider ONLY when `mode === 'manual'`.
|
|
236723
|
+
*/
|
|
236724
|
+
setLightMode: require_sleep.method(zod.z.object({
|
|
236725
|
+
deviceId: zod.z.number(),
|
|
236726
|
+
mode: NavigationLightModeSchema,
|
|
236727
|
+
level: zod.z.number().min(40).max(100).optional()
|
|
236728
|
+
}), zod.z.void(), { kind: "mutation" }),
|
|
236729
|
+
/** Set the MANUAL fill-light level (40..100). Implies `manual` mode. */
|
|
236730
|
+
setLightLevel: require_sleep.method(zod.z.object({
|
|
236731
|
+
deviceId: zod.z.number(),
|
|
236732
|
+
level: zod.z.number().min(40).max(100)
|
|
236733
|
+
}), zod.z.void(), { kind: "mutation" }),
|
|
236734
|
+
/**
|
|
236735
|
+
* Per-device FEATURE-FLAG report for the general primitives — drives which
|
|
236736
|
+
* controls the UI shows (the per-entry flags for the dictionary come back on
|
|
236737
|
+
* `listActions`).
|
|
236738
|
+
*/
|
|
236739
|
+
getFeatures: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), NavigationFeaturesSchema)
|
|
236740
|
+
},
|
|
236741
|
+
events: { onStatusChanged: { data: zod.z.object({
|
|
236742
|
+
deviceId: zod.z.number(),
|
|
236743
|
+
status: NavigationStatusSchema
|
|
236744
|
+
}) } },
|
|
236745
|
+
status: {
|
|
236746
|
+
schema: NavigationStatusSchema,
|
|
236747
|
+
kind: "push"
|
|
236748
|
+
},
|
|
236749
|
+
/**
|
|
236750
|
+
* Runtime-state slice mirrored by the kernel. The navigation panel watches it
|
|
236751
|
+
* for live mode / follow / flash changes.
|
|
236752
|
+
*/
|
|
236753
|
+
runtimeState: NavigationRuntimeStateSchema,
|
|
236754
|
+
/**
|
|
236755
|
+
* Runtime-state durability: **session** — like `vacuum-control`, a restored
|
|
236756
|
+
* `mode: cleaning` / `following: true` is a robot that is not actually doing
|
|
236757
|
+
* that. The live handle re-publishes on connect.
|
|
236758
|
+
*
|
|
236759
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
236760
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
236761
|
+
*/
|
|
236762
|
+
durability: "session"
|
|
236763
|
+
};
|
|
236003
236764
|
var rebootCapability = {
|
|
236004
236765
|
name: "reboot",
|
|
236005
236766
|
scope: "device",
|
|
@@ -239371,6 +240132,8 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
239371
240132
|
motionTrigger: motionTriggerCapability,
|
|
239372
240133
|
motionZones: motionZonesCapability,
|
|
239373
240134
|
nativeObjectDetection: nativeObjectDetectionCapability,
|
|
240135
|
+
navigation: navigationCapability,
|
|
240136
|
+
networkLink: networkLinkCapability,
|
|
239374
240137
|
notifier: notifierCapability,
|
|
239375
240138
|
numericSensor: numericSensorCapability,
|
|
239376
240139
|
petFeeder: petFeederCapability,
|
|
@@ -241850,6 +242613,8 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
241850
242613
|
"motion-zones",
|
|
241851
242614
|
"mqtt-broker",
|
|
241852
242615
|
"native-object-detection",
|
|
242616
|
+
"navigation",
|
|
242617
|
+
"network-link",
|
|
241853
242618
|
"notifier",
|
|
241854
242619
|
"numeric-sensor",
|
|
241855
242620
|
"osd",
|
|
@@ -241966,7 +242731,9 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
241966
242731
|
motionZones: "motion-zones",
|
|
241967
242732
|
mqttBroker: "mqtt-broker",
|
|
241968
242733
|
nativeObjectDetection: "native-object-detection",
|
|
242734
|
+
navigation: "navigation",
|
|
241969
242735
|
networkAccess: "network-access",
|
|
242736
|
+
networkLink: "network-link",
|
|
241970
242737
|
networkQuality: "network-quality",
|
|
241971
242738
|
nodes: "nodes",
|
|
241972
242739
|
notificationOutput: "notification-output",
|
|
@@ -242387,10 +243154,18 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
242387
243154
|
key: "nativeObjectDetection",
|
|
242388
243155
|
name: "native-object-detection"
|
|
242389
243156
|
},
|
|
243157
|
+
{
|
|
243158
|
+
key: "navigation",
|
|
243159
|
+
name: "navigation"
|
|
243160
|
+
},
|
|
242390
243161
|
{
|
|
242391
243162
|
key: "networkAccess",
|
|
242392
243163
|
name: "network-access"
|
|
242393
243164
|
},
|
|
243165
|
+
{
|
|
243166
|
+
key: "networkLink",
|
|
243167
|
+
name: "network-link"
|
|
243168
|
+
},
|
|
242394
243169
|
{
|
|
242395
243170
|
key: "networkQuality",
|
|
242396
243171
|
name: "network-quality"
|
|
@@ -242730,7 +243505,9 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
242730
243505
|
motionZonesCapability,
|
|
242731
243506
|
mqttBrokerCapability,
|
|
242732
243507
|
nativeObjectDetectionCapability,
|
|
243508
|
+
navigationCapability,
|
|
242733
243509
|
networkAccessCapability,
|
|
243510
|
+
networkLinkCapability,
|
|
242734
243511
|
networkQualityCapability,
|
|
242735
243512
|
nodesCapability,
|
|
242736
243513
|
notificationOutputCapability,
|
|
@@ -245531,6 +246308,66 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
245531
246308
|
addonId: null,
|
|
245532
246309
|
access: "create"
|
|
245533
246310
|
},
|
|
246311
|
+
"navigation.getFeatures": {
|
|
246312
|
+
capName: "navigation",
|
|
246313
|
+
capScope: "device",
|
|
246314
|
+
addonId: null,
|
|
246315
|
+
access: "view"
|
|
246316
|
+
},
|
|
246317
|
+
"navigation.goToPoint": {
|
|
246318
|
+
capName: "navigation",
|
|
246319
|
+
capScope: "device",
|
|
246320
|
+
addonId: null,
|
|
246321
|
+
access: "create"
|
|
246322
|
+
},
|
|
246323
|
+
"navigation.listActions": {
|
|
246324
|
+
capName: "navigation",
|
|
246325
|
+
capScope: "device",
|
|
246326
|
+
addonId: null,
|
|
246327
|
+
access: "view"
|
|
246328
|
+
},
|
|
246329
|
+
"navigation.move": {
|
|
246330
|
+
capName: "navigation",
|
|
246331
|
+
capScope: "device",
|
|
246332
|
+
addonId: null,
|
|
246333
|
+
access: "create"
|
|
246334
|
+
},
|
|
246335
|
+
"navigation.playSound": {
|
|
246336
|
+
capName: "navigation",
|
|
246337
|
+
capScope: "device",
|
|
246338
|
+
addonId: null,
|
|
246339
|
+
access: "create"
|
|
246340
|
+
},
|
|
246341
|
+
"navigation.runAction": {
|
|
246342
|
+
capName: "navigation",
|
|
246343
|
+
capScope: "device",
|
|
246344
|
+
addonId: null,
|
|
246345
|
+
access: "create"
|
|
246346
|
+
},
|
|
246347
|
+
"navigation.setLightLevel": {
|
|
246348
|
+
capName: "navigation",
|
|
246349
|
+
capScope: "device",
|
|
246350
|
+
addonId: null,
|
|
246351
|
+
access: "create"
|
|
246352
|
+
},
|
|
246353
|
+
"navigation.setLightMode": {
|
|
246354
|
+
capName: "navigation",
|
|
246355
|
+
capScope: "device",
|
|
246356
|
+
addonId: null,
|
|
246357
|
+
access: "create"
|
|
246358
|
+
},
|
|
246359
|
+
"navigation.setLightOn": {
|
|
246360
|
+
capName: "navigation",
|
|
246361
|
+
capScope: "device",
|
|
246362
|
+
addonId: null,
|
|
246363
|
+
access: "create"
|
|
246364
|
+
},
|
|
246365
|
+
"navigation.stop": {
|
|
246366
|
+
capName: "navigation",
|
|
246367
|
+
capScope: "device",
|
|
246368
|
+
addonId: null,
|
|
246369
|
+
access: "create"
|
|
246370
|
+
},
|
|
245534
246371
|
"networkAccess.getEndpoint": {
|
|
245535
246372
|
capName: "network-access",
|
|
245536
246373
|
capScope: "system",
|
|
@@ -248923,6 +249760,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
248923
249760
|
"motion-zones",
|
|
248924
249761
|
"mqtt-broker",
|
|
248925
249762
|
"native-object-detection",
|
|
249763
|
+
"navigation",
|
|
248926
249764
|
"network-access",
|
|
248927
249765
|
"network-quality",
|
|
248928
249766
|
"nodes",
|
|
@@ -249010,6 +249848,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
249010
249848
|
"motion-trigger",
|
|
249011
249849
|
"motion-zones",
|
|
249012
249850
|
"native-object-detection",
|
|
249851
|
+
"navigation",
|
|
249013
249852
|
"notifier",
|
|
249014
249853
|
"osd",
|
|
249015
249854
|
"pet-feeder",
|
|
@@ -249884,6 +250723,56 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
249884
250723
|
form: "single",
|
|
249885
250724
|
optional: false
|
|
249886
250725
|
}],
|
|
250726
|
+
"navigation.getFeatures": [{
|
|
250727
|
+
name: "deviceId",
|
|
250728
|
+
form: "single",
|
|
250729
|
+
optional: false
|
|
250730
|
+
}],
|
|
250731
|
+
"navigation.goToPoint": [{
|
|
250732
|
+
name: "deviceId",
|
|
250733
|
+
form: "single",
|
|
250734
|
+
optional: false
|
|
250735
|
+
}],
|
|
250736
|
+
"navigation.listActions": [{
|
|
250737
|
+
name: "deviceId",
|
|
250738
|
+
form: "single",
|
|
250739
|
+
optional: false
|
|
250740
|
+
}],
|
|
250741
|
+
"navigation.move": [{
|
|
250742
|
+
name: "deviceId",
|
|
250743
|
+
form: "single",
|
|
250744
|
+
optional: false
|
|
250745
|
+
}],
|
|
250746
|
+
"navigation.playSound": [{
|
|
250747
|
+
name: "deviceId",
|
|
250748
|
+
form: "single",
|
|
250749
|
+
optional: false
|
|
250750
|
+
}],
|
|
250751
|
+
"navigation.runAction": [{
|
|
250752
|
+
name: "deviceId",
|
|
250753
|
+
form: "single",
|
|
250754
|
+
optional: false
|
|
250755
|
+
}],
|
|
250756
|
+
"navigation.setLightLevel": [{
|
|
250757
|
+
name: "deviceId",
|
|
250758
|
+
form: "single",
|
|
250759
|
+
optional: false
|
|
250760
|
+
}],
|
|
250761
|
+
"navigation.setLightMode": [{
|
|
250762
|
+
name: "deviceId",
|
|
250763
|
+
form: "single",
|
|
250764
|
+
optional: false
|
|
250765
|
+
}],
|
|
250766
|
+
"navigation.setLightOn": [{
|
|
250767
|
+
name: "deviceId",
|
|
250768
|
+
form: "single",
|
|
250769
|
+
optional: false
|
|
250770
|
+
}],
|
|
250771
|
+
"navigation.stop": [{
|
|
250772
|
+
name: "deviceId",
|
|
250773
|
+
form: "single",
|
|
250774
|
+
optional: false
|
|
250775
|
+
}],
|
|
249887
250776
|
"networkQuality.getDeviceStats": [{
|
|
249888
250777
|
name: "deviceId",
|
|
249889
250778
|
form: "single",
|
|
@@ -251231,6 +252120,14 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
251231
252120
|
durability: "restored",
|
|
251232
252121
|
volatileFields: ["lastFetchedAt"]
|
|
251233
252122
|
},
|
|
252123
|
+
"navigation": {
|
|
252124
|
+
durability: "session",
|
|
252125
|
+
volatileFields: []
|
|
252126
|
+
},
|
|
252127
|
+
"network-link": {
|
|
252128
|
+
durability: "restored",
|
|
252129
|
+
volatileFields: ["lastUpdated"]
|
|
252130
|
+
},
|
|
251234
252131
|
"notifier": {
|
|
251235
252132
|
durability: "session",
|
|
251236
252133
|
volatileFields: []
|
|
@@ -251363,6 +252260,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
251363
252260
|
"lock-control",
|
|
251364
252261
|
"motion-zones",
|
|
251365
252262
|
"native-object-detection",
|
|
252263
|
+
"network-link",
|
|
251366
252264
|
"numeric-sensor",
|
|
251367
252265
|
"power-meter",
|
|
251368
252266
|
"presence",
|
|
@@ -255287,6 +256185,9 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
255287
256185
|
exports.NATIVE_LEASE_SECTION_ID = NATIVE_LEASE_SECTION_ID;
|
|
255288
256186
|
exports.NATIVE_LEASE_TILE_BUDGET_FIELD = NATIVE_LEASE_TILE_BUDGET_FIELD;
|
|
255289
256187
|
exports.NATIVE_LEASE_TILE_BUDGET_KEY = NATIVE_LEASE_TILE_BUDGET_KEY;
|
|
256188
|
+
exports.NAVIGATION_ACTION_CATALOG = NAVIGATION_ACTION_CATALOG;
|
|
256189
|
+
exports.NAVIGATION_LIGHT_LEVEL_MAX = NAVIGATION_LIGHT_LEVEL_MAX;
|
|
256190
|
+
exports.NAVIGATION_LIGHT_LEVEL_MIN = NAVIGATION_LIGHT_LEVEL_MIN;
|
|
255290
256191
|
exports.NC_ALARM_SYSTEM_EVENT_KINDS = NC_ALARM_SYSTEM_EVENT_KINDS;
|
|
255291
256192
|
exports.NC_AUDIO_CONFIRM_HITS_DEFAULT = NC_AUDIO_CONFIRM_HITS_DEFAULT;
|
|
255292
256193
|
exports.NC_AUDIO_CONFIRM_HITS_MAX = NC_AUDIO_CONFIRM_HITS_MAX;
|
|
@@ -255324,6 +256225,8 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
255324
256225
|
exports.NC_SYSTEM_DELIVERY = NC_SYSTEM_DELIVERY;
|
|
255325
256226
|
exports.NC_SYSTEM_EVENT_FILTER_KEYS = NC_SYSTEM_EVENT_FILTER_KEYS;
|
|
255326
256227
|
exports.NC_TAXONOMY = NC_TAXONOMY;
|
|
256228
|
+
exports.NETWORK_LINK_TYPES = NETWORK_LINK_TYPES;
|
|
256229
|
+
exports.NETWORK_LINK_UNKNOWN = NETWORK_LINK_UNKNOWN;
|
|
255327
256230
|
exports.NativeCropBboxSchema = NativeCropBboxSchema;
|
|
255328
256231
|
exports.NativeCropRefSchema = NativeCropRefSchema;
|
|
255329
256232
|
exports.NativeCropResultSchema = NativeCropResultSchema;
|
|
@@ -255333,6 +256236,16 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
255333
256236
|
exports.NativeObjectClassEnum = NativeObjectClassEnum;
|
|
255334
256237
|
exports.NativeObjectDetectionRuntimeStateSchema = NativeObjectDetectionRuntimeStateSchema;
|
|
255335
256238
|
exports.NativeObjectDetectionStatusSchema = NativeObjectDetectionStatusSchema;
|
|
256239
|
+
exports.NavigationActionEntrySchema = NavigationActionEntrySchema;
|
|
256240
|
+
exports.NavigationActionIdSchema = NavigationActionIdSchema;
|
|
256241
|
+
exports.NavigationEntryKindSchema = NavigationEntryKindSchema;
|
|
256242
|
+
exports.NavigationFeaturesSchema = NavigationFeaturesSchema;
|
|
256243
|
+
exports.NavigationLightModeSchema = NavigationLightModeSchema;
|
|
256244
|
+
exports.NavigationModeSchema = NavigationModeSchema;
|
|
256245
|
+
exports.NavigationMoveCommandSchema = NavigationMoveCommandSchema;
|
|
256246
|
+
exports.NavigationPointSchema = NavigationPointSchema;
|
|
256247
|
+
exports.NavigationRuntimeStateSchema = NavigationRuntimeStateSchema;
|
|
256248
|
+
exports.NavigationStatusSchema = NavigationStatusSchema;
|
|
255336
256249
|
exports.NcAlarmConfigSchema = NcAlarmConfigSchema;
|
|
255337
256250
|
exports.NcAlarmModeCoverageSchema = NcAlarmModeCoverageSchema;
|
|
255338
256251
|
exports.NcAlarmSettingsPatchSchema = NcAlarmSettingsPatchSchema;
|
|
@@ -255382,6 +256295,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
255382
256295
|
exports.NetworkAccessStatusSchema = NetworkAccessStatusSchema;
|
|
255383
256296
|
exports.NetworkAddressSchema = NetworkAddressSchema;
|
|
255384
256297
|
exports.NetworkEndpointSchema = NetworkEndpointSchema;
|
|
256298
|
+
exports.NetworkLinkStatusSchema = NetworkLinkStatusSchema;
|
|
255385
256299
|
exports.NotificationActionIconSchema = NotificationActionIconSchema;
|
|
255386
256300
|
exports.NotificationActionSchema = NotificationActionSchema;
|
|
255387
256301
|
exports.NotificationFormatSchema = NotificationFormatSchema;
|
|
@@ -256040,7 +256954,9 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
256040
256954
|
exports.motionZonesCapability = motionZonesCapability;
|
|
256041
256955
|
exports.mqttBrokerCapability = mqttBrokerCapability;
|
|
256042
256956
|
exports.nativeObjectDetectionCapability = nativeObjectDetectionCapability;
|
|
256957
|
+
exports.navigationCapability = navigationCapability;
|
|
256043
256958
|
exports.networkAccessCapability = networkAccessCapability;
|
|
256959
|
+
exports.networkLinkCapability = networkLinkCapability;
|
|
256044
256960
|
exports.networkQualityCapability = networkQualityCapability;
|
|
256045
256961
|
exports.nodePin = require_sleep.nodePin;
|
|
256046
256962
|
exports.nodesCapability = nodesCapability;
|
|
@@ -256154,6 +257070,8 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
256154
257070
|
exports.serverManagementCapability = serverManagementCapability;
|
|
256155
257071
|
exports.setByPath = setByPath;
|
|
256156
257072
|
exports.settingsStoreCapability = settingsStoreCapability;
|
|
257073
|
+
exports.signalPercentFromBars = signalPercentFromBars;
|
|
257074
|
+
exports.signalPercentFromRssi = signalPercentFromRssi;
|
|
256157
257075
|
exports.sleep = require_sleep.sleep;
|
|
256158
257076
|
exports.sleepCancellable = require_sleep.sleepCancellable;
|
|
256159
257077
|
exports.sliceActiveValue = sliceActiveValue;
|