UNPKG

myenergi-api

Version:

NodeJS implementation of MyEnergi API for controlling Zappi, Eddi and other MyEnergi products

412 lines (411 loc) 15.8 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.MyEnergi = void 0; const Digest_1 = require("./Digest"); const Types_1 = require("./models/Types"); class MyEnergi { constructor(username, password, apiBaseUrl) { this._config = { username: "", password: "", base_url: "https://s18.myenergi.net", eddi_url: "/cgi-jstatus-E", zappi_url: "/cgi-jstatus-Z", harvi_url: "/cgi-jstatus-H", libbi_url: "/cgi-jstatus-L", libbi_mode_url: "/cgi-libbi-mode-L", status_url: "/cgi-jstatus-*", dayhour_url: "/cgi-jdayhour-", zappi_mode_url: "/cgi-zappi-mode-Z", zappi_min_green_url: "/cgi-set-min-green-Z", zappi_phase_setting_url: "/cgi-zappi-phase-setting-Z", zappi_boost_time_url: "/cgi-boost-time-Z", zappi_lock_url: "/cgi-jlock-", eddi_mode_url: "/cgi-eddi-mode-E", eddi_boost_url: "/cgi-eddi-boost-E", get_app_key_url: "/cgi-get-app-key", set_app_key_url: "/cgi-set-app-key", }; this._config.username = username; this._config.password = password; if (apiBaseUrl) this._config.base_url = apiBaseUrl; this._digest = new Digest_1.Digest(this._config.base_url, this._config.username, this._config.password); } getStatusAll() { return __awaiter(this, void 0, void 0, function* () { try { const data = yield this._digest.get(new URL(this._config.status_url, this._config.base_url)); const jsonData = JSON.parse(data); return jsonData; } catch (error) { return []; } }); } getStatusZappiAll() { return __awaiter(this, void 0, void 0, function* () { try { const data = yield this._digest.get(new URL(this._config.zappi_url, this._config.base_url)); const jsonData = JSON.parse(data); if (jsonData.zappi) return Object.assign([], jsonData.zappi); else return []; } catch (error) { return []; } }); } getStatusZappi(serialNumber) { return __awaiter(this, void 0, void 0, function* () { try { const data = yield this._digest.get(new URL(this._config.zappi_url, this._config.base_url)); const jsonData = JSON.parse(data); if (jsonData.zappi) { const zappi = Object.assign([], jsonData.zappi).find((zappi) => { return zappi.sno == serialNumber; }); if (zappi) return Object.assign({}, zappi); else return null; } else return null; } catch (error) { return null; } }); } setZappiChargeMode(serialNo, chargeMode) { return __awaiter(this, void 0, void 0, function* () { try { const url = new URL(`${this._config.zappi_mode_url}${serialNo}-${chargeMode}-0-0-0000`, this._config.base_url); const data = yield this._digest.get(url); const jsonData = JSON.parse(data); return jsonData; } catch (error) { return {}; } }); } setZappiBoostMode(serialNo, boostMode, kwh = 0, completeTime = "0000") { return __awaiter(this, void 0, void 0, function* () { try { if (boostMode === Types_1.ZappiBoostMode.Stop) { kwh = 0; completeTime = "0000"; } const url = new URL(`${this._config.zappi_mode_url}${serialNo}-0-${boostMode}-${kwh}-${completeTime}`, this._config.base_url); const data = yield this._digest.get(url); const jsonData = JSON.parse(data); return jsonData; } catch (error) { return {}; } }); } setZappiGreenLevel(serialNo, percentage) { return __awaiter(this, void 0, void 0, function* () { try { const url = new URL(`${this._config.zappi_min_green_url}${serialNo}-${percentage}`, this._config.base_url); const data = yield this._digest.get(url); const jsonData = JSON.parse(data); return jsonData; } catch (error) { return {}; } }); } setZappiPhaseSetting(serialNo, phaseSetting) { return __awaiter(this, void 0, void 0, function* () { try { const url = new URL(`${this._config.zappi_phase_setting_url}${serialNo}-${phaseSetting}`, this._config.base_url); const data = yield this._digest.get(url); const jsonData = JSON.parse(data); return jsonData; } catch (error) { return {}; } }); } unlockZappi(serialNo) { return __awaiter(this, void 0, void 0, function* () { try { const url = new URL(`${this._config.zappi_lock_url}${serialNo}-00000010`, this._config.base_url); const data = yield this._digest.get(url); const jsonData = JSON.parse(data); return jsonData; } catch (error) { return {}; } }); } getDayHourHistory(id, year, month, day, startHour, noHours) { return __awaiter(this, void 0, void 0, function* () { try { let path = `${this._config.dayhour_url}${id}-${year}-${month}-${day}`; if (startHour !== undefined) { path += `-${startHour}`; if (noHours !== undefined) { path += `-${noHours}`; } } const url = new URL(path, this._config.base_url); const data = yield this._digest.get(url); const jsonData = JSON.parse(data); const key = Object.keys(jsonData)[0]; const records = key ? jsonData[key] : undefined; return Array.isArray(records) ? records : []; } catch (error) { return []; } }); } getStatusLibbiAll() { return __awaiter(this, void 0, void 0, function* () { try { const data = yield this._digest.get(new URL(this._config.libbi_url, this._config.base_url)); const jsonData = JSON.parse(data); if (jsonData.libbi) return Object.assign([], jsonData.libbi); else return []; } catch (error) { return []; } }); } getStatusLibbi(serialNumber) { return __awaiter(this, void 0, void 0, function* () { try { const data = yield this._digest.get(new URL(this._config.libbi_url, this._config.base_url)); const jsonData = JSON.parse(data); if (jsonData.libbi) { const libbi = Object.assign([], jsonData.libbi).find((libbi) => { return libbi.sno == serialNumber; }); if (libbi) return Object.assign({}, libbi); else return null; } else return null; } catch (error) { return null; } }); } setLibbiMode(serialNo, mode) { return __awaiter(this, void 0, void 0, function* () { try { const url = new URL(`${this._config.libbi_mode_url}${serialNo}-${mode}`, this._config.base_url); const data = yield this._digest.get(url); const jsonData = JSON.parse(data); return jsonData; } catch (error) { return {}; } }); } getZappiBoostTimes(serialNo) { return __awaiter(this, void 0, void 0, function* () { try { const url = new URL(`${this._config.zappi_boost_time_url}${serialNo}`, this._config.base_url); const data = yield this._digest.get(url); const jsonData = JSON.parse(data); return jsonData; } catch (error) { return {}; } }); } setZappiBoostTime(serialNo, slot, startHour, startMinute, durationHour, durationMinute, daySpec) { return __awaiter(this, void 0, void 0, function* () { try { const url = new URL(`${this._config.zappi_boost_time_url}${serialNo}-${slot}-${startHour.toString().padStart(2, '0')}${startMinute.toString().padStart(2, '0')}-${durationHour}${durationMinute.toString().padStart(2, '0')}-${daySpec}`, this._config.base_url); const data = yield this._digest.get(url); const jsonData = JSON.parse(data); return jsonData; } catch (error) { return {}; } }); } getStatusEddiAll() { return __awaiter(this, void 0, void 0, function* () { try { const data = yield this._digest.get(new URL(this._config.eddi_url, this._config.base_url)); const jsonData = JSON.parse(data); if (jsonData.eddi) return Object.assign([], jsonData.eddi); else return []; } catch (error) { return []; } }); } getStatusEddi(serialNumber) { return __awaiter(this, void 0, void 0, function* () { try { const data = yield this._digest.get(new URL(this._config.eddi_url, this._config.base_url)); const jsonData = JSON.parse(data); if (jsonData.eddi) { const eddi = Object.assign([], jsonData.eddi).find((eddi) => { return eddi.sno == serialNumber; }); if (eddi) return Object.assign({}, eddi); else return null; } else return null; } catch (error) { return null; } }); } setEddiMode(serialNo, mode) { return __awaiter(this, void 0, void 0, function* () { try { const url = new URL(`${this._config.eddi_mode_url}${serialNo}-${mode}`, this._config.base_url); const data = yield this._digest.get(url); const jsonData = JSON.parse(data); return jsonData; } catch (error) { return {}; } }); } setEddiBoost(serialNo, boost, minutes = 0) { return __awaiter(this, void 0, void 0, function* () { try { const url = new URL(`${this._config.eddi_boost_url}${serialNo}-${boost}-${minutes}`, this._config.base_url); const data = yield this._digest.get(url); const jsonData = JSON.parse(data); return jsonData; } catch (error) { return {}; } }); } getStatusHarviAll() { return __awaiter(this, void 0, void 0, function* () { try { const data = yield this._digest.get(new URL(this._config.harvi_url, this._config.base_url)); const jsonData = JSON.parse(data); if (jsonData.harvi) return Object.assign([], jsonData.harvi); else return []; } catch (error) { return []; } }); } getStatusHarvi(serialNumber) { return __awaiter(this, void 0, void 0, function* () { try { const data = yield this._digest.get(new URL(this._config.harvi_url, this._config.base_url)); const jsonData = JSON.parse(data); if (jsonData.harvi) { const harvi = Object.assign([], jsonData.harvi).find((harvi) => { return harvi.sno == serialNumber; }); if (harvi) return Object.assign({}, harvi); else return null; } else return null; } catch (error) { return null; } }); } getAppKeyFull(key) { return __awaiter(this, void 0, void 0, function* () { try { const data = yield this._digest.get(new URL(`${this._config.get_app_key_url}-${key}`, this._config.base_url)); const jsonData = JSON.parse(data); if (jsonData) { const result = Object.assign({}, jsonData); return result; } } catch (error) { return null; } return null; }); } getAppKey(key) { return __awaiter(this, void 0, void 0, function* () { try { const data = yield this._digest.get(new URL(`${this._config.get_app_key_url}-${key}`, this._config.base_url)); const jsonData = JSON.parse(data); if (jsonData) { const result = Object.assign({}, jsonData); if (result[Object.keys(result)[0]]) return result[Object.keys(result)[0]]; } } catch (error) { return null; } return null; }); } setAppKey(key, val) { return __awaiter(this, void 0, void 0, function* () { try { const data = yield this._digest.get(new URL(`${this._config.set_app_key_url}-${key}=${val}`, this._config.base_url)); const jsonData = JSON.parse(data); if (jsonData) { const result = Object.assign({}, jsonData); if (result[Object.keys(result)[0]]) return result[Object.keys(result)[0]]; } } catch (error) { return null; } return null; }); } } exports.MyEnergi = MyEnergi;