UNPKG

node-red-contrib-home-assistant-websocket

Version:
2 lines (1 loc) 4.07 kB
"use strict";var x=Object.create;var d=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var M=Object.getPrototypeOf,S=Object.prototype.hasOwnProperty;var $=(n,t)=>{for(var s in t)d(n,s,{get:t[s],enumerable:!0})},l=(n,t,s,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of C(t))!S.call(n,e)&&e!==s&&d(n,e,{get:()=>t[e],enumerable:!(i=E(t,e))||i.enumerable});return n};var f=(n,t,s)=>(s=n!=null?x(M(n)):{},l(t||!n||!n.__esModule?d(s,"default",{value:n,enumerable:!0}):s,n)),v=n=>l(d({},"__esModule",{value:!0}),n);var j={};$(j,{default:()=>b});module.exports=v(j);var g=require("cronosjs"),p=f(require("selectn")),y=f(require("../../common/controllers/ExposeAsMixin")),T=f(require("../../common/controllers/OutputController")),r=f(require("../../common/errors/ConfigError")),w=require("../../const"),m=require("../../globals"),D=require("../../helpers/date"),a=require("../../helpers/utils");const O="state",N=(0,y.default)(T.default);class b extends N{#t=null;#e=!1;#s=!1;#a(t){this.node.debug(`Creating cronjob: ${t}`),this.#t=(0,g.scheduleTask)(t,async()=>{try{await this.#u()}catch(s){this.node.error(s),this.status.setError()}},{})}#n(){this.#t!=null&&(this.node.debug(`Destroying cronjob: ${this.#t?.nextRun}`),this.#t.stop(),this.#t=null)}#r(t){if(t===void 0||t==="unavailable"||typeof t!="string"&&typeof t!="number")throw new r.default(t==="unavailable"?"ha-time.status.unavailable":"ha-time.status.invalid_property")}#i(t){return(0,D.formatDate)({date:t,options:{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}})}#o(){return this.homeAssistant.websocket.getState(this.node.config.entityId)}async#h(){let t=this.node.config.offset||"0";this.node.config.offsetType===w.TypedInputTypes.JSONata&&(t=await this.jsonataService.evaluate(t));const s=(0,a.getTimeInMilliseconds)(Number(t),this.node.config.offsetUnits);if(isNaN(s))throw new r.default(["ha-time.error.offset_nan",{offset:t}]);return Number(s)}#d(t,s){if(!this.node.config.repeatDaily&&Math.sign(s)===-1){const i=t.getTime();return(Math.max(Date.now(),i+s)-i)*Math.random()}return s*Math.random()}#f(){const t={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6},s=Object.keys(t).reduce((i,e)=>(this.node.config[e]&&i.push(t[e]),i),[]);if(s.length===0)throw new r.default("ha-time.error.no_days_selected");return s.length===7?"*":s.join(",")}async#u(){if(this.isEnabled===!1)return;const t=new Date,s=this.#o(),i={};if(await this.setCustomOutputs(this.node.config.outputProperties,i,{config:this.node.config,entity:s,entityState:s?.state,triggerId:s?.entity_id}),this.node.config.repeatDaily){const e=this.#i(t),o=this.#i(this.#t?.nextRun);this.status.setSuccess(["ha-time.status.sent_and_next",{sentTime:e,nextTime:o}])}else this.status.setSuccess("ha-time.status.sent");this.node.send(i)}onClose(){this.#n()}async#m(){if(!this.#e){this.#e=!0;try{do{this.#s=!1;const t=this.node.config.property||O,s=this.#o(),i=(0,p.default)(t,s);let e,o;this.#n(),this.#r(i),o=await this.#h();const h=(0,a.parseTime)(i);if(h)e=new Date,e.setHours(h.hour),e.setMinutes(h.minutes),e.setSeconds(h.seconds);else{if(!(0,a.isValidDate)(i))throw new r.default(["ha-time.error.invalid_date",{date:i}],"ha-time.status.invalid_date");e=new Date(i)}if(o!==0){this.node.config.randomOffset&&(o=this.#d(e,o));const u=e.getTime()+o;e.setTime(u)}let c=`${e.getSeconds()} ${e.getMinutes()} ${e.getHours()} ${e.getDate()} ${e.getMonth()+1} *`;if(this.node.config.repeatDaily){const u=this.#f();c=`${e.getSeconds()} ${e.getMinutes()} ${e.getHours()} * * ${u}`}else if(e.getTime()<Date.now()){this.node.config.ignorePastDate||this.node.warn(m.RED._("ha-time.error.in_the_past",{date:i})),this.status.setFailed("ha-time.status.in_the_past");return}this.#a(c);const _=this.#i(this.#t?.nextRun);this.status.setText(m.RED._("ha-time.status.next_at",{nextTime:_}))}while(this.#s)}catch(t){t instanceof Error&&(this.node.error(t),this.status.setError(t.message))}finally{this.#e=!1}}}handleEvent(){this.#s=!0,this.#m()}}