UNPKG

iobroker.schedule-switcher

Version:
235 lines (234 loc) 7.65 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var IoBrokerStateService_exports = {}; __export(IoBrokerStateService_exports, { IoBrokerStateService: () => IoBrokerStateService }); module.exports = __toCommonJS(IoBrokerStateService_exports); class IoBrokerStateService { adapter; delayTimeout; checkTime = 0; mergeTime = 0; /** * @param adapter ioBroker */ constructor(adapter) { if (!adapter) { throw new Error("adapter may not be null."); } this.adapter = adapter; this.checkTime = Date.now(); this.mergeTime = 0; this.delayTimeout = void 0; } /** * @param id ID * @param value Values */ async extendObject(id, value) { if (!id || !value) { throw new Error("State or Object is empty! - extendObject"); } this.checkId(id); await this.adapter.extendObject(id, value); } /** * @param id ID * @param value Values * @param ack Ack flag */ async setState(id, value, ack = true) { if (value == null) { return; } this.checkId(id); await this.adapter.setState(id, { val: value, ack }); } /** * @param id ID * @param value Values * @param trigger Trigger */ async setForeignState(id, value, trigger) { this.adapter.log.debug(`TRIGGER SET: ${JSON.stringify(trigger)}`); const diffTime = Date.now() - this.checkTime; this.checkTime = Date.now(); this.adapter.log.debug(`DIFF: ${diffTime}`); if (this.adapter.config.switch_delay > 0 && this.adapter.config.switch_delay > diffTime) { this.adapter.log.debug(`Start Sleep`); this.mergeTime += this.adapter.config.switch_delay; await this.delay(this.mergeTime); } else { this.mergeTime = 0; } const old_value = await this.adapter.getForeignStateAsync(id); const old_val = old_value == null ? null : old_value.val; let change_val = false; this.adapter.log.debug(trigger.valueCheck.toString()); if (trigger.valueCheck) { if (JSON.stringify(value) === JSON.stringify(old_val)) { this.adapter.log.debug(`Set not change!`); change_val = true; } } if (this.adapter.config.history > 0) { await this.setHistory(id, value, trigger, old_val, change_val); } this.checkId(id); if (!change_val) { this.adapter.log.debug(`Set state ${id} with value ${value == null ? void 0 : value.toString()} - ${old_val == null ? void 0 : old_val.toString()}`); this.adapter.setForeignState(id, value, false); this.adapter.sendTo(this.adapter.namespace, "update-html", { dataId: id }); } else { this.adapter.log.debug(`Set not state ${id} with value ${value == null ? void 0 : value.toString()} - ${old_val == null ? void 0 : old_val.toString()}`); } this.adapter.sendTo(this.adapter.namespace, "update-actionTime", { dataId: id }); } /** * @param id ID * @param value Values * @param trigger Trigger * @param old_value Actual value * @param setVal Set new value */ async setHistory(id, value, trigger, old_value, setVal) { if (!trigger || trigger.id != null) { let history_newvalue = []; const history_value = await this.getState(`history`); try { if (history_value != null && typeof history_value == "string") { history_newvalue = JSON.parse(history_value); } else { history_newvalue = []; } } catch { history_newvalue = []; } if (Object.keys(history_newvalue).length > this.adapter.config.history) { history_newvalue.pop(); } const nowTime = /* @__PURE__ */ new Date(); let minute = 0; let hour = 0; if (trigger && trigger.trigger == "TimeTrigger") { minute = trigger.minute != null ? trigger.minute : 0; hour = trigger.hour != null ? trigger.hour : 0; } else if (trigger && trigger.trigger == "AstroTrigger") { minute = trigger.todayTrigger.minute != null ? trigger.todayTrigger.minute : 0; hour = trigger.todayTrigger.hour != null ? trigger.todayTrigger.hour : 0; } else { minute = new Date(trigger.date ? trigger.date : "").getMinutes(); hour = new Date(trigger.date ? trigger.date : "").getHours(); } const new_data = { setObjectId: id, objectId: trigger.objectId != null ? trigger.objectId : "unknown", actualValue: value, oldValue: old_value, checkValue: setVal, trigger: trigger.trigger != null ? trigger.trigger : "unknown", astroTime: trigger.astroTime != null ? trigger.astroTime : "unknown", shiftInMinutes: trigger.shiftInMinutes != null ? trigger.shiftInMinutes : 0, date: nowTime.getDay(), hour, minute, weekdays: trigger.weekdays != null ? trigger.weekdays : [], timestamp: Date.now(), dateTime: nowTime.toISOString(), dateTimeWithTimezone: nowTime.setHours(nowTime.getHours() - nowTime.getTimezoneOffset() / 60) ? nowTime : /* @__PURE__ */ new Date() }; history_newvalue.push(new_data); history_newvalue.sort((a, b) => { if (a.timestamp > b.timestamp) { return -1; } }); await this.setState(`history`, JSON.stringify(history_newvalue), true); } } /** * @param id ID * @returns iobroker.state */ async getForeignState(id) { return new Promise((resolve, _) => { this.checkId(id); void this.adapter.getForeignState(id, (err, state) => { if (err || state == null) { this.adapter.log.error(`Requested state ${id} returned null/undefined!`); } resolve(state == null ? void 0 : state.val); }); }); } /** * @param id ID * @returns iobroker.state */ async getState(id) { return new Promise((resolve, _) => { this.checkId(id); this.adapter.getState(id, (err, state) => { if (err || state == null) { this.adapter.log.error(`Requested getState ${id} returned null/undefined!`); } resolve(state == null ? void 0 : state.val); }); }); } /** * @param ms milliseconds * @returns sleep */ delay(ms) { return new Promise((resolve) => { this.delayTimeout = this.adapter.setTimeout(resolve, ms); }); } /** * destroy all * * @returns boolean */ destroy() { this.delayTimeout && this.adapter.clearTimeout(this.delayTimeout); this.delayTimeout = void 0; return Promise.resolve(true); } /** * destroy all * * @param id check string or crash adapter */ checkId(id) { if (id == null || id.length === 0) { throw new Error("id may not be null or empty."); } } } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { IoBrokerStateService }); //# sourceMappingURL=IoBrokerStateService.js.map