iobroker.lovelace
Version:
With this adapter you can build visualization for ioBroker with Home Assistant Lovelace UI
1 lines • 9.12 kB
JavaScript
export const __rspack_esm_id=87857;export const __rspack_esm_ids=[87857];export const __webpack_modules__={12575(t,e,n){n.a(t,async function(t,i){try{n.d(e,{J:()=>f,computeStateDisplay:()=>y,computeStateToParts:()=>v});n(74423),n(44114),n(18111),n(61701);var s=n(22675),a=n(46927),o=n(72487),r=n(95747),c=n(82591),u=n(30162),l=n(20058),m=n(8549),d=n(71727),_=n(64808),h=t([c,l,o,u,r]);[c,l,o,u,r]=h.then?(await h)():h;const y=(t,e,n,i,s,a,o)=>{const r=a?.[e.entity_id];return f(t,n,i,s,r,e.entity_id,e.attributes,void 0!==o?o:e.state)},f=(t,e,n,i,s,a,o,r)=>p(t,e,n,i,s,a,o,r).map(t=>t.value).join(""),p=(t,e,n,i,h,y,f,p)=>{if(p===s.HV||p===s.Hh)return[{type:"value",value:t(`state.default.${p}`)}];const v=(0,d.m)(y),b="counter"===v||"number"===v||"input_number"===v;if((0,l.ty)(f,"sensor"===v?n:[])||b){if("duration"===f.device_class&&f.unit_of_measurement&&c.Z8.includes(f.unit_of_measurement))try{return[{type:"value",value:(0,c.a3)(e,p,f.unit_of_measurement,h?.display_precision)}]}catch(t){}if("monetary"===f.device_class){let t=[];try{t=(0,l.QL)(p,e,{style:"currency",currency:f.unit_of_measurement,minimumFractionDigits:2,...(0,l.ZQ)({state:p,attributes:f},h)})}catch(t){}if(t.length){const e={integer:"value",group:"value",decimal:"value",fraction:"value",minusSign:"value",plusSign:"value",literal:"literal",currency:"unit"},n=[];for(const i of t){const t=e[i.type];if(!t)continue;const s=n[n.length-1];"value"===t&&"value"===s?.type?s.value+=i.value:n.push({type:t,value:i.value})}return n}}const n=(0,l.ZV)(p,e,(0,l.ZQ)({state:p,attributes:f},h)),i=h?.translation_key&&t(`component.${h.platform}.entity.${v}.${h.translation_key}.unit_of_measurement`)||f.unit_of_measurement;return i?[{type:"value",value:n},{type:"literal",value:(0,m.A)(i,e)},{type:"unit",value:i}]:[{type:"value",value:n}]}if(["date","input_datetime","time"].includes(v))try{const t=p.split(" ");if(2===t.length)return[{type:"value",value:(0,r.r6)(new Date(t.join("T")),{...e,time_zone:a.Wj.local},i)}];if(1===t.length){if(p.includes("-"))return[{type:"value",value:(0,o.Yq)(new Date(`${p}T00:00`),{...e,time_zone:a.Wj.local},i)}];if(p.includes(":")){const t=new Date;return[{type:"value",value:(0,u.fU)(new Date(`${t.toISOString().split("T")[0]}T${p}`),{...e,time_zone:a.Wj.local},i)}]}}return[{type:"value",value:p}]}catch(t){return[{type:"value",value:p}]}if(["ai_task","button","conversation","event","image","infrared","input_button","notify","radio_frequency","scene","stt","tag","tts","wake_word","datetime"].includes(v)||"sensor"===v&&_.G6.includes(f.device_class))try{return[{type:"value",value:(0,r.r6)(new Date(p),e,i)}]}catch(t){return[{type:"value",value:p}]}return[{type:"value",value:h?.translation_key&&t(`component.${h.platform}.entity.${v}.${h.translation_key}.state.${p}`)||f.device_class&&t(`component.${v}.entity_component.${f.device_class}.state.${p}`)||t(`component.${v}.entity_component._.state.${p}`)||p}]},v=(t,e,n,i,s,a,o)=>{const r=a?.[e.entity_id];return p(t,n,i,s,r,e.entity_id,e.attributes,void 0!==o?o:e.state)};i()}catch(t){i(t)}})},25064(t,e,n){n.a(t,async function(t,i){try{n.d(e,{Fp:()=>D,IQ:()=>h,Jo:()=>d,Lj:()=>$,Mm:()=>H,_1:()=>S,tG:()=>T});n(74423),n(44114),n(18111),n(22489),n(20116),n(7588),n(61701),n(13579),n(17642),n(58004),n(33853),n(45876),n(32475),n(15024),n(31698);var s=n(71727),a=n(12575),o=n(28978),r=t([a]);a=(r.then?(await r)():r)[0];const c=["climate","humidifier","water_heater"],u=["climate","humidifier","input_datetime","water_heater","person","device_tracker"],l=["temperature","current_temperature","target_temp_low","target_temp_high","hvac_action","humidity","mode","action","current_humidity"],m=(t,e)=>!t.states[e]||u.includes((0,s.m)(e)),d=(t,e,n,i,s)=>y(t,e,()=>({type:"history/stream",entity_ids:s,start_time:n.toISOString(),end_time:i.toISOString(),minimal_response:!0,no_attributes:!s.some(e=>m(t,e))}));class _{processMessage(t){if(!this.combinedHistory||!Object.keys(this.combinedHistory).length)return this.combinedHistory=t.states,this.combinedHistory;if(!Object.keys(t.states).length)return this.combinedHistory;const e=this.hoursToShow?((new Date).getTime()-3600*this.hoursToShow*1e3)/1e3:void 0,n={};for(const t of Object.keys(this.combinedHistory))n[t]=[];for(const e of Object.keys(t.states))n[e]=[];for(const i of Object.keys(n)){if(i in this.combinedHistory&&i in t.states){const e=this.combinedHistory[i],s=e[e.length-1];n[i]=e.concat(t.states[i]),t.states[i][0].lu<s.lu&&(n[i]=n[i].sort((t,e)=>t.lu-e.lu))}else i in this.combinedHistory?n[i]=this.combinedHistory[i]:n[i]=t.states[i];if(e&&i in this.combinedHistory){const t=n[i].filter(t=>t.lu<e);if(!t.length)continue;if(n[i]=n[i].filter(t=>t.lu>=e),n[i].length&&n[i][0].lu===e)continue;const s=t[t.length-1];s.lu=e,delete s.lc,n[i].unshift(s)}}return this.combinedHistory=n,this.combinedHistory}constructor(t,e){this.hass=t,this.hoursToShow=e,this.combinedHistory={}}}const h=(t,e,n,i,s,a=!0,o=!0)=>y(t,e,()=>({type:"history/stream",entity_ids:i,start_time:new Date((new Date).getTime()-3600*n*1e3).toISOString(),minimal_response:a,significant_changes_only:o,no_attributes:s??!i.some(e=>m(t,e))}),n),y=async(t,e,n,i)=>{let s,a=!1;const o=async()=>{const o=new _(t,i),r=await t.connection.subscribeMessage(t=>e(o.processMessage(t)),n(),{resubscribe:!1});a?r().catch(()=>{}):s=r},r=()=>{a||(s=void 0,o().catch(()=>{}))};return await o(),t.connection.addEventListener("ready",r),async()=>{a=!0,t.connection.removeEventListener("ready",r),s&&await s()}},f=(t,e)=>t.state===e.state&&(!t.attributes||!e.attributes||l.every(n=>t.attributes[n]===e.attributes[n])),p=(t,e,n,i,s,r,c)=>{const u=[],l=r[0];for(const o of r){if(u.length>0&&o.s===u[u.length-1].state)continue;const r={};c?.attributes.device_class&&(r.device_class=c?.attributes.device_class),u.push({state_localize:(0,a.J)(t,e,[],n,i[s],s,{...o.a||l.a,...r},o.s),state:o.s,last_changed:1e3*(o.lc?o.lc:o.lu)})}return{name:(0,o._)(s,c?.attributes||l.a),entity_id:s,data:u}},v=(t,e,n,i)=>{const a=[];return Object.keys(n).forEach(t=>{const e=n[t],r=e[0],u=(0,s.m)(t),m=[];for(const t of e){let e;if(c.includes(u)){e={state:t.s,last_changed:1e3*t.lu,attributes:{}};for(const n of l)n in t.a&&(e.attributes[n]=t.a[n])}else e={state:t.s,last_changed:1e3*(t.lc?t.lc:t.lu),attributes:{}};m.length>1&&f(e,m[m.length-1])&&f(e,m[m.length-2])||m.push(e)}const d=t in i?i[t].attributes:"friendly_name"in r.a?r.a:void 0;a.push({domain:u,name:(0,o._)(t,d||{}),entity_id:t,states:m})}),{unit:t,device_class:e,identifier:Object.keys(n).join(""),data:a}},b=["counter","input_number","number"],g=t=>b.includes(t),w=t=>"unit_of_measurement"in t||"state_class"in t,k=(t,e)=>null!=t.attributes.device_class&&e.includes(t.attributes.device_class),j=" ",S=(t,e,n,i,s=!1)=>{const a={};n.forEach(t=>{t in e&&(a[t]=e[t])});const o={};Object.entries(a).forEach(([t,e])=>{const n=e.map(t=>({s:null!=t.mean?t.mean.toString():t.state.toString(),lc:t.end/1e3,a:{},lu:t.end/1e3}));o[t]=n});const r=H(t,o,[],t.localize,i,s,!0);return(r?.line||[]).forEach(t=>{t.data.forEach(t=>{t.statistics=t.states,t.states=[]})}),r},$=t=>[{s:t.state,a:t.attributes,lu:new Date(t.last_updated).getTime()/1e3}],H=(t,e,n,i,a,o=!1,r=!1)=>{const c={},u=[],l={};if(new Set([...n,...Object.keys(e)]).forEach(n=>{n in e?l[n]=e[n]:t.states[n]&&(l[n]=$(t.states[n]))}),!l)return{line:[],timeline:[]};Object.keys(l).forEach(e=>{const n=l[e];if(0===n.length)return;const m=(0,s.m)(e),d=e in t.states?t.states[e]:void 0,_=d||g(m)?void 0:n.find(t=>t.a&&w(t.a));let h;h=D(m,d,_,a,r)?d?.attributes.unit_of_measurement||_?.a.unit_of_measurement||j:{zone:i("ui.dialogs.more_info_control.zone.graph_unit"),climate:t.config.unit_system.temperature,humidifier:"%",water_heater:t.config.unit_system.temperature}[m];const y=O(h,{climate:"temperature",humidifier:"humidity",water_heater:"temperature"}[m]||(d?.attributes||_?.a)?.device_class,o);h?y&&y in c&&e in c[y]?c[y][e].push(...n):y&&(y in c||(c[y]={}),c[y][e]=n):u.push(p(i,t.locale,t.config,t.entities,e,n,d))});return{line:Object.keys(c).map(e=>{const n=e.split("_"),i=n[0],s=n.slice(1).join("_")||void 0;return v(i,s,c[e],t.states)}),timeline:u}},O=(t,e,n)=>n?`${t}_${e||""}`:t,D=(t,e,n,i,s=!1)=>s||g(t)||null!=e&&w(e.attributes)||null!=e&&"sensor"===t&&k(e,i)||null!=n,T=(t,e,n=!0)=>{if(!e)return t;const i={...t,line:[]},s={};for(const e of t.line){const t=O(e.unit,e.device_class,n);t&&(s[t]={historyItem:e})}for(const i of e.line){i.unit===j&&(i.unit=t.line.find(t=>t.identifier===i.identifier)?.unit??j);const e=O(i.unit,i.device_class,n);e&&(e in s?s[e].ltsItem=i:s[e]={ltsItem:i})}for(const{historyItem:t,ltsItem:e}of Object.values(s)){if(!t||!e){i.line.push(t||e);continue}const n={...t,data:[]},s=new Set([...t.data.map(t=>t.entity_id),...e.data.map(t=>t.entity_id)]);for(const i of s){const s=t.data.find(t=>t.entity_id===i),a=e.data.find(t=>t.entity_id===i);if(!s||!a){n.data.push(s||a);continue}const o=s.states[0]?.last_changed||a.statistics[a.statistics.length-1].last_changed+1,r=[];for(const t of a.statistics){if(t.last_changed>=o)break;r.push(t)}n.data.push(0===r.length?s:{...s,statistics:r})}i.line.push(n)}return i};i()}catch(t){i(t)}})}};