iotas-ts 1.0.0 → 1.2.0

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 CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.2.0](https://github.com/mezaugusto/iotas-ts/compare/v1.1.0...v1.2.0) (2026-04-12)
4
+
5
+
6
+ ### Features
7
+
8
+ * :art: export thresholds ([#12](https://github.com/mezaugusto/iotas-ts/issues/12)) ([8b56a7a](https://github.com/mezaugusto/iotas-ts/commit/8b56a7a81361b680f32b5b0d6eb716e3904075bf))
9
+
10
+ ## [1.1.0](https://github.com/mezaugusto/iotas-ts/compare/v1.0.0...v1.1.0) (2026-04-12)
11
+
12
+
13
+ ### Features
14
+
15
+ * :art: extract shared IOTAS domain logic from plugin integrations ([#10](https://github.com/mezaugusto/iotas-ts/issues/10)) ([342bc0f](https://github.com/mezaugusto/iotas-ts/commit/342bc0fa4fb94540029e5a34ae91878085cbe39d))
16
+
3
17
  ## [1.0.0](https://github.com/mezaugusto/iotas-ts/compare/v0.2.0...v1.0.0) (2026-04-12)
4
18
 
5
19
 
@@ -1,5 +1,5 @@
1
1
  import type { IotasSession } from './session.js';
2
- export interface IotasTransportOptions {
2
+ interface IotasTransportOptions {
3
3
  session: IotasSession;
4
4
  baseUrl?: string;
5
5
  maxRequestAuthRetries?: number;
@@ -19,3 +19,4 @@ export declare class IotasTransport {
19
19
  constructor(options: IotasTransportOptions);
20
20
  request<T>(path: string, options?: RequestInit, authRetryCount?: number): Promise<T>;
21
21
  }
22
+ export {};
@@ -2,7 +2,6 @@ import type { IotasLogger } from '../logger.js';
2
2
  import type { IotasClient } from '../api/iotasClient.js';
3
3
  import type { FeatureCacheOptions, Rooms } from '../types.js';
4
4
  export type FeatureChangeCallback = (changed: Map<string, number>) => void;
5
- /** Optional transform applied to every rooms snapshot (discovery and polling). */
6
5
  export type SnapshotFilter = (rooms: Rooms) => Rooms;
7
6
  /**
8
7
  * FeatureCache provides cached feature values with background polling.
@@ -30,6 +29,11 @@ export declare class FeatureCache {
30
29
  seed(rooms: Rooms): void;
31
30
  get(featureId: string): number | undefined;
32
31
  set(featureId: string, value: number): void;
32
+ /**
33
+ * Write-through: sets cache value with write barrier AND sends the update
34
+ * to the IOTAS API in one call.
35
+ */
36
+ writeThrough(featureId: string, value: number): void;
33
37
  /**
34
38
  * Subscribe to feature changes. Callback is invoked when any of the
35
39
  * specified features are updated by the poller.
@@ -52,6 +52,14 @@ export class FeatureCache {
52
52
  this.values.set(featureId, value);
53
53
  this.writeTimestamps.set(featureId, Date.now());
54
54
  }
55
+ /**
56
+ * Write-through: sets cache value with write barrier AND sends the update
57
+ * to the IOTAS API in one call.
58
+ */
59
+ writeThrough(featureId, value) {
60
+ this.set(featureId, value);
61
+ this.client.updateFeature(featureId, value);
62
+ }
55
63
  /**
56
64
  * Subscribe to feature changes. Callback is invoked when any of the
57
65
  * specified features are updated by the poller.
@@ -1 +1 @@
1
- {"version":3,"file":"featureCache.js","sourceRoot":"","sources":["../../../src/cache/featureCache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"featureCache.js","sourceRoot":"","sources":["../../../src/cache/featureCache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ export declare const EventTypeName: {
2
+ readonly OnOff: "OnOff";
3
+ readonly Level: "Level";
4
+ readonly Temperature: "Temperature";
5
+ readonly ThermostatMode: "ThermostatMode";
6
+ readonly Lock: "Lock";
7
+ };
8
+ export type EventTypeName = (typeof EventTypeName)[keyof typeof EventTypeName];
9
+ export declare const FeatureCategory: {
10
+ readonly Light: "light";
11
+ readonly Lock: "lock";
12
+ readonly CurrentTemperature: "current_temperature";
13
+ readonly HeatSetPoint: "heat_set_point";
14
+ readonly CoolSetPoint: "cool_set_point";
15
+ readonly ThermostatMode: "thermostat_mode";
16
+ readonly Battery: "battery";
17
+ readonly Humidity: "humidity";
18
+ readonly Motion: "motion";
19
+ readonly DoorState: "door_state";
20
+ };
21
+ export type FeatureCategory = (typeof FeatureCategory)[keyof typeof FeatureCategory];
22
+ export declare const FeatureTypeName: {
23
+ readonly Light: "Light";
24
+ readonly OperationMode: "Operation Mode";
25
+ readonly Battery: "Battery";
26
+ };
27
+ export type FeatureTypeName = (typeof FeatureTypeName)[keyof typeof FeatureTypeName];
28
+ export declare const DeviceCategory: {
29
+ readonly Dimmer: "dimmer";
30
+ readonly Switch: "switch";
31
+ readonly MotionSwitch: "motion_switch";
32
+ readonly Lock: "lock";
33
+ readonly Thermostat: "thermostat";
34
+ readonly Door: "door";
35
+ };
36
+ export type DeviceCategory = (typeof DeviceCategory)[keyof typeof DeviceCategory];
37
+ export declare function isDeviceCategory(value: string): value is DeviceCategory;
38
+ export declare const READ_ONLY_CATEGORIES: ReadonlySet<string>;
39
+ export declare const DISCOVERY_EVENT_TYPES: ReadonlySet<string>;
@@ -0,0 +1,51 @@
1
+ export const EventTypeName = {
2
+ OnOff: 'OnOff',
3
+ Level: 'Level',
4
+ Temperature: 'Temperature',
5
+ ThermostatMode: 'ThermostatMode',
6
+ Lock: 'Lock',
7
+ };
8
+ export const FeatureCategory = {
9
+ Light: 'light',
10
+ Lock: 'lock',
11
+ CurrentTemperature: 'current_temperature',
12
+ HeatSetPoint: 'heat_set_point',
13
+ CoolSetPoint: 'cool_set_point',
14
+ ThermostatMode: 'thermostat_mode',
15
+ Battery: 'battery',
16
+ Humidity: 'humidity',
17
+ Motion: 'motion',
18
+ DoorState: 'door_state',
19
+ };
20
+ export const FeatureTypeName = {
21
+ Light: 'Light',
22
+ OperationMode: 'Operation Mode',
23
+ Battery: 'Battery',
24
+ };
25
+ export const DeviceCategory = {
26
+ Dimmer: 'dimmer',
27
+ Switch: 'switch',
28
+ MotionSwitch: 'motion_switch',
29
+ Lock: 'lock',
30
+ Thermostat: 'thermostat',
31
+ Door: 'door',
32
+ };
33
+ const deviceCategoryValues = new Set(Object.values(DeviceCategory));
34
+ export function isDeviceCategory(value) {
35
+ return deviceCategoryValues.has(value);
36
+ }
37
+ export const READ_ONLY_CATEGORIES = new Set([
38
+ FeatureCategory.CurrentTemperature,
39
+ FeatureCategory.Battery,
40
+ FeatureCategory.Humidity,
41
+ FeatureCategory.Motion,
42
+ FeatureCategory.DoorState,
43
+ ]);
44
+ export const DISCOVERY_EVENT_TYPES = new Set([
45
+ EventTypeName.Temperature,
46
+ EventTypeName.OnOff,
47
+ EventTypeName.Level,
48
+ EventTypeName.ThermostatMode,
49
+ EventTypeName.Lock,
50
+ ]);
51
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,aAAa;IAC1B,cAAc,EAAE,gBAAgB;IAChC,IAAI,EAAE,MAAM;CACJ,CAAC;AAGX,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,kBAAkB,EAAE,qBAAqB;IACzC,YAAY,EAAE,gBAAgB;IAC9B,YAAY,EAAE,gBAAgB;IAC9B,cAAc,EAAE,iBAAiB;IACjC,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,YAAY;CACf,CAAC;AAGX,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,KAAK,EAAE,OAAO;IACd,aAAa,EAAE,gBAAgB;IAC/B,OAAO,EAAE,SAAS;CACV,CAAC;AAGX,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,eAAe;IAC7B,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,YAAY;IACxB,IAAI,EAAE,MAAM;CACJ,CAAC;AAGX,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;AAE5E,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC;IAC/D,eAAe,CAAC,kBAAkB;IAClC,eAAe,CAAC,OAAO;IACvB,eAAe,CAAC,QAAQ;IACxB,eAAe,CAAC,MAAM;IACtB,eAAe,CAAC,SAAS;CAC1B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAwB,IAAI,GAAG,CAAC;IAChE,aAAa,CAAC,WAAW;IACzB,aAAa,CAAC,KAAK;IACnB,aAAa,CAAC,KAAK;IACnB,aAAa,CAAC,cAAc;IAC5B,aAAa,CAAC,IAAI;CACnB,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const DEFAULT_CURRENT_TEMPERATURE_F = 70;
2
+ export declare const DEFAULT_HEAT_SETPOINT_F = 68;
3
+ export declare const DEFAULT_COOL_SETPOINT_F = 76;
4
+ export declare const LOW_BATTERY_THRESHOLD = 20;
@@ -0,0 +1,5 @@
1
+ export const DEFAULT_CURRENT_TEMPERATURE_F = 70;
2
+ export const DEFAULT_HEAT_SETPOINT_F = 68;
3
+ export const DEFAULT_COOL_SETPOINT_F = 76;
4
+ export const LOW_BATTERY_THRESHOLD = 20;
5
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAChD,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { Device, Feature } from './types.js';
2
+ import type { EventTypeName, FeatureCategory } from './constants.js';
3
+ /**
4
+ * Get serial number with IOTAS-{id} fallback for short/missing values.
5
+ * HomeKit requires >1 character; this ensures compliance.
6
+ */
7
+ export declare function getSerialNumber(device: Device): string;
8
+ /**
9
+ * Get manufacturer from physicalDeviceDescription, falls back to 'IOTAS'.
10
+ * Handles empty strings as missing values.
11
+ */
12
+ export declare function getManufacturer(device: Device): string;
13
+ /**
14
+ * Get model from physicalDeviceDescription, falls back to device.category.
15
+ * Handles empty strings as missing values.
16
+ */
17
+ export declare function getModel(device: Device): string;
18
+ export declare function findFeatureByCategory(device: Device, category: FeatureCategory): Feature | undefined;
19
+ export declare function findFeatureByEventType(device: Device, eventType: EventTypeName): Feature | undefined;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Get serial number with IOTAS-{id} fallback for short/missing values.
3
+ * HomeKit requires >1 character; this ensures compliance.
4
+ */
5
+ export function getSerialNumber(device) {
6
+ const raw = device.serialNumber;
7
+ if (raw && raw.length > 1) {
8
+ return raw;
9
+ }
10
+ return `IOTAS-${device.id}`;
11
+ }
12
+ /**
13
+ * Get manufacturer from physicalDeviceDescription, falls back to 'IOTAS'.
14
+ * Handles empty strings as missing values.
15
+ */
16
+ export function getManufacturer(device) {
17
+ return device.physicalDeviceDescription?.manufacturer || 'IOTAS';
18
+ }
19
+ /**
20
+ * Get model from physicalDeviceDescription, falls back to device.category.
21
+ * Handles empty strings as missing values.
22
+ */
23
+ export function getModel(device) {
24
+ return device.physicalDeviceDescription?.model || device.category;
25
+ }
26
+ export function findFeatureByCategory(device, category) {
27
+ return device.features.find((f) => f.featureTypeCategory === category);
28
+ }
29
+ export function findFeatureByEventType(device, eventType) {
30
+ return device.features.find((f) => f.eventTypeName === eventType);
31
+ }
32
+ //# sourceMappingURL=device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/device.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC;IAChC,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,SAAS,MAAM,CAAC,EAAE,EAAE,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,MAAM,CAAC,yBAAyB,EAAE,YAAY,IAAI,OAAO,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAc;IACrC,OAAO,MAAM,CAAC,yBAAyB,EAAE,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAc,EAAE,QAAyB;IAC7E,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,KAAK,QAAQ,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,SAAwB;IAC7E,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC;AACpE,CAAC"}
@@ -5,3 +5,8 @@ export type { FeatureChangeCallback, SnapshotFilter } from './cache/featureCache
5
5
  export type { Room, Rooms, Device, Feature, Residency, AuthResponse, AccountResponse, PhysicalDeviceDescription, IotasClientOptions, IotasTokens, FeatureCacheOptions, } from './types.js';
6
6
  export { Temperature, filterDevices } from './utils.js';
7
7
  export type { DeviceFilterOptions } from './utils.js';
8
+ export { EventTypeName, FeatureCategory, FeatureTypeName, DeviceCategory, isDeviceCategory, READ_ONLY_CATEGORIES, DISCOVERY_EVENT_TYPES, } from './constants.js';
9
+ export { getSerialNumber, getManufacturer, getModel, findFeatureByCategory, findFeatureByEventType } from './device.js';
10
+ export { isReadOnlyCategory, isSupportedFeature, isDiscoverableFeature, isSupportedDevice } from './predicates.js';
11
+ export { ThermostatMode, parseThermostatModeString, parseThermostatModes, getThermostatModeAt, findThermostatModeIndex, } from './thermostat.js';
12
+ export { DEFAULT_CURRENT_TEMPERATURE_F, DEFAULT_HEAT_SETPOINT_F, DEFAULT_COOL_SETPOINT_F, LOW_BATTERY_THRESHOLD, } from './defaults.js';
package/dist/src/index.js CHANGED
@@ -1,7 +1,9 @@
1
- // API Client
2
1
  export { IotasClient } from './api/iotasClient.js';
3
- // Caching
4
2
  export { FeatureCache } from './cache/featureCache.js';
5
- // Utilities
6
3
  export { Temperature, filterDevices } from './utils.js';
4
+ export { EventTypeName, FeatureCategory, FeatureTypeName, DeviceCategory, isDeviceCategory, READ_ONLY_CATEGORIES, DISCOVERY_EVENT_TYPES, } from './constants.js';
5
+ export { getSerialNumber, getManufacturer, getModel, findFeatureByCategory, findFeatureByEventType } from './device.js';
6
+ export { isReadOnlyCategory, isSupportedFeature, isDiscoverableFeature, isSupportedDevice } from './predicates.js';
7
+ export { ThermostatMode, parseThermostatModeString, parseThermostatModes, getThermostatModeAt, findThermostatModeIndex, } from './thermostat.js';
8
+ export { DEFAULT_CURRENT_TEMPERATURE_F, DEFAULT_HEAT_SETPOINT_F, DEFAULT_COOL_SETPOINT_F, LOW_BATTERY_THRESHOLD, } from './defaults.js';
7
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,aAAa;AACb,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAkBvD,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAiBvD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAExH,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEnH,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Device, Feature } from './types.js';
2
+ export declare function isReadOnlyCategory(category: string): boolean;
3
+ export declare function isSupportedFeature(feature: Feature): boolean;
4
+ export declare function isDiscoverableFeature(feature: Feature): boolean;
5
+ export declare function isSupportedDevice(device: Device): boolean;
@@ -0,0 +1,19 @@
1
+ import { FeatureCategory, READ_ONLY_CATEGORIES, DISCOVERY_EVENT_TYPES } from './constants.js';
2
+ export function isReadOnlyCategory(category) {
3
+ return READ_ONLY_CATEGORIES.has(category);
4
+ }
5
+ export function isSupportedFeature(feature) {
6
+ return Boolean(feature.featureTypeSettable) || isReadOnlyCategory(feature.featureTypeCategory);
7
+ }
8
+ export function isDiscoverableFeature(feature) {
9
+ return ((DISCOVERY_EVENT_TYPES.has(feature.eventTypeName ?? '') &&
10
+ (Boolean(feature.featureTypeSettable) || feature.featureTypeCategory === FeatureCategory.CurrentTemperature)) ||
11
+ isReadOnlyCategory(feature.featureTypeCategory));
12
+ }
13
+ export function isSupportedDevice(device) {
14
+ if (!device.paired) {
15
+ return false;
16
+ }
17
+ return device.features.some(isDiscoverableFeature);
18
+ }
19
+ //# sourceMappingURL=predicates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predicates.js","sourceRoot":"","sources":["../../src/predicates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE9F,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,OAAO,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO,CACL,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;QACrD,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC,mBAAmB,KAAK,eAAe,CAAC,kBAAkB,CAAC,CAAC;QAC/G,kBAAkB,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACrD,CAAC"}
@@ -1,11 +1,9 @@
1
+ import { DeviceCategory } from './constants.js';
1
2
  const ZWAVE_MANUFACTURERS = {
2
3
  JASCO: '0x0063',
3
4
  };
4
- const DEVICE_CATEGORIES = {
5
- DIMMER: 'dimmer',
6
- };
7
5
  export function needsReliableUpdate(device) {
8
- return (device.category === DEVICE_CATEGORIES.DIMMER &&
6
+ return (device.category === DeviceCategory.Dimmer &&
9
7
  device.physicalDeviceDescription?.manufacturer === ZWAVE_MANUFACTURERS.JASCO);
10
8
  }
11
9
  //# sourceMappingURL=quirks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"quirks.js","sourceRoot":"","sources":["../../src/quirks.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG;IAC1B,KAAK,EAAE,QAAQ;CACP,CAAC;AAEX,MAAM,iBAAiB,GAAG;IACxB,MAAM,EAAE,QAAQ;CACR,CAAC;AAEX,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,CACL,MAAM,CAAC,QAAQ,KAAK,iBAAiB,CAAC,MAAM;QAC5C,MAAM,CAAC,yBAAyB,EAAE,YAAY,KAAK,mBAAmB,CAAC,KAAK,CAC7E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"quirks.js","sourceRoot":"","sources":["../../src/quirks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD,MAAM,mBAAmB,GAAG;IAC1B,KAAK,EAAE,QAAQ;CACP,CAAC;AAEX,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,CACL,MAAM,CAAC,QAAQ,KAAK,cAAc,CAAC,MAAM;QACzC,MAAM,CAAC,yBAAyB,EAAE,YAAY,KAAK,mBAAmB,CAAC,KAAK,CAC7E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Thermostat mode utilities for IOTAS thermostats.
3
+ *
4
+ * IOTAS stores thermostat modes as indices into a colon-delimited string
5
+ * (e.g., "Off:Heat:Cool:Auto"). This module provides a canonical enum
6
+ * and helpers to parse and look up modes.
7
+ */
8
+ export declare enum ThermostatMode {
9
+ Off = 0,
10
+ Heat = 1,
11
+ Cool = 2,
12
+ EmergencyHeat = 3,
13
+ Auto = 4,
14
+ Unknown = -1
15
+ }
16
+ export declare function parseThermostatModeString(modeStr: string): ThermostatMode;
17
+ export declare function parseThermostatModes(valuesString?: string): ThermostatMode[];
18
+ export declare function getThermostatModeAt(modes: ThermostatMode[], index: number): ThermostatMode;
19
+ export declare function findThermostatModeIndex(modes: ThermostatMode[], mode: ThermostatMode): number;
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Thermostat mode utilities for IOTAS thermostats.
3
+ *
4
+ * IOTAS stores thermostat modes as indices into a colon-delimited string
5
+ * (e.g., "Off:Heat:Cool:Auto"). This module provides a canonical enum
6
+ * and helpers to parse and look up modes.
7
+ */
8
+ export var ThermostatMode;
9
+ (function (ThermostatMode) {
10
+ ThermostatMode[ThermostatMode["Off"] = 0] = "Off";
11
+ ThermostatMode[ThermostatMode["Heat"] = 1] = "Heat";
12
+ ThermostatMode[ThermostatMode["Cool"] = 2] = "Cool";
13
+ ThermostatMode[ThermostatMode["EmergencyHeat"] = 3] = "EmergencyHeat";
14
+ ThermostatMode[ThermostatMode["Auto"] = 4] = "Auto";
15
+ ThermostatMode[ThermostatMode["Unknown"] = -1] = "Unknown";
16
+ })(ThermostatMode || (ThermostatMode = {}));
17
+ export function parseThermostatModeString(modeStr) {
18
+ const lower = modeStr.toLowerCase().trim();
19
+ if (lower.includes('emergency') || lower === 'eheat') {
20
+ return ThermostatMode.EmergencyHeat;
21
+ }
22
+ if (lower.includes('heat')) {
23
+ return ThermostatMode.Heat;
24
+ }
25
+ if (lower.includes('cool')) {
26
+ return ThermostatMode.Cool;
27
+ }
28
+ if (lower.includes('auto')) {
29
+ return ThermostatMode.Auto;
30
+ }
31
+ if (lower.includes('off')) {
32
+ return ThermostatMode.Off;
33
+ }
34
+ return ThermostatMode.Unknown;
35
+ }
36
+ export function parseThermostatModes(valuesString) {
37
+ if (!valuesString) {
38
+ return [];
39
+ }
40
+ return valuesString.split(':').map(parseThermostatModeString);
41
+ }
42
+ export function getThermostatModeAt(modes, index) {
43
+ if (index < 0 || index >= modes.length) {
44
+ return ThermostatMode.Off;
45
+ }
46
+ return modes[index];
47
+ }
48
+ export function findThermostatModeIndex(modes, mode) {
49
+ return modes.indexOf(mode);
50
+ }
51
+ //# sourceMappingURL=thermostat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thermostat.js","sourceRoot":"","sources":["../../src/thermostat.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAN,IAAY,cAOX;AAPD,WAAY,cAAc;IACxB,iDAAO,CAAA;IACP,mDAAQ,CAAA;IACR,mDAAQ,CAAA;IACR,qEAAiB,CAAA;IACjB,mDAAQ,CAAA;IACR,0DAAY,CAAA;AACd,CAAC,EAPW,cAAc,KAAd,cAAc,QAOzB;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAe;IACvD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAC3C,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACrD,OAAO,cAAc,CAAC,aAAa,CAAC;IACtC,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,cAAc,CAAC,GAAG,CAAC;IAC5B,CAAC;IACD,OAAO,cAAc,CAAC,OAAO,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,YAAqB;IACxD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAuB,EAAE,KAAa;IACxE,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACvC,OAAO,cAAc,CAAC,GAAG,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAuB,EAAE,IAAoB;IACnF,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iotas-ts",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "Wrapper around the IOTAS API for use in matterbridge and homebridge ",
5
5
  "author": "Augusto Meza <mezaugusto@proton.me>",
6
6
  "license": "Apache-2.0",