@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.
Files changed (44) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/addon.js +1 -1
  3. package/dist/addon.mjs +1 -1
  4. package/dist/capabilities/air-quality-sensor.cap.d.ts +8 -8
  5. package/dist/capabilities/ambient-light-sensor.cap.d.ts +4 -4
  6. package/dist/capabilities/battery.cap.d.ts +14 -14
  7. package/dist/capabilities/brightness.cap.d.ts +7 -7
  8. package/dist/capabilities/capability-definition.d.ts +3 -3
  9. package/dist/capabilities/color.cap.d.ts +6 -6
  10. package/dist/capabilities/device-history.cap.d.ts +2 -2
  11. package/dist/capabilities/dishwasher.cap.d.ts +11 -11
  12. package/dist/capabilities/fan-control.cap.d.ts +6 -6
  13. package/dist/capabilities/humidity-sensor.cap.d.ts +4 -4
  14. package/dist/capabilities/lawn-mower-control.cap.d.ts +3 -3
  15. package/dist/capabilities/media-player.cap.d.ts +8 -8
  16. package/dist/capabilities/meter.cap.d.ts +1 -1
  17. package/dist/capabilities/network-link.cap.d.ts +13 -13
  18. package/dist/capabilities/power-meter.cap.d.ts +22 -22
  19. package/dist/capabilities/presence.cap.d.ts +1 -15
  20. package/dist/capabilities/pressure-sensor.cap.d.ts +4 -4
  21. package/dist/capabilities/temperature-sensor.cap.d.ts +4 -4
  22. package/dist/capabilities/vacuum-control.cap.d.ts +3 -3
  23. package/dist/client.js +1 -1
  24. package/dist/client.mjs +1 -1
  25. package/dist/composition/composition-report.d.ts +1 -1
  26. package/dist/composition/examples.d.ts +1 -1
  27. package/dist/composition/helpers/appliance.d.ts +1 -1
  28. package/dist/{composition-CpAc0YfQ.js → composition-BZf_gqG7.js} +2 -2
  29. package/dist/{composition-Bb8iwHEJ.mjs → composition-CZImLpOI.mjs} +2 -2
  30. package/dist/device/base-device.d.ts +2 -2
  31. package/dist/device/device-runtime-state.d.ts +1 -1
  32. package/dist/device/device-state-handle.d.ts +1 -1
  33. package/dist/device/system-mirror.d.ts +1 -1
  34. package/dist/generated/addon-cap-facts.d.ts +1 -1
  35. package/dist/generated/customize-catalog.d.ts +15 -15
  36. package/dist/generated/history-catalog.d.ts +1 -1
  37. package/dist/index.js +182 -203
  38. package/dist/index.mjs +182 -203
  39. package/dist/interfaces/event-bus.d.ts +3 -3
  40. package/dist/node.js +1 -1
  41. package/dist/node.mjs +1 -1
  42. package/dist/{sleep-DFaVPxfm.mjs → sleep-Crlmu_tO.mjs} +26 -30
  43. package/dist/{sleep-CO61AfwW.js → sleep-DHitF_e4.js} +26 -30
  44. 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-DFaVPxfm.mjs";
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-Bb8iwHEJ.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-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.celsius`. */
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: "celsius",
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: "percent",
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: "hpa",
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: "lux",
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: "watts",
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: "kwhTotal",
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: "percentage",
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
- * 42 caps with series (77 series), 33 caps answered `'none'`.
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
- "co2Ppm": {
16138
+ "co2": {
16139
16139
  kind: "gauge",
16140
16140
  unit: "ppm",
16141
16141
  deadband: 5
16142
16142
  },
16143
- "vocPpb": {
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": { "lux": {
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
- "percentage": {
16186
+ "level": {
16187
16187
  kind: "gauge",
16188
16188
  unit: "%"
16189
16189
  },
16190
- "volts": {
16190
+ "voltage": {
16191
16191
  kind: "gauge",
16192
16192
  unit: "V"
16193
16193
  }
16194
16194
  },
16195
16195
  "binary": { "on": { kind: "boolean" } },
16196
- "brightness": { "percentage": {
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
- "progressPercent": {
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
- "remainingSeconds": {
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
- "percentage": {
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": { "percent": {
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
- "signalPercent": {
16341
+ "signal": {
16342
16342
  kind: "gauge",
16343
16343
  unit: "%",
16344
16344
  deadband: 3,
16345
16345
  minIntervalMs: 6e4
16346
16346
  },
16347
- "rssiDbm": {
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
- "watts": {
16374
+ "power": {
16375
16375
  kind: "gauge",
16376
16376
  unit: "W",
16377
16377
  deadband: 1,
16378
16378
  minIntervalMs: 3e4
16379
16379
  },
16380
- "kwhTotal": {
16380
+ "energy": {
16381
16381
  kind: "counter",
16382
16382
  unit: "kWh",
16383
16383
  deadband: .01,
16384
16384
  minIntervalMs: 6e4
16385
16385
  },
16386
- "volts": {
16386
+ "voltage": {
16387
16387
  kind: "gauge",
16388
16388
  unit: "V",
16389
16389
  deadband: 1,
16390
16390
  minIntervalMs: 3e4
16391
16391
  },
16392
- "amps": {
16392
+ "current": {
16393
16393
  kind: "gauge",
16394
16394
  unit: "A",
16395
16395
  deadband: .05,
16396
16396
  minIntervalMs: 3e4
16397
16397
  },
16398
- "va": {
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
- "presence": { "batteryPercent": {
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": { "celsius": {
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 watts = spec.source.cap === "power-meter" && spec.source.fieldPath === "watts";
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" && !watts) problems.push(problem("kind-mismatch", "helper.output", "energy is the integral of power-meter.watts; another reading uses the meter"));
16691
- if (spec.output === "meter" && watts) problems.push(problem("kind-mismatch", "helper.output", "power integrates to power-meter.kwhTotal, which energy dashboards already read"));
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 ? "kwhTotal" : "value",
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 !== "watts") return {
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.watts")]
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
- watts: read,
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
- * `kwhTotal` counter when the device has one, else from integrating its
19229
- * `watts` gauge over time.
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
- co2Ppm: z.number().min(0).optional().meta(readingMeta("concentration-volume")),
64264
+ co2: z.number().min(0).optional().meta(readingMeta("concentration-volume")),
64269
64265
  /** Total volatile organic compounds in ppb. */
64270
- vocPpb: z.number().min(0).optional().meta(readingMeta("concentration-ppb")),
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
- co2Ppm: {
64299
+ co2: {
64304
64300
  kind: "gauge",
64305
64301
  unit: "ppm",
64306
64302
  deadband: 5
64307
64303
  },
64308
- vocPpb: {
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
- lux: z.number().min(0).nullable().meta(readingMeta("illuminance", {
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: { lux: {
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
- percentage: z.number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
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 `percentage` closed
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
- volts: z.number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
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 — `percentage` is then a coarse stand-in (100 = normal,
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: "percentage",
64850
+ id: "level",
64855
64851
  cardinality: "scalar",
64856
64852
  vocabulary: {
64857
64853
  cap: "battery",
64858
- stateField: "percentage"
64854
+ stateField: "level"
64859
64855
  },
64860
64856
  deviceTypes: BATTERY_DEVICE_TYPES,
64861
64857
  apply: "add",
64862
- path: "percentage",
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
- percentage: null,
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
- percentage: {
64979
+ level: {
64984
64980
  kind: "gauge",
64985
64981
  unit: "%"
64986
64982
  },
64987
- volts: {
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
- * percentage})` mutation plus the auto-injected `getStatus`. Drivers
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
- percentage: z.number().min(0).max(100).meta(readingMeta("percentage")),
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
- percentage: z.number().min(0).max(100)
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
- percentage: z.number().min(0).max(100),
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: { percentage: {
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
- mireds: z.number().int().min(50).max(1e3)
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` / `mireds` reflects
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
- mireds: z.number().int().optional().meta(readingMeta("colour-temperature")),
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
- mireds: z.number().int().optional(),
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
- remainingSeconds: z.number().int().nonnegative().nullable().meta(readingMeta("duration")),
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
- delayedStartSeconds: z.number().int().nonnegative().nullable().meta(readingMeta("duration")),
66933
+ delayedStart: z.number().int().nonnegative().nullable().meta(readingMeta("duration")),
66938
66934
  /** Cycle completion 0..100, or null when not applicable. */
66939
- progressPercent: z.number().min(0).max(100).nullable().meta(readingMeta("percentage")),
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
- progressPercent: {
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
- remainingSeconds: {
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
- percentage: z.number().min(0).max(100).nullable().meta(readingMeta("percentage")),
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
- percentage: z.number().min(0).max(100)
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 `percentage` for live updates.
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
- percentage: {
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
- percent: z.number().min(0).max(100).nullable().meta(readingMeta("humidity", {
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: { percent: {
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
- progressPercent: z.number().min(0).max(100).nullable().meta(readingMeta("percentage")),
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.kwhTotal`
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
- positionMs: z.number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
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
- durationMs: z.number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
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
- positionMs: z.number().int().nonnegative()
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
- * `positionMs` is not recorded: it moves continuously while playing.
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
- signalPercent: z.number().min(0).max(100).nullable().meta(readingMeta("percentage")),
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
- rssiDbm: z.number().optional().meta(readingMeta("signal-level")),
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
- signalPercent: null,
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(rssiDbm) {
71220
- if (rssiDbm === void 0 || !Number.isFinite(rssiDbm) || rssiDbm > 0) return null;
71221
- return Math.round((Math.min(-50, Math.max(-100, rssiDbm)) + 100) * 2);
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
- signalPercent: {
71268
+ signal: {
71273
71269
  kind: "gauge",
71274
71270
  unit: "%",
71275
71271
  deadband: 3,
71276
71272
  minIntervalMs: 6e4
71277
71273
  },
71278
- rssiDbm: {
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 in watts. */
73642
- watts: z.number().optional().meta(readingMeta("power", { label: "Power" })),
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
- kwhTotal: z.number().optional().meta(readingMeta("energy", { label: "Energy" })),
73645
- /** Voltage in volts. */
73646
- volts: z.number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
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
- amps: z.number().optional().meta(readingMeta("current", { label: "Current" })),
73644
+ current: z.number().optional().meta(readingMeta("current", { label: "Current" })),
73649
73645
  /** Apparent power in volt-amperes. */
73650
- va: z.number().optional().meta(readingMeta("apparent-power")),
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: watts, energy, voltage and current from other devices (D951). */
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("watts", "W"),
73713
- powerTarget("kwhTotal", "kWh"),
73714
- powerTarget("volts", "V"),
73715
- powerTarget("amps", "A")
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`; `kwhTotal` is an accumulator whose restored value is the baseline.
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; `kwhTotal` is the one monotonic meter (counter).
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
- watts: {
73737
+ power: {
73742
73738
  kind: "gauge",
73743
73739
  unit: "W",
73744
73740
  deadband: 1,
73745
73741
  minIntervalMs: 3e4
73746
73742
  },
73747
- kwhTotal: {
73743
+ energy: {
73748
73744
  kind: "counter",
73749
73745
  unit: "kWh",
73750
73746
  deadband: .01,
73751
73747
  minIntervalMs: 6e4
73752
73748
  },
73753
- volts: {
73749
+ voltage: {
73754
73750
  kind: "gauge",
73755
73751
  unit: "V",
73756
73752
  deadband: 1,
73757
73753
  minIntervalMs: 3e4
73758
73754
  },
73759
- amps: {
73755
+ current: {
73760
73756
  kind: "gauge",
73761
73757
  unit: "A",
73762
73758
  deadband: .05,
73763
73759
  minIntervalMs: 3e4
73764
73760
  },
73765
- va: {
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
- hpa: z.number().nullable().meta(readingMeta("pressure", { precision: 0 })),
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: { hpa: {
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
- celsius: z.number().nullable().meta(readingMeta("temperature", {
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: { celsius: {
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
- progressPercent: z.number().min(0).max(100).nullable().meta(readingMeta("percentage")),
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", "celsius");
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
- celsius: {
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
- * `percentage` is `null`). `charging` maps `battery_charging` off to
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
- percentage: {
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": "celsius",
82371
- "humidity-sensor": "percent",
82372
- "pressure-sensor": "hpa",
82373
- "ambient-light-sensor": "lux"
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: "percentage",
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: "percentage",
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: "percentage",
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: "watts",
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: "watts",
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: "watts",
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: "kwhTotal",
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: "kwhTotal",
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: "kwhTotal",
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: "volts",
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: "volts",
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: "volts",
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: "amps",
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: "amps",
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: "amps",
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": { lux: "lx" },
83057
+ "ambient-light-sensor": { illuminance: "lx" },
83072
83058
  "battery": {
83073
- percentage: "%",
83074
- volts: "V"
83059
+ level: "%",
83060
+ voltage: "V"
83075
83061
  },
83076
- "humidity-sensor": { percent: "%" },
83062
+ "humidity-sensor": { humidity: "%" },
83077
83063
  "power-meter": {
83078
- watts: "W",
83079
- kwhTotal: "kWh",
83080
- volts: "V",
83081
- amps: "A"
83064
+ power: "W",
83065
+ energy: "kWh",
83066
+ voltage: "V",
83067
+ current: "A"
83082
83068
  },
83083
- "temperature-sensor": { celsius: "°C" }
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.percentage` // reads the battery slice
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
- * `{percentage, charging, sleeping, lastUpdated}` for any
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: "celsius",
87193
+ field: "temperature",
87208
87194
  fallbackUnit: "°C"
87209
87195
  },
87210
87196
  "humidity-sensor": {
87211
87197
  capKey: "humiditySensor",
87212
- field: "percent",
87198
+ field: "humidity",
87213
87199
  fallbackUnit: "%"
87214
87200
  },
87215
87201
  "ambient-light-sensor": {
87216
87202
  capKey: "ambientLightSensor",
87217
- field: "lux",
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: { percentage: 100 }
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: { percentage: 50 }
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: { percentage: 0 }
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 {percentage}", "Imposta la luminosità di {device} a {percentage}"),
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: "percentage",
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: "percentage",
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 `percentage` state trigger reads the same change" } }
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
- mireds: 370
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
- mireds: 200
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: { percentage: 0 }
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: { percentage: 100 }
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 {percentage}", "Imposta la velocità di {device} al {percentage}"),
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: "percentage",
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: "percentage",
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: "progressPercent",
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 {positionMs}", "Porta {device} al punto {positionMs}"),
99582
+ phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
99597
99583
  icon: "fast-forward",
99598
99584
  openArgs: [{
99599
- key: "positionMs",
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: "co2Ppm",
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: "vocPpb",
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: "lux",
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: "percent",
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: "watts",
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: "kwhTotal",
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: "volts",
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: "amps",
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: "hpa",
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: "celsius",
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: "percentage",
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 percentage / sleeping / charging state triggers each read one field of this change" } },
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: "signalPercent",
101148
+ field: "signal",
101170
101149
  quantity: t("the signal strength", "l’intensità del segnale"),
101171
101150
  label: t("Signal", "Segnale"),
101172
101151
  unit: "%",