@elshaer/homebridge-lg-thinq
Version:
A Homebridge plugin for controlling/monitoring LG ThinQ device via LG ThinQ platform.
128 lines • 5.5 kB
JavaScript
;
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