UNPKG

iobroker.lovelace

Version:

With this adapter you can build visualization for ioBroker with Home Assistant Lovelace UI

2 lines 9.78 kB
"use strict";(self.webpackChunkhome_assistant_frontend=self.webpackChunkhome_assistant_frontend||[]).push([["63697"],{68958:function(t,e,s){s.d(e,{t:()=>n});s(92745),s(9359),s(31526),s(77439),s(19423),s(88972);class a{constructor(t=window.localStorage){this.storage=void 0,this._storage={},this._listeners={},this.storage=t,t===window.localStorage&&window.addEventListener("storage",(t=>{t.key&&this.hasKey(t.key)&&(this._storage[t.key]=t.newValue?JSON.parse(t.newValue):t.newValue,this._listeners[t.key]&&this._listeners[t.key].forEach((e=>e(t.oldValue?JSON.parse(t.oldValue):t.oldValue,this._storage[t.key]))))}))}addFromStorage(t){if(!this._storage[t]){const e=this.storage.getItem(t);e&&(this._storage[t]=JSON.parse(e))}}subscribeChanges(t,e){return this._listeners[t]?this._listeners[t].push(e):this._listeners[t]=[e],()=>{this.unsubscribeChanges(t,e)}}unsubscribeChanges(t,e){if(!(t in this._listeners))return;const s=this._listeners[t].indexOf(e);-1!==s&&this._listeners[t].splice(s,1)}hasKey(t){return t in this._storage}getValue(t){return this._storage[t]}setValue(t,e){const s=this._storage[t];this._storage[t]=e;try{void 0===e?this.storage.removeItem(t):this.storage.setItem(t,JSON.stringify(e))}catch(a){}finally{this._listeners[t]&&this._listeners[t].forEach((t=>t(s,e)))}}}const i={},n=t=>e=>{const s=t.storage||"localStorage";let n;s&&s in i?n=i[s]:(n=new a(window[s]),i[s]=n);const o=String(e.key),r=t.key||String(e.key),c=e.initializer?e.initializer():void 0;n.addFromStorage(r);const d=!1!==t.subscribe?t=>n.subscribeChanges(r,((s,a)=>{t.requestUpdate(e.key,s)})):void 0,h=()=>n.hasKey(r)?t.deserializer?t.deserializer(n.getValue(r)):n.getValue(r):c;return{kind:"method",placement:"prototype",key:e.key,descriptor:{set(s){((s,a)=>{let i;t.state&&(i=h()),n.setValue(r,t.serializer?t.serializer(a):a),t.state&&s.requestUpdate(e.key,i)})(this,s)},get(){return h()},enumerable:!0,configurable:!0},finisher(s){if(t.state&&t.subscribe){const t=s.prototype.connectedCallback,e=s.prototype.disconnectedCallback;s.prototype.connectedCallback=function(){t.call(this),this[`__unbsubLocalStorage${o}`]=null==d?void 0:d(this)},s.prototype.disconnectedCallback=function(){var t;e.call(this),null===(t=this[`__unbsubLocalStorage${o}`])||void 0===t||t.call(this),this[`__unbsubLocalStorage${o}`]=void 0}}t.state&&s.createProperty(e.key,Object.assign({noAccessor:!0},t.stateOptions))}}}},36681:function(t,e,s){s.a(t,(async function(t,a){try{s.r(e),s.d(e,{HuiEnergyDevicesDetailGraphCard:()=>D});var i=s(61701),n=(s(71695),s(92745),s(52805),s(61893),s(9359),s(56475),s(1331),s(31526),s(70104),s(48136),s(19423),s(19134),s(97003),s(47021),s(42625)),o=s(83389),r=s(57243),c=s(50778),d=s(35359),h=s(27486),l=s(50875),u=s(20548),_=(s(54977),s(25179)),p=s(1118),m=s(17705),f=s(6736),k=s(93331),g=s(53259),v=s(68958),y=s(50602),b=t([_,y,p,g]);[_,y,p,g]=b.then?(await b)():b;let S,C,$,w=t=>t;const E="kWh";let D=(0,i.Z)([(0,c.Mo)("hui-energy-devices-detail-graph-card")],(function(t,e){return{F:class extends e{constructor(...e){super(...e),t(this)}},d:[{kind:"field",decorators:[(0,c.Cb)({attribute:!1})],key:"hass",value:void 0},{kind:"field",decorators:[(0,c.SB)()],key:"_config",value:void 0},{kind:"field",decorators:[(0,c.SB)()],key:"_chartData",value(){return[]}},{kind:"field",decorators:[(0,c.SB)()],key:"_data",value:void 0},{kind:"field",decorators:[(0,c.SB)()],key:"_start",value(){return(0,n.I)()}},{kind:"field",decorators:[(0,c.SB)()],key:"_end",value(){return(0,o.p)()}},{kind:"field",decorators:[(0,c.SB)()],key:"_compareStart",value:void 0},{kind:"field",decorators:[(0,c.SB)()],key:"_compareEnd",value:void 0},{kind:"field",decorators:[(0,v.t)({key:"energy-devices-hidden-stats",state:!0,subscribe:!1})],key:"_hiddenStats",value(){return[]}},{kind:"field",key:"hassSubscribeRequiredHostProps",value(){return["_config"]}},{kind:"method",key:"hassSubscribe",value:function(){var t;return[(0,p.UB)(this.hass,{key:null===(t=this._config)||void 0===t?void 0:t.collection_key}).subscribe((t=>{this._data=t,this._processStatistics()}))]}},{kind:"method",key:"getCardSize",value:function(){return 3}},{kind:"method",key:"setConfig",value:function(t){this._config=t}},{kind:"method",key:"shouldUpdate",value:function(t){return(0,k.SN)(this,t)||t.size>1||!t.has("hass")}},{kind:"method",key:"willUpdate",value:function(t){(t.has("_hiddenStats")||t.has("_config"))&&this._data&&this._processStatistics()}},{kind:"method",key:"render",value:function(){return this.hass&&this._config?(0,r.dy)(S||(S=w` <ha-card> ${0} <div class="content ${0}"> <ha-chart-base .hass="${0}" .data="${0}" .options="${0}" @dataset-hidden="${0}" @dataset-unhidden="${0}"></ha-chart-base> </div> </ha-card> `),this._config.title?(0,r.dy)(C||(C=w`<h1 class="card-header">${0}</h1>`),this._config.title):"",(0,d.$)({"has-header":!!this._config.title}),this.hass,this._chartData,this._createOptions(this._start,this._end,this.hass.locale,this.hass.config,E,this._compareStart,this._compareEnd),this._datasetHidden,this._datasetUnhidden):r.Ld}},{kind:"field",key:"_formatTotal",value(){return t=>this.hass.localize("ui.panel.lovelace.cards.energy.energy_usage_graph.total_consumed",{num:(0,y.uf)(t,this.hass.locale),unit:E})}},{kind:"method",key:"_datasetHidden",value:function(t){this._hiddenStats=[...this._hiddenStats,t.detail.name]}},{kind:"method",key:"_datasetUnhidden",value:function(t){this._hiddenStats=this._hiddenStats.filter((e=>e!==t.detail.name))}},{kind:"field",key:"_createOptions",value(){return(0,h.Z)(((t,e,s,a,i,n,o)=>{const r=(0,g.J)(t,e,s,a,i,n,o,this._formatTotal);return Object.assign(Object.assign({},r),{},{legend:{show:!0,type:"scroll",animationDurationUpdate:400,selected:this._hiddenStats.reduce(((t,e)=>(t[e]=!1,t)),{}),icon:"circle"},grid:{top:15,bottom:0,left:1,right:1,containLabel:!0}})}))}},{kind:"method",key:"_processStatistics",value:function(){const t=this._data;this._start=t.start,this._end=t.end||(0,o.p)(),this._compareStart=t.startCompare,this._compareEnd=t.endCompare;const e=t.stats,s=t.statsCompare,a=getComputedStyle(this),i=t.prefs.device_consumption,n={};i.forEach((t=>{t.included_in_stat&&(n[t.included_in_stat]=n[t.included_in_stat]||[],n[t.included_in_stat].push(t.stat_consumption))}));const r={};t.prefs.device_consumption.forEach((t=>{const s=t.stat_consumption in e&&(0,m.Kj)(e[t.stat_consumption])||0;r[t.stat_consumption]=s}));const c={};t.prefs.device_consumption.forEach((t=>{c[t.stat_consumption]=(n[t.stat_consumption]||[]).reduce(((t,e)=>t-r[e]),r[t.stat_consumption])}));const d=t.prefs.device_consumption.map((t=>t.stat_consumption));d.sort(((t,e)=>c[e]-c[t]));const h=[],{summedData:l,compareSummedData:u}=(0,p.EH)(t),_="from_grid"in l||"solar"in l||"from_battery"in l,{consumption:f,compareConsumption:k}=_?(0,p.E4)(l,u):{consumption:void 0,compareConsumption:void 0};if(s){const e=this._processDataSet(a,s,t.statsMetadata,t.prefs.device_consumption,d,n,!0);if(h.push(...e),_){const t=this._processUntracked(a,e,k,!0);h.push(t)}}h.push({id:"compare-placeholder",type:"bar",stack:t.statsCompare?"devicesCompare":"devices",data:[]});const v=this._processDataSet(a,e,t.statsMetadata,t.prefs.device_consumption,d,n);if(h.push(...v),_){const t=this._processUntracked(a,v,f,!1);h.push(t)}(0,g.Zx)(h),this._chartData=h}},{kind:"method",key:"_processUntracked",value:function(t,e,s,a){const i={};e.forEach((t=>{t.data.forEach((t=>{i[t[a?2:0]]=(i[t[a?2:0]]||0)+t[1]}))}));const n=(0,g.kT)(this._start,this._compareStart),o=[];Object.keys(s.total).sort(((t,e)=>Number(t)-Number(e))).forEach((t=>{const e=Number(t),r=[e,s.total[t]-(i[t]||0)];a&&(r[2]=r[0],r[0]=n(new Date(e)).getTime()),o.push(r)}));const r=Date.now();return{type:"bar",cursor:"default",id:a?`compare-untracked-${r}`:`untracked-${r}`,name:this.hass.localize("ui.panel.lovelace.cards.energy.energy_devices_detail_graph.untracked_consumption"),itemStyle:{borderColor:(0,u.H)(t,this.hass.themes.darkMode,!1,a,"--state-unavailable-color")},barMaxWidth:50,color:(0,u.H)(t,this.hass.themes.darkMode,!0,a,"--state-unavailable-color"),data:o,stack:a?"devicesCompare":"devices"}}},{kind:"method",key:"_processDataSet",value:function(t,e,s,a,i,n,o=!1){const r=[],c=(0,g.kT)(this._start,this._compareStart);return a.forEach(((a,d)=>{var h;const u=i.indexOf(a.stat_consumption);if(null!==(h=this._config)&&void 0!==h&&h.max_devices&&u>=this._config.max_devices)return void console.warn(`Max devices exceeded for ${a.name} (${u} >= ${this._config.max_devices})`);const _=(0,l.hZ)(d,t);let p=null;const f=[];if(a.stat_consumption in e){const t=e[a.stat_consumption];for(const s of t){if(null===s.change||void 0===s.change||0===s.change)continue;if(p===s.start)continue;let t=0;(n[a.stat_consumption]||[]).forEach((a=>{var i;const n=e[a];t+=(null==n||null===(i=n.find((t=>t.start===s.start)))||void 0===i?void 0:i.change)||0}));const i=[s.start,s.change-t];o&&(i[2]=i[0],i[0]=c(new Date(s.start)).getTime()),f.push(i),p=s.start}}const k=(a.name||(0,m.Kd)(this.hass,a.stat_consumption,s[a.stat_consumption]))+(a.stat_consumption in n?` (${this.hass.localize("ui.panel.lovelace.cards.energy.energy_devices_detail_graph.untracked")})`:"");r.push({type:"bar",cursor:"default",id:o?`compare-${a.stat_consumption}-${u}`:`${a.stat_consumption}-${u}`,name:k,itemStyle:{borderColor:o?_+"7F":_},barMaxWidth:50,color:o?_+"32":_+"7F",data:f,stack:o?"devicesCompare":"devices"})})),i.map((t=>r.find((e=>this._getStatIdFromId(e.id)===t)))).filter(Boolean)}},{kind:"method",key:"_getStatIdFromId",value:function(t){return t.replace(/^compare-/,"").replace(/-\d+$/,"")}},{kind:"field",static:!0,key:"styles",value(){return(0,r.iv)($||($=w`.card-header{padding-bottom:0}.content{padding:16px}.has-header{padding-top:0}`))}}]}}),(0,f.f)(r.oi));a()}catch(S){a(S)}}))}}]); //# sourceMappingURL=63697.39a0ce42e31011cc.js.map