node-poweredup/src/devices/currentsensor.ts

65 lines
1.9 KiB
TypeScript

import { Device } from "./device";
import { IDeviceInterface } from "../interfaces";
import * as Consts from "../consts";
/**
* @class CurrentSensor
* @extends Device
*/
export class CurrentSensor extends Device {
constructor (hub: IDeviceInterface, portId: number) {
super(hub, portId, ModeMap, Consts.DeviceType.CURRENT_SENSOR);
}
public receive (message: Buffer) {
const mode = this.mode;
switch (mode) {
case Mode.CURRENT:
if (this.isWeDo2SmartHub) {
const current = message.readInt16LE(2) / 1000;
this.notify("current", { current });
} else {
let maxCurrentValue = MaxCurrentValue[this.hub.type];
if (maxCurrentValue === undefined) {
maxCurrentValue = MaxCurrentValue[Consts.HubType.UNKNOWN];
}
let maxCurrentRaw = MaxCurrentRaw[this.hub.type];
if (maxCurrentRaw === undefined) {
maxCurrentRaw = MaxCurrentRaw[Consts.HubType.UNKNOWN];
}
const current = message.readUInt16LE(4) * maxCurrentValue / maxCurrentRaw;
/**
* Emits when a current change is detected.
* @event CurrentSensor#current
* @type {object}
* @param {number} current
*/
this.notify("current", { current });
}
break;
}
}
}
export enum Mode {
CURRENT = 0x00
}
export const ModeMap: {[event: string]: number} = {
"current": Mode.CURRENT
};
const MaxCurrentValue: {[hubType: number]: number} = {
[Consts.HubType.UNKNOWN]: 2444,
[Consts.HubType.TECHNIC_MEDIUM_HUB]: 4175,
};
const MaxCurrentRaw: {[hubType: number]: number} = {
[Consts.HubType.UNKNOWN]: 4095,
};