UNPKG

@elshaer/homebridge-lg-thinq

Version:

A Homebridge plugin for controlling/monitoring LG ThinQ device via LG ThinQ platform.

128 lines 5.5 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.loopupEnum = exports.lookupEnumIndex = void 0; const AirState_1 = __importDefault(require("./transforms/AirState")); const WasherDryer_1 = __importDefault(require("./transforms/WasherDryer")); const devices_1 = require("./devices"); const RefState_1 = __importDefault(require("./transforms/RefState")); const uuid = __importStar(require("uuid")); const AirPurifierState_1 = __importDefault(require("./transforms/AirPurifierState")); const HoodState_1 = __importDefault(require("./transforms/HoodState")); class Helper { static make(device) { switch (device.type) { case 'DRYER': case 'WASHER': return devices_1.Washer; case 'AC': return devices_1.AC; case 'REFRIGERATOR': return devices_1.Refrigerator; case 'AIR_PURIFIER': return devices_1.AirPurifier; case 'HOOD': return devices_1.RangeHood; } return null; } /** * transform device from thinq1 to thinq2 compatible (with snapshot data) */ static transform(device, monitorData) { const decodedMonitor = device.deviceModel.decodeMonitor(monitorData || {}); switch (device.type) { case 'DRYER': case 'WASHER': device.data.snapshot = (0, WasherDryer_1.default)(device.deviceModel, decodedMonitor); break; case 'AIR_PURIFIER': device.data.snapshot = (0, AirPurifierState_1.default)(device.deviceModel, decodedMonitor); break; case 'AC': device.data.snapshot = (0, AirState_1.default)(device.deviceModel, decodedMonitor); break; case 'REFRIGERATOR': device.data.snapshot = (0, RefState_1.default)(device.deviceModel, decodedMonitor); break; case 'HOOD': device.data.snapshot = (0, HoodState_1.default)(device.deviceModel, decodedMonitor); break; default: // return original device data if not supported return device; } if (device.data.snapshot) { if (monitorData) { // mark device online to perform update device.data.online = true; device.data.snapshot.online = true; } device.data.snapshot.raw = monitorData === null ? null : decodedMonitor; } return device; } static prepareControlData(device, key, value) { var _a, _b, _c, _d; const data = { cmd: 'Control', cmdOpt: 'Set', deviceId: device.id, workId: uuid.v4(), }; if (((_a = device.deviceModel.data.ControlWifi) === null || _a === void 0 ? void 0 : _a.type) === 'BINARY(BYTE)') { const sampleData = ((_d = (_c = (_b = device.deviceModel.data.ControlWifi) === null || _b === void 0 ? void 0 : _b.action) === null || _c === void 0 ? void 0 : _c.SetControl) === null || _d === void 0 ? void 0 : _d.data) || '[]'; const decodedMonitor = device.snapshot.raw || {}; decodedMonitor[key] = value; // build data array of byte const byteArray = new Uint8Array(JSON.parse(Object.keys(decodedMonitor).reduce((prev, key) => { return prev.replace(new RegExp('{{' + key + '}}', 'g'), parseInt(decodedMonitor[key] || '0')); }, sampleData))); Object.assign(data, { value: 'ControlData', data: Buffer.from(String.fromCharCode(...byteArray)).toString('base64'), format: 'B64', }); } else { data.value = { [key]: value, }; data.data = ''; } return data; } } exports.default = Helper; function lookupEnumIndex(enumType, value) { return Object.keys(enumType)[Object.values(enumType).indexOf(value)]; } exports.lookupEnumIndex = lookupEnumIndex; function loopupEnum(deviceModel, decodedMonitor, key) { if (!(key in decodedMonitor)) { return null; } return deviceModel.enumName(key, decodedMonitor[key]); } exports.loopupEnum = loopupEnum; //# sourceMappingURL=helper.js.map