diff options
| author | Li Zhineng <[email protected]> | 2025-07-16 23:44:20 +0800 |
|---|---|---|
| committer | Li Zhineng <[email protected]> | 2025-07-16 23:44:20 +0800 |
| commit | 359f267dcb57e869bd08cc50673fb617771d517b (patch) | |
| tree | ec118bf0965307aa20112d743dbf92beb99f7ff9 | |
| parent | 1fb982433e22ab8d34bdeb8e7e9d15baf4c0bac9 (diff) | |
| download | airmx-359f267dcb57e869bd08cc50673fb617771d517b.tar.gz airmx-359f267dcb57e869bd08cc50673fb617771d517b.zip | |
extract typings
| -rw-r--r-- | packages/airmx/src/airmx.test.ts | 4 | ||||
| -rw-r--r-- | packages/airmx/src/airmx.ts | 52 | ||||
| -rw-r--r-- | packages/airmx/src/eagle.test.ts | 3 | ||||
| -rw-r--r-- | packages/airmx/src/eagle.ts | 26 | ||||
| -rw-r--r-- | packages/airmx/src/snow.ts | 42 | ||||
| -rw-r--r-- | packages/airmx/src/types.ts | 101 |
6 files changed, 118 insertions, 110 deletions
diff --git a/packages/airmx/src/airmx.test.ts b/packages/airmx/src/airmx.test.ts index 80e70a0..0a71070 100644 --- a/packages/airmx/src/airmx.test.ts +++ b/packages/airmx/src/airmx.test.ts @@ -1,5 +1,5 @@ import { MqttClient } from 'mqtt/*' -import { Airmx, Topic, TOPIC_STATUS } from './airmx' +import { Airmx, Topic } from './airmx' describe('topic', () => { test('parse parses topic from string', () => { @@ -83,7 +83,7 @@ describe('airmx', () => { ([event]) => event === 'connect' )?.[1] as (() => void) | undefined; connectHandler?.() - expect(mockMqttClient.subscribe).toHaveBeenCalledWith(TOPIC_STATUS); + expect(mockMqttClient.subscribe).toHaveBeenCalledWith('airmx/01/+/+/1/1/+'); }) describe('message validation', () => { diff --git a/packages/airmx/src/airmx.ts b/packages/airmx/src/airmx.ts index 00c379f..947bda4 100644 --- a/packages/airmx/src/airmx.ts +++ b/packages/airmx/src/airmx.ts @@ -2,42 +2,12 @@ import crypto from 'crypto' import { MqttClient } from 'mqtt' import { EagleStatus } from './eagle' import { SnowStatus } from './snow' - -type TSnowListener = (status: SnowStatus) => void -type TEagleListener = (status: EagleStatus) => void - -export interface Config { - mqtt: MqttClient - devices: Device[] -} - -export interface Device { - id: number - key: string -} - -export enum Command { - SnowStatus = 200, - EagleStatus = 210 -} - -export enum MessageSource { - Snow = 1, - Eagle = 2, - App_iOS = 3, - App_Android = 4 -} - -export interface Message<T> { - cmdId: number - name: string - time: number - from: MessageSource - data: T - sig: string -} - -export const TOPIC_STATUS = 'airmx/01/+/+/1/1/+' +import { + Config, + Command, + SnowListener, + EagleListener +} from './types' export class Topic { constructor( @@ -89,8 +59,8 @@ export class Topic { export class Airmx { #listeners: { - eagle: TEagleListener[], - snow: TSnowListener[] + eagle: EagleListener[], + snow: SnowListener[] } = { eagle: [], snow: [] @@ -106,18 +76,18 @@ export class Airmx { this.#client.on('message', this.#handleMessage.bind(this)) } - onSnowUpdate(callback: TSnowListener) { + onSnowUpdate(callback: SnowListener) { this.#listeners.snow.push(callback) return this } - onEagleUpdate(callback: TEagleListener) { + onEagleUpdate(callback: EagleListener) { this.#listeners.eagle.push(callback) return this } #handleConnect() { - this.#client.subscribe(TOPIC_STATUS) + this.#client.subscribe('airmx/01/+/+/1/1/+') } #handleMessage(topic: string, message: Buffer): void { diff --git a/packages/airmx/src/eagle.test.ts b/packages/airmx/src/eagle.test.ts index 5bf6643..7ffe211 100644 --- a/packages/airmx/src/eagle.test.ts +++ b/packages/airmx/src/eagle.test.ts @@ -1,4 +1,5 @@ -import { EagleMode, EagleStatus, EagleStatusData } from './eagle' +import { EagleStatus } from './eagle' +import { EagleMode, EagleStatusData } from './types' test('from parses message to eagle status', () => { const status = EagleStatus.from(12345, createStubStatusData()) diff --git a/packages/airmx/src/eagle.ts b/packages/airmx/src/eagle.ts index 3eccdd2..d36b6bc 100644 --- a/packages/airmx/src/eagle.ts +++ b/packages/airmx/src/eagle.ts @@ -1,28 +1,4 @@ -import { Message } from './airmx' - -export interface EagleStatusData { - version: string - power: number - mode: number - status: number - denoise: number - heatStatus: number - cadr: number - prm: number - diffPressure1: number, - diffPressure2: number, - t0: number, - g4Id: string - g4Percent: number - carbonId: string - carbonPercent: number - hepaId: string - hepaPercent: number -} - -export enum EagleMode { - Silent = 2 -} +import { Message, EagleStatusData, EagleMode } from './types' export class EagleStatus { constructor( diff --git a/packages/airmx/src/snow.ts b/packages/airmx/src/snow.ts index 5fb5ef6..5984c00 100644 --- a/packages/airmx/src/snow.ts +++ b/packages/airmx/src/snow.ts @@ -1,44 +1,4 @@ -import { Command, Message } from './airmx' - -export enum SensorState { - Sampling = 'sampling' -} - -export enum BatteryState { - Charging = 'charging', - Discharge = 'discharge' -} - -export interface SnowStatusData { - battery: number - battery_state: BatteryState - co2: number - co2_state: SensorState - co2_time: number - h: number - humi_state: SensorState - oh: number - opm100: number - opm25: number - ot: number - pm100: number - pm25: number - pm250: number - pm50: number - pm_state: SensorState - pm_time: number - t: number - temp_state: SensorState - temp_unit: 'c' - time: number - tvoc: number - tvoc_duration: number - tvoc_state: SensorState - tvoc_time: number - tvoc_unit: 'ppb' - version: string - version_type: 'release' -} +import { Command, Message, SnowStatusData, BatteryState, SensorState } from './types' export class SnowStatus { constructor( diff --git a/packages/airmx/src/types.ts b/packages/airmx/src/types.ts new file mode 100644 index 0000000..c50785a --- /dev/null +++ b/packages/airmx/src/types.ts @@ -0,0 +1,101 @@ +import type { MqttClient } from 'mqtt' +import type { EagleStatus } from './eagle' +import type { SnowStatus } from './snow' + +export interface Config { + mqtt: MqttClient + devices: Device[] +} + +export interface Device { + id: number + key: string +} + +export type SnowListener = (status: SnowStatus) => void +export type EagleListener = (status: EagleStatus) => void + +export enum Command { + SnowStatus = 200, + EagleStatus = 210 +} + +export enum MessageSource { + Snow = 1, + Eagle = 2, + App_iOS = 3, + App_Android = 4 +} + +export interface Message<T> { + cmdId: number + name: string + time: number + from: MessageSource + data: T + sig: string +} + +export interface EagleStatusData { + version: string + power: number + mode: number + status: number + denoise: number + heatStatus: number + cadr: number + prm: number + diffPressure1: number, + diffPressure2: number, + t0: number, + g4Id: string + g4Percent: number + carbonId: string + carbonPercent: number + hepaId: string + hepaPercent: number +} + +export enum EagleMode { + Silent = 2 +} + +export enum SensorState { + Sampling = 'sampling' +} + +export enum BatteryState { + Charging = 'charging', + Discharge = 'discharge' +} + +export interface SnowStatusData { + battery: number + battery_state: BatteryState + co2: number + co2_state: SensorState + co2_time: number + h: number + humi_state: SensorState + oh: number + opm100: number + opm25: number + ot: number + pm100: number + pm25: number + pm250: number + pm50: number + pm_state: SensorState + pm_time: number + t: number + temp_state: SensorState + temp_unit: 'c' + time: number + tvoc: number + tvoc_duration: number + tvoc_state: SensorState + tvoc_time: number + tvoc_unit: 'ppb' + version: string + version_type: 'release' +} |
