UNPKG

homebridge-izone-airconditioner

Version:
140 lines (139 loc) 4.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MODES = void 0; exports["default"] = _default; var _nodeFetch = _interopRequireDefault(require("node-fetch")); var _urijs = _interopRequireDefault(require("urijs")); var _fp = require("lodash/fp"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } var MODES = exports.MODES = { cool: 'cool', heat: 'heat', vent: 'vent', dry: 'dry', auto: 'auto' }; function _default(rawUrl) { var fetch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _nodeFetch["default"]; var parsedUrl = (0, _urijs["default"])(rawUrl); var protocol = parsedUrl.protocol(); if (protocol !== 'http' && protocol !== 'https') throw 'Not a valid URL'; var url = parsedUrl.toString(); var postJson = buildPostJson(fetch); var readFloatAttribute = buildReadFloatAttribute(fetch); var readStringAttribute = buildReadStringAttribute(fetch); var readOnOffAttribute = buildReadOnOffAttribute(fetch); var getTemps = function getTemps(zones) { return zones.map(function (zone) { return parseFloat(zone.Temp); }); }; return { setPower: function setPower(value) { return postJson("".concat(url, "SystemON"), { SystemON: value ? 'on' : 'off' }); }, getPower: function getPower() { return readOnOffAttribute("".concat(url, "SystemSettings"), 'SysOn'); }, getUnitSetpoint: function getUnitSetpoint() { return readFloatAttribute("".concat(url, "SystemSettings"), 'Setpoint'); }, setUnitSetpoint: function setUnitSetpoint(value) { return postJson("".concat(url, "UnitSetpoint"), { UnitSetpoint: value.toString() }); }, setMode: function setMode(value) { return postJson("".concat(url, "SystemMODE"), { SystemMODE: value }); }, getMode: function getMode() { return readStringAttribute("".concat(url, "SystemSettings"), 'SysMode'); }, setFanSpeed: function setFanSpeed(value) { return postJson("".concat(url, "SystemFAN"), { SystemFAN: value }); }, getFanSpeed: function getFanSpeed() { return readStringAttribute("".concat(url, "SystemSettings"), 'SysFan'); }, getActualTemperature: function getActualTemperature() { return Promise.all([readFloatAttribute("".concat(url, "SystemSettings"), 'Temp'), getJson(fetch, "".concat(url, "Zones1_4")).then(getTemps), getJson(fetch, "".concat(url, "Zones5_8")).then(getTemps), getJson(fetch, "".concat(url, "Zones9_12")).then(getTemps)]).then(function () { for (var _len = arguments.length, temperatures = new Array(_len), _key = 0; _key < _len; _key++) { temperatures[_key] = arguments[_key]; } return getAverageTemperature(temperatures); }); }, getPowerAndMode: function getPowerAndMode() { return Promise.all([readOnOffAttribute("".concat(url, "SystemSettings"), 'SysOn'), readStringAttribute("".concat(url, "SystemSettings"), 'SysMode')]); } }; } function checkStatus(res) { if (res.ok) { // res.status >= 200 && res.status < 300 return res; } else { throw "API ERROR: ".concat(res.statusText); } } var getJson = function getJson(fetch, url) { return fetch(url).then(checkStatus).then(function (res) { return res.json(); }); }; var readAttribute = function readAttribute(fetch, url, attribute) { return getJson(fetch, url).then(function (data) { return data[attribute]; }); }; var buildReadFloatAttribute = function buildReadFloatAttribute(fetch) { return function (url, attribute) { return readAttribute(fetch, url, attribute).then(function (value) { return parseFloat(value); }); }; }; var buildReadStringAttribute = function buildReadStringAttribute(fetch) { return function (url, attribute) { return readAttribute(fetch, url, attribute).then(function (value) { return value.toString(); }); }; }; var buildReadOnOffAttribute = function buildReadOnOffAttribute(fetch) { return function (url, attribute) { return readAttribute(fetch, url, attribute).then(function (value) { return value === 'on'; }); }; }; var buildPostJson = function buildPostJson(fetch) { return function (url, body) { return fetch(url, { method: 'post', body: JSON.stringify(body), headers: { 'Content-Type': 'application/json' } }).then(checkStatus).then(function (_res) { return true; }); }; }; var extractTemperatures = (0, _fp.flow)(_fp.flattenDeep, (0, _fp.reject)(function (val) { return val == 0; })); var getAverageTemperature = function getAverageTemperature(rawTemperatures) { var temperatures = extractTemperatures(rawTemperatures); if (temperatures.length === 0) return 0; return (0, _fp.sum)(temperatures) / temperatures.length; }; //# sourceMappingURL=api.js.map