iobroker.lovelace
Version:
With this adapter you can build visualization for ioBroker with Home Assistant Lovelace UI
1 lines • 23.7 kB
JavaScript
;(self.rspackChunkhome_assistant_frontend=self.rspackChunkhome_assistant_frontend||[]).push([[77183],{91069:function(t,e,n){n.a(t,async function(t,r){try{n.d(e,{EO:function(){return w},Yq:function(){return E},_U:function(){return O},eE:function(){return S},fU:function(){return W},ol:function(){return b},xo:function(){return v}});var o=n(78016),s=n(31810),a=n(87950),i=n(81977),c=n(36307),u=n(35932),_=n(73983),l=n(6946),d=n(92913),f=n(83339),g=n(77972),m=n(31886),y=n(46927),p=t([m]);m=(p.then?(await p)():p)[0];const h=(t,e,n,r)=>{const o=n(new m.BB(t,e),r);return o instanceof Date?new Date(o.getTime()):o},b=(t,e,n,r,o)=>n.time_zone===y.Wj.server?h(t,r.time_zone,e,o):e(t,o),v=(t,e,n,r,o)=>n.time_zone===y.Wj.server?h(t,r.time_zone,e,o):e(t,o),w=(t,e,n,r,o)=>v(t,n,r,o,r.time_zone===y.Wj.server?new m.BB(e,o.time_zone):e),S=(t,e,n,r,m)=>{let y,p;if(v(t,o.e,r,m)&&v(e,s.c,r,m)){const o=(w(e,t,a.W,r,m)+1)*(n?1:-1);y=b(t,i.P,r,m,o),p=b(b(e,i.P,r,m,o),c.p,r,m)}else if(v(t,t=>(0,u.o)(t).getMilliseconds()===t.getMilliseconds(),r,m)&&v(e,t=>(0,_.D)(t).getMilliseconds()===t.getMilliseconds(),r,m)){const o=(w(e,t,l.c,r,m)+1)*(n?1:-1);y=b(t,d.f,r,m,o),p=b(e,d.f,r,m,o)}else{const o=w(e,t,f.b,r,m)*(n?1:-1);y=b(t,g.A,r,m,o),p=b(e,g.A,r,m,o)}return{start:y,end:p}},O=(t,e)=>{const n=new m.BB(t,e);return new Date(n.getTime())},E=(t,e)=>new m.BB(t,e).toISOString().split("T")[0],W=(t,e)=>new m.BB(t,e).toISOString().split("T")[1].split(".")[0];r()}catch(h){r(h)}})},46223:function(t,e,n){n.a(t,async function(t,r){try{n.d(e,{b:function(){return w}});var o=n(35932),s=n(73983),a=n(92913),i=n(52640),c=n(69137),u=n(35660),_=n(36307),l=n(11650),d=n(15797),f=n(33977),g=n(69748),m=n(55144),y=n(21828),p=n(66708),h=n(91069),b=n(380),v=t([b,h]);[b,h]=v.then?(await v)():v;const w=(t,e,n)=>{const r=new Date,v=(0,b.P)(t);switch(n){case"today":return[(0,h.ol)(r,o.o,t,e,{weekStartsOn:v}),(0,h.ol)(r,s.D,t,e,{weekStartsOn:v})];case"yesterday":return[(0,h.ol)((0,a.f)(r,-1),o.o,t,e,{weekStartsOn:v}),(0,h.ol)((0,a.f)(r,-1),s.D,t,e,{weekStartsOn:v})];case"this_week":return[(0,h.ol)(r,i.k,t,e,{weekStartsOn:v}),(0,h.ol)(r,c.$,t,e,{weekStartsOn:v})];case"this_month":return[(0,h.ol)(r,u.w,t,e),(0,h.ol)(r,_.p,t,e)];case"this_quarter":return[(0,h.ol)(r,l.a,t,e),(0,h.ol)(r,d.j,t,e)];case"this_year":return[(0,h.ol)(r,f.D,t,e),(0,h.ol)(r,g.Q,t,e)];case"now-7d":return[(0,h.ol)(r,m.e,t,e,7),(0,h.ol)(r,m.e,t,e,0)];case"now-30d":return[(0,h.ol)(r,m.e,t,e,30),(0,h.ol)(r,m.e,t,e,0)];case"now-12m":return[(0,h.ol)(r,t=>(0,y.a)((0,u.w)(t),11),t,e),(0,h.ol)(r,_.p,t,e)];case"now-365d":return[(0,h.ol)(r,m.e,t,e,365),(0,h.ol)(r,m.e,t,e,0)];case"now-1h":return[(0,h.ol)(r,p.O,t,e,1),(0,h.ol)(r,p.O,t,e,0)];case"now-12h":return[(0,h.ol)(r,p.O,t,e,12),(0,h.ol)(r,p.O,t,e,0)];case"now-24h":return[(0,h.ol)(r,p.O,t,e,24),(0,h.ol)(r,p.O,t,e,0)]}return[r,r]};r()}catch(w){r(w)}})},9658:function(t,e,n){n.d(e,{m:function(){return o}});const r={T:1e12,G:1e9,M:1e6,k:1e3,m:.001,"µ":1e-6,"μ":1e-6},o=(t,e)=>{if(!e||e.length<=1)return t;const n=e[0];return n in r?t*r[n]:t}},38114:function(t,e,n){n.a(t,async function(t,r){try{n.d(e,{AN:function(){return $},B2:function(){return B},BV:function(){return N},DR:function(){return ot},E$:function(){return z},E_:function(){return ft},GW:function(){return A},Q4:function(){return C},Sp:function(){return lt},TI:function(){return yt},WN:function(){return P},X4:function(){return et},_d:function(){return X},al:function(){return q},bs:function(){return L},c:function(){return I},gv:function(){return nt},h4:function(){return gt},h_:function(){return pt},lh:function(){return D},mn:function(){return dt},n3:function(){return it},oU:function(){return U},pe:function(){return ct},s8:function(){return T},t5:function(){return mt},tb:function(){return Y},uh:function(){return j}});n(16280),n(74423),n(44114),n(26910),n(18111),n(81148),n(22489),n(7588),n(61701),n(3362),n(17642),n(58004),n(33853),n(45876),n(32475),n(15024),n(31698),n(62953),n(3296),n(27208),n(48408),n(14603),n(47566),n(98721);var o=n(6946),s=n(78016),a=n(31810),i=n(81977),c=n(87950),u=n(92913),_=n(77972),l=n(56434),d=n(35932),f=n(73983),g=n(57279),m=n(90889),y=n(22786),p=n(91069),h=n(46223),b=n(30162),v=n(20058),w=n(9658),S=n(5911),O=n(30039),E=n(23528),W=t([b,h,p,E,v]);[b,h,p,E,v]=W.then?(await W)():W;const k="energy_",x=new Set;function T(t){if(null==t||!t.startsWith(k))throw new Error(`Collection keys must start with ${k}.`)}const j=()=>({type:"grid",stat_energy_from:null,stat_energy_to:null,stat_cost:null,stat_compensation:null,entity_energy_price:null,number_energy_price:null,entity_energy_price_export:null,number_energy_price_export:null,cost_adjustment_day:0}),C=()=>({type:"solar",stat_energy_from:"",config_entry_solar_forecast:null}),U=()=>({type:"battery",stat_energy_from:"",stat_energy_to:""}),I=()=>({type:"gas",stat_energy_from:"",stat_cost:null,entity_energy_price:null,number_energy_price:null}),A=()=>({type:"water",stat_energy_from:"",stat_cost:null,entity_energy_price:null,number_energy_price:null}),N=t=>t.callWS({type:"energy/info"}),B=async t=>(await t.loadBackendTranslation("issues","energy"),t.callWS({type:"energy/validate"})),L=t=>t.callWS({type:"energy/get_prefs"}),P=async(t,e)=>{const n=t.callWS(Object.assign({type:"energy/save_prefs"},e));return H(t),n},R=async(t,e,n,r,o,s="hour")=>t.callWS({type:"energy/fossil_energy_consumption",start_time:e.toISOString(),end_time:null==o?void 0:o.toISOString(),energy_statistic_ids:n,co2_statistic_id:r,period:s}),z=t=>(0,S.$)(t.energy_sources,t=>t.type),$=(t,e,n)=>{const r=[];for(const o of t.energy_sources)if(!n||n.includes(o.type))if("solar"!==o.type){if("gas"===o.type||"water"===o.type){r.push(o.stat_energy_from),o.stat_cost&&r.push(o.stat_cost);const t=e.cost_sensors[o.stat_energy_from];t&&r.push(t);continue}if("battery"!==o.type){if(o.stat_energy_from){r.push(o.stat_energy_from),o.stat_cost&&r.push(o.stat_cost);const t=e.cost_sensors[o.stat_energy_from];t&&r.push(t)}if(o.stat_energy_to){r.push(o.stat_energy_to),o.stat_compensation&&r.push(o.stat_compensation);const t=e.cost_sensors[o.stat_energy_to];t&&r.push(t)}}else r.push(o.stat_energy_from),r.push(o.stat_energy_to)}else r.push(o.stat_energy_from);return n&&!n.includes("device")||r.push(...t.device_consumption.map(t=>t.stat_consumption)),n&&!n.includes("water")||r.push(...t.device_consumption_water.map(t=>t.stat_consumption)),r},F=t=>{const e=[];for(const n of t.energy_sources)"gas"!==n.type&&"water"!==n.type?"solar"!==n.type?(n.type,n.stat_rate&&e.push(n.stat_rate)):e.push(n.stat_rate):n.stat_rate&&e.push(n.stat_rate);return e.push(...t.device_consumption.map(t=>t.stat_rate)),e.push(...t.device_consumption_water.map(t=>t.stat_rate)),e.filter(Boolean)};var D=function(t){return t.NONE="",t.PREVIOUS="previous",t.YOY="yoy",t}({});const V=async(t,e,n,r,d)=>{const f=await N(t);let g;for(const o of Object.values(t.entities)){if("co2signal"!==o.platform)continue;const e=t.states[o.entity_id];if(e&&"%"===e.attributes.unit_of_measurement){g=e.entity_id;break}}const m=[];for(const o of e.energy_sources)"grid"===o.type&&o.stat_energy_from&&m.push(o.stat_energy_from);const y=$(e,f,["grid","solar","battery","gas","device"]),h=F(e),b=$(e,f,["water"]),v=[...y,...b,...h],w=(0,o.c)(r||new Date,n),S=yt(n,r),O=yt(n,r,!0),W={},D=v.length?await(0,E.Wr)(t,v):[];v.length&&D.forEach(t=>{W[t.statistic_id]=t});const M=K(t,e,W),k={energy:"kWh",volume:E.r_.includes(M)?M:void 0},x={power:"kW"},T=tt(t,e,W),j={volume:T},C=y.length?(0,E.sz)(t,n,r,y,S,k,["change"]):{},U=h.length?(0,E.sz)(t,n,r,h,O,x,["mean"]):{},I=h.length&&"5minute"===O?(0,E.sz)(t,n,r,h,"hour",x,["mean"]):{},A=b.length?(0,E.sz)(t,n,r,b,S,j,["change"]):{};let B,L,P,z,V,H={},Z={};d&&("previous"===d?(L=(0,p.xo)(n,s.e,t.locale,t.config)&&(0,p.xo)(r||new Date,a.c,t.locale,t.config)?(0,p.ol)(n,i.P,t.locale,t.config,-(0,p.EO)(r||new Date,n,c.W,t.locale,t.config)-1):(0,p.ol)(n,u.f,t.locale,t.config,-1*(w+1)),P=(0,_.A)(n,-1)):"yoy"===d&&(L=(0,p.ol)(n,l.e,t.locale,t.config,-1),P=(0,p.ol)(r,l.e,t.locale,t.config,-1)),y.length&&(H=(0,E.sz)(t,L,P,y,S,k,["change"])),b.length&&(Z=(0,E.sz)(t,L,P,b,S,j,["change"]))),void 0!==g&&(z=R(t,n,m,g,r,S),d&&(V=R(t,L,m,g,P,S)));const[G,J,Y,q,Q,X,et,nt]=await Promise.all([C,U,I,A,H,Z,z,V]);Object.keys(Y).length&&h.forEach(t=>{if(t in Y)if(t in J&&J[t].length){const e=J[t][0],n=Y[t];let r=0;for(const t of n){if(t.end>e.start)break;r++}J[t]=[...n.slice(0,r),...J[t]]}else J[t]=Y[t]});const rt=Object.assign(Object.assign(Object.assign({},G),q),J);d&&(B=Object.assign(Object.assign({},Q),X));return{start:n,end:r,startCompare:L,endCompare:P,compareMode:d,info:f,prefs:e,stats:rt,statsMetadata:W,statsCompare:B,co2SignalEntity:g,fossilEnergyConsumption:et,fossilEnergyConsumptionCompare:nt,waterUnit:T,gasUnit:M}},H=t=>{x.forEach(e=>{const n=J(t,e);n&&(n.clearPrefs(),n.isActive()&&n.refresh())})},Z=t=>{if(t._refreshTimeout&&clearTimeout(t._refreshTimeout),t._active&&(!t.end||t.end>new Date)){const e=new Date;e.getMinutes()>=20&&e.setHours(e.getHours()+1),e.setMinutes(20,0,0),t._refreshTimeout=window.setTimeout(()=>t.refresh(),e.getTime()-Date.now())}},G=(t,e)=>{let n="_energy";if(e)T(e),n=`_${e}`;else if(t.panelUrl){const r=k+t.panelUrl;n=`_${r}`,e=r}return[n,e]},J=(t,e)=>{const[n,r]=G(t,e);return t.connection[n]},Y=(t,e={})=>{const[n,r]=G(t,e.key);if(t.connection[n])return t.connection[n];x.add(r);const o=(0,m.X)(t.connection,n,async()=>(o.prefs||(o.prefs=await L(t)),Z(o),V(t,o.prefs,o.start,o.end,o.compare))),s=o.subscribe;o.subscribe=t=>{const e=s(t);return o._active++,void 0===o._refreshTimeout&&Z(o),()=>{o._active--,o._active<1&&(clearTimeout(o._refreshTimeout),o._refreshTimeout=void 0),e()}},o._active=0,o.prefs=e.prefs;const a=new Date,i=(0,b.LW)(a,t.locale,t.config).split(":")[0],c=localStorage.getItem(`energy-default-period-${n}`)||"today",u="today"===c&&"0"===i?"yesterday":c,[_,l]=(0,h.b)(t.locale,t.config,u);o.start=(0,p.ol)(_,d.o,t.locale,t.config),o.end=(0,p.ol)(l,f.D,t.locale,t.config);const y=()=>{o._updatePeriodTimeout=window.setTimeout(()=>{o.start=(0,p.ol)(new Date,d.o,t.locale,t.config),o.end=(0,p.ol)(new Date,f.D,t.locale,t.config),o.refresh(),y()},(0,g.L)((0,p.ol)(new Date,f.D,t.locale,t.config),1).getTime()-Date.now())};return y(),o.isActive=()=>!!o._active,o.clearPrefs=()=>{o.prefs=void 0},o.setPeriod=(e,n)=>{var r;o._updatePeriodTimeout&&(clearTimeout(o._updatePeriodTimeout),o._updatePeriodTimeout=void 0),o.start=e,o.end=n,o.start.getTime()===(0,p.ol)(new Date,d.o,t.locale,t.config).getTime()&&(null===(r=o.end)||void 0===r?void 0:r.getTime())===(0,p.ol)(new Date,f.D,t.locale,t.config).getTime()&&y()},o.setCompare=t=>{o.compare=t},o},q=t=>t.callWS({type:"energy/solar_forecast"}),Q=["volume","energy"],X=(t,e,n={})=>{for(const r of t.energy_sources){if("gas"!==r.type)continue;if(e&&e===r.stat_energy_from)continue;const t=n[r.stat_energy_from];if(Q.includes(null==t?void 0:t.unit_class))return t.unit_class}},K=(t,e,n={})=>{if("energy"===X(e,void 0,n))return"kWh";const r=e.energy_sources.filter(t=>"gas"===t.type).map(e=>(0,E.JE)(t,e.stat_energy_from,n[e.stat_energy_from]));if(r.length){const t=r[0];if(E.r_.includes(t)&&r.every(e=>e===t))return t}return"km"===t.config.unit_system.length?"m³":"ft³"},tt=(t,e,n)=>{const r=e.energy_sources.filter(t=>"water"===t.type).map(e=>(0,E.JE)(t,e.stat_energy_from,n[e.stat_energy_from]));if(r.length){const t=r[0];if(E.r_.includes(t)&&r.every(e=>e===t))return t}return"km"===t.config.unit_system.length?"L":"gal"},et="/docs/energy/faq/#troubleshooting-missing-entities",nt=(0,y.A)(t=>({summedData:rt(t),compareSummedData:t.statsCompare?rt(t,!0):void 0})),rt=(t,e)=>{const n={};for(const s of t.prefs.energy_sources)"solar"!==s.type?"battery"!==s.type?"grid"===s.type&&(s.stat_energy_from&&(n.from_grid?n.from_grid.push(s.stat_energy_from):n.from_grid=[s.stat_energy_from]),s.stat_energy_to&&(n.to_grid?n.to_grid.push(s.stat_energy_to):n.to_grid=[s.stat_energy_to])):n.to_battery?(n.to_battery.push(s.stat_energy_to),n.from_battery.push(s.stat_energy_from)):(n.to_battery=[s.stat_energy_to],n.from_battery=[s.stat_energy_from]):n.solar?n.solar.push(s.stat_energy_from):n.solar=[s.stat_energy_from];const r={total:{},timestamps:[]},o=new Set;return Object.entries(n).forEach(([n,s])=>{const a={},i={};let c=0;s.forEach(n=>{const r=e?t.statsCompare[n]:t.stats[n];if(!r)return;r.forEach(t=>{if(null===t.change||void 0===t.change)return;const e=t.change;c+=e,a[t.start]=t.start in a?a[t.start]+e:e,o.add(t.start)}),i[n]={}}),r[n]=a,r.total[n]=c}),r.timestamps=Array.from(o).sort(),r},ot=(0,y.A)((t,e)=>({consumption:st(t),compareConsumption:e?st(e):void 0})),st=t=>{const e={used_total:{},grid_to_battery:{},battery_to_grid:{},solar_to_battery:{},solar_to_grid:{},used_solar:{},used_grid:{},used_battery:{},total:{used_total:0,grid_to_battery:0,battery_to_grid:0,solar_to_battery:0,solar_to_grid:0,used_solar:0,used_grid:0,used_battery:0}};return t.timestamps.forEach(n=>{var r,o,s,a,i;const{grid_to_battery:c,battery_to_grid:u,used_solar:_,used_grid:l,used_battery:d,used_total:f,solar_to_battery:g,solar_to_grid:m}=at({from_grid:t.from_grid&&(null!==(r=t.from_grid[n])&&void 0!==r?r:0),to_grid:t.to_grid&&(null!==(o=t.to_grid[n])&&void 0!==o?o:0),solar:t.solar&&(null!==(s=t.solar[n])&&void 0!==s?s:0),to_battery:t.to_battery&&(null!==(a=t.to_battery[n])&&void 0!==a?a:0),from_battery:t.from_battery&&(null!==(i=t.from_battery[n])&&void 0!==i?i:0)});e.used_total[n]=f,e.total.used_total+=f,e.grid_to_battery[n]=c,e.total.grid_to_battery+=c,e.battery_to_grid[n]=u,e.total.battery_to_grid+=u,e.used_battery[n]=d,e.total.used_battery+=d,e.used_grid[n]=l,e.total.used_grid+=l,e.used_solar[n]=_,e.total.used_solar+=_,e.solar_to_battery[n]=g,e.total.solar_to_battery+=g,e.solar_to_grid[n]=m,e.total.solar_to_grid+=m}),e},at=t=>{let e=Math.max(t.to_grid||0,0),n=Math.max(t.to_battery||0,0),r=Math.max(t.solar||0,0),o=Math.max(t.from_grid||0,0),s=Math.max(t.from_battery||0,0);const a=(o||0)+(r||0)+(s||0)-(e||0)-(n||0);let i=0,c=Math.max(a,0);const u=Math.max(0,Math.min(n,o-c));i+=u,n-=u,o-=u;const _=Math.min(r,n);n-=_,r-=_;const l=Math.min(r,e);e-=l,r-=l;const d=Math.min(s,e);s-=d;const f=Math.min(o,n);i+=f,o-=f;const g=Math.min(c,r);c-=g;const m=Math.min(s,c);c-=m;return{used_solar:g,used_grid:Math.min(c,o),used_battery:m,used_total:a,grid_to_battery:i,battery_to_grid:d,solar_to_battery:_,solar_to_grid:l}},it=(t,e,n,r)=>{const o=["Wh","kWh","MWh","GWh","TWh"];let s=n,a=e||0,i=-1;r&&(i=o.findIndex(t=>t===r));let c=o.findIndex(t=>t===n);if(c>=0){for(;i>-1?i<c:Math.abs(a)<1&&c>0;)a*=1e3,c--;for(;i>-1?i>c:Math.abs(a)>=1e3&&c<o.length-1;)a/=1e3,c++;s=o[c]}return(0,v.ZV)(a,t.locale,{maximumFractionDigits:Math.abs(a)<10?2:Math.abs(a)<100?1:0})+" "+s},ct=(t,e)=>{if(!e.total.solar)return;const{consumption:n,compareConsumption:r}=ot(e,void 0);if(!t){const t=e.total.solar;return n.total.used_solar/t*100}let o=0,s=0;const a=[];e.timestamps.forEach(t=>{var e,r,i,c;o+=null!==(e=n.used_solar[t])&&void 0!==e?e:0,s+=null!==(r=n.solar_to_grid[t])&&void 0!==r?r:0,n.grid_to_battery[t]&&a.push({type:"grid",value:n.grid_to_battery[t]}),n.solar_to_battery[t]&&a.push({type:"solar",value:n.solar_to_battery[t]});let u=null!==(i=n.battery_to_grid[t])&&void 0!==i?i:0,_=null!==(c=n.used_battery[t])&&void 0!==c?c:0;const l=function(t){const e=a[a.length-1],n=e.type;if(t>=e.value){const t=e.value;return a.pop(),{energy:t,type:n}}return e.value-=t,{energy:t,type:n}};for(;_>0&&a.length;){const{energy:t,type:e}=l(_);"solar"===e&&(o+=t),_-=t}for(;u>0&&a.length;){const{energy:t,type:e}=l(u);"solar"===e&&(s+=t),u-=t}});const i=o+s;return!!i?o/i*100:void 0},ut=3.785411784,_t={"m³/h":1e3/60,"m³/min":1e3,"m³/s":6e4,"ft³/min":28.316846592,"L/h":1/60,"L/min":1,"L/s":60,"gal/h":ut/60,"gal/min":ut,"gal/d":ut/1440,"mL/s":.06},lt=t=>{if(!t)return;const e=parseFloat(t.state);if(isNaN(e))return;const n=t.attributes.unit_of_measurement,r=n?_t[n]:void 0;return void 0===r?e:e*r},dt=(t,e,n,r)=>{let o;r.clear();let s=0;return e.energy_sources.forEach(e=>{if(e.type!==t||!e.stat_rate)return;const a=e.stat_rate;r.add(a);const i=n[a];if(!i)return;let c=parseFloat(i.state);if(isNaN(c))return;c<0&&(c=0);const u=i.attributes.unit_of_measurement;if(!u)return;if(void 0===o)return o=u,void(s+=c);if(u===o)return void(s+=c);const _=_t[u],l=_t[o];s+=void 0!==_&&void 0!==l?c*_/l:c}),{value:Math.max(0,s),unit:null!=o?o:""}},ft=(t,e,n)=>{if("km"===e)return`${(0,v.ZV)(n,t,{maximumFractionDigits:1})} L/min`;const r=n/ut;return`${(0,v.ZV)(r,t,{maximumFractionDigits:1})} gal/min`},gt=t=>{if(!t)return;const e=parseFloat(t.state);return isNaN(e)?void 0:(0,w.m)(e,t.attributes.unit_of_measurement)},mt=(t,e)=>{const n=["W","kW","MW","GW","TW"];let r=0,o=e;for(;Math.abs(o)>=1e3&&r<n.length-1;)o/=1e3,r++;return(0,v.ZV)(o,t.locale,{maximumFractionDigits:"W"===n[r]?0:3})+" "+n[r]};function yt(t,e,n=!1){const r=(0,o.c)(e||new Date,t);return n?r>64?"day":r>8?"hour":"5minute":(0,s.e)(t)&&(!e||(0,a.c)(e))&&r>35?"month":r>2?"day":"hour"}const pt=(t,e)=>{const n=Y(t,{key:e});if(!n.prefs||!n.state.stats)return;const r=n.state.gasUnit,o="kWh",s=n.prefs.energy_sources,a=n.prefs.device_consumption,i=n.prefs.device_consumption_water,c=n.state.stats,u=new Set;Object.values(c).forEach(t=>{t.forEach(t=>{u.add(t.start)})});const _=Array.from(u).sort(),l="entity_id,type,unit,"+_.map(t=>new Date(t).toISOString()).join(",")+"\n",d=[];d[0]=l;const f=function(t,e,n,r){let o=0;const s=[];s.push(t),s.push(e),s.push(n.normalize("NFKD")),_.forEach(t=>{var e;o<r.length&&r[o].start===t?(s.push((null!==(e=r[o].change)&&void 0!==e?e:"").toString()),o++):s.push("")}),d.push(s.join(",")+"\n")},g=function(t,e,n){c[t]&&f(t,e,n,c[t])},m=t.config.currency,y=function(t,e,n,r,o){e.length&&(e.forEach(e=>g(e,t,n)),r&&o&&o.forEach(t=>g(t,r,m)))},p=[],h=[],b=[],v=[];s.filter(t=>"grid"===t.type).forEach(t=>{const e=t;if(e.stat_energy_from){p.push(e.stat_energy_from);const t=e.stat_cost||n.state.info.cost_sensors[e.stat_energy_from];t&&b.push(t)}if(e.stat_energy_to){h.push(e.stat_energy_to);const t=e.stat_compensation||n.state.info.cost_sensors[e.stat_energy_to];t&&v.push(t)}}),y("grid_consumption",p,o,"grid_consumption_cost",b),y("grid_return",h,o,"grid_return_compensation",v);const w=[],S=[];s.filter(t=>"battery"===t.type).forEach(t=>{w.push(t.stat_energy_to),S.push(t.stat_energy_from)}),y("battery_in",w,o),y("battery_out",S,o);const E=[];s.filter(t=>"solar"===t.type).forEach(t=>{E.push(t.stat_energy_from)}),y("solar_production",E,o);const W=[],D=[];s.filter(t=>"gas"===t.type).forEach(t=>{const e=t.stat_energy_from;W.push(e);const r=t.stat_cost||n.state.info.cost_sensors[e];r&&D.push(r)}),y("gas_consumption",W,r,"gas_consumption_cost",D);const M=[],k=[];s.filter(t=>"water"===t.type).forEach(t=>{const e=t.stat_energy_from;M.push(e);const r=t.stat_cost||n.state.info.cost_sensors[e];r&&k.push(r)}),y("water_consumption",M,n.state.waterUnit,"water_consumption_cost",k);const x=[];if(a.forEach(t=>{x.push(t.stat_consumption)}),y("device_consumption",x,o),i){const t=[];i.forEach(e=>{t.push(e.stat_consumption)}),y("device_consumption_water",t,n.state.waterUnit)}const{summedData:T}=nt(n.state),{consumption:j}=ot(T,void 0),C=function(t,e,n){const r=[];Object.entries(n).forEach(([t,e])=>{r.push({start:Number(t),end:NaN,change:e})}),f("",t,e,r)},U=!!E.length,I=!!w.length,A=!!h.length,N=!!p.length;N&&(C("calculated_consumed_grid",o,j.used_grid),I&&C("calculated_grid_to_battery",o,j.grid_to_battery)),A&&I&&C("calculated_battery_to_grid",o,j.battery_to_grid),I&&C("calculated_consumed_battery",o,j.used_battery),U&&(C("calculated_consumed_solar",o,j.used_solar),I&&C("calculated_solar_to_battery",o,j.solar_to_battery),A&&C("calculated_solar_to_grid",o,j.solar_to_grid)),(N?1:0)+(U?1:0)+(I?1:0)>1&&C("calculated_total_consumption",o,j.used_total);const B=new Blob(d,{type:"text/csv"}),L=window.URL.createObjectURL(B);(0,O.R)(L,"energy.csv")};r()}catch(M){r(M)}})},16869:function(t,e,n){n.d(e,{B:function(){return s},g:function(){return o}});var r;n(74423),n(27495);const o=window.externalAppV2||window.externalApp||(null===(r=window.webkit)||void 0===r||null===(r=r.messageHandlers)||void 0===r?void 0:r.getExternalAuth)||location.search.includes("external_auth=1"),s=window.externalApp||window.externalAppV2},23528:function(t,e,n){n.a(t,async function(t,r){try{n.d(e,{$3:function(){return p},$O:function(){return W},$j:function(){return h},ED:function(){return i},JE:function(){return D},OQ:function(){return M},PU:function(){return k},Ph:function(){return m},Uf:function(){return E},W1:function(){return y},Wr:function(){return d},Z:function(){return _},gF:function(){return b},iY:function(){return v},jU:function(){return c},nN:function(){return O},p3:function(){return l},pJ:function(){return g},r_:function(){return u},sz:function(){return f}});n(74423),n(18111),n(13579),n(62953);var o=n(28978),s=n(380),a=t([s]);s=(a.then?(await a)():a)[0];var i=function(t){return t[t.NONE=0]="NONE",t[t.ARITHMETIC=1]="ARITHMETIC",t[t.CIRCULAR=2]="CIRCULAR",t}({});const c=66649!=n.j?["entity_not_recorded","entity_no_longer_recorded","state_class_removed","units_changed","mean_type_changed","no_state"]:null,u=["L","gal","ft³","m³","CCF","MCF"],_=t=>t.sendMessagePromise({type:"recorder/info"}),l=(t,e)=>t.callWS({type:"recorder/list_statistic_ids",statistic_type:e}),d=(t,e)=>t.callWS({type:"recorder/get_statistics_metadata",statistic_ids:e}),f=(t,e,n,r,o="hour",s,a)=>t.callWS({type:"recorder/statistics_during_period",start_time:e.toISOString(),end_time:null==n?void 0:n.toISOString(),statistic_ids:r,period:o,units:s,types:a}),g=(t,e,n,r)=>t.callWS({type:"recorder/statistic_during_period",statistic_id:e,units:r,fixed_period:n.fixed_period?{start_time:n.fixed_period.start instanceof Date?n.fixed_period.start.toISOString():n.fixed_period.start,end_time:n.fixed_period.end instanceof Date?n.fixed_period.end.toISOString():n.fixed_period.end}:void 0,calendar:n.calendar?Object.assign(Object.assign({},"week"===n.calendar.period?{first_weekday:(0,s.D)(t.locale).substring(0,3)}:{}),n.calendar):void 0,rolling_window:n.rolling_window}),m=t=>t.callWS({type:"recorder/validate_statistics"}),y=(t,e,n,r)=>t.callWS({type:"recorder/update_statistics_metadata",statistic_id:e,unit_of_measurement:n,unit_class:r}),p=(t,e)=>t.callWS({type:"recorder/clear_statistics",statistic_ids:e}),h=t=>{let e=null;if(!t)return null;for(const n of t)null!==n.change&&void 0!==n.change&&(null===e?e=n.change:e+=n.change);return e},b=(t,e)=>{let n=null;for(const r of e){if(!(r in t))continue;const e=h(t[r]);null!==e&&(null===n?n=e:n+=e)}return n},v=(t,e)=>t.some(t=>void 0!==t[e]&&null!==t[e]),w=["mean","min","max"],S=["sum","state","change"],O=(t,e)=>!(!w.includes(e)||0===t.mean_type)||!(!S.includes(e)||!t.has_sum),E=(t,e,n,r,o)=>{const s=new Date(n).toISOString();return t.callWS({type:"recorder/adjust_sum_statistics",statistic_id:e,start_time:s,adjustment:r,adjustment_unit_of_measurement:o})},W=(t,e,n)=>{const r=t.states[e];return r?(0,o.u)(r):(null==n?void 0:n.name)||e},D=(t,e,n)=>{let r;var o;e&&(r=null===(o=t.states[e])||void 0===o?void 0:o.attributes.unit_of_measurement);return void 0===r?null==n?void 0:n.statistics_unit_of_measurement:r},M=t=>t.includes(":"),k=t=>t.callWS({type:"recorder/update_statistics_issues"});r()}catch(c){r(c)}})},30039:function(t,e,n){n.d(e,{R:function(){return o}});n(62953),n(3296),n(27208),n(48408),n(14603),n(47566),n(98721);var r=n(16869);const o=(t,e="")=>{const n=document.createElement("a");n.target="_blank",n.href=t,n.download=e,n.style.display="none",document.body.appendChild(n),n.dispatchEvent(new MouseEvent("click")),document.body.removeChild(n),t.startsWith("blob:")&&(r.B?setTimeout(()=>URL.revokeObjectURL(t),1e4):URL.revokeObjectURL(t))}}}]);