@camstack/types 1.2.434 → 1.2.435
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/CHANGELOG.md +6 -0
- package/dist/addon.js +1 -1
- package/dist/addon.mjs +1 -1
- package/dist/capabilities/air-quality-sensor.cap.d.ts +8 -8
- package/dist/capabilities/ambient-light-sensor.cap.d.ts +4 -4
- package/dist/capabilities/battery.cap.d.ts +14 -14
- package/dist/capabilities/brightness.cap.d.ts +7 -7
- package/dist/capabilities/capability-definition.d.ts +3 -3
- package/dist/capabilities/color.cap.d.ts +6 -6
- package/dist/capabilities/device-history.cap.d.ts +2 -2
- package/dist/capabilities/dishwasher.cap.d.ts +11 -11
- package/dist/capabilities/fan-control.cap.d.ts +6 -6
- package/dist/capabilities/humidity-sensor.cap.d.ts +4 -4
- package/dist/capabilities/lawn-mower-control.cap.d.ts +3 -3
- package/dist/capabilities/media-player.cap.d.ts +8 -8
- package/dist/capabilities/meter.cap.d.ts +1 -1
- package/dist/capabilities/network-link.cap.d.ts +13 -13
- package/dist/capabilities/power-meter.cap.d.ts +22 -22
- package/dist/capabilities/presence.cap.d.ts +1 -15
- package/dist/capabilities/pressure-sensor.cap.d.ts +4 -4
- package/dist/capabilities/temperature-sensor.cap.d.ts +4 -4
- package/dist/capabilities/vacuum-control.cap.d.ts +3 -3
- package/dist/client.js +1 -1
- package/dist/client.mjs +1 -1
- package/dist/composition/composition-report.d.ts +1 -1
- package/dist/composition/examples.d.ts +1 -1
- package/dist/composition/helpers/appliance.d.ts +1 -1
- package/dist/{composition-CpAc0YfQ.js → composition-BZf_gqG7.js} +2 -2
- package/dist/{composition-Bb8iwHEJ.mjs → composition-CZImLpOI.mjs} +2 -2
- package/dist/device/base-device.d.ts +2 -2
- package/dist/device/device-runtime-state.d.ts +1 -1
- package/dist/device/device-state-handle.d.ts +1 -1
- package/dist/device/system-mirror.d.ts +1 -1
- package/dist/generated/addon-cap-facts.d.ts +1 -1
- package/dist/generated/customize-catalog.d.ts +15 -15
- package/dist/generated/history-catalog.d.ts +1 -1
- package/dist/index.js +182 -203
- package/dist/index.mjs +182 -203
- package/dist/interfaces/event-bus.d.ts +3 -3
- package/dist/node.js +1 -1
- package/dist/node.mjs +1 -1
- package/dist/{sleep-DFaVPxfm.mjs → sleep-Crlmu_tO.mjs} +26 -30
- package/dist/{sleep-CO61AfwW.js → sleep-DHitF_e4.js} +26 -30
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { $ as expandCapMethods, $n as REVALIDATE_AFTER_MS, $r as isSecretMarker, $t as RecordFieldPathSchema, A as HF_REPO, An as RecordUniqueViolationError, Ar as buildSecretRef, At as StreamSourceEntrySchema, B as withoutCallerStamp, Bn as RECORD_CLASSES, Br as isEvent, Bt as QUANTITY_BASE, Cn as InvalidRecordError, Cr as KeychainWriteRefusedError, Ct as CamStreamResolutionSchema, D as createSliceHandle, Dn as RecordNotFoundError, Dr as transformSecretWrite, Dt as ProfileRtspEntrySchema, E as createMirrorSource, En as RECORDS_ERROR_CODES, Er as resolveSecretMarkers, Et as FrameHandleSchema, F as RawStateResultSchema, Fn as UnknownRecordKindError, Fr as parseSecretRef, Ft as makeSourceBrokerId, G as adminUiCapability, Gn as RECORD_MAX_DATA_BYTES, Gr as dehydrateConfigField, Gt as isReadingQuantity, H as defineCustomActions, Hn as RECORD_DEFAULT_MAX_DATA_BYTES, Hr as WELL_KNOWN_TAB_MAP, Ht as baseUnitOf, I as deviceOpsCapability, In as asRecordsError, Ir as normalizeNodeId, It as parseProfileBrokerId, J as DEVICE_STATUS_METHOD, Jn as RECORD_QUERY_MAX, Jr as resolveHydratedFieldValue, Jt as defineEntryKind, K as DEFAULT_RUNTIME_STATE_DURABILITY, Kn as RECORD_MAX_INDEXES, Kr as dehydrateSchema, Kt as readingMeta, L as viewerUiCapability, Ln as recordsErrorFromMessage, Lr as createDurableState, Lt as selectAssignedProfileSlots, Mn as RevConflictError, Mr as globalSecretScope, Mt as SubscribeAudioChunksInputSchema, N as CAP_NAMES, Nn as TransactRefusedError, Nr as isSecretRef, Nt as SubscribeAudioChunksResultSchema, O as DEFAULT_TOKEN_EXPIRY, On as RecordSecretUnavailableError, Or as SECRET_REF_SCHEME, Ot as ProfileSlotSchema, Pn as UnindexedFilterError, Pr as normalizeSecretOwner, Pt as makeProfileBrokerId, Q as event, Qn as resolveSecretViewsIn, Qr as isSecretFieldView, Qt as EntryDescriptorSchema, R as DEVICE_CHILDREN_BATCH_MAX, Rn as RECORD_BATCH_MAX, Rr as createEvent, Rt as DEFAULT_DISPLAY_PREFERENCE, S as invokeTrpcLeaf, Sn as ForeignSecretMarkerError, Sr as secretTreeFromSchema, St as CamStreamKindSchema, T as createLazyTrpcSource, Tn as PlaintextSecretError, Tr as isSecretRefOwnedBy, Tt as DecodedAudioChunkSchema, U as describeCustomActions, Un as RECORD_DELETE_BATCH, Ur as collectHydratedFieldEntries, Ut as displayUnitFor, V as customAction, Vn as RECORD_DATABASES, Vr as WELL_KNOWN_TABS, Vt as ReadingQuantitySchema, W as deviceCustomAction, Wn as RECORD_ID_MAX_LENGTH, Wr as collectHydratedFieldValues, Wt as historyUnitFor, X as HISTORY_UNIT_LABELS, Xn as RECORD_SETTINGS_MAX_ROWS, Xr as classifySecretWrite, Xt as createRecordsAccess, Y as HISTORY_DEFAULT_MIN_INTERVAL_MS, Yn as RECORD_SECRET_COLLECTION_PREFIX, Yr as SECRET_CLEAR, Yt as entryBody, Z as PROVIDER_PIN_FIELD, Zn as RECORD_SWEEP_INTERVAL_MS, Zr as isSecretClear, Zt as assertTransactScope, _ as readErrorI18n, _n as collectZodSecretPaths, _r as classifyStoreError, _t as AudioStreamPickSchema, a as asJsonArray, ai as collectSecretConfigKeys, an as assertValidDeclaration, ar as registerKnownSecret, at as systemMethod, b as isDeviceScopedCap, bn as DeclarationRefusedError, br as parseSecretStatePath, bt as CAM_PROFILE_ORDER, c as asString, ci as omitTransientConfig, cn as REMOVE_LEAF, cr as PEER_BYTES_CHUNK_BYTES, ct as readNodePin, d as parseJsonUnknown, di as audioChunkBytesPerSample, dn as parseSecretPath, dr as PEER_BYTES_TICKET_TTL_MS, dt as ReadinessRegistry, ei as isSecretMarkerLike, en as RecordIndexSchema, er as createSecretsAccess, et as historyItemFieldPath, f as hfModelUrl, fi as expandAudioChunkToF32le, fn as recordArrayItemPath, fr as PeerBytesTicketSchema, ft as ReadinessTimeoutError, g as ErrorI18nPayloadSchema, gn as SECRET_META, gr as BaseAddon, gt as AudioChunkFormatSchema, h as ErrorCodeSchema, hn as secretArrayPrefixes, hr as DisposerChain, ht as scopeKey, i as asBoolean, ii as collectKeychainStoredKeys, in as StoredRecordKindDeclarationSchema, ir as knownSecretCount, it as resolveCapMount, j as RUNTIME_DEFAULTS, jn as RecordsError, jr as formatSecretScope, jt as StreamSourceSchema, k as HF_BASE_URL, kn as RecordTooLargeError, kr as arrayItemFieldPath, kt as ProfileSlotStatusSchema, l as parseJsonArray, li as schemaDeclaresAnyField, ln as collectSecretLeaves, lr as PEER_BYTES_MAX_OUTSTANDING, lt as toNodeId, m as CamstackError, mn as recordSecretRef, mr as SHARE_VIEW_KINDS, mt as readinessKey, n as sleepCancellable, ni as toSecretFieldView, nn as RecordKindNameSchema, nr as clearKnownSecrets, nt as method, o as asJsonObject, oi as isKeychainStoredField, on as declarationsOf, or as scrubKnownSecrets, ot as CAP_NODE_PIN_CONTEXT_KEY, p as BOOT_RECOVERY_BACKOFF_MS, pi as isAudioChunkFormat, pn as recordSecretCollection, pr as DATAPLANE_SECRET_HEADER, pt as emitDownForOwnedCaps, q as DEVICE_SETTINGS_CONTRIBUTION_METHODS, qn as RECORD_MAX_INDEX_FIELDS, qr as hydrateSchema, qt as makeInMemoryRecords, r as maskUrlCredentials, ri as REDACTED_SECRET, rn as RecordRetentionSchema, rr as forgetKnownSecret, rt as optionalMethod, s as asNumber, si as isSecretConfigField, sn as defineRecordKinds, sr as shortSecretRefHash, st as nodePin, t as sleep, ti as makeSecretMarker, tn as RecordKindDeclarationSchema, tr as MIN_SCRUBBED_LENGTH, tt as isDeviceConfigCap, u as parseJsonObject, ui as AUDIO_CHUNK_FORMATS, un as mapSecretLeaves, ur as PEER_BYTES_STALL_MS, ut as MODEL_FORMATS, v as userError, vn as isZodSecret, vr as normalizeAddonInitResult, vt as BrokerStatsSchema, w as createEventBusSliceSource, wn as NoCallerError, wr as collectSecretMarkerRefs, wt as CameraStreamSchema, x as createDeviceProxy, xn as FilterRequiredError, xr as secretTreeFromPaths, xt as CamProfileSchema, y as DEVICE_SCOPED_CAPS, yn as BatchTooLargeError, yr as mergeSecretStatePaths, yt as BrokerStatusSchema, z as CALLER_STAMPED_CAPABILITIES, zn as RECORD_BATCH_MAX_BYTES, zr as emitReadiness, zt as DISPLAY_PREFERENCES } from "./sleep-
|
|
1
|
+
import { $ as expandCapMethods, $n as REVALIDATE_AFTER_MS, $r as isSecretMarker, $t as RecordFieldPathSchema, A as HF_REPO, An as RecordUniqueViolationError, Ar as buildSecretRef, At as StreamSourceEntrySchema, B as withoutCallerStamp, Bn as RECORD_CLASSES, Br as isEvent, Bt as QUANTITY_BASE, Cn as InvalidRecordError, Cr as KeychainWriteRefusedError, Ct as CamStreamResolutionSchema, D as createSliceHandle, Dn as RecordNotFoundError, Dr as transformSecretWrite, Dt as ProfileRtspEntrySchema, E as createMirrorSource, En as RECORDS_ERROR_CODES, Er as resolveSecretMarkers, Et as FrameHandleSchema, F as RawStateResultSchema, Fn as UnknownRecordKindError, Fr as parseSecretRef, Ft as makeSourceBrokerId, G as adminUiCapability, Gn as RECORD_MAX_DATA_BYTES, Gr as dehydrateConfigField, Gt as isReadingQuantity, H as defineCustomActions, Hn as RECORD_DEFAULT_MAX_DATA_BYTES, Hr as WELL_KNOWN_TAB_MAP, Ht as baseUnitOf, I as deviceOpsCapability, In as asRecordsError, Ir as normalizeNodeId, It as parseProfileBrokerId, J as DEVICE_STATUS_METHOD, Jn as RECORD_QUERY_MAX, Jr as resolveHydratedFieldValue, Jt as defineEntryKind, K as DEFAULT_RUNTIME_STATE_DURABILITY, Kn as RECORD_MAX_INDEXES, Kr as dehydrateSchema, Kt as readingMeta, L as viewerUiCapability, Ln as recordsErrorFromMessage, Lr as createDurableState, Lt as selectAssignedProfileSlots, Mn as RevConflictError, Mr as globalSecretScope, Mt as SubscribeAudioChunksInputSchema, N as CAP_NAMES, Nn as TransactRefusedError, Nr as isSecretRef, Nt as SubscribeAudioChunksResultSchema, O as DEFAULT_TOKEN_EXPIRY, On as RecordSecretUnavailableError, Or as SECRET_REF_SCHEME, Ot as ProfileSlotSchema, Pn as UnindexedFilterError, Pr as normalizeSecretOwner, Pt as makeProfileBrokerId, Q as event, Qn as resolveSecretViewsIn, Qr as isSecretFieldView, Qt as EntryDescriptorSchema, R as DEVICE_CHILDREN_BATCH_MAX, Rn as RECORD_BATCH_MAX, Rr as createEvent, Rt as DEFAULT_DISPLAY_PREFERENCE, S as invokeTrpcLeaf, Sn as ForeignSecretMarkerError, Sr as secretTreeFromSchema, St as CamStreamKindSchema, T as createLazyTrpcSource, Tn as PlaintextSecretError, Tr as isSecretRefOwnedBy, Tt as DecodedAudioChunkSchema, U as describeCustomActions, Un as RECORD_DELETE_BATCH, Ur as collectHydratedFieldEntries, Ut as displayUnitFor, V as customAction, Vn as RECORD_DATABASES, Vr as WELL_KNOWN_TABS, Vt as ReadingQuantitySchema, W as deviceCustomAction, Wn as RECORD_ID_MAX_LENGTH, Wr as collectHydratedFieldValues, Wt as historyUnitFor, X as HISTORY_UNIT_LABELS, Xn as RECORD_SETTINGS_MAX_ROWS, Xr as classifySecretWrite, Xt as createRecordsAccess, Y as HISTORY_DEFAULT_MIN_INTERVAL_MS, Yn as RECORD_SECRET_COLLECTION_PREFIX, Yr as SECRET_CLEAR, Yt as entryBody, Z as PROVIDER_PIN_FIELD, Zn as RECORD_SWEEP_INTERVAL_MS, Zr as isSecretClear, Zt as assertTransactScope, _ as readErrorI18n, _n as collectZodSecretPaths, _r as classifyStoreError, _t as AudioStreamPickSchema, a as asJsonArray, ai as collectSecretConfigKeys, an as assertValidDeclaration, ar as registerKnownSecret, at as systemMethod, b as isDeviceScopedCap, bn as DeclarationRefusedError, br as parseSecretStatePath, bt as CAM_PROFILE_ORDER, c as asString, ci as omitTransientConfig, cn as REMOVE_LEAF, cr as PEER_BYTES_CHUNK_BYTES, ct as readNodePin, d as parseJsonUnknown, di as audioChunkBytesPerSample, dn as parseSecretPath, dr as PEER_BYTES_TICKET_TTL_MS, dt as ReadinessRegistry, ei as isSecretMarkerLike, en as RecordIndexSchema, er as createSecretsAccess, et as historyItemFieldPath, f as hfModelUrl, fi as expandAudioChunkToF32le, fn as recordArrayItemPath, fr as PeerBytesTicketSchema, ft as ReadinessTimeoutError, g as ErrorI18nPayloadSchema, gn as SECRET_META, gr as BaseAddon, gt as AudioChunkFormatSchema, h as ErrorCodeSchema, hn as secretArrayPrefixes, hr as DisposerChain, ht as scopeKey, i as asBoolean, ii as collectKeychainStoredKeys, in as StoredRecordKindDeclarationSchema, ir as knownSecretCount, it as resolveCapMount, j as RUNTIME_DEFAULTS, jn as RecordsError, jr as formatSecretScope, jt as StreamSourceSchema, k as HF_BASE_URL, kn as RecordTooLargeError, kr as arrayItemFieldPath, kt as ProfileSlotStatusSchema, l as parseJsonArray, li as schemaDeclaresAnyField, ln as collectSecretLeaves, lr as PEER_BYTES_MAX_OUTSTANDING, lt as toNodeId, m as CamstackError, mn as recordSecretRef, mr as SHARE_VIEW_KINDS, mt as readinessKey, n as sleepCancellable, ni as toSecretFieldView, nn as RecordKindNameSchema, nr as clearKnownSecrets, nt as method, o as asJsonObject, oi as isKeychainStoredField, on as declarationsOf, or as scrubKnownSecrets, ot as CAP_NODE_PIN_CONTEXT_KEY, p as BOOT_RECOVERY_BACKOFF_MS, pi as isAudioChunkFormat, pn as recordSecretCollection, pr as DATAPLANE_SECRET_HEADER, pt as emitDownForOwnedCaps, q as DEVICE_SETTINGS_CONTRIBUTION_METHODS, qn as RECORD_MAX_INDEX_FIELDS, qr as hydrateSchema, qt as makeInMemoryRecords, r as maskUrlCredentials, ri as REDACTED_SECRET, rn as RecordRetentionSchema, rr as forgetKnownSecret, rt as optionalMethod, s as asNumber, si as isSecretConfigField, sn as defineRecordKinds, sr as shortSecretRefHash, st as nodePin, t as sleep, ti as makeSecretMarker, tn as RecordKindDeclarationSchema, tr as MIN_SCRUBBED_LENGTH, tt as isDeviceConfigCap, u as parseJsonObject, ui as AUDIO_CHUNK_FORMATS, un as mapSecretLeaves, ur as PEER_BYTES_STALL_MS, ut as MODEL_FORMATS, v as userError, vn as isZodSecret, vr as normalizeAddonInitResult, vt as BrokerStatsSchema, w as createEventBusSliceSource, wn as NoCallerError, wr as collectSecretMarkerRefs, wt as CameraStreamSchema, x as createDeviceProxy, xn as FilterRequiredError, xr as secretTreeFromPaths, xt as CamProfileSchema, y as DEVICE_SCOPED_CAPS, yn as BatchTooLargeError, yr as mergeSecretStatePaths, yt as BrokerStatusSchema, z as CALLER_STAMPED_CAPABILITIES, zn as RECORD_BATCH_MAX_BYTES, zr as emitReadiness, zt as DISPLAY_PREFERENCES } from "./sleep-Crlmu_tO.mjs";
|
|
2
2
|
import { i as publicEventCategories, n as OWNER_ONLY_EVENT_CATEGORIES, r as isOwnerOnlyEventCategory, t as EventCategory } from "./event-category-DmZDPDf_.mjs";
|
|
3
|
-
import { $ as GroupTemplateIdSchema, $t as validateExpressionSource, A as composedDeviceStableId, An as sliceActiveValue, At as planResetTier, B as AGGREGATE_REDUCERS, Bn as AUDIO_PRESETS, Bt as wattMillisecondsToKwh, C as CompositionSeriesSourceSchema, Cn as SOURCE_CAPS, Ct as RollingWindowSchema, D as MAX_COMPOSITION_FIELDS_PER_FEATURE, Dn as evaluateSensorEdge, Dt as nextLocalMidnight, E as MAX_COMPOSITION_FEATURES, En as SOURCE_DEVICE_TYPES, Et as maxDurationMs, F as compositionSourceKey, Ft as STATISTIC_STATS, G as ArithmeticHelperSpecSchema, Gn as buildVideoArgs, Gt as isApplianceKind, H as ActiveCriterionSchema, Hn as buildAudioArgs, Ht as APPLIANCE_KINDS, I as featureFieldEntries, It as evaluateDerivative, J as DerivativeHelperSpecSchema, Jn as logBannerArgs, Jt as cloneStatefulExpressionMemory, K as BINARY_AGGREGATES, Kn as invocationFromEncodeProfile, Kt as sourcePickForAppliance, L as featureSources, Lt as evaluateStatistic, M as compositionItemFieldPath, Mn as FFMPEG_PATH_ENV, Mt as rollingDurationMs, N as compositionReadKey, Nt as statisticCadenceMs, O as MAX_COMPOSITION_ITEMS, On as evaluateSensorLevelEdge, Ot as openReset, P as compositionSliceKey, Pt as SERIES_KINDS, Q as GroupHelperSpecSchema, Qt as toExpressionValue, R as fieldReads, Rn as canonicalHash, Rt as integrateReading, S as CompositionSchema, Sn as DEFAULT_FIRST_SIGHTING_FRESHNESS_MS, St as ROLLING_SPANS, T as MAX_COMPOSITION_CODE_LENGTH, Tn as SOURCE_CAP_CHANGED_AT_FIELD, Tt as integralCadenceMs, U as AggregateReducerSchema, Un as buildFfmpegArgs, Ut as APPLIANCE_TEMPLATE_ID, V as ARITHMETIC_OPS, Vn as audioPlanFromEncodeProfile, Vt as APPLIANCE_DEFAULTS, W as ApplianceHelperSpecSchema, Wn as buildInputArgs, Wt as applianceDeviceType, X as ExpressionHelperSpecSchema, Xn as resolveStreamMaps, Xt as evaluateExpressionSource, Y as EXPRESSION_OUTPUTS, Yn as pickVideoEncoder, Yt as createStatefulExpressionMemory, Z as GROUP_TEMPLATE_IDS, Zt as evaluateStatefulExpressionCall, _ as CompositionFromSourceSchema, _n as evaluateCount, _t as HISTORY_TIERS, a as CUSTOMIZATION_BLOCK_NAME_PREFIX, an as tokenize, at as NUMERIC_AGGREGATES, b as CompositionNewTargetSchema, bn as ExpressionEvalError, bt as MIN_CUSTOM_MINUTES, c as CompositionCodeSourceSchema, cn as MAX_EXPRESSION_AST_NODES, ct as helperMembers, d as CompositionExpressionSourceSchema, dn as MAX_EXPRESSION_EVAL_STEPS, dt as CALENDAR_PERIODS, en as createExpressionScope, et as HelperMemberSchema, f as CompositionFeatureSchema, fn as MAX_EXPRESSION_SOURCE_LENGTH, ft as CalendarWindowSchema, g as CompositionForwardCommandSchema, gn as disarmRoseMemory, gt as HISTORY_SLOW_MS, h as CompositionFieldsFeatureSchema, hn as EXPRESSION_BUILTIN_NAMES, ht as HISTORY_FAST_MS, i as COMPOSITION_ITEM_KEY_RE, in as parseExpression, it as MAX_HELPER_MEMBERS, j as compositionFeatureEnabled, jn as sliceChangedAt, jt as planStatisticTier, k as composedDeviceRef, kn as isSourceCap, kt as openStatistic, l as CompositionCommandTargetSchema, ln as MAX_EXPRESSION_BINDINGS, lt as isHistoryHelper, m as CompositionFieldSourceSchema, mn as EXPRESSION_BUILTINS, mt as DEFAULT_HISTORY_RETENTION, n as COMPOSER_ADDON_ID, nn as compileExpression, nt as INTEGRAL_OUTPUTS, o as CompositionAggregateSourceSchema, on as EXPRESSION_COMPILE_CACHE_CAPACITY, ot as StatisticHelperSpecSchema, p as CompositionFieldReadSchema, pn as RESERVED_BINDING_NAMES, pt as DAY_MS, q as DERIVATIVE_UNITS, qn as isSoftwareDecode, qt as EXPRESSION_INJECTED_NOW, r as COMPOSITION_ITEM_ARRAY_PATH, rn as compileExpressionSafe, rt as IntegralHelperSpecSchema, s as CompositionBindingSchema, sn as EXPRESSION_IDENTIFIER_RE, st as ThresholdHelperSpecSchema, t as COMPOSED_DEVICE_STABLE_ID_PREFIX, tn as evaluateAst, tt as HelperSpecSchema, u as CompositionExistingTargetSchema, un as MAX_EXPRESSION_CALL_ARGS, ut as CompositionSourceRefSchema, v as CompositionItemEntrySchema, vn as evaluateRose, vt as HOUR_MS, w as CompositionTargetSchema, wn as SOURCE_CAP_ACTIVE_FIELD, wt as StatisticWindowSchema, x as CompositionPassthroughFeatureSchema, xn as ExpressionParseError, xt as RESET_PERIODS, y as CompositionLiteralBindingSchema, yn as isStatefulBuiltin, yt as MINUTE_MS, z as ACTIVE_CRITERIA, zn as Fmp4BoxSplitter, zt as KWH_PER_WATT_MS } from "./composition-
|
|
3
|
+
import { $ as GroupTemplateIdSchema, $t as validateExpressionSource, A as composedDeviceStableId, An as sliceActiveValue, At as planResetTier, B as AGGREGATE_REDUCERS, Bn as AUDIO_PRESETS, Bt as wattMillisecondsToKwh, C as CompositionSeriesSourceSchema, Cn as SOURCE_CAPS, Ct as RollingWindowSchema, D as MAX_COMPOSITION_FIELDS_PER_FEATURE, Dn as evaluateSensorEdge, Dt as nextLocalMidnight, E as MAX_COMPOSITION_FEATURES, En as SOURCE_DEVICE_TYPES, Et as maxDurationMs, F as compositionSourceKey, Ft as STATISTIC_STATS, G as ArithmeticHelperSpecSchema, Gn as buildVideoArgs, Gt as isApplianceKind, H as ActiveCriterionSchema, Hn as buildAudioArgs, Ht as APPLIANCE_KINDS, I as featureFieldEntries, It as evaluateDerivative, J as DerivativeHelperSpecSchema, Jn as logBannerArgs, Jt as cloneStatefulExpressionMemory, K as BINARY_AGGREGATES, Kn as invocationFromEncodeProfile, Kt as sourcePickForAppliance, L as featureSources, Lt as evaluateStatistic, M as compositionItemFieldPath, Mn as FFMPEG_PATH_ENV, Mt as rollingDurationMs, N as compositionReadKey, Nt as statisticCadenceMs, O as MAX_COMPOSITION_ITEMS, On as evaluateSensorLevelEdge, Ot as openReset, P as compositionSliceKey, Pt as SERIES_KINDS, Q as GroupHelperSpecSchema, Qt as toExpressionValue, R as fieldReads, Rn as canonicalHash, Rt as integrateReading, S as CompositionSchema, Sn as DEFAULT_FIRST_SIGHTING_FRESHNESS_MS, St as ROLLING_SPANS, T as MAX_COMPOSITION_CODE_LENGTH, Tn as SOURCE_CAP_CHANGED_AT_FIELD, Tt as integralCadenceMs, U as AggregateReducerSchema, Un as buildFfmpegArgs, Ut as APPLIANCE_TEMPLATE_ID, V as ARITHMETIC_OPS, Vn as audioPlanFromEncodeProfile, Vt as APPLIANCE_DEFAULTS, W as ApplianceHelperSpecSchema, Wn as buildInputArgs, Wt as applianceDeviceType, X as ExpressionHelperSpecSchema, Xn as resolveStreamMaps, Xt as evaluateExpressionSource, Y as EXPRESSION_OUTPUTS, Yn as pickVideoEncoder, Yt as createStatefulExpressionMemory, Z as GROUP_TEMPLATE_IDS, Zt as evaluateStatefulExpressionCall, _ as CompositionFromSourceSchema, _n as evaluateCount, _t as HISTORY_TIERS, a as CUSTOMIZATION_BLOCK_NAME_PREFIX, an as tokenize, at as NUMERIC_AGGREGATES, b as CompositionNewTargetSchema, bn as ExpressionEvalError, bt as MIN_CUSTOM_MINUTES, c as CompositionCodeSourceSchema, cn as MAX_EXPRESSION_AST_NODES, ct as helperMembers, d as CompositionExpressionSourceSchema, dn as MAX_EXPRESSION_EVAL_STEPS, dt as CALENDAR_PERIODS, en as createExpressionScope, et as HelperMemberSchema, f as CompositionFeatureSchema, fn as MAX_EXPRESSION_SOURCE_LENGTH, ft as CalendarWindowSchema, g as CompositionForwardCommandSchema, gn as disarmRoseMemory, gt as HISTORY_SLOW_MS, h as CompositionFieldsFeatureSchema, hn as EXPRESSION_BUILTIN_NAMES, ht as HISTORY_FAST_MS, i as COMPOSITION_ITEM_KEY_RE, in as parseExpression, it as MAX_HELPER_MEMBERS, j as compositionFeatureEnabled, jn as sliceChangedAt, jt as planStatisticTier, k as composedDeviceRef, kn as isSourceCap, kt as openStatistic, l as CompositionCommandTargetSchema, ln as MAX_EXPRESSION_BINDINGS, lt as isHistoryHelper, m as CompositionFieldSourceSchema, mn as EXPRESSION_BUILTINS, mt as DEFAULT_HISTORY_RETENTION, n as COMPOSER_ADDON_ID, nn as compileExpression, nt as INTEGRAL_OUTPUTS, o as CompositionAggregateSourceSchema, on as EXPRESSION_COMPILE_CACHE_CAPACITY, ot as StatisticHelperSpecSchema, p as CompositionFieldReadSchema, pn as RESERVED_BINDING_NAMES, pt as DAY_MS, q as DERIVATIVE_UNITS, qn as isSoftwareDecode, qt as EXPRESSION_INJECTED_NOW, r as COMPOSITION_ITEM_ARRAY_PATH, rn as compileExpressionSafe, rt as IntegralHelperSpecSchema, s as CompositionBindingSchema, sn as EXPRESSION_IDENTIFIER_RE, st as ThresholdHelperSpecSchema, t as COMPOSED_DEVICE_STABLE_ID_PREFIX, tn as evaluateAst, tt as HelperSpecSchema, u as CompositionExistingTargetSchema, un as MAX_EXPRESSION_CALL_ARGS, ut as CompositionSourceRefSchema, v as CompositionItemEntrySchema, vn as evaluateRose, vt as HOUR_MS, w as CompositionTargetSchema, wn as SOURCE_CAP_ACTIVE_FIELD, wt as StatisticWindowSchema, x as CompositionPassthroughFeatureSchema, xn as ExpressionParseError, xt as RESET_PERIODS, y as CompositionLiteralBindingSchema, yn as isStatefulBuiltin, yt as MINUTE_MS, z as ACTIVE_CRITERIA, zn as Fmp4BoxSplitter, zt as KWH_PER_WATT_MS } from "./composition-CZImLpOI.mjs";
|
|
4
4
|
import { NODE_COLOR_IDS, NodeColorIdSchema, assignNodeColorId } from "./node-color.mjs";
|
|
5
5
|
import { a as DeviceType, i as DeviceRole, n as ChargingStatus, r as DeviceFeature, t as errMsg } from "./err-msg-DIorGYeC.mjs";
|
|
6
6
|
import { EventSourceType } from "./enums.mjs";
|
|
@@ -14904,7 +14904,7 @@ var CompositionProblemCodeSchema = z.enum([
|
|
|
14904
14904
|
"member-constraint",
|
|
14905
14905
|
"retention"
|
|
14906
14906
|
]);
|
|
14907
|
-
/** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.
|
|
14907
|
+
/** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.temperature`. */
|
|
14908
14908
|
var CompositionProblemSchema = z.object({
|
|
14909
14909
|
code: CompositionProblemCodeSchema,
|
|
14910
14910
|
path: z.string(),
|
|
@@ -15610,7 +15610,7 @@ var GROUP_TEMPLATES = [
|
|
|
15610
15610
|
summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
|
|
15611
15611
|
role: DeviceRole.TemperatureSensor,
|
|
15612
15612
|
outputCap: "temperature-sensor",
|
|
15613
|
-
outputField: "
|
|
15613
|
+
outputField: "temperature",
|
|
15614
15614
|
quantity: "temperature",
|
|
15615
15615
|
defaultAggregate: "mean",
|
|
15616
15616
|
empty: "null",
|
|
@@ -15621,7 +15621,7 @@ var GROUP_TEMPLATES = [
|
|
|
15621
15621
|
summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
|
|
15622
15622
|
role: DeviceRole.HumiditySensor,
|
|
15623
15623
|
outputCap: "humidity-sensor",
|
|
15624
|
-
outputField: "
|
|
15624
|
+
outputField: "humidity",
|
|
15625
15625
|
quantity: "humidity",
|
|
15626
15626
|
defaultAggregate: "mean",
|
|
15627
15627
|
empty: "null",
|
|
@@ -15632,7 +15632,7 @@ var GROUP_TEMPLATES = [
|
|
|
15632
15632
|
summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
|
|
15633
15633
|
role: DeviceRole.PressureSensor,
|
|
15634
15634
|
outputCap: "pressure-sensor",
|
|
15635
|
-
outputField: "
|
|
15635
|
+
outputField: "pressure",
|
|
15636
15636
|
quantity: "pressure",
|
|
15637
15637
|
defaultAggregate: "mean",
|
|
15638
15638
|
empty: "null",
|
|
@@ -15643,7 +15643,7 @@ var GROUP_TEMPLATES = [
|
|
|
15643
15643
|
summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
|
|
15644
15644
|
role: DeviceRole.AmbientLightSensor,
|
|
15645
15645
|
outputCap: "ambient-light-sensor",
|
|
15646
|
-
outputField: "
|
|
15646
|
+
outputField: "illuminance",
|
|
15647
15647
|
quantity: "illuminance",
|
|
15648
15648
|
defaultAggregate: "mean",
|
|
15649
15649
|
empty: "null",
|
|
@@ -15654,7 +15654,7 @@ var GROUP_TEMPLATES = [
|
|
|
15654
15654
|
summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
|
|
15655
15655
|
role: DeviceRole.PowerSensor,
|
|
15656
15656
|
outputCap: "power-meter",
|
|
15657
|
-
outputField: "
|
|
15657
|
+
outputField: "power",
|
|
15658
15658
|
quantity: "power",
|
|
15659
15659
|
defaultAggregate: "sum",
|
|
15660
15660
|
empty: "omit",
|
|
@@ -15665,7 +15665,7 @@ var GROUP_TEMPLATES = [
|
|
|
15665
15665
|
summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
|
|
15666
15666
|
role: DeviceRole.EnergySensor,
|
|
15667
15667
|
outputCap: "power-meter",
|
|
15668
|
-
outputField: "
|
|
15668
|
+
outputField: "energy",
|
|
15669
15669
|
quantity: "energy",
|
|
15670
15670
|
defaultAggregate: "sum",
|
|
15671
15671
|
empty: "omit",
|
|
@@ -15676,7 +15676,7 @@ var GROUP_TEMPLATES = [
|
|
|
15676
15676
|
summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
|
|
15677
15677
|
role: DeviceRole.BatterySensor,
|
|
15678
15678
|
outputCap: "battery",
|
|
15679
|
-
outputField: "
|
|
15679
|
+
outputField: "level",
|
|
15680
15680
|
quantity: "percentage",
|
|
15681
15681
|
defaultAggregate: "mean",
|
|
15682
15682
|
empty: "null",
|
|
@@ -16130,17 +16130,17 @@ async function runFanOut(calls, invoke) {
|
|
|
16130
16130
|
//#region src/generated/history-catalog.ts
|
|
16131
16131
|
/**
|
|
16132
16132
|
* Cap history catalog, projected from every `*.cap.ts` `history` block.
|
|
16133
|
-
*
|
|
16133
|
+
* 41 caps with series (76 series), 34 caps answered `'none'`.
|
|
16134
16134
|
* Field keys are `runtimeState` paths (`a.b` into fixed objects only).
|
|
16135
16135
|
*/
|
|
16136
16136
|
var HISTORY_CATALOG = {
|
|
16137
16137
|
"air-quality-sensor": {
|
|
16138
|
-
"
|
|
16138
|
+
"co2": {
|
|
16139
16139
|
kind: "gauge",
|
|
16140
16140
|
unit: "ppm",
|
|
16141
16141
|
deadband: 5
|
|
16142
16142
|
},
|
|
16143
|
-
"
|
|
16143
|
+
"voc": {
|
|
16144
16144
|
kind: "gauge",
|
|
16145
16145
|
unit: "ppb",
|
|
16146
16146
|
deadband: 5
|
|
@@ -16176,24 +16176,24 @@ var HISTORY_CATALOG = {
|
|
|
16176
16176
|
"triggered"
|
|
16177
16177
|
]
|
|
16178
16178
|
} },
|
|
16179
|
-
"ambient-light-sensor": { "
|
|
16179
|
+
"ambient-light-sensor": { "illuminance": {
|
|
16180
16180
|
kind: "gauge",
|
|
16181
16181
|
unit: "lx",
|
|
16182
16182
|
deadbandPct: 10,
|
|
16183
16183
|
minIntervalMs: 6e4
|
|
16184
16184
|
} },
|
|
16185
16185
|
"battery": {
|
|
16186
|
-
"
|
|
16186
|
+
"level": {
|
|
16187
16187
|
kind: "gauge",
|
|
16188
16188
|
unit: "%"
|
|
16189
16189
|
},
|
|
16190
|
-
"
|
|
16190
|
+
"voltage": {
|
|
16191
16191
|
kind: "gauge",
|
|
16192
16192
|
unit: "V"
|
|
16193
16193
|
}
|
|
16194
16194
|
},
|
|
16195
16195
|
"binary": { "on": { kind: "boolean" } },
|
|
16196
|
-
"brightness": { "
|
|
16196
|
+
"brightness": { "level": {
|
|
16197
16197
|
kind: "gauge",
|
|
16198
16198
|
unit: "%",
|
|
16199
16199
|
minIntervalMs: 0
|
|
@@ -16235,7 +16235,7 @@ var HISTORY_CATALOG = {
|
|
|
16235
16235
|
} },
|
|
16236
16236
|
"device-status": { "online": { kind: "boolean" } },
|
|
16237
16237
|
"dishwasher": {
|
|
16238
|
-
"
|
|
16238
|
+
"progress": {
|
|
16239
16239
|
kind: "gauge",
|
|
16240
16240
|
unit: "%",
|
|
16241
16241
|
deadband: 2
|
|
@@ -16265,7 +16265,7 @@ var HISTORY_CATALOG = {
|
|
|
16265
16265
|
"Aborting"
|
|
16266
16266
|
]
|
|
16267
16267
|
},
|
|
16268
|
-
"
|
|
16268
|
+
"remaining": {
|
|
16269
16269
|
kind: "gauge",
|
|
16270
16270
|
unit: "s",
|
|
16271
16271
|
minIntervalMs: 6e4
|
|
@@ -16278,7 +16278,7 @@ var HISTORY_CATALOG = {
|
|
|
16278
16278
|
skipWhenSet: "timestamp"
|
|
16279
16279
|
} },
|
|
16280
16280
|
"fan-control": {
|
|
16281
|
-
"
|
|
16281
|
+
"speed": {
|
|
16282
16282
|
kind: "gauge",
|
|
16283
16283
|
unit: "%",
|
|
16284
16284
|
minIntervalMs: 0
|
|
@@ -16300,7 +16300,7 @@ var HISTORY_CATALOG = {
|
|
|
16300
16300
|
},
|
|
16301
16301
|
"on": { kind: "boolean" }
|
|
16302
16302
|
},
|
|
16303
|
-
"humidity-sensor": { "
|
|
16303
|
+
"humidity-sensor": { "humidity": {
|
|
16304
16304
|
kind: "gauge",
|
|
16305
16305
|
unit: "%",
|
|
16306
16306
|
deadband: .5
|
|
@@ -16338,13 +16338,13 @@ var HISTORY_CATALOG = {
|
|
|
16338
16338
|
excludeDeviceTypes: [DeviceType.Camera]
|
|
16339
16339
|
} },
|
|
16340
16340
|
"network-link": {
|
|
16341
|
-
"
|
|
16341
|
+
"signal": {
|
|
16342
16342
|
kind: "gauge",
|
|
16343
16343
|
unit: "%",
|
|
16344
16344
|
deadband: 3,
|
|
16345
16345
|
minIntervalMs: 6e4
|
|
16346
16346
|
},
|
|
16347
|
-
"
|
|
16347
|
+
"rssi": {
|
|
16348
16348
|
kind: "gauge",
|
|
16349
16349
|
unit: "dBm",
|
|
16350
16350
|
deadband: 2,
|
|
@@ -16371,31 +16371,31 @@ var HISTORY_CATALOG = {
|
|
|
16371
16371
|
}
|
|
16372
16372
|
},
|
|
16373
16373
|
"power-meter": {
|
|
16374
|
-
"
|
|
16374
|
+
"power": {
|
|
16375
16375
|
kind: "gauge",
|
|
16376
16376
|
unit: "W",
|
|
16377
16377
|
deadband: 1,
|
|
16378
16378
|
minIntervalMs: 3e4
|
|
16379
16379
|
},
|
|
16380
|
-
"
|
|
16380
|
+
"energy": {
|
|
16381
16381
|
kind: "counter",
|
|
16382
16382
|
unit: "kWh",
|
|
16383
16383
|
deadband: .01,
|
|
16384
16384
|
minIntervalMs: 6e4
|
|
16385
16385
|
},
|
|
16386
|
-
"
|
|
16386
|
+
"voltage": {
|
|
16387
16387
|
kind: "gauge",
|
|
16388
16388
|
unit: "V",
|
|
16389
16389
|
deadband: 1,
|
|
16390
16390
|
minIntervalMs: 3e4
|
|
16391
16391
|
},
|
|
16392
|
-
"
|
|
16392
|
+
"current": {
|
|
16393
16393
|
kind: "gauge",
|
|
16394
16394
|
unit: "A",
|
|
16395
16395
|
deadband: .05,
|
|
16396
16396
|
minIntervalMs: 3e4
|
|
16397
16397
|
},
|
|
16398
|
-
"
|
|
16398
|
+
"apparentPower": {
|
|
16399
16399
|
kind: "gauge",
|
|
16400
16400
|
unit: "VA",
|
|
16401
16401
|
deadband: 1,
|
|
@@ -16408,12 +16408,7 @@ var HISTORY_CATALOG = {
|
|
|
16408
16408
|
minIntervalMs: 6e4
|
|
16409
16409
|
}
|
|
16410
16410
|
},
|
|
16411
|
-
"
|
|
16412
|
-
kind: "gauge",
|
|
16413
|
-
unit: "%",
|
|
16414
|
-
deadband: 1
|
|
16415
|
-
} },
|
|
16416
|
-
"pressure-sensor": { "hpa": {
|
|
16411
|
+
"pressure-sensor": { "pressure": {
|
|
16417
16412
|
kind: "gauge",
|
|
16418
16413
|
unit: "hPa",
|
|
16419
16414
|
deadband: .1
|
|
@@ -16440,7 +16435,7 @@ var HISTORY_CATALOG = {
|
|
|
16440
16435
|
},
|
|
16441
16436
|
"switch": { "on": { kind: "boolean" } },
|
|
16442
16437
|
"tamper": { "tampered": { kind: "boolean" } },
|
|
16443
|
-
"temperature-sensor": { "
|
|
16438
|
+
"temperature-sensor": { "temperature": {
|
|
16444
16439
|
kind: "gauge",
|
|
16445
16440
|
unit: "°C",
|
|
16446
16441
|
deadband: .1
|
|
@@ -16548,6 +16543,7 @@ var HISTORY_NONE_CAPS = [
|
|
|
16548
16543
|
"native-object-detection",
|
|
16549
16544
|
"navigation",
|
|
16550
16545
|
"notifier",
|
|
16546
|
+
"presence",
|
|
16551
16547
|
"privacy-mask",
|
|
16552
16548
|
"ptz-autotrack",
|
|
16553
16549
|
"recording-onboard",
|
|
@@ -16685,10 +16681,10 @@ function derivativeDraft(spec, retention = DEFAULT_HISTORY_RETENTION) {
|
|
|
16685
16681
|
function integralDraft(spec, retention = DEFAULT_HISTORY_RETENTION) {
|
|
16686
16682
|
const problems = [...historyProblems(spec.source)];
|
|
16687
16683
|
const kind = declaredSeriesKind(spec.source);
|
|
16688
|
-
const
|
|
16684
|
+
const isPower = spec.source.cap === "power-meter" && spec.source.fieldPath === "power";
|
|
16689
16685
|
if (kind === "counter" || kind === "boolean" || kind === "enum") problems.push(problem("kind-mismatch", "helper.source", "an integral reads an instantaneous gauge, not a counter or a state"));
|
|
16690
|
-
if (spec.output === "energy" && !
|
|
16691
|
-
if (spec.output === "meter" &&
|
|
16686
|
+
if (spec.output === "energy" && !isPower) problems.push(problem("kind-mismatch", "helper.output", "energy is the integral of power-meter.power; another reading uses the meter"));
|
|
16687
|
+
if (spec.output === "meter" && isPower) problems.push(problem("kind-mismatch", "helper.output", "power integrates to power-meter.energy, which energy dashboards already read"));
|
|
16692
16688
|
const tier = planResetTier(spec.reset, retention);
|
|
16693
16689
|
if (!tier.ok) problems.push(problem("retention", "helper.reset", tier.reason));
|
|
16694
16690
|
const energy = spec.output === "energy";
|
|
@@ -16697,7 +16693,7 @@ function integralDraft(spec, retention = DEFAULT_HISTORY_RETENTION) {
|
|
|
16697
16693
|
draft: draft({
|
|
16698
16694
|
role: energy ? DeviceRole.EnergySensor : DeviceRole.NumericSensor,
|
|
16699
16695
|
cap: energy ? "power-meter" : "meter",
|
|
16700
|
-
field: energy ? "
|
|
16696
|
+
field: energy ? "energy" : "value",
|
|
16701
16697
|
empty: "offline",
|
|
16702
16698
|
spec,
|
|
16703
16699
|
member: spec.source
|
|
@@ -16956,9 +16952,9 @@ function expressionSource(expr, bindings = {}) {
|
|
|
16956
16952
|
}
|
|
16957
16953
|
function compileAppliance(spec) {
|
|
16958
16954
|
const member = spec.member;
|
|
16959
|
-
if (member.cap !== "power-meter" || member.fieldPath !== "
|
|
16955
|
+
if (member.cap !== "power-meter" || member.fieldPath !== "power") return {
|
|
16960
16956
|
ok: false,
|
|
16961
|
-
problems: [problem("member-constraint", "helper.member", "an appliance helper reads power-meter.
|
|
16957
|
+
problems: [problem("member-constraint", "helper.member", "an appliance helper reads power-meter.power")]
|
|
16962
16958
|
};
|
|
16963
16959
|
const threshold = unsignedToken(spec.thresholdWatts);
|
|
16964
16960
|
const start = unsignedToken(spec.startDwellMs);
|
|
@@ -16999,7 +16995,7 @@ function compileAppliance(spec) {
|
|
|
16999
16995
|
kind: "fields",
|
|
17000
16996
|
cap: "power-meter",
|
|
17001
16997
|
fields: {
|
|
17002
|
-
|
|
16998
|
+
power: read,
|
|
17003
16999
|
lastFetchedAt: clock
|
|
17004
17000
|
}
|
|
17005
17001
|
}]
|
|
@@ -19225,8 +19221,8 @@ var DeviceHistoryProducerKindSchema = z.enum([
|
|
|
19225
19221
|
/**
|
|
19226
19222
|
* A key computed at READ time from stored series of the same device, never
|
|
19227
19223
|
* stored itself. Energy (kWh per bucket) comes from the power meter's
|
|
19228
|
-
* `
|
|
19229
|
-
* `
|
|
19224
|
+
* `energy` counter when the device has one, else from integrating its
|
|
19225
|
+
* `power` gauge over time.
|
|
19230
19226
|
*/
|
|
19231
19227
|
var DEVICE_HISTORY_ENERGY_KEY = "derived:energy.kwh";
|
|
19232
19228
|
var DeviceHistoryResolutionSchema = z.enum([
|
|
@@ -64265,9 +64261,9 @@ var addonsCapability = {
|
|
|
64265
64261
|
*/
|
|
64266
64262
|
var AirQualitySensorStatusSchema = z.object({
|
|
64267
64263
|
/** Carbon dioxide concentration in ppm. */
|
|
64268
|
-
|
|
64264
|
+
co2: z.number().min(0).optional().meta(readingMeta("concentration-volume")),
|
|
64269
64265
|
/** Total volatile organic compounds in ppb. */
|
|
64270
|
-
|
|
64266
|
+
voc: z.number().min(0).optional().meta(readingMeta("concentration-ppb")),
|
|
64271
64267
|
/** Particulate matter ≤ 2.5 μm in µg/m³. */
|
|
64272
64268
|
pm25: z.number().min(0).optional().meta(readingMeta("concentration-mass")),
|
|
64273
64269
|
/** Particulate matter ≤ 10 μm in µg/m³. */
|
|
@@ -64300,12 +64296,12 @@ var airQualitySensorCapability = {
|
|
|
64300
64296
|
* History (D850): recorded series.
|
|
64301
64297
|
*/
|
|
64302
64298
|
history: { fields: {
|
|
64303
|
-
|
|
64299
|
+
co2: {
|
|
64304
64300
|
kind: "gauge",
|
|
64305
64301
|
unit: "ppm",
|
|
64306
64302
|
deadband: 5
|
|
64307
64303
|
},
|
|
64308
|
-
|
|
64304
|
+
voc: {
|
|
64309
64305
|
kind: "gauge",
|
|
64310
64306
|
unit: "ppb",
|
|
64311
64307
|
deadband: 5
|
|
@@ -64338,7 +64334,7 @@ var airQualitySensorCapability = {
|
|
|
64338
64334
|
*/
|
|
64339
64335
|
var AmbientLightSensorStatusSchema = z.object({
|
|
64340
64336
|
/** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
|
|
64341
|
-
|
|
64337
|
+
illuminance: z.number().min(0).nullable().meta(readingMeta("illuminance", {
|
|
64342
64338
|
precision: 0,
|
|
64343
64339
|
label: "Illuminance"
|
|
64344
64340
|
})),
|
|
@@ -64367,7 +64363,7 @@ var ambientLightSensorCapability = {
|
|
|
64367
64363
|
/**
|
|
64368
64364
|
* History (D850): recorded series. Wide range, so a RELATIVE deadband (10 %).
|
|
64369
64365
|
*/
|
|
64370
|
-
history: { fields: {
|
|
64366
|
+
history: { fields: { illuminance: {
|
|
64371
64367
|
kind: "gauge",
|
|
64372
64368
|
unit: "lx",
|
|
64373
64369
|
deadbandPct: 10,
|
|
@@ -64763,7 +64759,7 @@ var BatteryStatusSchema = z.object({
|
|
|
64763
64759
|
* Consumers must SKIP a null rather than coerce it — `battery-band` already
|
|
64764
64760
|
* declines to band a non-finite reading, which is the correct shape.
|
|
64765
64761
|
*/
|
|
64766
|
-
|
|
64762
|
+
level: z.number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
|
|
64767
64763
|
/**
|
|
64768
64764
|
* Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
|
|
64769
64765
|
* Reolink-specific for the Solar Panel 2 accessory (will become
|
|
@@ -64773,7 +64769,7 @@ var BatteryStatusSchema = z.object({
|
|
|
64773
64769
|
* `'unknown'` is the absence of an answer: the provider has not read the
|
|
64774
64770
|
* power fields yet, or the firmware reported neither. Before it existed,
|
|
64775
64771
|
* two unreadable fields produced `'none'`, and a camera nobody had reached
|
|
64776
|
-
* was drawn "on battery alone" — the same D315 defect `
|
|
64772
|
+
* was drawn "on battery alone" — the same D315 defect `level` closed
|
|
64777
64773
|
* by going nullable. Consumers SKIP it (no charger state published, no
|
|
64778
64774
|
* glyph, no HomeKit ChargingState) rather than coerce it either way.
|
|
64779
64775
|
*/
|
|
@@ -64797,7 +64793,7 @@ var BatteryStatusSchema = z.object({
|
|
|
64797
64793
|
* that only report charge. A second reading on this cap, not a second
|
|
64798
64794
|
* `numeric-sensor` on the same device.
|
|
64799
64795
|
*/
|
|
64800
|
-
|
|
64796
|
+
voltage: z.number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
|
|
64801
64797
|
/**
|
|
64802
64798
|
* Ms epoch of the last time the device PROVED it was reachable — a
|
|
64803
64799
|
* completed firmware round-trip, an observed wake, or an inbound push
|
|
@@ -64831,7 +64827,7 @@ var BatteryStatusSchema = z.object({
|
|
|
64831
64827
|
/**
|
|
64832
64828
|
* True when the source is a BINARY low-battery indicator (HA
|
|
64833
64829
|
* `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
|
|
64834
|
-
* charge level — `
|
|
64830
|
+
* charge level — `level` is then a coarse stand-in (100 = normal,
|
|
64835
64831
|
* sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
|
|
64836
64832
|
* misleading exact percentage. Absent/false → genuine 0–100 % reading.
|
|
64837
64833
|
*/
|
|
@@ -64851,15 +64847,15 @@ var BATTERY_DEVICE_TYPES = [
|
|
|
64851
64847
|
var batteryCustomize = {
|
|
64852
64848
|
version: 1,
|
|
64853
64849
|
targets: [{
|
|
64854
|
-
id: "
|
|
64850
|
+
id: "level",
|
|
64855
64851
|
cardinality: "scalar",
|
|
64856
64852
|
vocabulary: {
|
|
64857
64853
|
cap: "battery",
|
|
64858
|
-
stateField: "
|
|
64854
|
+
stateField: "level"
|
|
64859
64855
|
},
|
|
64860
64856
|
deviceTypes: BATTERY_DEVICE_TYPES,
|
|
64861
64857
|
apply: "add",
|
|
64862
|
-
path: "
|
|
64858
|
+
path: "level",
|
|
64863
64859
|
sources: [{
|
|
64864
64860
|
kind: "field",
|
|
64865
64861
|
valueKinds: ["number", "string"],
|
|
@@ -64953,7 +64949,7 @@ onStatusChanged: { data: z.object({
|
|
|
64953
64949
|
schema: BatteryStatusSchema,
|
|
64954
64950
|
kind: "push",
|
|
64955
64951
|
empty: {
|
|
64956
|
-
|
|
64952
|
+
level: null,
|
|
64957
64953
|
charging: "unknown",
|
|
64958
64954
|
sleeping: false,
|
|
64959
64955
|
lastUpdated: 0
|
|
@@ -64980,11 +64976,11 @@ onStatusChanged: { data: z.object({
|
|
|
64980
64976
|
* History (D850): recorded series. The generic capture replaces the `battery` series of `pipeline-analytics:stats-5m`.
|
|
64981
64977
|
*/
|
|
64982
64978
|
history: { fields: {
|
|
64983
|
-
|
|
64979
|
+
level: {
|
|
64984
64980
|
kind: "gauge",
|
|
64985
64981
|
unit: "%"
|
|
64986
64982
|
},
|
|
64987
|
-
|
|
64983
|
+
voltage: {
|
|
64988
64984
|
kind: "gauge",
|
|
64989
64985
|
unit: "V"
|
|
64990
64986
|
}
|
|
@@ -65048,14 +65044,14 @@ var binaryCapability = {
|
|
|
65048
65044
|
* controls to this single-method surface.
|
|
65049
65045
|
*
|
|
65050
65046
|
* The cap is intentionally minimal: a single `setBrightness({deviceId,
|
|
65051
|
-
*
|
|
65047
|
+
* level})` mutation plus the auto-injected `getStatus`. Drivers
|
|
65052
65048
|
* that expose richer controls (color temperature, scenes, schedules)
|
|
65053
65049
|
* should surface those via the device's `getSettingsUISchema()`
|
|
65054
65050
|
* instead of bloating this cap.
|
|
65055
65051
|
*/
|
|
65056
65052
|
var BrightnessStatusSchema = z.object({
|
|
65057
65053
|
/** Current level as 0..100 inclusive. Firmware-reported. */
|
|
65058
|
-
|
|
65054
|
+
level: z.number().min(0).max(100).meta(readingMeta("percentage")),
|
|
65059
65055
|
/** Ms epoch of the last operator-driven change. Useful for UI freshness. */
|
|
65060
65056
|
lastChangedAt: z.number()
|
|
65061
65057
|
});
|
|
@@ -65067,7 +65063,7 @@ var brightnessCapability = {
|
|
|
65067
65063
|
deviceTypes: [DeviceType.Light],
|
|
65068
65064
|
methods: { setBrightness: method(z.object({
|
|
65069
65065
|
deviceId: z.number().int().nonnegative(),
|
|
65070
|
-
|
|
65066
|
+
level: z.number().min(0).max(100)
|
|
65071
65067
|
}), z.void(), {
|
|
65072
65068
|
kind: "mutation",
|
|
65073
65069
|
auth: "protected"
|
|
@@ -65080,7 +65076,7 @@ var brightnessCapability = {
|
|
|
65080
65076
|
*/
|
|
65081
65077
|
onBrightnessChanged: { data: z.object({
|
|
65082
65078
|
deviceId: z.number(),
|
|
65083
|
-
|
|
65079
|
+
level: z.number().min(0).max(100),
|
|
65084
65080
|
lastChangedAt: z.number()
|
|
65085
65081
|
}) } },
|
|
65086
65082
|
status: {
|
|
@@ -65103,7 +65099,7 @@ onBrightnessChanged: { data: z.object({
|
|
|
65103
65099
|
/**
|
|
65104
65100
|
* History (D850): recorded series. Actuator tier: level keeps every change.
|
|
65105
65101
|
*/
|
|
65106
|
-
history: { fields: {
|
|
65102
|
+
history: { fields: { level: {
|
|
65107
65103
|
kind: "gauge",
|
|
65108
65104
|
unit: "%",
|
|
65109
65105
|
minIntervalMs: 0
|
|
@@ -65847,11 +65843,11 @@ var ColorInputSchema = z.discriminatedUnion("mode", [
|
|
|
65847
65843
|
}),
|
|
65848
65844
|
z.object({
|
|
65849
65845
|
mode: z.literal("mired"),
|
|
65850
|
-
|
|
65846
|
+
colorTemperature: z.number().int().min(50).max(1e3)
|
|
65851
65847
|
})
|
|
65852
65848
|
]);
|
|
65853
65849
|
var ColorStatusSchema = z.object({
|
|
65854
|
-
/** Active color mode — which of `rgb` / `hsv` / `
|
|
65850
|
+
/** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
|
|
65855
65851
|
* the bulb's current state. */
|
|
65856
65852
|
mode: z.enum([
|
|
65857
65853
|
"rgb",
|
|
@@ -65863,7 +65859,7 @@ var ColorStatusSchema = z.object({
|
|
|
65863
65859
|
/** Populated when `mode === 'hsv'`. */
|
|
65864
65860
|
hsv: HsvTripletSchema.optional(),
|
|
65865
65861
|
/** Populated when `mode === 'mired'`. */
|
|
65866
|
-
|
|
65862
|
+
colorTemperature: z.number().int().optional().meta(readingMeta("colour-temperature")),
|
|
65867
65863
|
/** Ms epoch of the last operator-driven change. */
|
|
65868
65864
|
lastChangedAt: z.number()
|
|
65869
65865
|
});
|
|
@@ -65899,7 +65895,7 @@ onColorChanged: { data: z.object({
|
|
|
65899
65895
|
]),
|
|
65900
65896
|
rgb: RgbTripletSchema.optional(),
|
|
65901
65897
|
hsv: HsvTripletSchema.optional(),
|
|
65902
|
-
|
|
65898
|
+
colorTemperature: z.number().int().optional(),
|
|
65903
65899
|
lastChangedAt: z.number()
|
|
65904
65900
|
}) } },
|
|
65905
65901
|
status: {
|
|
@@ -66932,11 +66928,11 @@ var DishwasherStatusSchema = z.object({
|
|
|
66932
66928
|
/** Feature keys of the programs the appliance currently offers — drives the UI selector. */
|
|
66933
66929
|
availablePrograms: z.array(z.string()),
|
|
66934
66930
|
/** Seconds remaining on the active cycle, or null when not running / not known. */
|
|
66935
|
-
|
|
66931
|
+
remaining: z.number().int().nonnegative().nullable().meta(readingMeta("duration")),
|
|
66936
66932
|
/** Seconds the delayed start is set to (time until the cycle starts), or null. */
|
|
66937
|
-
|
|
66933
|
+
delayedStart: z.number().int().nonnegative().nullable().meta(readingMeta("duration")),
|
|
66938
66934
|
/** Cycle completion 0..100, or null when not applicable. */
|
|
66939
|
-
|
|
66935
|
+
progress: z.number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
66940
66936
|
/** True when the door is reported open; null when the door state is not known. */
|
|
66941
66937
|
doorOpen: z.boolean().nullable(),
|
|
66942
66938
|
/** True when the door is latched (locked) during a cycle; null when not reported. */
|
|
@@ -67155,14 +67151,14 @@ var dishwasherCapability = {
|
|
|
67155
67151
|
runtimeState: DishwasherStatusSchema,
|
|
67156
67152
|
durability: "session",
|
|
67157
67153
|
history: { fields: {
|
|
67158
|
-
|
|
67154
|
+
progress: {
|
|
67159
67155
|
kind: "gauge",
|
|
67160
67156
|
unit: "%",
|
|
67161
67157
|
deadband: 2
|
|
67162
67158
|
},
|
|
67163
67159
|
state: { kind: "enum" },
|
|
67164
67160
|
operationState: { kind: "enum" },
|
|
67165
|
-
|
|
67161
|
+
remaining: {
|
|
67166
67162
|
kind: "gauge",
|
|
67167
67163
|
unit: "s",
|
|
67168
67164
|
minIntervalMs: 6e4
|
|
@@ -67815,7 +67811,7 @@ var FanDirectionSchema = z.enum(["forward", "reverse"]);
|
|
|
67815
67811
|
var FanControlStatusSchema = z.object({
|
|
67816
67812
|
/** Active speed as 0..100 inclusive. Null when the device has no
|
|
67817
67813
|
* speed surface (single-speed fan). */
|
|
67818
|
-
|
|
67814
|
+
speed: z.number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
67819
67815
|
/** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
|
|
67820
67816
|
* a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
|
|
67821
67817
|
percentageStep: z.number().positive().optional().meta(readingMeta("percentage")),
|
|
@@ -67842,7 +67838,7 @@ var fanControlCapability = {
|
|
|
67842
67838
|
methods: {
|
|
67843
67839
|
setPercentage: method(z.object({
|
|
67844
67840
|
deviceId: z.number().int().nonnegative(),
|
|
67845
|
-
|
|
67841
|
+
speed: z.number().min(0).max(100)
|
|
67846
67842
|
}), z.void(), {
|
|
67847
67843
|
kind: "mutation",
|
|
67848
67844
|
auth: "protected"
|
|
@@ -67875,7 +67871,7 @@ var fanControlCapability = {
|
|
|
67875
67871
|
},
|
|
67876
67872
|
/**
|
|
67877
67873
|
* Runtime-state slice — mirrored by the kernel. UI fan speed
|
|
67878
|
-
* sliders read `
|
|
67874
|
+
* sliders read `speed` for live updates.
|
|
67879
67875
|
*/
|
|
67880
67876
|
runtimeState: FanControlStatusSchema,
|
|
67881
67877
|
/**
|
|
@@ -67889,7 +67885,7 @@ var fanControlCapability = {
|
|
|
67889
67885
|
* History (D850): recorded series. Actuator tier: speed keeps every change.
|
|
67890
67886
|
*/
|
|
67891
67887
|
history: { fields: {
|
|
67892
|
-
|
|
67888
|
+
speed: {
|
|
67893
67889
|
kind: "gauge",
|
|
67894
67890
|
unit: "%",
|
|
67895
67891
|
minIntervalMs: 0
|
|
@@ -68359,7 +68355,7 @@ var humidifierCapability = {
|
|
|
68359
68355
|
*/
|
|
68360
68356
|
var HumiditySensorStatusSchema = z.object({
|
|
68361
68357
|
/** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
|
|
68362
|
-
|
|
68358
|
+
humidity: z.number().min(0).max(100).nullable().meta(readingMeta("humidity", {
|
|
68363
68359
|
precision: 0,
|
|
68364
68360
|
label: "Humidity"
|
|
68365
68361
|
})),
|
|
@@ -68388,7 +68384,7 @@ var humiditySensorCapability = {
|
|
|
68388
68384
|
/**
|
|
68389
68385
|
* History (D850): recorded series.
|
|
68390
68386
|
*/
|
|
68391
|
-
history: { fields: {
|
|
68387
|
+
history: { fields: { humidity: {
|
|
68392
68388
|
kind: "gauge",
|
|
68393
68389
|
unit: "%",
|
|
68394
68390
|
deadband: .5
|
|
@@ -69056,7 +69052,7 @@ var LawnMowerControlStatusSchema = z.object({
|
|
|
69056
69052
|
batteryLevel: z.number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
69057
69053
|
/** 0..100 mowing-completion percentage of the current task, or null when no
|
|
69058
69054
|
* task is active / progress is unavailable. */
|
|
69059
|
-
|
|
69055
|
+
progress: z.number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
69060
69056
|
/** Current device/event code (dynamic — mostly status, sometimes an error),
|
|
69061
69057
|
* or null when unknown. */
|
|
69062
69058
|
currentCode: z.number().nullable().meta(readingMeta("none")),
|
|
@@ -69753,7 +69749,7 @@ var lockControlCapability = {
|
|
|
69753
69749
|
//#endregion
|
|
69754
69750
|
//#region src/capabilities/meter.cap.ts
|
|
69755
69751
|
/**
|
|
69756
|
-
* A monotonic total between resets (D944). Energy uses `power-meter.
|
|
69752
|
+
* A monotonic total between resets (D944). Energy uses `power-meter.energy`
|
|
69757
69753
|
* so dashboards keep one series; every other instantaneous reading lands here.
|
|
69758
69754
|
* `value` is the time integral in the source quantity's accumulated base
|
|
69759
69755
|
* (base-unit seconds, or kWh on the power meter). `null` is a gap, never zero.
|
|
@@ -69849,10 +69845,10 @@ var MediaPlayerStatusSchema = z.object({
|
|
|
69849
69845
|
currentMedia: MediaInfoSchema.nullable(),
|
|
69850
69846
|
/** Current playback position in ms. Null when not seekable or
|
|
69851
69847
|
* nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
|
|
69852
|
-
|
|
69848
|
+
position: z.number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
|
|
69853
69849
|
/** Total duration of the current media in ms. Null when unknown
|
|
69854
69850
|
* (live stream) or nothing is playing. */
|
|
69855
|
-
|
|
69851
|
+
duration: z.number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
|
|
69856
69852
|
/** Shuffle toggle. Null when no shuffle surface.
|
|
69857
69853
|
* Pair with `DeviceFeature.MediaPlayerShuffle`. */
|
|
69858
69854
|
shuffle: z.boolean().nullable(),
|
|
@@ -69891,7 +69887,7 @@ var mediaPlayerCapability = {
|
|
|
69891
69887
|
}),
|
|
69892
69888
|
seek: method(z.object({
|
|
69893
69889
|
deviceId: z.number().int().nonnegative(),
|
|
69894
|
-
|
|
69890
|
+
position: z.number().int().nonnegative()
|
|
69895
69891
|
}), z.void(), {
|
|
69896
69892
|
kind: "mutation",
|
|
69897
69893
|
auth: "protected"
|
|
@@ -69963,7 +69959,7 @@ var mediaPlayerCapability = {
|
|
|
69963
69959
|
/**
|
|
69964
69960
|
* History (D850): volume (a level an operator or an automation sets; the
|
|
69965
69961
|
* default 10 s floor folds a slider drag into its end value) and mute.
|
|
69966
|
-
* `
|
|
69962
|
+
* `position` is not recorded: it moves continuously while playing.
|
|
69967
69963
|
*/
|
|
69968
69964
|
history: { fields: {
|
|
69969
69965
|
volumeLevel: {
|
|
@@ -71188,9 +71184,9 @@ var NetworkLinkStatusSchema = z.object({
|
|
|
71188
71184
|
* one whose reading has not landed must not be drawn at 0 %. Consumers
|
|
71189
71185
|
* SKIP a null rather than coerce it.
|
|
71190
71186
|
*/
|
|
71191
|
-
|
|
71187
|
+
signal: z.number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
71192
71188
|
/** Raw received signal strength in dBm, when the firmware reports one. */
|
|
71193
|
-
|
|
71189
|
+
rssi: z.number().optional().meta(readingMeta("signal-level")),
|
|
71194
71190
|
/** Network name of a wireless link, when the firmware reports it. */
|
|
71195
71191
|
ssid: z.string().optional(),
|
|
71196
71192
|
/** Ms epoch of the last observation. Lets consumers reason about freshness. */
|
|
@@ -71199,7 +71195,7 @@ var NetworkLinkStatusSchema = z.object({
|
|
|
71199
71195
|
/** The slice a provider seeds before its first read: nothing is known yet. */
|
|
71200
71196
|
var NETWORK_LINK_UNKNOWN = {
|
|
71201
71197
|
type: "unknown",
|
|
71202
|
-
|
|
71198
|
+
signal: null,
|
|
71203
71199
|
lastUpdated: 0
|
|
71204
71200
|
};
|
|
71205
71201
|
/**
|
|
@@ -71216,9 +71212,9 @@ function signalPercentFromBars(bars, maxBars) {
|
|
|
71216
71212
|
* below is 0 %, -50 dBm and above is 100 %, linear between. Non-finite or
|
|
71217
71213
|
* positive input is not an RSSI: `null`.
|
|
71218
71214
|
*/
|
|
71219
|
-
function signalPercentFromRssi(
|
|
71220
|
-
if (
|
|
71221
|
-
return Math.round((Math.min(-50, Math.max(-100,
|
|
71215
|
+
function signalPercentFromRssi(rssi) {
|
|
71216
|
+
if (rssi === void 0 || !Number.isFinite(rssi) || rssi > 0) return null;
|
|
71217
|
+
return Math.round((Math.min(-50, Math.max(-100, rssi)) + 100) * 2);
|
|
71222
71218
|
}
|
|
71223
71219
|
var networkLinkCapability = {
|
|
71224
71220
|
name: "network-link",
|
|
@@ -71269,13 +71265,13 @@ onStatusChanged: { data: z.object({
|
|
|
71269
71265
|
* History (D850): recorded series.
|
|
71270
71266
|
*/
|
|
71271
71267
|
history: { fields: {
|
|
71272
|
-
|
|
71268
|
+
signal: {
|
|
71273
71269
|
kind: "gauge",
|
|
71274
71270
|
unit: "%",
|
|
71275
71271
|
deadband: 3,
|
|
71276
71272
|
minIntervalMs: 6e4
|
|
71277
71273
|
},
|
|
71278
|
-
|
|
71274
|
+
rssi: {
|
|
71279
71275
|
kind: "gauge",
|
|
71280
71276
|
unit: "dBm",
|
|
71281
71277
|
deadband: 2,
|
|
@@ -73638,16 +73634,16 @@ var platformProbeCapability = {
|
|
|
73638
73634
|
* in real-world devices.
|
|
73639
73635
|
*/
|
|
73640
73636
|
var PowerMeterStatusSchema = z.object({
|
|
73641
|
-
/** Instantaneous power draw
|
|
73642
|
-
|
|
73637
|
+
/** Instantaneous power draw (watts). */
|
|
73638
|
+
power: z.number().optional().meta(readingMeta("power", { label: "Power" })),
|
|
73643
73639
|
/** Cumulative energy in kilowatt-hours since the meter was reset. */
|
|
73644
|
-
|
|
73645
|
-
/** Voltage
|
|
73646
|
-
|
|
73640
|
+
energy: z.number().optional().meta(readingMeta("energy", { label: "Energy" })),
|
|
73641
|
+
/** Voltage (volts). */
|
|
73642
|
+
voltage: z.number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
|
|
73647
73643
|
/** Current in amperes. */
|
|
73648
|
-
|
|
73644
|
+
current: z.number().optional().meta(readingMeta("current", { label: "Current" })),
|
|
73649
73645
|
/** Apparent power in volt-amperes. */
|
|
73650
|
-
|
|
73646
|
+
apparentPower: z.number().optional().meta(readingMeta("apparent-power")),
|
|
73651
73647
|
/** Power factor (0..1) if reported. */
|
|
73652
73648
|
powerFactor: z.number().min(0).max(1).optional().meta(readingMeta("ratio")),
|
|
73653
73649
|
/** Ms epoch when the slice was last updated. */
|
|
@@ -73705,14 +73701,14 @@ function powerTarget(id, unit) {
|
|
|
73705
73701
|
advancedExpression: true
|
|
73706
73702
|
};
|
|
73707
73703
|
}
|
|
73708
|
-
/** "Power and energy" extension:
|
|
73704
|
+
/** "Power and energy" extension: power, energy, voltage and current from other devices (D951). */
|
|
73709
73705
|
var powerMeterCustomize = {
|
|
73710
73706
|
version: 1,
|
|
73711
73707
|
targets: [
|
|
73712
|
-
powerTarget("
|
|
73713
|
-
powerTarget("
|
|
73714
|
-
powerTarget("
|
|
73715
|
-
powerTarget("
|
|
73708
|
+
powerTarget("power", "W"),
|
|
73709
|
+
powerTarget("energy", "kWh"),
|
|
73710
|
+
powerTarget("voltage", "V"),
|
|
73711
|
+
powerTarget("current", "A")
|
|
73716
73712
|
]
|
|
73717
73713
|
};
|
|
73718
73714
|
var powerMeterCapability = {
|
|
@@ -73728,41 +73724,41 @@ var powerMeterCapability = {
|
|
|
73728
73724
|
},
|
|
73729
73725
|
runtimeState: PowerMeterStatusSchema,
|
|
73730
73726
|
/**
|
|
73731
|
-
* Runtime-state durability: **restored** — as `numeric-sensor`; `
|
|
73727
|
+
* Runtime-state durability: **restored** — as `numeric-sensor`; `energy` is an accumulator whose restored value is the baseline.
|
|
73732
73728
|
*
|
|
73733
73729
|
* See `RuntimeStateDurability`. Enforced by
|
|
73734
73730
|
* `scripts/check-runtime-state-durability.ts`.
|
|
73735
73731
|
*/
|
|
73736
73732
|
durability: "restored",
|
|
73737
73733
|
/**
|
|
73738
|
-
* History (D850): recorded series. Gauges are floored at 30 s; `
|
|
73734
|
+
* History (D850): recorded series. Gauges are floored at 30 s; `energy` is the one monotonic meter (counter).
|
|
73739
73735
|
*/
|
|
73740
73736
|
history: { fields: {
|
|
73741
|
-
|
|
73737
|
+
power: {
|
|
73742
73738
|
kind: "gauge",
|
|
73743
73739
|
unit: "W",
|
|
73744
73740
|
deadband: 1,
|
|
73745
73741
|
minIntervalMs: 3e4
|
|
73746
73742
|
},
|
|
73747
|
-
|
|
73743
|
+
energy: {
|
|
73748
73744
|
kind: "counter",
|
|
73749
73745
|
unit: "kWh",
|
|
73750
73746
|
deadband: .01,
|
|
73751
73747
|
minIntervalMs: 6e4
|
|
73752
73748
|
},
|
|
73753
|
-
|
|
73749
|
+
voltage: {
|
|
73754
73750
|
kind: "gauge",
|
|
73755
73751
|
unit: "V",
|
|
73756
73752
|
deadband: 1,
|
|
73757
73753
|
minIntervalMs: 3e4
|
|
73758
73754
|
},
|
|
73759
|
-
|
|
73755
|
+
current: {
|
|
73760
73756
|
kind: "gauge",
|
|
73761
73757
|
unit: "A",
|
|
73762
73758
|
deadband: .05,
|
|
73763
73759
|
minIntervalMs: 3e4
|
|
73764
73760
|
},
|
|
73765
|
-
|
|
73761
|
+
apparentPower: {
|
|
73766
73762
|
kind: "gauge",
|
|
73767
73763
|
unit: "VA",
|
|
73768
73764
|
deadband: 1,
|
|
@@ -73814,9 +73810,6 @@ var PresenceStatusSchema = z.object({
|
|
|
73814
73810
|
location: z.string().nullable(),
|
|
73815
73811
|
/** GPS coordinates when available. Null otherwise. */
|
|
73816
73812
|
gps: GpsLocationSchema.nullable(),
|
|
73817
|
-
/** Optional battery level of the tracking device (0..100). Null
|
|
73818
|
-
* when not reported. */
|
|
73819
|
-
batteryPercent: z.number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
73820
73813
|
/** Ms epoch when the slice was last updated. */
|
|
73821
73814
|
lastChangedAt: z.number()
|
|
73822
73815
|
});
|
|
@@ -73845,14 +73838,7 @@ var presenceCapability = {
|
|
|
73845
73838
|
* `scripts/check-runtime-state-durability.ts`.
|
|
73846
73839
|
*/
|
|
73847
73840
|
durability: "restored",
|
|
73848
|
-
|
|
73849
|
-
* History (D850): recorded series.
|
|
73850
|
-
*/
|
|
73851
|
-
history: { fields: { batteryPercent: {
|
|
73852
|
-
kind: "gauge",
|
|
73853
|
-
unit: "%",
|
|
73854
|
-
deadband: 1
|
|
73855
|
-
} } },
|
|
73841
|
+
history: "none",
|
|
73856
73842
|
/** Clock fields: written, but excluded from the compare that decides
|
|
73857
73843
|
* whether persisting is worth a SQLite commit. */
|
|
73858
73844
|
volatileStateFields: ["lastChangedAt"]
|
|
@@ -73869,7 +73855,7 @@ var presenceCapability = {
|
|
|
73869
73855
|
*/
|
|
73870
73856
|
var PressureSensorStatusSchema = z.object({
|
|
73871
73857
|
/** Current pressure in hPa. `null` when the sample was refused (D393). */
|
|
73872
|
-
|
|
73858
|
+
pressure: z.number().nullable().meta(readingMeta("pressure", { precision: 0 })),
|
|
73873
73859
|
/** Ms epoch when the slice was last updated. */
|
|
73874
73860
|
lastFetchedAt: z.number()
|
|
73875
73861
|
});
|
|
@@ -73895,7 +73881,7 @@ var pressureSensorCapability = {
|
|
|
73895
73881
|
/**
|
|
73896
73882
|
* History (D850): recorded series.
|
|
73897
73883
|
*/
|
|
73898
|
-
history: { fields: {
|
|
73884
|
+
history: { fields: { pressure: {
|
|
73899
73885
|
kind: "gauge",
|
|
73900
73886
|
unit: "hPa",
|
|
73901
73887
|
deadband: .1
|
|
@@ -79122,7 +79108,7 @@ var tamperCapability = {
|
|
|
79122
79108
|
*/
|
|
79123
79109
|
var TemperatureSensorStatusSchema = z.object({
|
|
79124
79110
|
/** Current temperature in Celsius. `null` when the sample was refused (D393). */
|
|
79125
|
-
|
|
79111
|
+
temperature: z.number().nullable().meta(readingMeta("temperature", {
|
|
79126
79112
|
precision: 1,
|
|
79127
79113
|
label: "Temperature"
|
|
79128
79114
|
})),
|
|
@@ -79151,7 +79137,7 @@ var temperatureSensorCapability = {
|
|
|
79151
79137
|
/**
|
|
79152
79138
|
* History (D850): recorded series.
|
|
79153
79139
|
*/
|
|
79154
|
-
history: { fields: {
|
|
79140
|
+
history: { fields: { temperature: {
|
|
79155
79141
|
kind: "gauge",
|
|
79156
79142
|
unit: "°C",
|
|
79157
79143
|
deadband: .1
|
|
@@ -79519,7 +79505,7 @@ var VacuumControlStatusSchema = z.object({
|
|
|
79519
79505
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
79520
79506
|
availableFanSpeeds: z.array(z.string()),
|
|
79521
79507
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
79522
|
-
|
|
79508
|
+
progress: z.number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
79523
79509
|
/** Current error code (0 / null = no error). */
|
|
79524
79510
|
errorCode: z.number().nullable().meta(readingMeta("none")),
|
|
79525
79511
|
/** Human label for {@link errorCode}, or null when none / undecodable. */
|
|
@@ -82169,7 +82155,7 @@ function named(prefix, sources, cap, fieldPath) {
|
|
|
82169
82155
|
return Object.fromEntries(sources.map((s, i) => [`${prefix}${i + 1}`, from(s, cap, fieldPath)]));
|
|
82170
82156
|
}
|
|
82171
82157
|
function roomCompositionExample(input) {
|
|
82172
|
-
const t = named("t", input.temperatureSources, "temperature-sensor", "
|
|
82158
|
+
const t = named("t", input.temperatureSources, "temperature-sensor", "temperature");
|
|
82173
82159
|
const f = named("f", input.temperatureSources, "temperature-sensor", "lastFetchedAt");
|
|
82174
82160
|
const d = named("d", input.motionSources, "motion", "detected");
|
|
82175
82161
|
const m = named("m", input.motionSources, "motion", "lastDetectedAt");
|
|
@@ -82184,7 +82170,7 @@ function roomCompositionExample(input) {
|
|
|
82184
82170
|
kind: "fields",
|
|
82185
82171
|
cap: "temperature-sensor",
|
|
82186
82172
|
fields: {
|
|
82187
|
-
|
|
82173
|
+
temperature: {
|
|
82188
82174
|
kind: "expression",
|
|
82189
82175
|
expr: `round(avg(${Object.keys(t).join(", ")}), 1)`,
|
|
82190
82176
|
bindings: t
|
|
@@ -82230,7 +82216,7 @@ function roomCompositionExample(input) {
|
|
|
82230
82216
|
* an `enum-sensor` whose `value` is the raw STRING state — `number(d)` reads it,
|
|
82231
82217
|
* and anything that is not a number is `null`, never 0 (D393). The battery
|
|
82232
82218
|
* status sensor is an `enum-sensor` too (`unavailable` keeps its cold `''`, so
|
|
82233
|
-
* `
|
|
82219
|
+
* `level` is `null`). `charging` maps `battery_charging` off to
|
|
82234
82220
|
* `'unknown'`, never `'none'`: off does not prove "on battery alone" (the
|
|
82235
82221
|
* operator confirms the real semantics live).
|
|
82236
82222
|
*/
|
|
@@ -82299,7 +82285,7 @@ function feederCustomizationExample(sources) {
|
|
|
82299
82285
|
kind: "fields",
|
|
82300
82286
|
cap: "battery",
|
|
82301
82287
|
fields: {
|
|
82302
|
-
|
|
82288
|
+
level: {
|
|
82303
82289
|
kind: "expression",
|
|
82304
82290
|
expr: "s == \"low\" ? 15 : (s == \"normal\" ? 100 : null)",
|
|
82305
82291
|
bindings: { s: from(sources.batteryStatus, "enum-sensor", "value") }
|
|
@@ -82367,10 +82353,10 @@ function unitConstant(to) {
|
|
|
82367
82353
|
/** Primary numeric field that also publishes the cap's `unit` string. */
|
|
82368
82354
|
var UNIT_COMPANION_FIELD = {
|
|
82369
82355
|
"numeric-sensor": "value",
|
|
82370
|
-
"temperature-sensor": "
|
|
82371
|
-
"humidity-sensor": "
|
|
82372
|
-
"pressure-sensor": "
|
|
82373
|
-
"ambient-light-sensor": "
|
|
82356
|
+
"temperature-sensor": "temperature",
|
|
82357
|
+
"humidity-sensor": "humidity",
|
|
82358
|
+
"pressure-sensor": "pressure",
|
|
82359
|
+
"ambient-light-sensor": "illuminance"
|
|
82374
82360
|
};
|
|
82375
82361
|
/** `unit` when converting that cap's primary numeric field; otherwise none. */
|
|
82376
82362
|
function unitCompanionField(cap, fieldPath) {
|
|
@@ -82557,7 +82543,7 @@ var CAP_CUSTOMIZE_CATALOG = {
|
|
|
82557
82543
|
"battery": {
|
|
82558
82544
|
version: 1,
|
|
82559
82545
|
targets: [{
|
|
82560
|
-
id: "
|
|
82546
|
+
id: "level",
|
|
82561
82547
|
cardinality: "scalar",
|
|
82562
82548
|
deviceTypes: [
|
|
82563
82549
|
DeviceType.Camera,
|
|
@@ -82571,7 +82557,7 @@ var CAP_CUSTOMIZE_CATALOG = {
|
|
|
82571
82557
|
],
|
|
82572
82558
|
apply: "add",
|
|
82573
82559
|
vocabularyCap: "battery",
|
|
82574
|
-
vocabularyStateField: "
|
|
82560
|
+
vocabularyStateField: "level",
|
|
82575
82561
|
sources: [{
|
|
82576
82562
|
kind: "field",
|
|
82577
82563
|
valueKinds: ["number", "string"],
|
|
@@ -82586,7 +82572,7 @@ var CAP_CUSTOMIZE_CATALOG = {
|
|
|
82586
82572
|
}],
|
|
82587
82573
|
sourceReport: { status: "assignment-status" },
|
|
82588
82574
|
advancedExpression: true,
|
|
82589
|
-
path: "
|
|
82575
|
+
path: "level",
|
|
82590
82576
|
valueKind: "number",
|
|
82591
82577
|
nullable: true,
|
|
82592
82578
|
companions: [
|
|
@@ -82821,7 +82807,7 @@ var CAP_CUSTOMIZE_CATALOG = {
|
|
|
82821
82807
|
version: 1,
|
|
82822
82808
|
targets: [
|
|
82823
82809
|
{
|
|
82824
|
-
id: "
|
|
82810
|
+
id: "power",
|
|
82825
82811
|
cardinality: "scalar",
|
|
82826
82812
|
deviceTypes: [
|
|
82827
82813
|
DeviceType.Switch,
|
|
@@ -82841,7 +82827,7 @@ var CAP_CUSTOMIZE_CATALOG = {
|
|
|
82841
82827
|
],
|
|
82842
82828
|
apply: "add",
|
|
82843
82829
|
vocabularyCap: "power-meter",
|
|
82844
|
-
vocabularyStateField: "
|
|
82830
|
+
vocabularyStateField: "power",
|
|
82845
82831
|
sources: [{
|
|
82846
82832
|
kind: "numeric",
|
|
82847
82833
|
requiredUnit: "W",
|
|
@@ -82850,7 +82836,7 @@ var CAP_CUSTOMIZE_CATALOG = {
|
|
|
82850
82836
|
}],
|
|
82851
82837
|
sourceReport: { status: "assignment-status" },
|
|
82852
82838
|
advancedExpression: true,
|
|
82853
|
-
path: "
|
|
82839
|
+
path: "power",
|
|
82854
82840
|
valueKind: "number",
|
|
82855
82841
|
nullable: false,
|
|
82856
82842
|
companions: [{
|
|
@@ -82860,7 +82846,7 @@ var CAP_CUSTOMIZE_CATALOG = {
|
|
|
82860
82846
|
}]
|
|
82861
82847
|
},
|
|
82862
82848
|
{
|
|
82863
|
-
id: "
|
|
82849
|
+
id: "energy",
|
|
82864
82850
|
cardinality: "scalar",
|
|
82865
82851
|
deviceTypes: [
|
|
82866
82852
|
DeviceType.Switch,
|
|
@@ -82880,7 +82866,7 @@ var CAP_CUSTOMIZE_CATALOG = {
|
|
|
82880
82866
|
],
|
|
82881
82867
|
apply: "add",
|
|
82882
82868
|
vocabularyCap: "power-meter",
|
|
82883
|
-
vocabularyStateField: "
|
|
82869
|
+
vocabularyStateField: "energy",
|
|
82884
82870
|
sources: [{
|
|
82885
82871
|
kind: "numeric",
|
|
82886
82872
|
requiredUnit: "kWh",
|
|
@@ -82889,7 +82875,7 @@ var CAP_CUSTOMIZE_CATALOG = {
|
|
|
82889
82875
|
}],
|
|
82890
82876
|
sourceReport: { status: "assignment-status" },
|
|
82891
82877
|
advancedExpression: true,
|
|
82892
|
-
path: "
|
|
82878
|
+
path: "energy",
|
|
82893
82879
|
valueKind: "number",
|
|
82894
82880
|
nullable: false,
|
|
82895
82881
|
companions: [{
|
|
@@ -82899,7 +82885,7 @@ var CAP_CUSTOMIZE_CATALOG = {
|
|
|
82899
82885
|
}]
|
|
82900
82886
|
},
|
|
82901
82887
|
{
|
|
82902
|
-
id: "
|
|
82888
|
+
id: "voltage",
|
|
82903
82889
|
cardinality: "scalar",
|
|
82904
82890
|
deviceTypes: [
|
|
82905
82891
|
DeviceType.Switch,
|
|
@@ -82919,7 +82905,7 @@ var CAP_CUSTOMIZE_CATALOG = {
|
|
|
82919
82905
|
],
|
|
82920
82906
|
apply: "add",
|
|
82921
82907
|
vocabularyCap: "power-meter",
|
|
82922
|
-
vocabularyStateField: "
|
|
82908
|
+
vocabularyStateField: "voltage",
|
|
82923
82909
|
sources: [{
|
|
82924
82910
|
kind: "numeric",
|
|
82925
82911
|
requiredUnit: "V",
|
|
@@ -82928,7 +82914,7 @@ var CAP_CUSTOMIZE_CATALOG = {
|
|
|
82928
82914
|
}],
|
|
82929
82915
|
sourceReport: { status: "assignment-status" },
|
|
82930
82916
|
advancedExpression: true,
|
|
82931
|
-
path: "
|
|
82917
|
+
path: "voltage",
|
|
82932
82918
|
valueKind: "number",
|
|
82933
82919
|
nullable: false,
|
|
82934
82920
|
companions: [{
|
|
@@ -82938,7 +82924,7 @@ var CAP_CUSTOMIZE_CATALOG = {
|
|
|
82938
82924
|
}]
|
|
82939
82925
|
},
|
|
82940
82926
|
{
|
|
82941
|
-
id: "
|
|
82927
|
+
id: "current",
|
|
82942
82928
|
cardinality: "scalar",
|
|
82943
82929
|
deviceTypes: [
|
|
82944
82930
|
DeviceType.Switch,
|
|
@@ -82958,7 +82944,7 @@ var CAP_CUSTOMIZE_CATALOG = {
|
|
|
82958
82944
|
],
|
|
82959
82945
|
apply: "add",
|
|
82960
82946
|
vocabularyCap: "power-meter",
|
|
82961
|
-
vocabularyStateField: "
|
|
82947
|
+
vocabularyStateField: "current",
|
|
82962
82948
|
sources: [{
|
|
82963
82949
|
kind: "numeric",
|
|
82964
82950
|
requiredUnit: "A",
|
|
@@ -82967,7 +82953,7 @@ var CAP_CUSTOMIZE_CATALOG = {
|
|
|
82967
82953
|
}],
|
|
82968
82954
|
sourceReport: { status: "assignment-status" },
|
|
82969
82955
|
advancedExpression: true,
|
|
82970
|
-
path: "
|
|
82956
|
+
path: "current",
|
|
82971
82957
|
valueKind: "number",
|
|
82972
82958
|
nullable: false,
|
|
82973
82959
|
companions: [{
|
|
@@ -83068,19 +83054,19 @@ var CAP_CUSTOMIZE_CATALOG = {
|
|
|
83068
83054
|
* it is not an override list (D944).
|
|
83069
83055
|
*/
|
|
83070
83056
|
var CAP_RUNTIME_FIELD_UNITS = {
|
|
83071
|
-
"ambient-light-sensor": {
|
|
83057
|
+
"ambient-light-sensor": { illuminance: "lx" },
|
|
83072
83058
|
"battery": {
|
|
83073
|
-
|
|
83074
|
-
|
|
83059
|
+
level: "%",
|
|
83060
|
+
voltage: "V"
|
|
83075
83061
|
},
|
|
83076
|
-
"humidity-sensor": {
|
|
83062
|
+
"humidity-sensor": { humidity: "%" },
|
|
83077
83063
|
"power-meter": {
|
|
83078
|
-
|
|
83079
|
-
|
|
83080
|
-
|
|
83081
|
-
|
|
83064
|
+
power: "W",
|
|
83065
|
+
energy: "kWh",
|
|
83066
|
+
voltage: "V",
|
|
83067
|
+
current: "A"
|
|
83082
83068
|
},
|
|
83083
|
-
"temperature-sensor": {
|
|
83069
|
+
"temperature-sensor": { temperature: "°C" }
|
|
83084
83070
|
};
|
|
83085
83071
|
//#endregion
|
|
83086
83072
|
//#region src/composition/customize/field-source.ts
|
|
@@ -85199,7 +85185,7 @@ var BaseDevice = class {
|
|
|
85199
85185
|
* `device-local-state.ts`. Drivers access via:
|
|
85200
85186
|
*
|
|
85201
85187
|
* `this.state.battery.sleeping = true` // patches the battery slice
|
|
85202
|
-
* `const pct = this.state.battery.
|
|
85188
|
+
* `const pct = this.state.battery.level` // reads the battery slice
|
|
85203
85189
|
* `this.state.deviceStatus.online = true` // mirrors `markOnline(true)`
|
|
85204
85190
|
*
|
|
85205
85191
|
* Adding a new cap with `runtimeState:` automatically extends this
|
|
@@ -85239,7 +85225,7 @@ var BaseDevice = class {
|
|
|
85239
85225
|
* shape; drivers don't redeclare it, they just write through.
|
|
85240
85226
|
*
|
|
85241
85227
|
* Read: `this.runtimeState.getCapState('battery')` →
|
|
85242
|
-
* `{
|
|
85228
|
+
* `{level, charging, sleeping, lastUpdated}` for any
|
|
85243
85229
|
* provider that registers `batteryCapability`.
|
|
85244
85230
|
* Write: `this.runtimeState.setCapState('battery', { … })`.
|
|
85245
85231
|
*
|
|
@@ -87204,17 +87190,17 @@ function pickAccessoryControl(device) {
|
|
|
87204
87190
|
var SENSOR_MAP = {
|
|
87205
87191
|
"temperature-sensor": {
|
|
87206
87192
|
capKey: "temperatureSensor",
|
|
87207
|
-
field: "
|
|
87193
|
+
field: "temperature",
|
|
87208
87194
|
fallbackUnit: "°C"
|
|
87209
87195
|
},
|
|
87210
87196
|
"humidity-sensor": {
|
|
87211
87197
|
capKey: "humiditySensor",
|
|
87212
|
-
field: "
|
|
87198
|
+
field: "humidity",
|
|
87213
87199
|
fallbackUnit: "%"
|
|
87214
87200
|
},
|
|
87215
87201
|
"ambient-light-sensor": {
|
|
87216
87202
|
capKey: "ambientLightSensor",
|
|
87217
|
-
field: "
|
|
87203
|
+
field: "illuminance",
|
|
87218
87204
|
fallbackUnit: "lx"
|
|
87219
87205
|
},
|
|
87220
87206
|
"numeric-sensor": {
|
|
@@ -97672,7 +97658,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
97672
97658
|
label: t("Full brightness", "Luminosità massima"),
|
|
97673
97659
|
phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
|
|
97674
97660
|
icon: "sun",
|
|
97675
|
-
args: {
|
|
97661
|
+
args: { level: 100 }
|
|
97676
97662
|
},
|
|
97677
97663
|
{
|
|
97678
97664
|
id: "brightness.half",
|
|
@@ -97680,7 +97666,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
97680
97666
|
label: t("Half brightness", "Luminosità a metà"),
|
|
97681
97667
|
phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
|
|
97682
97668
|
icon: "sun-dim",
|
|
97683
|
-
args: {
|
|
97669
|
+
args: { level: 50 }
|
|
97684
97670
|
},
|
|
97685
97671
|
{
|
|
97686
97672
|
id: "brightness.off",
|
|
@@ -97688,16 +97674,16 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
97688
97674
|
label: t("Brightness off", "Luminosità a zero"),
|
|
97689
97675
|
phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
|
|
97690
97676
|
icon: "lightbulb-off",
|
|
97691
|
-
args: {
|
|
97677
|
+
args: { level: 0 }
|
|
97692
97678
|
},
|
|
97693
97679
|
{
|
|
97694
97680
|
id: "brightness.set",
|
|
97695
97681
|
method: "setBrightness",
|
|
97696
97682
|
label: t("Set brightness", "Imposta la luminosità"),
|
|
97697
|
-
phrase: t("Set the brightness of {device} to {
|
|
97683
|
+
phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
|
|
97698
97684
|
icon: "sun-medium",
|
|
97699
97685
|
openArgs: [{
|
|
97700
|
-
key: "
|
|
97686
|
+
key: "level",
|
|
97701
97687
|
label: PERCENT,
|
|
97702
97688
|
offer: {
|
|
97703
97689
|
kind: "number",
|
|
@@ -97711,13 +97697,13 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
97711
97697
|
],
|
|
97712
97698
|
state: [{
|
|
97713
97699
|
kind: "numeric",
|
|
97714
|
-
field: "
|
|
97700
|
+
field: "level",
|
|
97715
97701
|
quantity: t("the brightness", "la luminosità"),
|
|
97716
97702
|
label: t("Brightness", "Luminosità"),
|
|
97717
97703
|
unit: "%",
|
|
97718
97704
|
icon: "sun"
|
|
97719
97705
|
}],
|
|
97720
|
-
events: { onBrightnessChanged: { notOperatorFacing: "the `
|
|
97706
|
+
events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
|
|
97721
97707
|
},
|
|
97722
97708
|
color: {
|
|
97723
97709
|
scope: "device",
|
|
@@ -97731,7 +97717,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
97731
97717
|
icon: "sun",
|
|
97732
97718
|
args: { color: {
|
|
97733
97719
|
mode: "mired",
|
|
97734
|
-
|
|
97720
|
+
colorTemperature: 370
|
|
97735
97721
|
} }
|
|
97736
97722
|
},
|
|
97737
97723
|
{
|
|
@@ -97742,7 +97728,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
97742
97728
|
icon: "snowflake",
|
|
97743
97729
|
args: { color: {
|
|
97744
97730
|
mode: "mired",
|
|
97745
|
-
|
|
97731
|
+
colorTemperature: 200
|
|
97746
97732
|
} }
|
|
97747
97733
|
},
|
|
97748
97734
|
{
|
|
@@ -98356,7 +98342,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
98356
98342
|
label: t("Fan off", "Ventilatore spento"),
|
|
98357
98343
|
phrase: t("Stop {device}", "Ferma {device}"),
|
|
98358
98344
|
icon: "power-off",
|
|
98359
|
-
args: {
|
|
98345
|
+
args: { speed: 0 }
|
|
98360
98346
|
},
|
|
98361
98347
|
{
|
|
98362
98348
|
id: "fan.full",
|
|
@@ -98364,16 +98350,16 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
98364
98350
|
label: t("Fan full", "Ventilatore al massimo"),
|
|
98365
98351
|
phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
|
|
98366
98352
|
icon: "fan",
|
|
98367
|
-
args: {
|
|
98353
|
+
args: { speed: 100 }
|
|
98368
98354
|
},
|
|
98369
98355
|
{
|
|
98370
98356
|
id: "fan.speed",
|
|
98371
98357
|
method: "setPercentage",
|
|
98372
98358
|
label: t("Set speed", "Imposta la velocità"),
|
|
98373
|
-
phrase: t("Set the speed of {device} to {
|
|
98359
|
+
phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
|
|
98374
98360
|
icon: "fan",
|
|
98375
98361
|
openArgs: [{
|
|
98376
|
-
key: "
|
|
98362
|
+
key: "speed",
|
|
98377
98363
|
label: t("Speed", "Velocità"),
|
|
98378
98364
|
offer: {
|
|
98379
98365
|
kind: "number",
|
|
@@ -98435,7 +98421,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
98435
98421
|
],
|
|
98436
98422
|
state: [{
|
|
98437
98423
|
kind: "numeric",
|
|
98438
|
-
field: "
|
|
98424
|
+
field: "speed",
|
|
98439
98425
|
quantity: t("the speed", "la velocità"),
|
|
98440
98426
|
label: t("Speed", "Velocità"),
|
|
98441
98427
|
unit: "%",
|
|
@@ -99235,7 +99221,7 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
99235
99221
|
},
|
|
99236
99222
|
{
|
|
99237
99223
|
kind: "numeric",
|
|
99238
|
-
field: "
|
|
99224
|
+
field: "progress",
|
|
99239
99225
|
quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
|
|
99240
99226
|
label: t("Progress", "Avanzamento"),
|
|
99241
99227
|
unit: "%",
|
|
@@ -99593,10 +99579,10 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
99593
99579
|
id: "media.seek",
|
|
99594
99580
|
method: "seek",
|
|
99595
99581
|
label: t("Seek", "Vai al punto"),
|
|
99596
|
-
phrase: t("Move {device} to {
|
|
99582
|
+
phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
|
|
99597
99583
|
icon: "fast-forward",
|
|
99598
99584
|
openArgs: [{
|
|
99599
|
-
key: "
|
|
99585
|
+
key: "position",
|
|
99600
99586
|
label: t("Position", "Posizione"),
|
|
99601
99587
|
offer: {
|
|
99602
99588
|
kind: "number",
|
|
@@ -100649,7 +100635,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
100649
100635
|
state: [
|
|
100650
100636
|
{
|
|
100651
100637
|
kind: "numeric",
|
|
100652
|
-
field: "
|
|
100638
|
+
field: "co2",
|
|
100653
100639
|
quantity: t("the CO₂", "la CO₂"),
|
|
100654
100640
|
label: t("CO₂", "CO₂"),
|
|
100655
100641
|
unit: "ppm",
|
|
@@ -100657,7 +100643,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
100657
100643
|
},
|
|
100658
100644
|
{
|
|
100659
100645
|
kind: "numeric",
|
|
100660
|
-
field: "
|
|
100646
|
+
field: "voc",
|
|
100661
100647
|
quantity: t("the VOC level", "il livello di COV"),
|
|
100662
100648
|
label: t("VOC", "COV"),
|
|
100663
100649
|
unit: "ppb",
|
|
@@ -100693,7 +100679,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
100693
100679
|
noun: t("Light level", "Luminosità ambiente"),
|
|
100694
100680
|
state: [{
|
|
100695
100681
|
kind: "numeric",
|
|
100696
|
-
field: "
|
|
100682
|
+
field: "illuminance",
|
|
100697
100683
|
quantity: t("the light level", "la luminosità"),
|
|
100698
100684
|
label: t("Illuminance", "Illuminamento"),
|
|
100699
100685
|
unit: "lx",
|
|
@@ -100896,7 +100882,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
100896
100882
|
noun: t("Humidity", "Umidità"),
|
|
100897
100883
|
state: [{
|
|
100898
100884
|
kind: "numeric",
|
|
100899
|
-
field: "
|
|
100885
|
+
field: "humidity",
|
|
100900
100886
|
quantity: t("the humidity", "l’umidità"),
|
|
100901
100887
|
label: t("Humidity", "Umidità"),
|
|
100902
100888
|
unit: "%",
|
|
@@ -100944,7 +100930,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
100944
100930
|
state: [
|
|
100945
100931
|
{
|
|
100946
100932
|
kind: "numeric",
|
|
100947
|
-
field: "
|
|
100933
|
+
field: "power",
|
|
100948
100934
|
quantity: t("the power draw", "il consumo"),
|
|
100949
100935
|
label: t("Power", "Potenza"),
|
|
100950
100936
|
unit: "W",
|
|
@@ -100952,7 +100938,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
100952
100938
|
},
|
|
100953
100939
|
{
|
|
100954
100940
|
kind: "numeric",
|
|
100955
|
-
field: "
|
|
100941
|
+
field: "energy",
|
|
100956
100942
|
quantity: t("the energy used", "l’energia consumata"),
|
|
100957
100943
|
label: t("Energy", "Energia"),
|
|
100958
100944
|
unit: "kWh",
|
|
@@ -100960,7 +100946,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
100960
100946
|
},
|
|
100961
100947
|
{
|
|
100962
100948
|
kind: "numeric",
|
|
100963
|
-
field: "
|
|
100949
|
+
field: "voltage",
|
|
100964
100950
|
quantity: t("the voltage", "la tensione"),
|
|
100965
100951
|
label: t("Voltage", "Tensione"),
|
|
100966
100952
|
unit: "V",
|
|
@@ -100968,7 +100954,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
100968
100954
|
},
|
|
100969
100955
|
{
|
|
100970
100956
|
kind: "numeric",
|
|
100971
|
-
field: "
|
|
100957
|
+
field: "current",
|
|
100972
100958
|
quantity: t("the current", "la corrente"),
|
|
100973
100959
|
label: t("Current", "Corrente"),
|
|
100974
100960
|
unit: "A",
|
|
@@ -100985,13 +100971,6 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
100985
100971
|
label: t("Where", "Posizione"),
|
|
100986
100972
|
phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
|
|
100987
100973
|
icon: "map-pin"
|
|
100988
|
-
}, {
|
|
100989
|
-
kind: "numeric",
|
|
100990
|
-
field: "batteryPercent",
|
|
100991
|
-
quantity: t("the phone battery", "la batteria del telefono"),
|
|
100992
|
-
label: t("Battery", "Batteria"),
|
|
100993
|
-
unit: "%",
|
|
100994
|
-
icon: "battery"
|
|
100995
100974
|
}]
|
|
100996
100975
|
},
|
|
100997
100976
|
"pressure-sensor": {
|
|
@@ -100999,7 +100978,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
100999
100978
|
noun: t("Pressure", "Pressione"),
|
|
101000
100979
|
state: [{
|
|
101001
100980
|
kind: "numeric",
|
|
101002
|
-
field: "
|
|
100981
|
+
field: "pressure",
|
|
101003
100982
|
quantity: t("the pressure", "la pressione"),
|
|
101004
100983
|
label: t("Pressure", "Pressione"),
|
|
101005
100984
|
unit: "hPa",
|
|
@@ -101035,7 +101014,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
101035
101014
|
noun: t("Temperature", "Temperatura"),
|
|
101036
101015
|
state: [{
|
|
101037
101016
|
kind: "numeric",
|
|
101038
|
-
field: "
|
|
101017
|
+
field: "temperature",
|
|
101039
101018
|
quantity: t("the temperature", "la temperatura"),
|
|
101040
101019
|
label: t("Temperature", "Temperatura"),
|
|
101041
101020
|
unit: "°C",
|
|
@@ -101106,7 +101085,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
101106
101085
|
state: [
|
|
101107
101086
|
{
|
|
101108
101087
|
kind: "numeric",
|
|
101109
|
-
field: "
|
|
101088
|
+
field: "level",
|
|
101110
101089
|
quantity: t("the battery level", "il livello della batteria"),
|
|
101111
101090
|
label: t("Battery", "Batteria"),
|
|
101112
101091
|
unit: "%",
|
|
@@ -101148,7 +101127,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
101148
101127
|
icon: "battery-charging"
|
|
101149
101128
|
}
|
|
101150
101129
|
],
|
|
101151
|
-
events: { onStatusChanged: { notOperatorFacing: "the
|
|
101130
|
+
events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
|
|
101152
101131
|
extraEvents: [{
|
|
101153
101132
|
category: EventCategory.DeviceAwake,
|
|
101154
101133
|
label: t("Woke up", "Risvegliato"),
|
|
@@ -101166,7 +101145,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
101166
101145
|
noun: t("Network link", "Collegamento di rete"),
|
|
101167
101146
|
state: [{
|
|
101168
101147
|
kind: "numeric",
|
|
101169
|
-
field: "
|
|
101148
|
+
field: "signal",
|
|
101170
101149
|
quantity: t("the signal strength", "l’intensità del segnale"),
|
|
101171
101150
|
label: t("Signal", "Segnale"),
|
|
101172
101151
|
unit: "%",
|