UNPKG

node-red-contrib-home-assistant-websocket

Version:
2 lines (1 loc) 1.82 kB
"use strict";var y=Object.create;var r=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var Z=Object.getPrototypeOf,H=Object.prototype.hasOwnProperty;var L=(s,e)=>{for(var n in e)r(s,n,{get:e[n],enumerable:!0})},m=(s,e,n,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of D(e))!H.call(s,o)&&o!==n&&r(s,o,{get:()=>e[o],enumerable:!(t=w(e,o))||t.enumerable});return s};var g=(s,e,n)=>(n=s!=null?y(Z(s)):{},m(e||!s||!s.__esModule?r(n,"default",{value:s,enumerable:!0}):n,s)),b=s=>m(r({},"__esModule",{value:!0}),s);var C={};L(C,{default:()=>E});module.exports=b(C);var h=require("lodash"),p=g(require("../../common/controllers/ExposeAsMixin")),v=g(require("../../common/controllers/OutputController")),a=require("./helpers"),x=(t=>(t.Enter="enter",t.EnterOrLeave="enter_leave",t.Leave="leave",t))(x||{});const z=(0,p.default)(v.default);class E extends z{#t(e,n){const t=this.node.config,o=(0,a.getLocationData)(e),i=(0,a.getLocationData)(n);return!o||!i?[]:this.#e().filter(_=>{const c=(0,a.getZoneData)(_);if(!c)return!1;const d=(0,a.inZone)(o,c),l=(0,a.inZone)(i,c);return t.event==="enter"&&!d&&l||t.event==="leave"&&d&&!l||t.event==="enter_leave"&&d!==l})}#e(){const e=this.homeAssistant.websocket.getStates(),n=[];for(const t in e)this.node.config.zones.includes(t)&&n.push(e[t]);return n}onStateChanged(e){if(this.isEnabled===!1)return;const{entity_id:n,event:t}=(0,h.cloneDeep)(e);if(!t.old_state||!t.new_state)return;const o=this.#t(t.old_state,t.new_state);if(!o.length)return;t.new_state&&(t.new_state.timeSinceChangedMs=Date.now()-new Date(t.new_state.last_changed).getTime());const i={topic:n,payload:t.new_state.state,data:t,zones:o},f=`${n} ${this.node.config.event} ${o.map(u=>u.entity_id).join(",")}`;this.status.setSuccess(f),this.node.send(i)}}