UNPKG

zigbee2mqtt-windfront

Version:

[![Version](https://img.shields.io/npm/v/zigbee2mqtt-windfront.svg)](https://npmjs.org/package/zigbee2mqtt-windfront) [![CI](https://github.com/Nerivec/zigbee2mqtt-windfront/actions/workflows/ci.yml/badge.svg)](https://github.com/Nerivec/zigbee2mqtt-windf

49 lines (39 loc) 9.97 kB
import{E as k,P as U,b as _,r as l,j as e,Q as P,C as N,F as b,R as A,a as u,k as h,c as x,L as f,$ as O,aD as v,aE as M,aF as y,aB as I,t as z,M as H,S as q,A as F,aG as S,aC as E}from"./index-Cg_dwqpD.js";import{s as G}from"./snakeCase-CrKq36vi.js";import{a as W,A as B,D as V}from"./Availability-DZ-ZY3Ib.js";import{T as J}from"./TextareaField-LpcEEomy.js";import{D as K}from"./DeviceImage-CHwoOcls.js";import{D as Y}from"./DisplayValue-DcXMP9Gf.js";import{L as Q}from"./LastSeen-F90Gw0JI.js";import{M as X,V as Z}from"./VendorLink-D2p34CmW.js";import{P as ee}from"./PowerSource-BDEov_ab.js";import"./envs-CSqIi4cL.js";import"./_createCompounder-Dcznv9Az.js";import"./isArray-uIIfUpwr.js";import"./RemoveDeviceModal-7DiwN3ck.js";import"./CheckboxField-D0wHGmUZ.js";import"./InputField-D9KJc30P.js";import"./index-BbB5QEu8.js";import"./format-BHlbVbae.js";const se=k.create(({device:a,setDeviceDescription:s})=>{const i=U(),{t:n}=_(["zigbee","common"]),[o,m]=l.useState(a.description||"");return l.useEffect(()=>{m(a.description||"")},[a.description]),l.useEffect(()=>{const r=d=>{d.key==="Escape"&&(d.preventDefault(),i.remove())};return window.addEventListener("keydown",r),()=>window.removeEventListener("keydown",r)},[i]),e.jsx(P,{isOpen:i.visible,title:`${n(r=>r.update_description)} ${a.friendly_name}`,footer:e.jsxs(e.Fragment,{children:[e.jsx(N,{className:"btn btn-neutral",onClick:i.remove,children:n(r=>r.cancel,{ns:"common"})}),e.jsx(N,{className:"btn btn-primary ms-1",onClick:async()=>{i.remove(),await s(a.ieee_address,o)},children:n(r=>r.save_description)})]}),children:e.jsx("div",{className:"flex flex-col gap-2",children:e.jsx(J,{label:n(r=>r.description),name:"update_description",onChange:r=>m(r.target.value),rows:3,value:o})})})}),te=l.memo(({device:a,setDeviceDescription:s})=>{const{t:i}=_("zigbee");return e.jsx(N,{className:`btn btn-link btn-sm${a.description?" btn-square":""}`,onClick:async()=>await k.show(se,{device:a,setDeviceDescription:s}),title:i(n=>n.edit_description),children:a.description?e.jsx(b,{icon:A}):i(n=>n.edit_description)})}),ae=/\[(.*?)]\((.*?)\)/,ie={native:"badge-success",external:"badge-info",generated:"badge-warning"},ne=(a,s)=>{if(!(a==="bindings"||a==="configured_reportings"||a==="scenes"))return s},re=l.memo(({device:a})=>{const{t:s}=_("zigbee"),i={labels:"enhancement",title:`[External Converter] ${a.model_id} from ${a.manufacturer}`,body:`<!-- MAKE SURE THIS IS NOT ALREADY POSTED ${S.slice(0,-4)} --> This is my external converter for \`${a.model_id}\` from \`${a.manufacturer}\` software_build_id: \`${a.software_build_id}\` date_code: \`${a.date_code}\` endpoints: \`\`\`json ${JSON.stringify(a.endpoints,ne)} \`\`\` ### What works / what doesn't? ### Converter \`\`\`js <!-- REPLACE THIS LINE WITH YOUR EXTERNAL CONVERTER'S CODE --> \`\`\` `};return e.jsx(f,{target:"_blank",rel:"noopener noreferrer",to:`${S}?${new URLSearchParams(i).toString()}`,className:"link link-hover",children:s(n=>n.submit_converter)})}),le=l.memo(({sourceIdx:a,device:s})=>{const{t:i}=_("zigbee"),n=u(h(r=>r.bridgeInfo[a])),o=u(h(r=>r.bridgeHealth[a])),m={labels:"problem",title:`[${s.model_id} / ${s.manufacturer}] ???`,body:`<!-- MAKE SURE THIS IS NOT ALREADY POSTED ${E.slice(0,-4)} --> ### What happened? ### What did you expect to happen? ### How to reproduce it (minimal and precise) ### Debug logs ### Details os: \`${n.os.version}\` node: \`${n.os.node_version}\` zigbee2mqtt: \`${n.version}\` (\`${n.commit}\`) zigbee-herdsman: \`${n.zigbee_herdsman.version}\` zigbee-herdsman-converters: \`${n.zigbee_herdsman_converters.version}\` adapter: \`${n.coordinator.type}\` \`${JSON.stringify(n.coordinator.meta)}\` #### Device software_build_id: \`${s.software_build_id}\` date_code: \`${s.date_code}\` endpoints: \`\`\`json ${JSON.stringify(s.endpoints)} \`\`\``};return o.response_time>0&&(m.body+=` ##### Health time: \`${new Date(o.response_time)}\` process.uptime_sec: \`${o.process.uptime_sec}\` \`\`\`json ${JSON.stringify(o.devices[s.ieee_address]??{})} \`\`\` `),e.jsx(f,{target:"_blank",rel:"noopener noreferrer",to:`${E}?${new URLSearchParams(m).toString()}`,className:"btn btn-ghost",children:i(r=>r.report_problem)})});function Se({sourceIdx:a,device:s}){const{t:i}=_(["zigbee","availability","common"]),n=u(h(t=>t.deviceStates[a])),o=u(h(t=>t.bridgeInfo[a].config)),m=u(h(t=>t.availability[a])),r=o.homeassistant.enabled,d=l.useMemo(()=>n[s.friendly_name]??{},[s.friendly_name,n]),D=l.useCallback(async(t,c)=>{await x(a,"bridge/request/device/options",{id:t,options:{description:c}})},[a]),g=l.useCallback(async(t,c,p,j)=>{await x(t,"bridge/request/device/rename",{from:c,to:p,homeassistant_rename:j,last:void 0})},[]),$=l.useCallback(async([t,c])=>{await x(t,"bridge/request/device/configure",{id:c})},[]),C=l.useCallback(async([t,c])=>{await x(t,"bridge/request/device/interview",{id:c})},[]),L=l.useCallback(async(t,c,p,j)=>{await x(t,"bridge/request/device/remove",{id:c,force:p,block:j})},[]),w=o.devices[s.ieee_address]?.availability,R=l.useMemo(()=>{const t=s.definition?.description?ae.exec(s.definition?.description):void 0;if(t){const[,c,p]=t;return e.jsx(f,{target:"_blank",rel:"noopener noreferrer",to:p,className:"link link-hover",children:c})}return e.jsx(e.Fragment,{children:s.definition?.description})},[s.definition]),T=l.useMemo(()=>{switch(s.interview_state){case v.Pending:return e.jsx(b,{icon:y,className:"text-info"});case v.InProgress:return e.jsx(b,{icon:y,spin:!0,className:"text-info"});case v.Successful:return e.jsx(b,{icon:M,className:"text-success"});default:return e.jsx(b,{icon:O,beat:!0,className:"text-error"})}},[s.interview_state]);return e.jsxs("div",{className:"card lg:card-side bg-base-100",children:[e.jsx("figure",{className:"w-64 h-64",style:{overflow:"visible"},children:e.jsx(K,{device:s,otaState:d.update?.state,disabled:s.disabled})}),e.jsxs("div",{className:"card-body",children:[e.jsxs("h2",{className:"card-title",children:[s.friendly_name,e.jsx(W,{sourceIdx:a,name:s.friendly_name,renameDevice:g,homeassistantEnabled:r,style:"btn-link btn-sm btn-square"})]}),e.jsxs("div",{className:"flex flex-row flex-wrap gap-2",children:[e.jsxs("span",{className:`badge ${s.definition?ie[s.definition.source]:""}`,children:[e.jsx(Y,{name:"supported",value:s.supported}),s.definition?`: ${s.definition.source}`:""]}),!s.supported&&e.jsx("span",{className:"badge animate-bounce",children:e.jsx(f,{target:"_blank",rel:"noopener noreferrer",to:I,className:"link link-hover",children:i(t=>t.how_to_add_support)})}),s.definition?.source==="external"&&e.jsx("span",{className:"badge animate-bounce",children:e.jsx(re,{device:s})}),e.jsxs("span",{className:"badge opacity-70",title:s.interview_state,children:[i(t=>t.interview_state),": ",T]})]}),e.jsxs("div",{children:[e.jsx("pre",{className:"inline text-wrap break-all",children:s.description||""}),e.jsx(te,{device:s,setDeviceDescription:D})]}),e.jsxs("div",{className:"stats stats-vertical lg:stats-horizontal shadow",children:[e.jsxs("div",{className:"stat",children:[e.jsx("div",{className:"stat-title",children:s.type}),e.jsx("div",{className:"stat-value text-xl",title:i(t=>t.ieee_address),children:s.ieee_address}),e.jsx("div",{className:"stat-value text-xl",title:i(t=>t.network_address_hex),children:z(s.network_address)}),e.jsxs("div",{className:"stat-desc",children:[i(t=>t.network_address_dec),": ",s.network_address]})]}),e.jsxs("div",{className:"stat",children:[e.jsx("div",{className:"stat-title",children:i(t=>t.last_seen)}),e.jsx("div",{className:"stat-value text-xl",children:e.jsx(Q,{config:o.advanced.last_seen,lastSeen:d.last_seen})}),e.jsxs("div",{className:"stat-desc",children:[i(t=>t.availability,{ns:"availability"}),": ",e.jsx(B,{availability:m[s.friendly_name]?.state??"offline",disabled:s.disabled,availabilityFeatureEnabled:o.availability.enabled,availabilityEnabledForDevice:w!=null?!!w:void 0})]})]}),e.jsxs("div",{className:"stat",children:[e.jsx("div",{className:"stat-title",children:i(t=>t.power)}),e.jsx("div",{className:"stat-value text-xl",children:e.jsx(ee,{showLevel:!0,device:s,batteryPercent:d.battery,batteryState:d.battery_state,batteryLow:d.battery_low})}),e.jsx("div",{className:"stat-desc",children:s.type==="GreenPower"?"GreenPower":i(t=>t[G(s.power_source)]||t.unknown)})]}),e.jsxs("div",{className:"stat",children:[e.jsx("div",{className:"stat-title",children:i(t=>t.firmware_id)}),e.jsx("div",{className:"stat-value text-xl",children:s.software_build_id||i(t=>t.unknown)}),e.jsx("div",{className:"stat-desc",children:s.date_code||i(t=>t.unknown)})]})]}),e.jsxs("div",{className:"stats stats-vertical lg:stats-horizontal shadow",children:[e.jsxs("div",{className:"stat",children:[e.jsx("div",{className:"stat-title",children:i(t=>t.zigbee_model)}),e.jsx("div",{className:"stat-value text-xl",children:s.model_id}),e.jsxs("div",{className:"stat-desc",children:[s.manufacturer," (",R,")"]})]}),e.jsxs("div",{className:"stat",children:[e.jsx("div",{className:"stat-title",children:i(t=>t.model)}),e.jsx("div",{className:"stat-value text-xl",children:e.jsx(X,{device:s})}),e.jsx("div",{className:"stat-desc",children:e.jsx(Z,{device:s})})]})]}),e.jsxs("div",{className:"stats stats-vertical lg:stats-horizontal shadow",children:[e.jsxs("div",{className:"stat",children:[e.jsx("div",{className:"stat-title",children:"MQTT"}),e.jsxs("div",{className:"stat-value text-xl",children:[o.mqtt.base_topic,"/",s.friendly_name]})]}),H&&e.jsxs("div",{className:"stat",children:[e.jsx("div",{className:"stat-title",children:i(t=>t.source,{ns:"common"})}),e.jsx("div",{className:"stat-value text-xl",children:e.jsx(q,{idx:a,alwaysShowName:!0})}),e.jsx("div",{className:"stat-desc",children:F[a]})]})]}),e.jsxs("div",{className:"card-actions justify-end mt-2",children:[e.jsx(le,{sourceIdx:a,device:s}),e.jsx(V,{sourceIdx:a,device:s,otaState:d.update?.state,homeassistantEnabled:r,renameDevice:g,configureDevice:$,interviewDevice:C,removeDevice:L})]})]})]})}export{Se as default};