node-switchbot 3.2.1 → 3.2.2-beta.1
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/.github/npm-version-script.cjs +81 -0
- package/dist/advertising.d.ts +2 -2
- package/dist/advertising.d.ts.map +1 -1
- package/dist/advertising.js +17 -6
- package/dist/advertising.js.map +1 -1
- package/dist/device/woplugmini.d.ts +4 -19
- package/dist/device/woplugmini.d.ts.map +1 -1
- package/dist/device/woplugmini.js +6 -25
- package/dist/device/woplugmini.js.map +1 -1
- package/dist/device/woplugmini_jp.d.ts +52 -0
- package/dist/device/woplugmini_jp.d.ts.map +1 -0
- package/dist/device/woplugmini_jp.js +110 -0
- package/dist/device/woplugmini_jp.js.map +1 -0
- package/dist/device/wosensorth.d.ts +1 -4
- package/dist/device/wosensorth.d.ts.map +1 -1
- package/dist/device/wosensorth.js +5 -23
- package/dist/device/wosensorth.js.map +1 -1
- package/dist/device/wosensorthplus.d.ts +13 -0
- package/dist/device/wosensorthplus.d.ts.map +1 -0
- package/dist/device/wosensorthplus.js +38 -0
- package/dist/device/wosensorthplus.js.map +1 -0
- package/dist/device/wosensorthpro.d.ts +13 -0
- package/dist/device/wosensorthpro.d.ts.map +1 -0
- package/dist/device/wosensorthpro.js +38 -0
- package/dist/device/wosensorthpro.js.map +1 -0
- package/dist/device/wosensorthproco2.d.ts +13 -0
- package/dist/device/wosensorthproco2.d.ts.map +1 -0
- package/dist/device/wosensorthproco2.js +40 -0
- package/dist/device/wosensorthproco2.js.map +1 -0
- package/dist/switchbot-ble.d.ts +3 -3
- package/dist/switchbot-ble.d.ts.map +1 -1
- package/dist/switchbot-ble.js +11 -5
- package/dist/switchbot-ble.js.map +1 -1
- package/dist/test/woplugmini.test.js +5 -29
- package/dist/test/woplugmini.test.js.map +1 -1
- package/dist/test/woplugmini_jp.test.d.ts +2 -0
- package/dist/test/woplugmini_jp.test.d.ts.map +1 -0
- package/dist/test/woplugmini_jp.test.js +90 -0
- package/dist/test/woplugmini_jp.test.js.map +1 -0
- package/dist/test/wosensorth.test.js +0 -22
- package/dist/test/wosensorth.test.js.map +1 -1
- package/dist/test/wosensorthplus.test.d.ts +2 -0
- package/dist/test/wosensorthplus.test.d.ts.map +1 -0
- package/dist/test/wosensorthplus.test.js +29 -0
- package/dist/test/wosensorthplus.test.js.map +1 -0
- package/dist/test/wosensorthpro.test.d.ts +2 -0
- package/dist/test/wosensorthpro.test.d.ts.map +1 -0
- package/dist/test/wosensorthpro.test.js +29 -0
- package/dist/test/wosensorthpro.test.js.map +1 -0
- package/dist/test/wosensorthproco2.test.d.ts +2 -0
- package/dist/test/wosensorthproco2.test.d.ts.map +1 -0
- package/dist/test/wosensorthproco2.test.js +32 -0
- package/dist/test/wosensorthproco2.test.js.map +1 -0
- package/dist/types/bledevicestatus.d.ts +11 -7
- package/dist/types/bledevicestatus.d.ts.map +1 -1
- package/dist/types/types.d.ts +10 -2
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +3 -0
- package/dist/types/types.js.map +1 -1
- package/package.json +5 -2
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#!/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* This scripts queries the npm registry to pull out the latest version for a given tag.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const fs = require("fs");
|
|
8
|
+
const semver = require("semver");
|
|
9
|
+
const child_process = require("child_process");
|
|
10
|
+
const assert = require("assert");
|
|
11
|
+
|
|
12
|
+
const BRANCH_VERSION_PATTERN = /^([A-Za-z]*)-(\d+.\d+.\d+)$/
|
|
13
|
+
|
|
14
|
+
// Load the contents of the package.json file
|
|
15
|
+
const packageJSON = JSON.parse(fs.readFileSync("package.json", "utf8"));
|
|
16
|
+
|
|
17
|
+
let refArgument = process.argv[2];
|
|
18
|
+
let tagArgument = process.argv[3] || "latest";
|
|
19
|
+
|
|
20
|
+
if (refArgument == null) {
|
|
21
|
+
console.error("ref argument is missing");
|
|
22
|
+
console.error("Usage: npm-version-script.cjs <ref> [tag]");
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Queries the NPM registry for the latest version for the provided tag.
|
|
28
|
+
* @param tag The tag to query for.
|
|
29
|
+
* @returns {string} Returns the version.
|
|
30
|
+
*/
|
|
31
|
+
function getTagVersionFromNpm(tag) {
|
|
32
|
+
try {
|
|
33
|
+
return child_process.execSync(`npm info ${packageJSON.name} version --tag="${tag}"`).toString("utf8").trim();
|
|
34
|
+
} catch (e) {
|
|
35
|
+
throw e;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function desiredTargetVersion(ref) {
|
|
40
|
+
// ref is a GitHub action ref string
|
|
41
|
+
if (ref.startsWith("refs/pull/")) {
|
|
42
|
+
throw Error("The version script was executed inside a PR!");
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
assert(ref.startsWith("refs/heads/"))
|
|
46
|
+
let branchName = ref.slice("refs/heads/".length);
|
|
47
|
+
|
|
48
|
+
let results = branchName.match(BRANCH_VERSION_PATTERN);
|
|
49
|
+
if (results != null) {
|
|
50
|
+
if (results[1] !== tagArgument) {
|
|
51
|
+
console.warn(`The base branch name (${results[1]}) differs from the tag name ${tagArgument}`);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return results[2];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// legacy mode were we use the `betaVersion` property in the package.json
|
|
58
|
+
if (branchName === "beta" && packageJSON.betaVersion) {
|
|
59
|
+
return packageJSON.betaVersion
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
throw new Error("Malformed branch name for ref: " + ref + ". Can't derive the base version. Use a branch name like: beta-x.x.x!");
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// derive the base version from the branch ref
|
|
66
|
+
const baseVersion = desiredTargetVersion(refArgument);
|
|
67
|
+
|
|
68
|
+
// query the npm registry for the latest version of the provided tag name
|
|
69
|
+
const latestReleasedVersion = getTagVersionFromNpm(tagArgument); // e.g. 0.7.0-beta.12
|
|
70
|
+
const latestReleaseBase = semver.inc(latestReleasedVersion, "patch"); // will produce 0.7.0 (removing the preid, needed for the equality check below)
|
|
71
|
+
|
|
72
|
+
let publishTag;
|
|
73
|
+
if (semver.eq(baseVersion, latestReleaseBase)) { // check if we are releasing another version for the latest beta
|
|
74
|
+
publishTag = latestReleasedVersion; // set the current latest beta to be incremented
|
|
75
|
+
} else {
|
|
76
|
+
publishTag = baseVersion; // start of with a new beta version
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// save the package.json
|
|
80
|
+
packageJSON.version = publishTag;
|
|
81
|
+
fs.writeFileSync("package.json", JSON.stringify(packageJSON, null, 2));
|
package/dist/advertising.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ad, NobleTypes } from './types/types.js';
|
|
2
2
|
import { Buffer } from 'node:buffer';
|
|
3
3
|
/**
|
|
4
4
|
* Represents the advertising data parser for SwitchBot devices.
|
|
@@ -15,7 +15,7 @@ export declare class Advertising {
|
|
|
15
15
|
* @param {Function} emitLog - The function to emit log messages.
|
|
16
16
|
* @returns {Promise<Ad | null>} - An object containing parsed data specific to the SwitchBot device type, or `null` if the device is not recognized.
|
|
17
17
|
*/
|
|
18
|
-
static parse(peripheral: NobleTypes['peripheral'], emitLog: (level: string, message: string) => void): Promise<
|
|
18
|
+
static parse(peripheral: NobleTypes['peripheral'], emitLog: (level: string, message: string) => void): Promise<ad | null>;
|
|
19
19
|
/**
|
|
20
20
|
* Validates if the buffer is a valid Buffer object with a minimum length.
|
|
21
21
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"advertising.d.ts","sourceRoot":"","sources":["../src/advertising.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EAAE,EAAE,UAAU,EAAe,MAAM,kBAAkB,CAAA;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"advertising.d.ts","sourceRoot":"","sources":["../src/advertising.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EAAE,EAAE,UAAU,EAAe,MAAM,kBAAkB,CAAA;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAuBpC;;GAEG;AACH,qBAAa,WAAW;;IAGtB;;;;;;;;;OASG;WACU,KAAK,CAChB,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,EACpC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAChD,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC;IAqCrB;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAI7B;;;;;;;;OAQG;WACiB,gBAAgB,CAClC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAChD,OAAO,CAAC,GAAG,CAAC;IAiDf;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;CAY7B"}
|
package/dist/advertising.js
CHANGED
|
@@ -8,9 +8,13 @@ import { WoHand } from './device/wohand.js';
|
|
|
8
8
|
import { WoHub2 } from './device/wohub2.js';
|
|
9
9
|
import { WoHumi } from './device/wohumi.js';
|
|
10
10
|
import { WoIOSensorTH } from './device/woiosensorth.js';
|
|
11
|
-
import {
|
|
11
|
+
import { WoPlugMiniUS } from './device/woplugmini.js';
|
|
12
|
+
import { WoPlugMiniJP } from './device/woplugmini_jp.js';
|
|
12
13
|
import { WoPresence } from './device/wopresence.js';
|
|
13
14
|
import { WoSensorTH } from './device/wosensorth.js';
|
|
15
|
+
import { WoSensorTHPlus } from './device/wosensorthplus.js';
|
|
16
|
+
import { WoSensorTHPro } from './device/wosensorthpro.js';
|
|
17
|
+
import { WoSensorTHProCO2 } from './device/wosensorthproco2.js';
|
|
14
18
|
import { WoSmartLock } from './device/wosmartlock.js';
|
|
15
19
|
import { WoSmartLockPro } from './device/wosmartlockpro.js';
|
|
16
20
|
import { WoStrip } from './device/wostrip.js';
|
|
@@ -51,7 +55,12 @@ export class Advertising {
|
|
|
51
55
|
id: peripheral.id,
|
|
52
56
|
address,
|
|
53
57
|
rssi: peripheral.rssi,
|
|
54
|
-
serviceData: {
|
|
58
|
+
serviceData: {
|
|
59
|
+
model,
|
|
60
|
+
modelName: sd.modelName || '',
|
|
61
|
+
modelFriendlyName: sd.modelFriendlyName || '',
|
|
62
|
+
...sd,
|
|
63
|
+
},
|
|
55
64
|
};
|
|
56
65
|
emitLog('debug', `[parseAdvertising.${peripheral.id}.${model}] return ${JSON.stringify(data)}`);
|
|
57
66
|
return data;
|
|
@@ -86,9 +95,11 @@ export class Advertising {
|
|
|
86
95
|
case SwitchBotBLEModel.Meter:
|
|
87
96
|
return WoSensorTH.parseServiceData(serviceData, emitLog);
|
|
88
97
|
case SwitchBotBLEModel.MeterPlus:
|
|
89
|
-
return
|
|
98
|
+
return WoSensorTHPlus.parseServiceData(serviceData, emitLog);
|
|
90
99
|
case SwitchBotBLEModel.MeterPro:
|
|
91
|
-
return
|
|
100
|
+
return WoSensorTHPro.parseServiceData(serviceData, emitLog);
|
|
101
|
+
case SwitchBotBLEModel.MeterProCO2:
|
|
102
|
+
return WoSensorTHProCO2.parseServiceData(serviceData, manufacturerData, emitLog);
|
|
92
103
|
case SwitchBotBLEModel.Hub2:
|
|
93
104
|
return WoHub2.parseServiceData(manufacturerData, emitLog);
|
|
94
105
|
case SwitchBotBLEModel.OutdoorMeter:
|
|
@@ -106,9 +117,9 @@ export class Advertising {
|
|
|
106
117
|
case SwitchBotBLEModel.StripLight:
|
|
107
118
|
return WoStrip.parseServiceData(serviceData, emitLog);
|
|
108
119
|
case SwitchBotBLEModel.PlugMiniUS:
|
|
109
|
-
return
|
|
120
|
+
return WoPlugMiniUS.parseServiceData(manufacturerData, emitLog);
|
|
110
121
|
case SwitchBotBLEModel.PlugMiniJP:
|
|
111
|
-
return
|
|
122
|
+
return WoPlugMiniJP.parseServiceData(manufacturerData, emitLog);
|
|
112
123
|
case SwitchBotBLEModel.Lock:
|
|
113
124
|
return WoSmartLock.parseServiceData(serviceData, manufacturerData, emitLog);
|
|
114
125
|
case SwitchBotBLEModel.LockPro:
|
package/dist/advertising.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"advertising.js","sourceRoot":"","sources":["../src/advertising.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"advertising.js","sourceRoot":"","sources":["../src/advertising.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { plugMiniUSServiceData } from '../types/bledevicestatus.js';
|
|
2
2
|
import type { NobleTypes } from '../types/types.js';
|
|
3
3
|
import { Buffer } from 'node:buffer';
|
|
4
4
|
import { SwitchbotDevice } from '../device.js';
|
|
@@ -6,30 +6,15 @@ import { SwitchbotDevice } from '../device.js';
|
|
|
6
6
|
* Class representing a WoPlugMini device.
|
|
7
7
|
* @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/plugmini.md
|
|
8
8
|
*/
|
|
9
|
-
export declare class
|
|
9
|
+
export declare class WoPlugMiniUS extends SwitchbotDevice {
|
|
10
|
+
constructor(peripheral: NobleTypes['peripheral'], noble: NobleTypes['noble']);
|
|
10
11
|
/**
|
|
11
12
|
* Parses the service data for WoPlugMini US.
|
|
12
13
|
* @param {Buffer} manufacturerData - The manufacturer data buffer.
|
|
13
14
|
* @param {Function} emitLog - The function to emit log messages.
|
|
14
15
|
* @returns {Promise<plugMiniUSServiceData | null>} - Parsed service data or null if invalid.
|
|
15
16
|
*/
|
|
16
|
-
static
|
|
17
|
-
/**
|
|
18
|
-
* Parses the service data for WoPlugMini JP.
|
|
19
|
-
* @param {Buffer} manufacturerData - The manufacturer data buffer.
|
|
20
|
-
* @param {Function} emitLog - The function to emit log messages.
|
|
21
|
-
* @returns {Promise<plugMiniJPServiceData | null>} - Parsed service data or null if invalid.
|
|
22
|
-
*/
|
|
23
|
-
static parseServiceData_JP(manufacturerData: Buffer, emitLog: (level: string, message: string) => void): Promise<plugMiniJPServiceData | null>;
|
|
24
|
-
/**
|
|
25
|
-
* Parses the service data for WoPlugMini.
|
|
26
|
-
* @param {Buffer} manufacturerData - The manufacturer data buffer.
|
|
27
|
-
* @param {SwitchBotBLEModel} model - The model of the plug mini.
|
|
28
|
-
* @param {Function} emitLog - The function to emit log messages.
|
|
29
|
-
* @returns {Promise<plugMiniUSServiceData | plugMiniJPServiceData | null>} - Parsed service data or null if invalid.
|
|
30
|
-
*/
|
|
31
|
-
private static parseServiceData;
|
|
32
|
-
constructor(peripheral: NobleTypes['peripheral'], noble: NobleTypes['noble']);
|
|
17
|
+
static parseServiceData(manufacturerData: Buffer, emitLog: (level: string, message: string) => void): Promise<plugMiniUSServiceData | null>;
|
|
33
18
|
/**
|
|
34
19
|
* Reads the state of the plug.
|
|
35
20
|
* @returns {Promise<boolean>} - Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"woplugmini.d.ts","sourceRoot":"","sources":["../../src/device/woplugmini.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"woplugmini.d.ts","sourceRoot":"","sources":["../../src/device/woplugmini.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C;;;GAGG;AACH,qBAAa,YAAa,SAAQ,eAAe;gBACnC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC;IAI5E;;;;;OAKG;WACU,gBAAgB,CAC3B,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAChD,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAsCxC;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAInC;;;;;OAKG;YACW,QAAQ;IAKtB;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAIjC;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhC;;;;OAIG;IACU,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAgB5D"}
|
|
@@ -5,33 +5,17 @@ import { SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName
|
|
|
5
5
|
* Class representing a WoPlugMini device.
|
|
6
6
|
* @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/plugmini.md
|
|
7
7
|
*/
|
|
8
|
-
export class
|
|
8
|
+
export class WoPlugMiniUS extends SwitchbotDevice {
|
|
9
|
+
constructor(peripheral, noble) {
|
|
10
|
+
super(peripheral, noble);
|
|
11
|
+
}
|
|
9
12
|
/**
|
|
10
13
|
* Parses the service data for WoPlugMini US.
|
|
11
14
|
* @param {Buffer} manufacturerData - The manufacturer data buffer.
|
|
12
15
|
* @param {Function} emitLog - The function to emit log messages.
|
|
13
16
|
* @returns {Promise<plugMiniUSServiceData | null>} - Parsed service data or null if invalid.
|
|
14
17
|
*/
|
|
15
|
-
static async
|
|
16
|
-
return this.parseServiceData(manufacturerData, SwitchBotBLEModel.PlugMiniUS, emitLog);
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Parses the service data for WoPlugMini JP.
|
|
20
|
-
* @param {Buffer} manufacturerData - The manufacturer data buffer.
|
|
21
|
-
* @param {Function} emitLog - The function to emit log messages.
|
|
22
|
-
* @returns {Promise<plugMiniJPServiceData | null>} - Parsed service data or null if invalid.
|
|
23
|
-
*/
|
|
24
|
-
static async parseServiceData_JP(manufacturerData, emitLog) {
|
|
25
|
-
return this.parseServiceData(manufacturerData, SwitchBotBLEModel.PlugMiniJP, emitLog);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Parses the service data for WoPlugMini.
|
|
29
|
-
* @param {Buffer} manufacturerData - The manufacturer data buffer.
|
|
30
|
-
* @param {SwitchBotBLEModel} model - The model of the plug mini.
|
|
31
|
-
* @param {Function} emitLog - The function to emit log messages.
|
|
32
|
-
* @returns {Promise<plugMiniUSServiceData | plugMiniJPServiceData | null>} - Parsed service data or null if invalid.
|
|
33
|
-
*/
|
|
34
|
-
static async parseServiceData(manufacturerData, model, emitLog) {
|
|
18
|
+
static async parseServiceData(manufacturerData, emitLog) {
|
|
35
19
|
if (manufacturerData.length !== 14) {
|
|
36
20
|
emitLog('debugerror', `[parseServiceDataForWoPlugMini] Buffer length ${manufacturerData.length} should be 14`);
|
|
37
21
|
return null;
|
|
@@ -51,7 +35,7 @@ export class WoPlugMini extends SwitchbotDevice {
|
|
|
51
35
|
const overload = !!(byte12 & 0b10000000);
|
|
52
36
|
const currentPower = (((byte12 & 0b01111111) << 8) + byte13) / 10; // in watt
|
|
53
37
|
const data = {
|
|
54
|
-
model:
|
|
38
|
+
model: SwitchBotBLEModel.PlugMiniUS,
|
|
55
39
|
modelName: SwitchBotBLEModelName.PlugMini,
|
|
56
40
|
modelFriendlyName: SwitchBotBLEModelFriendlyName.PlugMini,
|
|
57
41
|
state: state ?? 'unknown',
|
|
@@ -64,9 +48,6 @@ export class WoPlugMini extends SwitchbotDevice {
|
|
|
64
48
|
};
|
|
65
49
|
return data;
|
|
66
50
|
}
|
|
67
|
-
constructor(peripheral, noble) {
|
|
68
|
-
super(peripheral, noble);
|
|
69
|
-
}
|
|
70
51
|
/**
|
|
71
52
|
* Reads the state of the plug.
|
|
72
53
|
* @returns {Promise<boolean>} - Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"woplugmini.js","sourceRoot":"","sources":["../../src/device/woplugmini.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAE3G;;;GAGG;AACH,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"woplugmini.js","sourceRoot":"","sources":["../../src/device/woplugmini.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { plugMiniJPServiceData } from '../types/bledevicestatus.js';
|
|
2
|
+
import type { NobleTypes } from '../types/types.js';
|
|
3
|
+
import { Buffer } from 'node:buffer';
|
|
4
|
+
import { SwitchbotDevice } from '../device.js';
|
|
5
|
+
/**
|
|
6
|
+
* Class representing a WoPlugMini device.
|
|
7
|
+
* @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/plugmini.md
|
|
8
|
+
*/
|
|
9
|
+
export declare class WoPlugMiniJP extends SwitchbotDevice {
|
|
10
|
+
constructor(peripheral: NobleTypes['peripheral'], noble: NobleTypes['noble']);
|
|
11
|
+
/**
|
|
12
|
+
* Parses the service data for WoPlugMini JP.
|
|
13
|
+
* @param {Buffer} manufacturerData - The manufacturer data buffer.
|
|
14
|
+
* @param {Function} emitLog - The function to emit log messages.
|
|
15
|
+
* @returns {Promise<plugMiniJPServiceData | null>} - Parsed service data or null if invalid.
|
|
16
|
+
*/
|
|
17
|
+
static parseServiceData(manufacturerData: Buffer, emitLog: (level: string, message: string) => void): Promise<plugMiniJPServiceData | null>;
|
|
18
|
+
/**
|
|
19
|
+
* Reads the state of the plug.
|
|
20
|
+
* @returns {Promise<boolean>} - Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
|
|
21
|
+
*/
|
|
22
|
+
readState(): Promise<boolean>;
|
|
23
|
+
/**
|
|
24
|
+
* Sets the state of the plug.
|
|
25
|
+
* @private
|
|
26
|
+
* @param {number[]} reqByteArray - The request byte array.
|
|
27
|
+
* @returns {Promise<boolean>} - Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
|
|
28
|
+
*/
|
|
29
|
+
private setState;
|
|
30
|
+
/**
|
|
31
|
+
* Turns on the plug.
|
|
32
|
+
* @returns {Promise<boolean>} - Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
|
|
33
|
+
*/
|
|
34
|
+
turnOn(): Promise<boolean>;
|
|
35
|
+
/**
|
|
36
|
+
* Turns off the plug.
|
|
37
|
+
* @returns {Promise<boolean>} - Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
|
|
38
|
+
*/
|
|
39
|
+
turnOff(): Promise<boolean>;
|
|
40
|
+
/**
|
|
41
|
+
* Toggles the state of the plug.
|
|
42
|
+
* @returns {Promise<boolean>} - Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
|
|
43
|
+
*/
|
|
44
|
+
toggle(): Promise<boolean>;
|
|
45
|
+
/**
|
|
46
|
+
* Operates the plug with the given bytes.
|
|
47
|
+
* @param {number[]} bytes - The byte array to send to the plug.
|
|
48
|
+
* @returns {Promise<boolean>} - Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
|
|
49
|
+
*/
|
|
50
|
+
operatePlug(bytes: number[]): Promise<boolean>;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=woplugmini_jp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"woplugmini_jp.d.ts","sourceRoot":"","sources":["../../src/device/woplugmini_jp.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C;;;GAGG;AACH,qBAAa,YAAa,SAAQ,eAAe;gBACnC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC;IAI5E;;;;;OAKG;WACU,gBAAgB,CAC3B,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAChD,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAsCxC;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAInC;;;;;OAKG;YACW,QAAQ;IAKtB;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAIjC;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhC;;;;OAIG;IACU,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAgB5D"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
2
|
+
import { SwitchbotDevice } from '../device.js';
|
|
3
|
+
import { SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName } from '../types/types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Class representing a WoPlugMini device.
|
|
6
|
+
* @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/plugmini.md
|
|
7
|
+
*/
|
|
8
|
+
export class WoPlugMiniJP extends SwitchbotDevice {
|
|
9
|
+
constructor(peripheral, noble) {
|
|
10
|
+
super(peripheral, noble);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Parses the service data for WoPlugMini JP.
|
|
14
|
+
* @param {Buffer} manufacturerData - The manufacturer data buffer.
|
|
15
|
+
* @param {Function} emitLog - The function to emit log messages.
|
|
16
|
+
* @returns {Promise<plugMiniJPServiceData | null>} - Parsed service data or null if invalid.
|
|
17
|
+
*/
|
|
18
|
+
static async parseServiceData(manufacturerData, emitLog) {
|
|
19
|
+
if (manufacturerData.length !== 14) {
|
|
20
|
+
emitLog('debugerror', `[parseServiceDataForWoPlugMiniJP] Buffer length ${manufacturerData.length} should be 14`);
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
const [byte9, byte10, byte11, byte12, byte13] = [
|
|
24
|
+
manufacturerData.readUInt8(9),
|
|
25
|
+
manufacturerData.readUInt8(10),
|
|
26
|
+
manufacturerData.readUInt8(11),
|
|
27
|
+
manufacturerData.readUInt8(12),
|
|
28
|
+
manufacturerData.readUInt8(13),
|
|
29
|
+
];
|
|
30
|
+
const state = byte9 === 0x00 ? 'off' : byte9 === 0x80 ? 'on' : null;
|
|
31
|
+
const delay = !!(byte10 & 0b00000001);
|
|
32
|
+
const timer = !!(byte10 & 0b00000010);
|
|
33
|
+
const syncUtcTime = !!(byte10 & 0b00000100);
|
|
34
|
+
const wifiRssi = byte11;
|
|
35
|
+
const overload = !!(byte12 & 0b10000000);
|
|
36
|
+
const currentPower = (((byte12 & 0b01111111) << 8) + byte13) / 10; // in watt
|
|
37
|
+
const data = {
|
|
38
|
+
model: SwitchBotBLEModel.PlugMiniJP,
|
|
39
|
+
modelName: SwitchBotBLEModelName.PlugMini,
|
|
40
|
+
modelFriendlyName: SwitchBotBLEModelFriendlyName.PlugMini,
|
|
41
|
+
state: state ?? 'unknown',
|
|
42
|
+
delay,
|
|
43
|
+
timer,
|
|
44
|
+
syncUtcTime,
|
|
45
|
+
wifiRssi,
|
|
46
|
+
overload,
|
|
47
|
+
currentPower,
|
|
48
|
+
};
|
|
49
|
+
return data;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Reads the state of the plug.
|
|
53
|
+
* @returns {Promise<boolean>} - Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
|
|
54
|
+
*/
|
|
55
|
+
async readState() {
|
|
56
|
+
return this.operatePlug([0x57, 0x0F, 0x51, 0x01]);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Sets the state of the plug.
|
|
60
|
+
* @private
|
|
61
|
+
* @param {number[]} reqByteArray - The request byte array.
|
|
62
|
+
* @returns {Promise<boolean>} - Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
|
|
63
|
+
*/
|
|
64
|
+
async setState(reqByteArray) {
|
|
65
|
+
const base = [0x57, 0x0F, 0x50, 0x01];
|
|
66
|
+
return this.operatePlug([...base, ...reqByteArray]);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Turns on the plug.
|
|
70
|
+
* @returns {Promise<boolean>} - Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
|
|
71
|
+
*/
|
|
72
|
+
async turnOn() {
|
|
73
|
+
return this.setState([0x01, 0x80]);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Turns off the plug.
|
|
77
|
+
* @returns {Promise<boolean>} - Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
|
|
78
|
+
*/
|
|
79
|
+
async turnOff() {
|
|
80
|
+
return this.setState([0x01, 0x00]);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Toggles the state of the plug.
|
|
84
|
+
* @returns {Promise<boolean>} - Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
|
|
85
|
+
*/
|
|
86
|
+
async toggle() {
|
|
87
|
+
return this.setState([0x02, 0x80]);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Operates the plug with the given bytes.
|
|
91
|
+
* @param {number[]} bytes - The byte array to send to the plug.
|
|
92
|
+
* @returns {Promise<boolean>} - Resolves with a boolean that tells whether the plug is ON (true) or OFF (false).
|
|
93
|
+
*/
|
|
94
|
+
async operatePlug(bytes) {
|
|
95
|
+
const reqBuf = Buffer.from(bytes);
|
|
96
|
+
const resBytes = await this.command(reqBuf);
|
|
97
|
+
const resBuf = Buffer.from(resBytes);
|
|
98
|
+
if (resBuf.length !== 2) {
|
|
99
|
+
throw new Error(`Expecting a 2-byte response, got instead: 0x${resBuf.toString('hex')}`);
|
|
100
|
+
}
|
|
101
|
+
const code = resBuf.readUInt8(1);
|
|
102
|
+
if (code === 0x00 || code === 0x80) {
|
|
103
|
+
return code === 0x80;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
throw new Error(`The device returned an error: 0x${resBuf.toString('hex')}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=woplugmini_jp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"woplugmini_jp.js","sourceRoot":"","sources":["../../src/device/woplugmini_jp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Buffer } from 'node:buffer';
|
|
2
|
-
import type {
|
|
2
|
+
import type { meterServiceData } from '../types/bledevicestatus.js';
|
|
3
3
|
import type { NobleTypes } from '../types/types.js';
|
|
4
4
|
import { SwitchbotDevice } from '../device.js';
|
|
5
5
|
/**
|
|
@@ -9,8 +9,5 @@ import { SwitchbotDevice } from '../device.js';
|
|
|
9
9
|
export declare class WoSensorTH extends SwitchbotDevice {
|
|
10
10
|
constructor(peripheral: NobleTypes['peripheral'], noble: NobleTypes['noble']);
|
|
11
11
|
static parseServiceData(serviceData: Buffer, emitLog: (level: string, message: string) => void): Promise<meterServiceData | null>;
|
|
12
|
-
static parseServiceData_Plus(serviceData: Buffer, emitLog: (level: string, message: string) => void): Promise<meterPlusServiceData | null>;
|
|
13
|
-
static parseServiceData_Pro(serviceData: Buffer, emitLog: (level: string, message: string) => void): Promise<meterProServiceData | null>;
|
|
14
|
-
private static parseServiceDataCommon;
|
|
15
12
|
}
|
|
16
13
|
//# sourceMappingURL=wosensorth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wosensorth.d.ts","sourceRoot":"","sources":["../../src/device/wosensorth.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"wosensorth.d.ts","sourceRoot":"","sources":["../../src/device/wosensorth.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C;;;GAGG;AACH,qBAAa,UAAW,SAAQ,eAAe;gBACjC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC;WAI/D,gBAAgB,CAC3B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAChD,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;CA4BpC"}
|
|
@@ -9,17 +9,8 @@ export class WoSensorTH extends SwitchbotDevice {
|
|
|
9
9
|
super(peripheral, noble);
|
|
10
10
|
}
|
|
11
11
|
static async parseServiceData(serviceData, emitLog) {
|
|
12
|
-
return this.parseServiceDataCommon(serviceData, emitLog, SwitchBotBLEModel.Meter, SwitchBotBLEModelName.Meter, SwitchBotBLEModelFriendlyName.Meter);
|
|
13
|
-
}
|
|
14
|
-
static async parseServiceData_Plus(serviceData, emitLog) {
|
|
15
|
-
return this.parseServiceDataCommon(serviceData, emitLog, SwitchBotBLEModel.MeterPlus, SwitchBotBLEModelName.MeterPlus, SwitchBotBLEModelFriendlyName.MeterPlus);
|
|
16
|
-
}
|
|
17
|
-
static async parseServiceData_Pro(serviceData, emitLog) {
|
|
18
|
-
return this.parseServiceDataCommon(serviceData, emitLog, SwitchBotBLEModel.MeterPro, SwitchBotBLEModelName.MeterPro, SwitchBotBLEModelFriendlyName.MeterPro);
|
|
19
|
-
}
|
|
20
|
-
static async parseServiceDataCommon(serviceData, emitLog, model, modelName, modelFriendlyName) {
|
|
21
12
|
if (serviceData.length !== 6) {
|
|
22
|
-
emitLog('debugerror', `[
|
|
13
|
+
emitLog('debugerror', `[parseServiceData] Buffer length ${serviceData.length} !== 6!`);
|
|
23
14
|
return null;
|
|
24
15
|
}
|
|
25
16
|
const [byte2, byte3, byte4, byte5] = [
|
|
@@ -32,25 +23,16 @@ export class WoSensorTH extends SwitchbotDevice {
|
|
|
32
23
|
const tempC = tempSign * ((byte4 & 0b01111111) + (byte3 & 0b00001111) / 10);
|
|
33
24
|
const tempF = Math.round(((tempC * 9) / 5 + 32) * 10) / 10;
|
|
34
25
|
const data = {
|
|
35
|
-
model,
|
|
36
|
-
modelName,
|
|
37
|
-
modelFriendlyName,
|
|
26
|
+
model: SwitchBotBLEModel.Meter,
|
|
27
|
+
modelName: SwitchBotBLEModelName.Meter,
|
|
28
|
+
modelFriendlyName: SwitchBotBLEModelFriendlyName.Meter,
|
|
38
29
|
celsius: tempC,
|
|
39
30
|
fahrenheit: tempF,
|
|
40
31
|
fahrenheit_mode: !!(byte5 & 0b10000000),
|
|
41
32
|
humidity: byte5 & 0b01111111,
|
|
42
33
|
battery: byte2 & 0b01111111,
|
|
43
34
|
};
|
|
44
|
-
|
|
45
|
-
return data;
|
|
46
|
-
}
|
|
47
|
-
if (model === SwitchBotBLEModel.MeterPlus) {
|
|
48
|
-
return data;
|
|
49
|
-
}
|
|
50
|
-
if (model === SwitchBotBLEModel.MeterPro) {
|
|
51
|
-
return data;
|
|
52
|
-
}
|
|
53
|
-
return null;
|
|
35
|
+
return data;
|
|
54
36
|
}
|
|
55
37
|
}
|
|
56
38
|
//# sourceMappingURL=wosensorth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wosensorth.js","sourceRoot":"","sources":["../../src/device/wosensorth.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAE3G;;;GAGG;AACH,MAAM,OAAO,UAAW,SAAQ,eAAe;IAC7C,YAAY,UAAoC,EAAE,KAA0B;QAC1E,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAC3B,WAAmB,EACnB,OAAiD;QAEjD,
|
|
1
|
+
{"version":3,"file":"wosensorth.js","sourceRoot":"","sources":["../../src/device/wosensorth.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAE3G;;;GAGG;AACH,MAAM,OAAO,UAAW,SAAQ,eAAe;IAC7C,YAAY,UAAoC,EAAE,KAA0B;QAC1E,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAC3B,WAAmB,EACnB,OAAiD;QAEjD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,YAAY,EAAE,oCAAoC,WAAW,CAAC,MAAM,SAAS,CAAC,CAAA;YACtF,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG;YACnC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;YACxB,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;YACxB,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;YACxB,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;SACzB,CAAA;QACD,MAAM,QAAQ,GAAG,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5C,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAA;QAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAA;QAE1D,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,iBAAiB,CAAC,KAAK;YAC9B,SAAS,EAAE,qBAAqB,CAAC,KAAK;YACtC,iBAAiB,EAAE,6BAA6B,CAAC,KAAK;YACtD,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,KAAK;YACjB,eAAe,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC;YACvC,QAAQ,EAAE,KAAK,GAAG,UAAU;YAC5B,OAAO,EAAE,KAAK,GAAG,UAAU;SAC5B,CAAA;QACD,OAAO,IAAwB,CAAA;IACjC,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Buffer } from 'node:buffer';
|
|
2
|
+
import type { meterPlusServiceData } from '../types/bledevicestatus.js';
|
|
3
|
+
import type { NobleTypes } from '../types/types.js';
|
|
4
|
+
import { SwitchbotDevice } from '../device.js';
|
|
5
|
+
/**
|
|
6
|
+
* Class representing a WoSensorTH device.
|
|
7
|
+
* @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/meter.md
|
|
8
|
+
*/
|
|
9
|
+
export declare class WoSensorTHPlus extends SwitchbotDevice {
|
|
10
|
+
constructor(peripheral: NobleTypes['peripheral'], noble: NobleTypes['noble']);
|
|
11
|
+
static parseServiceData(serviceData: Buffer, emitLog: (level: string, message: string) => void): Promise<meterPlusServiceData | null>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=wosensorthplus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wosensorthplus.d.ts","sourceRoot":"","sources":["../../src/device/wosensorthplus.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C;;;GAGG;AACH,qBAAa,cAAe,SAAQ,eAAe;gBACrC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC;WAI/D,gBAAgB,CAC3B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAChD,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;CA4BxC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { SwitchbotDevice } from '../device.js';
|
|
2
|
+
import { SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName } from '../types/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Class representing a WoSensorTH device.
|
|
5
|
+
* @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/meter.md
|
|
6
|
+
*/
|
|
7
|
+
export class WoSensorTHPlus extends SwitchbotDevice {
|
|
8
|
+
constructor(peripheral, noble) {
|
|
9
|
+
super(peripheral, noble);
|
|
10
|
+
}
|
|
11
|
+
static async parseServiceData(serviceData, emitLog) {
|
|
12
|
+
if (serviceData.length !== 6) {
|
|
13
|
+
emitLog('debugerror', `[parseServiceData] Buffer length ${serviceData.length} !== 6 or 7!`);
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const [byte2, byte3, byte4, byte5] = [
|
|
17
|
+
serviceData.readUInt8(2),
|
|
18
|
+
serviceData.readUInt8(3),
|
|
19
|
+
serviceData.readUInt8(4),
|
|
20
|
+
serviceData.readUInt8(5),
|
|
21
|
+
];
|
|
22
|
+
const tempSign = byte4 & 0b10000000 ? 1 : -1;
|
|
23
|
+
const tempC = tempSign * ((byte4 & 0b01111111) + (byte3 & 0b00001111) / 10);
|
|
24
|
+
const tempF = Math.round(((tempC * 9) / 5 + 32) * 10) / 10;
|
|
25
|
+
const data = {
|
|
26
|
+
model: SwitchBotBLEModel.MeterPlus,
|
|
27
|
+
modelName: SwitchBotBLEModelName.MeterPlus,
|
|
28
|
+
modelFriendlyName: SwitchBotBLEModelFriendlyName.MeterPlus,
|
|
29
|
+
celsius: tempC,
|
|
30
|
+
fahrenheit: tempF,
|
|
31
|
+
fahrenheit_mode: !!(byte5 & 0b10000000),
|
|
32
|
+
humidity: byte5 & 0b01111111,
|
|
33
|
+
battery: byte2 & 0b01111111,
|
|
34
|
+
};
|
|
35
|
+
return data;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=wosensorthplus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wosensorthplus.js","sourceRoot":"","sources":["../../src/device/wosensorthplus.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAE3G;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,eAAe;IACjD,YAAY,UAAoC,EAAE,KAA0B;QAC1E,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAC3B,WAAmB,EACnB,OAAiD;QAEjD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,YAAY,EAAE,oCAAoC,WAAW,CAAC,MAAM,cAAc,CAAC,CAAA;YAC3F,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG;YACnC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;YACxB,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;YACxB,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;YACxB,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;SACzB,CAAA;QACD,MAAM,QAAQ,GAAG,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5C,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAA;QAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAA;QAE1D,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,iBAAiB,CAAC,SAAS;YAClC,SAAS,EAAE,qBAAqB,CAAC,SAAS;YAC1C,iBAAiB,EAAE,6BAA6B,CAAC,SAAS;YAC1D,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,KAAK;YACjB,eAAe,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC;YACvC,QAAQ,EAAE,KAAK,GAAG,UAAU;YAC5B,OAAO,EAAE,KAAK,GAAG,UAAU;SAC5B,CAAA;QACD,OAAO,IAA4B,CAAA;IACrC,CAAC;CACF"}
|