@constructorfleet/ultimate-govee
Version:
Library for interacting with Govee devices written in Typescript.
87 lines • 3.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ColorRGBState = exports.ColorRGBStateName = void 0;
const _ultimate_govee_common_1 = require("../../../common");
const device_state_1 = require("./device.state");
const states_types_1 = require("./states.types");
exports.ColorRGBStateName = 'colorRGB';
class ColorRGBState extends device_state_1.DeviceOpState {
constructor(device, opType = _ultimate_govee_common_1.OpType.REPORT, identifier = [0x05]) {
super({ opType, identifier }, device, exports.ColorRGBStateName, {
red: undefined,
green: undefined,
blue: undefined,
});
this.parseOption = states_types_1.ParseOption.opCode.or(states_types_1.ParseOption.state);
this.stateToCommand = (nextState) => {
const { red, green, blue } = nextState ?? {};
if (!(0, _ultimate_govee_common_1.isBetween)(red, 0, 255) ||
!(0, _ultimate_govee_common_1.isBetween)(green, 0, 255) ||
!(0, _ultimate_govee_common_1.isBetween)(blue, 0, 255)) {
this.logger.warn('Missing or invalid color, ignoring command');
return;
}
return {
status: [
{
state: {
color: {
red,
green,
blue,
},
},
},
{
op: {
command: [[0x02, red, green, blue]],
},
},
],
command: [
{
command: 'color',
data: {
color: {
red,
green,
blue,
},
},
},
{
data: {
command: [(0, _ultimate_govee_common_1.asOpCode)(0x33, this.identifier, 0x03, red, green, blue)],
},
},
],
};
};
}
parseState(data) {
const { red, green, blue } = data?.state?.color ?? {};
if ((0, _ultimate_govee_common_1.isBetween)(red, 0, 255) &&
(0, _ultimate_govee_common_1.isBetween)(green, 0, 255) &&
(0, _ultimate_govee_common_1.isBetween)(blue, 0, 255)) {
this.stateValue.next({
red,
green,
blue,
});
}
}
parseOpCommand(opCommand) {
const [red, green, blue] = opCommand.slice(0, 3);
if ((0, _ultimate_govee_common_1.isBetween)(red, 0, 255) &&
(0, _ultimate_govee_common_1.isBetween)(green, 0, 255) &&
(0, _ultimate_govee_common_1.isBetween)(blue, 0, 255)) {
this.stateValue.next({
red,
green,
blue,
});
}
}
}
exports.ColorRGBState = ColorRGBState;
//# sourceMappingURL=color-rgb.state.js.map