iobroker.lovelace
Version:
With this adapter you can build visualization for ioBroker with Home Assistant Lovelace UI
1 lines • 20.5 kB
JavaScript
export const __rspack_esm_id=37848;export const __rspack_esm_ids=[37848];export const __webpack_modules__={90409(e,t,a){a.d(t,{A:()=>i});a(18111),a(61701);function i(e){const t=e.split(":").map(Number);return 3600*t[0]+60*t[1]+t[2]}},27167(e,t,a){a.d(t,{A:()=>s});const i=e=>e<10?`0${e}`:e;function s(e){const t=Math.floor(e/3600),a=Math.floor(e%3600/60),s=Math.floor(e%3600%60);return t>0?`${t}:${i(a)}:${i(s)}`:a>0?`${a}:${i(s)}`:s>0?""+s:null}},15090(e,t,a){a.d(t,{nP:()=>c,vB:()=>n});a(44114),a(18111),a(22489),a(61701),a(17642),a(58004),a(33853),a(45876),a(32475),a(15024),a(31698);var i=a(22675),s=a(52220),r=a(71727),o=a(69093);const n={alarm_control_panel:["armed_away","armed_custom_bypass","armed_home","armed_night","armed_vacation","arming","disarmed","disarming","pending","triggered"],alert:["on","off","idle"],assist_satellite:["idle","listening","responding","processing"],automation:["on","off"],binary_sensor:["on","off"],button:[],calendar:["on","off"],camera:["idle","recording","streaming"],cover:["closed","closing","open","opening"],device_tracker:["home","not_home"],fan:["on","off"],humidifier:["on","off"],infrared:[],input_boolean:["on","off"],input_button:[],lawn_mower:["error","paused","mowing","returning","docked"],light:["on","off"],lock:["jammed","locked","locking","unlocked","unlocking","opening","open"],media_player:["off","on","idle","playing","paused","standby","buffering"],person:["home","not_home"],plant:["ok","problem"],radio_frequency:[],remote:["on","off"],scene:[],schedule:["on","off"],script:["on","off"],siren:["on","off"],sun:["above_horizon","below_horizon"],switch:["on","off"],timer:["active","idle","paused"],update:["on","off"],vacuum:["cleaning","docked","error","idle","paused","returning"],valve:["closed","closing","open","opening"],weather:["clear-night","cloudy","exceptional","fog","hail","lightning-rainy","lightning","partlycloudy","pouring","rainy","snowy-rainy","snowy","sunny","windy-variant","windy"]},l={alarm_control_panel:{code_format:["number","text"]},binary_sensor:{device_class:["battery","battery_charging","co","cold","connectivity","door","garage_door","gas","heat","light","lock","moisture","motion","moving","occupancy","opening","plug","power","presence","problem","running","safety","smoke","sound","tamper","update","vibration","window"]},button:{device_class:["restart","update"]},camera:{frontend_stream_type:["hls","web_rtc"]},climate:{hvac_action:["off","idle","preheating","defrosting","heating","cooling","drying","fan"]},cover:{device_class:["awning","blind","curtain","damper","door","garage","gate","shade","shutter","window"]},device_tracker:{source_type:["bluetooth","bluetooth_le","gps","router"]},fan:{direction:["forward","reverse"]},humidifier:{device_class:["humidifier","dehumidifier"],action:["off","idle","humidifying","drying"]},media_player:{device_class:["tv","speaker","receiver"],media_content_type:["album","app","artist","channel","channels","composer","contributing_artist","episode","game","genre","image","movie","music","playlist","podcast","season","track","tvshow","url","video"],repeat:["off","one","all"]},number:{device_class:["temperature"]},sensor:{device_class:["apparent_power","aqi","battery","carbon_dioxide","carbon_monoxide","current","date","duration","energy","frequency","gas","humidity","illuminance","monetary","nitrogen_dioxide","nitrogen_monoxide","nitrous_oxide","ozone","ph","pm1","pm10","pm25","pm4","power_factor","power","pressure","reactive_power","signal_strength","sulphur_dioxide","temperature","timestamp","uptime","volatile_organic_compounds","volatile_organic_compounds_parts","voltage","volume_flow_rate"],state_class:["measurement","total","total_increasing"]},switch:{device_class:["outlet","switch"]},update:{device_class:["firmware"]},water_heater:{away_mode:["on","off"]}},c=(e,t,a=void 0)=>{const c=(0,o.t)(t),d=[];switch(d.push(...((e,t,a)=>{const o=[];switch(a||o.push(i.Hh,i.HV),!a&&t in n?o.push(...n[t]):a&&t in l&&a in l[t]&&o.push(...l[t][a]),t){case"device_tracker":case"person":a||o.push(...Object.entries(e.states).filter(([e,t])=>"zone"===(0,r.m)(e)&&"zone.home"!==e&&t.attributes.friendly_name).map(([e,t])=>t.attributes.friendly_name).sort((t,a)=>(0,s.xL)(t,a,e.locale.language)))}return o})(e,c,a)),c){case"climate":a?"fan_mode"===a?d.push(...t.attributes.fan_modes):"preset_mode"===a?d.push(...t.attributes.preset_modes):"swing_mode"===a?d.push(...t.attributes.swing_modes):"swing_horizontal_mode"===a&&d.push(...t.attributes.swing_horizontal_modes):d.push(...t.attributes.hvac_modes);break;case"event":"event_type"===a&&d.push(...t.attributes.event_types);break;case"fan":"preset_mode"===a&&d.push(...t.attributes.preset_modes);break;case"humidifier":"mode"===a&&d.push(...t.attributes.available_modes);break;case"input_select":case"select":a||d.push(...t.attributes.options);break;case"light":"effect"===a&&t.attributes.effect_list?d.push(...t.attributes.effect_list):"color_mode"===a&&t.attributes.supported_color_modes&&d.push(...t.attributes.supported_color_modes);break;case"media_player":"sound_mode"===a?d.push(...t.attributes.sound_mode_list):"source"===a&&d.push(...t.attributes.source_list);break;case"remote":"current_activity"===a&&d.push(...t.attributes.activity_list);break;case"sensor":a||"enum"!==t.attributes.device_class||d.push(...t.attributes.options);break;case"vacuum":"fan_speed"===a&&d.push(...t.attributes.fan_speed_list);break;case"water_heater":a&&"operation_mode"!==a||d.push(...t.attributes.operation_list)}return[...new Set(d)]}},58548(e,t,a){a.d(t,{A:()=>s});const i=e=>{const t=parseFloat(e);if(isNaN(t))throw new Error(`${e} is not a number`);return t};function s(e){if(!e)return null;try{if(e.endsWith("%"))return{w:100,h:i(e.slice(0,-1))};const t=e.replace(":","x").split("x");return 0===t.length?null:1===t.length?{w:i(t[0]),h:1}:{w:i(t[0]),h:i(t[1])}}catch(e){}return null}},89300(e,t,a){a.a(e,async function(e,t){try{var i=a(62826),s=a(5124),r=a(22441),o=a(6412),n=a(18350),l=a(65829),c=(a(67094),e([n,l]));[n,l]=c.then?(await c)():c;const d="M2.2,16.06L3.88,12L2.2,7.94L6.26,6.26L7.94,2.2L12,3.88L16.06,2.2L17.74,6.26L21.8,7.94L20.12,12L21.8,16.06L17.74,17.74L16.06,21.8L12,20.12L7.94,21.8L6.26,17.74L2.2,16.06M13,17V15H11V17H13M13,13V7H11V13H13Z",h="M9,20.42L2.79,14.21L5.62,11.38L9,14.77L18.88,4.88L21.71,7.71L9,20.42Z";class u extends s.WF{render(){const e=this.progress||this._result?"accent":this.appearance;return s.qy` <ha-button .appearance="${e}" .disabled="${this.disabled}" .loading="${this.progress}" .variant="${"success"===this._result?"success":"error"===this._result?"danger":this.variant}" class="${(0,o.H)({result:!!this._result,success:"success"===this._result,error:"error"===this._result})}"> ${this.iconPath?s.qy`<ha-svg-icon .path="${this.iconPath}" slot="start"></ha-svg-icon>`:s.s6} <slot>${this.label}</slot> </ha-button> ${this._result?s.qy` <div class="progress"> ${"success"===this._result?s.qy`<ha-svg-icon .path="${h}"></ha-svg-icon>`:"error"===this._result?s.qy`<ha-svg-icon .path="${d}"></ha-svg-icon>`:s.s6} </div> `:s.s6} `}actionSuccess(){this._setResult("success")}actionError(){this._setResult("error")}_setResult(e){this._result=e,setTimeout(()=>{this._result=void 0},2e3)}constructor(...e){super(...e),this.disabled=!1,this.progress=!1,this.appearance="accent",this.variant="brand"}}u.styles=s.AH`:host{outline:0;display:inline-block;position:relative}:host([progress]){pointer-events:none}.progress{bottom:0;display:flex;justify-content:center;align-items:center;position:absolute;top:0;width:100%}ha-button{width:100%}ha-button.result::part(caret),ha-button.result::part(end),ha-button.result::part(label),ha-button.result::part(spinner),ha-button.result::part(start){visibility:hidden}:host([appearance=brand]) ha-svg-icon{color:var(--white-color)}`,(0,i.Cg)([(0,r.MZ)()],u.prototype,"label",void 0),(0,i.Cg)([(0,r.MZ)({type:Boolean})],u.prototype,"disabled",void 0),(0,i.Cg)([(0,r.MZ)({type:Boolean,reflect:!0})],u.prototype,"progress",void 0),(0,i.Cg)([(0,r.MZ)()],u.prototype,"appearance",void 0),(0,i.Cg)([(0,r.MZ)({attribute:!1})],u.prototype,"iconPath",void 0),(0,i.Cg)([(0,r.MZ)()],u.prototype,"variant",void 0),(0,i.Cg)([(0,r.wk)()],u.prototype,"_result",void 0),u=(0,i.Cg)([(0,r.EM)("ha-progress-button")],u),t()}catch(e){t(e)}})},58234(e,t,a){a.a(e,async function(e,t){try{a(18111),a(20116);var i=a(62826),s=a(5124),r=a(22441),o=a(6412),n=a(23832),l=a(27167),c=a(69093),d=a(28978),h=a(15090),u=a(22675),p=a(49141),g=(a(58388),a(93367)),m=e([g]);g=(m.then?(await m)():m)[0];const _="M13 14H11V9H13M13 18H11V16H13M1 21H23L12 2L1 21Z",b=["alarm_control_panel","device_tracker","person"],f=(e,t)=>(0,n.g)(b)(e)&&(0,n.g)(h.vB[e])(t)?`${e}.${t}`:null;class v extends s.WF{connectedCallback(){super.connectedCallback(),this._connected=!0,this._startInterval(this.state)}disconnectedCallback(){super.disconnectedCallback(),this._connected=!1,this._clearInterval()}render(){const e=this.state;if(!e)return s.qy` <ha-label-badge class="warning" label="${this.hass.localize("state_badge.default.error")}" description="${this.hass.localize("state_badge.default.entity_not_found")}"> <ha-svg-icon .path="${_}"></ha-svg-icon> </ha-label-badge> `;const t=(0,c.t)(e),a=this.hass?.entities[e.entity_id],i=this.icon||this._computeShowIcon(t,e,a),r=this.icon?"":this.image?this.image:e.attributes.entity_picture_local||e.attributes.entity_picture,n=r||i?void 0:this._computeValue(t,e,a);return s.qy` <ha-label-badge class="${(0,o.H)({[t]:!0,"has-unit_of_measurement":"unit_of_measurement"in e.attributes})}" .image="${r}" .label="${this._computeLabel(t,e,this._timerTimeRemaining)}" .description="${this.showName?this.name??(0,d.u)(e):void 0}"> ${!r&&i?s.qy`<ha-state-icon .icon="${this.icon}" .stateObj="${e}"></ha-state-icon>`:""} ${!n||r||i?"":s.qy`<span class="${n&&n.length>4?"big":""}">${n}</span>`} </ha-label-badge> `}updated(e){super.updated(e),this._connected&&e.has("state")&&this._startInterval(this.state)}_computeValue(e,t,a){switch(e){case"alarm_control_panel":case"binary_sensor":case"device_tracker":case"person":case"scene":case"sun":case"timer":return null;case"sensor":if("moon"===a?.platform)return null;default:return t.state===u.Hh||t.state===u.HV?"—":this.hass.formatEntityStateToParts(t).find(e=>"value"===e.type)?.value}}_computeShowIcon(e,t,a){if(t.state===u.Hh)return!1;switch(e){case"alarm_control_panel":case"binary_sensor":case"device_tracker":case"person":case"scene":case"sun":case"timer":return!0;case"sensor":return"moon"===a?.platform;default:return!1}}_computeLabel(e,t,a=0){if(t.state===u.Hh||t.state===u.HV)return this.hass.localize(`state_badge.default.${t.state}`);const i=f(e,t.state);return i?this.hass.localize(`state_badge.${i}`):"person"===e||"device_tracker"===e?t.state:"timer"===e?(0,l.A)(a):this.hass.formatEntityStateToParts(t).find(e=>"unit"===e.type)?.value||null}_clearInterval(){this._updateRemaining&&(clearInterval(this._updateRemaining),this._updateRemaining=void 0)}_startInterval(e){this._clearInterval(),e&&"timer"===(0,c.t)(e)&&(this._calculateTimerRemaining(e),"active"===e.state&&(this._updateRemaining=window.setInterval(()=>this._calculateTimerRemaining(this.state),1e3)))}_calculateTimerRemaining(e){this._timerTimeRemaining=(0,p.ls)(e)}constructor(...e){super(...e),this.showName=!1}}v.styles=s.AH`:host{cursor:pointer}.big{font-size:var(--ha-font-size-xs)}ha-label-badge{--ha-label-badge-color:var(--label-badge-red)}ha-label-badge.has-unit_of_measurement{--ha-label-badge-label-text-transform:none}ha-label-badge.binary_sensor{--ha-label-badge-color:var(--label-badge-blue)}.red{--ha-label-badge-color:var(--label-badge-red)}.blue{--ha-label-badge-color:var(--label-badge-blue)}.green{--ha-label-badge-color:var(--label-badge-green)}.yellow{--ha-label-badge-color:var(--label-badge-yellow)}.grey{--ha-label-badge-color:var(--label-badge-grey)}.warning{--ha-label-badge-color:var(--label-badge-yellow)}`,(0,i.Cg)([(0,r.MZ)({attribute:!1})],v.prototype,"hass",void 0),(0,i.Cg)([(0,r.MZ)({attribute:!1})],v.prototype,"state",void 0),(0,i.Cg)([(0,r.MZ)()],v.prototype,"name",void 0),(0,i.Cg)([(0,r.MZ)()],v.prototype,"icon",void 0),(0,i.Cg)([(0,r.MZ)()],v.prototype,"image",void 0),(0,i.Cg)([(0,r.MZ)({attribute:"show-name",type:Boolean})],v.prototype,"showName",void 0),(0,i.Cg)([(0,r.wk)()],v.prototype,"_timerTimeRemaining",void 0),v=(0,i.Cg)([(0,r.EM)("ha-state-label-badge")],v),t()}catch(e){t(e)}})},58388(e,t,a){var i=a(62826),s=a(5124),r=a(22441),o=a(6412);class n extends s.WF{render(){return s.qy` <div class="badge-container"> <div class="label-badge" id="badge"> <div class="value"> <slot></slot> </div> ${this.label?s.qy` <div class="${(0,o.H)({label:!0,big:this.label.length>5})}"> <span>${this.label}</span> </div> `:""} </div> ${this.description?s.qy`<div class="title">${this.description}</div>`:""} </div> `}static get styles(){return[s.AH`.badge-container{display:inline-block;text-align:center;vertical-align:top;padding:var(--ha-label-badge-padding,0 0 0 0)}.label-badge{position:relative;display:block;margin:0 auto;width:var(--ha-label-badge-size,2.5em);text-align:center;height:var(--ha-label-badge-size,2.5em);line-height:var(--ha-label-badge-size, 2.5em);font-size:var(--ha-label-badge-font-size, 1.5em);border-radius:var(--ha-label-badge-border-radius,50%);border:.1em solid var(--ha-label-badge-color,var(--primary-color));color:var(--label-badge-text-color,#4c4c4c);white-space:nowrap;background-color:var(--label-badge-background-color,#fff);background-size:cover;transition:border .3s ease-in-out}.label-badge .label.big span{font-size:90%;padding:10% 12% 7% 12%}.label-badge .value{font-size:90%;overflow:hidden;text-overflow:ellipsis}.label-badge .label{position:absolute;bottom:-1em;left:-.2em;right:-.2em;line-height:1em;font-size:.5em}.label-badge .label span{box-sizing:border-box;max-width:100%;display:inline-block;background-color:var(--ha-label-badge-color,var(--primary-color));color:var(--ha-label-badge-label-color,#fff);border-radius:var(--ha-border-radius-lg);padding:9% 16% 8% 16%;font-weight:var(--ha-font-weight-medium);overflow:hidden;text-transform:uppercase;text-overflow:ellipsis;transition:background-color .3s ease-in-out;text-transform:var(--ha-label-badge-label-text-transform,uppercase)}.badge-container .title{margin-top:1em;font-size:var(--ha-label-badge-title-font-size, .9em);width:var(--ha-label-badge-title-width,5em);font-weight:var(--ha-label-badge-title-font-weight,var(--ha-font-weight-normal));overflow:hidden;text-overflow:ellipsis;line-height:normal}`]}updated(e){super.updated(e),e.has("image")&&(this.shadowRoot.getElementById("badge").style.backgroundImage=this.image?`url(${this.image})`:"")}}(0,i.Cg)([(0,r.MZ)()],n.prototype,"label",void 0),(0,i.Cg)([(0,r.MZ)()],n.prototype,"description",void 0),(0,i.Cg)([(0,r.MZ)()],n.prototype,"image",void 0),n=(0,i.Cg)([(0,r.EM)("ha-label-badge")],n)},17022(e,t,a){a.d(t,{A1:()=>i,CY:()=>o,Fn:()=>s,Jz:()=>l,St:()=>n,VA:()=>d,WI:()=>h,iY:()=>c,xw:()=>r});const i=(e,t)=>e.callWS({type:"media_source/resolve_media",media_content_id:t}),s=(e,t)=>e.callWS({type:"media_source/browse_media",media_content_id:t}),r="__MANUAL_ENTRY__",o=e=>e.startsWith(r),n=e=>e.startsWith("media-source://"),l=e=>e.startsWith("media-source://media_source"),c=e=>e.startsWith("media-source://image_upload"),d=async(e,t,a)=>{const i=new FormData;i.append("media_content_id",t),i.append("file",a);const s=await e.fetchWithAuth("/api/media_source/local_source/upload",{method:"POST",body:i});if(413===s.status)throw new Error(`Uploaded file is too large (${a.name})`);if(200!==s.status)throw new Error("Unknown error");return s.json()},h=async(e,t)=>e.callWS({type:"media_source/local_source/remove",media_content_id:t})},49141(e,t,a){a.d(t,{CR:()=>o,PF:()=>d,kL:()=>r,ls:()=>c,pZ:()=>l,r9:()=>n});var i=a(90409),s=a(27167);const r=e=>e.callWS({type:"timer/list"}),o=(e,t)=>e.callWS({type:"timer/create",...t}),n=(e,t,a)=>e.callWS({type:"timer/update",timer_id:t,...a}),l=(e,t)=>e.callWS({type:"timer/delete",timer_id:t}),c=e=>{if(!e.attributes.remaining)return;let t=(0,i.A)(e.attributes.remaining);if("active"===e.state){const a=(new Date).getTime(),i=new Date(e.attributes.finishes_at).getTime();t=Math.max((i-a)/1e3,0)}return t},d=(e,t,a)=>{if(!t)return null;if("idle"===t.state||0===a)return e.formatEntityState(t);let i=(0,s.A)(a||0)||"0";return"paused"===t.state&&(i=`${i} (${e.formatEntityState(t)})`),i}},63933(e,t,a){a.a(e,async function(e,i){try{a.r(t);a(18111),a(61701);var s=a(62826),r=a(5124),o=a(22441),n=a(42372),l=a(71727),c=(a(76776),a(67013)),d=a(13632),h=a(25618),u=a(55810),p=e([h]);h=(p.then?(await p)():p)[0];class g extends r.WF{static async getConfigElement(){return await Promise.all([a.e(18377),a.e(51277)]).then(a.bind(a,16988)),document.createElement("hui-picture-elements-card-editor")}static getStubConfig(e,t,a){return{type:"picture-elements",elements:[{type:"state-badge",entity:(0,d.B)(e,1,t,a,["sensor","binary_sensor"])[0]||"",style:{top:"32%",left:"40%"}}],image:"https://demo.home-assistant.io/stub_config/floorplan.png"}}getCardSize(){return 4}setConfig(e){if(!e)throw new Error("Invalid configuration");if(!(e.image||e.image_entity||e.camera_image||e.state_image)||e.state_image&&!e.entity)throw new Error("Image required");if(!Array.isArray(e.elements))throw new Error("Elements required");this._config=e,this._elements=e.elements.map(e=>this._createElement(e))}updated(e){if(super.updated(e),!this._config||!this.hass)return;if(this._elements&&e.has("hass"))for(const e of this._elements)e.hass=this.hass;if(this._elements&&e.has("preview"))for(const e of this._elements)e.preview=this.preview;const t=e.get("hass"),a=e.get("_config");t&&a&&t.themes===this.hass.themes&&a.theme===this._config.theme||(0,n.Q)(this,this.hass.themes,this._config.theme)}render(){if(!this.hass||!this._config)return r.s6;let e="object"==typeof this._config?.image&&this._config.image.media_content_id||this._config.image;const t="object"==typeof this._config?.dark_mode_image&&this._config.dark_mode_image.media_content_id||this._config.dark_mode_image;if(this._config.image_entity){const t=this.hass.states[this._config.image_entity];switch((0,l.m)(this._config.image_entity)){case"image":e=(0,c.e)(t);break;case"person":t.attributes.entity_picture&&(e=t.attributes.entity_picture)}}return r.qy` <ha-card .header="${this._config.title}"> <div id="root"> <hui-image .hass="${this.hass}" .image="${e}" .stateImage="${this._config.state_image}" .stateFilter="${this._config.state_filter}" .cameraImage="${this._config.camera_image}" .cameraView="${this._config.camera_view}" .entity="${this._config.entity}" .aspectRatio="${this._config.aspect_ratio}" .darkModeFilter="${this._config.dark_mode_filter}" .darkModeImage="${t}" ="${this._handleImageClick}"></hui-image> ${this._elements} </div> </ha-card> `}_createElement(e){const t=(0,h.M)(e);return this.hass&&(t.hass=this.hass),t.preview=this.preview,t.addEventListener("ll-rebuild",a=>{a.stopPropagation(),this._rebuildElement(t,e)},{once:!0}),t}_rebuildElement(e,t){const a=this._createElement(t);e.parentElement&&e.parentElement.replaceChild(a,e),this._elements=this._elements.map(t=>t===e?a:t)}_handleImageClick(e){if(!this.preview||!this._config?.[u.c])return;const t=e.currentTarget.getBoundingClientRect(),a=(e.clientX-t.left)/t.width*100,i=(e.clientY-t.top)/t.height*100;this._config[u.c](a,i)}constructor(...e){super(...e),this.preview=!1}}g.styles=r.AH`#root{position:relative}.element{position:absolute;transform:translate(-50%,-50%)}ha-card{overflow:hidden;height:100%;box-sizing:border-box}`,(0,s.Cg)([(0,o.MZ)({attribute:!1})],g.prototype,"hass",void 0),(0,s.Cg)([(0,o.MZ)({type:Boolean})],g.prototype,"preview",void 0),(0,s.Cg)([(0,o.wk)()],g.prototype,"_elements",void 0),(0,s.Cg)([(0,o.wk)()],g.prototype,"_config",void 0),g=(0,s.Cg)([(0,o.EM)("hui-picture-elements-card")],g),i()}catch(e){i(e)}})},55810(e,t,a){a.d(t,{c:()=>i});const i=Symbol("previewClickCallback")},84043(e,t,a){a.a(e,async function(e,i){try{a.d(t,{d:()=>p});a(17642),a(58004),a(33853),a(45876),a(32475),a(15024),a(31698);var s=a(98743),r=(a(16732),a(9578)),o=a(51007),n=a(37696),l=a(10792),c=a(14097),d=a(34128),h=e([s,r,o,n,l,c]);[s,r,o,n,l,c]=h.then?(await h)():h;const u=new Set(["conditional","icon","image","service-button","state-badge","state-icon","state-label"]),p=e=>("action-button"===e.type&&(e={...e,type:"service-button"}),(0,d.Ue)("element",e,u));i()}catch(e){i(e)}})}};