iobroker.govee-smart 2.35.2 → 2.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -24
- package/admin/custom/assets/{Components-88o3n-Cm.js → Components-DWq4U-Jh.js} +1 -1
- package/admin/custom/assets/{ExpertPanel-BnVeJBS6.js → ExpertPanel-DoLtERNi.js} +1 -1
- package/admin/custom/assets/{index-C-fBGUPX.js → index-Bnpfk677.js} +1 -1
- package/admin/custom/assets/{mf-entry-bootstrap-0-0502dc7c.js → mf-entry-bootstrap-0-1362c6f5.js} +1 -1
- package/admin/custom/assets/virtualExposes-ChPmNKIy.js +1 -0
- package/admin/custom/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomGoveeSegmentSet__customComponents_js-TmDuENES.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomGoveeSegmentSet__customComponents_js-8hDFWCL-.js} +1 -1
- package/admin/custom/assets/virtual_mf-exposes-ssr___mfe_internal__ConfigCustomGoveeSegmentSet__customComponents_js-DdZDMvDY.js +2 -0
- package/admin/custom/assets/{virtual_mf-exposes___mfe_internal__ConfigCustomGoveeSegmentSet__customComponents_js-DtuKK_L7.js → virtual_mf-exposes___mfe_internal__ConfigCustomGoveeSegmentSet__customComponents_js-BjyhzC0c.js} +2 -2
- package/admin/custom/customComponents.js +1 -1
- package/admin/custom/mf-manifest.json +1 -1
- package/admin/i18n/de.json +20 -5
- package/admin/i18n/en.json +20 -5
- package/admin/i18n/es.json +20 -5
- package/admin/i18n/fr.json +20 -5
- package/admin/i18n/it.json +20 -5
- package/admin/i18n/nl.json +20 -5
- package/admin/i18n/pl.json +20 -5
- package/admin/i18n/pt.json +20 -5
- package/admin/i18n/ru.json +20 -5
- package/admin/i18n/uk.json +20 -5
- package/admin/i18n/zh-cn.json +20 -5
- package/admin/jsonConfig.json +16 -3
- package/build/lib/capability-mapper.js +27 -3
- package/build/lib/capability-mapper.js.map +2 -2
- package/build/lib/command-router.js +24 -25
- package/build/lib/command-router.js.map +2 -2
- package/build/lib/device-icons.js +10 -10
- package/build/lib/device-icons.js.map +2 -2
- package/build/lib/device-manager.js +4 -2
- package/build/lib/device-manager.js.map +2 -2
- package/build/lib/govee-lan-client.js +3 -3
- package/build/lib/govee-lan-client.js.map +2 -2
- package/build/lib/group-fanout.js +8 -6
- package/build/lib/group-fanout.js.map +2 -2
- package/build/lib/handlers/cloud-state-loader.js +1 -1
- package/build/lib/handlers/cloud-state-loader.js.map +2 -2
- package/build/lib/handlers/device-events.js +3 -2
- package/build/lib/handlers/device-events.js.map +2 -2
- package/build/lib/handlers/diagnostics-handler.js +3 -14
- package/build/lib/handlers/diagnostics-handler.js.map +2 -2
- package/build/lib/handlers/group-fanout-handler.js.map +1 -1
- package/build/lib/handlers/state-change-router.js +14 -6
- package/build/lib/handlers/state-change-router.js.map +2 -2
- package/build/lib/local-snapshots.js +202 -39
- package/build/lib/local-snapshots.js.map +2 -2
- package/build/lib/native-key-migration.js +73 -0
- package/build/lib/native-key-migration.js.map +7 -0
- package/build/lib/rate-limiter.js +1 -1
- package/build/lib/rate-limiter.js.map +1 -1
- package/build/lib/segment-wizard.js +34 -7
- package/build/lib/segment-wizard.js.map +2 -2
- package/build/lib/state-manager.js +48 -7
- package/build/lib/state-manager.js.map +2 -2
- package/build/lib/timing-constants.js +0 -3
- package/build/lib/timing-constants.js.map +2 -2
- package/build/lib/types.js.map +2 -2
- package/build/main.js +60 -76
- package/build/main.js.map +3 -3
- package/io-package.json +29 -72
- package/package.json +2 -2
- package/admin/custom/assets/virtualExposes-DcvC5fsO.js +0 -1
- package/admin/custom/assets/virtual_mf-exposes-ssr___mfe_internal__ConfigCustomGoveeSegmentSet__customComponents_js-CaQ3vGFP.js +0 -2
package/README.md
CHANGED
|
@@ -103,6 +103,28 @@ This adapter's MQTT authentication and BLE-over-LAN (ptReal) protocol implementa
|
|
|
103
103
|
### **WORK IN PROGRESS**
|
|
104
104
|
-->
|
|
105
105
|
|
|
106
|
+
### 2.37.0 (2026-09-15)
|
|
107
|
+
|
|
108
|
+
- Changed: The two folders "snapshots" and "diagnostics" at the top of the object tree are gone — a saved local snapshot is kept with its device, and no diagnostics report is stored any more
|
|
109
|
+
- Changed: A diagnostics report is generated and downloaded from the Expert tab only — the adapter keeps no copy in the instance, and the copies left by earlier versions are removed at the first start
|
|
110
|
+
- Changed: Local snapshots saved by earlier versions are carried over into their device objects at the first start, so nothing you saved is lost when the folder disappears
|
|
111
|
+
- Fixed: The instance settings open on the Configuration tab again — the admin remembered the last tab you used, and once you had visited the Expert tab every later visit started there
|
|
112
|
+
- Fixed: The device icons in the object tree are visible on the dark themes again — they were drawn in plain black, invisible on a dark background, and now take the row's text colour
|
|
113
|
+
- Fixed: A group's "membersUnreachable" datapoint is created together with the group — it used to appear only with the first reachability check, up to 20 seconds after the rest of the group
|
|
114
|
+
- Changed: The admin warns when another adapter on the same host takes the LAN port 4002 — the port shows as a fixed field in the adapter settings next to the network interface
|
|
115
|
+
|
|
116
|
+
### 2.36.0 (2026-09-14)
|
|
117
|
+
|
|
118
|
+
- Fixed: A command the adapter could not send is no longer confirmed — no cloud connection, or a light reachable on neither channel — the datapoint used to claim the device had taken the value
|
|
119
|
+
- Fixed: Music sensitivity and auto-colour are no longer confirmed on a light or group that cannot apply them — the datapoint keeps the old value and the log says why, instead of claiming success
|
|
120
|
+
- Fixed: The segment wizard restores the brightness the strip had before it ran — it turns the strip to full while measuring, and a dimmed strip stayed bright afterwards
|
|
121
|
+
- Fixed: The segment wizard no longer stays locked for five minutes when the strip cannot be reached at start — it stops with the reason, and can be started again right away
|
|
122
|
+
- Fixed: Sensor values update again on an installation that removed its API key but kept the Govee account — they had frozen at the last reading, and the adapter took a minute to report ready
|
|
123
|
+
- Changed: A sensor reading that has not changed is no longer written again every two minutes — the datapoint keeps its timestamp until the value itself changes
|
|
124
|
+
- Changed: The three summary datapoints under `info` exist right after the start instead of appearing twenty seconds later
|
|
125
|
+
- New: Seven datapoints real devices report now carry a translated name — main light, background light, fan, fan speed, reverse airflow, pillar light and base light
|
|
126
|
+
- New: Explanations where the name alone does not say it — reverse airflow, pillar and base light, warm mist, the preset-scene dropdown and the unreachable members of a group
|
|
127
|
+
|
|
106
128
|
### 2.35.2 (2026-09-11)
|
|
107
129
|
|
|
108
130
|
- Fixed: A light that is unplugged no longer shows as switched on after a start — Govee's answer for a device it cannot reach carries the values of the last contact, and those are no longer written
|
|
@@ -124,30 +146,6 @@ This adapter's MQTT authentication and BLE-over-LAN (ptReal) protocol implementa
|
|
|
124
146
|
- Fixed: The filter life of an air purifier now carries its unit (%) — Govee declares none, and the datapoint had no unit since its first version
|
|
125
147
|
- Changed: The DreamView switch, the music auto-colour switch and the DIY-scene selector now carry an explanation in the object tree
|
|
126
148
|
|
|
127
|
-
### 2.34.0 (2026-09-10)
|
|
128
|
-
|
|
129
|
-
- Fixed: Air purifiers, heaters, humidifiers and fans — choosing a mode or a speed now reaches the device, where the adapter used to send a value Govee rejected as "Invalid parameter type" (#47)
|
|
130
|
-
- Fixed: The speed selector of an air purifier now offers the levels the device actually has, instead of the single unusable entry it showed before (#47)
|
|
131
|
-
- Fixed: On an appliance updating from an older version the level datapoint accepts values again — it kept the selection list of the previous version and refused every write against it
|
|
132
|
-
- Changed: On appliances whose modes share the same level numbers — kettles, some fans and humidifiers — the level is a plain number now; a selection list could only ever show one mode's levels
|
|
133
|
-
- Fixed: An installation with no light at all now reads its device states at start — filter life, air quality and every other reported value stayed empty forever (#47)
|
|
134
|
-
- Fixed: A heater's target temperature is sent in the shape the Govee API asks for, and the datapoint is labelled in the unit the heater itself reports — a 5–30 °C heater used to read °F
|
|
135
|
-
- Fixed: The current speed level now arrives from the cloud together with the mode — until now only the mode updated while the level datapoint kept showing its default
|
|
136
|
-
- Fixed: A command the Govee cloud rejects no longer counts as successful, so the datapoint stops showing a change the device never made, and the reason is named
|
|
137
|
-
- New: A device's night-light scene is selectable — the adapter received the scene list and the current scene from Govee and threw both away without creating a datapoint
|
|
138
|
-
- Fixed: The scene dropdown's "---" entry now carries the same value the adapter writes when it resets the dropdown, so the entry stopped being rewritten on every start
|
|
139
|
-
- New: The H7127 air purifier is confirmed by a user report — it is no longer listed as untested and no longer asks for the experimental switch at start
|
|
140
|
-
- Changed: The diagnostics report no longer repeats the privacy note the export button already shows, and says instead what only the file itself can say
|
|
141
|
-
|
|
142
|
-
### 2.33.0 (2026-09-08)
|
|
143
|
-
|
|
144
|
-
- Fixed: A light without a local API stays reachable while it reports its own state — Govee's device list lagged behind the bulb and overrode it every two minutes (reported for the H600D)
|
|
145
|
-
- Fixed: A status message the Govee cloud replays after a reconnect no longer counts as a fresh sign of life for the next half hour
|
|
146
|
-
- New: The H600D GU10 smart bulb is recognised from a user report
|
|
147
|
-
- New: 486 more Govee models start as experimental — every model the homebridge-govee project lists as of September 2026, from bulbs and strips to fans, heaters and ice makers
|
|
148
|
-
- New: An experimental model is tried by enabling "experimental device support"; a diagnostics report from the Expert tab confirms it for everyone
|
|
149
|
-
- Changed: The wiki's device list folds each device type into one block with its counts, so 602 entries stay readable
|
|
150
|
-
|
|
151
149
|
[Older changelogs can be found there](CHANGELOG_OLD.md)
|
|
152
150
|
|
|
153
151
|
## Support
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-Bh78u5iG.js";import{ho as t,za as n}from"./_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BqaV2gc_.js";import{n as r,t as i}from"./ExpertPanel-
|
|
1
|
+
import{t as e}from"./_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-Bh78u5iG.js";import{ho as t,za as n}from"./_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BqaV2gc_.js";import{n as r,t as i}from"./ExpertPanel-DoLtERNi.js";t();var a=class extends e{renderItem(t,i){let a=this.props.oContext,o=`${a.adapterName}.${a.instance}`,s=t=>{let n=e.getValue(this.props.data,t);return typeof n==`string`?n:``};return n(r,{socket:a.socket,namespace:o,values:{apiKey:s(`apiKey`),email:s(`goveeEmail`),password:s(`goveePassword`),code:s(`mqttVerificationCode`)},onChange:(e,t)=>void this.onChange(e,t)})}};t();var o={ConnectionConfig:a,ExpertConfig:class extends e{renderItem(e,t){let r=this.props.oContext,a=`${r.adapterName}.${r.instance}`;return n(i,{socket:r.socket,namespace:a})}}};export{o as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Ba as e,Bi as t,Di as n,Kr as r,Mi as i,Qr as a,Ra as o,Ri as s,Ti as c,Xr as l,Ya as u,an as d,ei as f,fi as p,gi as m,ho as h,ii as g,oi as _,xi as v,za as y}from"./_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BqaV2gc_.js";h();function b(e,t){let n=(n,r)=>e.sendTo(t,`mqttAuth`,{action:n,email:r.email,password:r.password,code:r.code});return{testLogin:e=>n(`test`,e),requestCode:e=>n(`requestCode`,e)}}function x(e,t){let[n,r]=u.useState({cloud:!1,mqtt:!1,verifyPending:!1});return u.useEffect(()=>{if(!e)return;let n=`${t}.info.cloudConnected`,i=`${t}.info.mqttConnected`,a=`${t}.info.verificationPending`,o=!0,s=(e,t)=>{o&&r(e=>({...e,cloud:!!(t!=null&&t.val)}))},c=(e,t)=>{o&&r(e=>({...e,mqtt:!!(t!=null&&t.val)}))},l=(e,t)=>{o&&r(e=>({...e,verifyPending:!!(t!=null&&t.val)}))};return Promise.resolve(e.getState(n)).then(e=>s(n,e)).catch(()=>void 0),Promise.resolve(e.getState(i)).then(e=>c(i,e)).catch(()=>void 0),Promise.resolve(e.getState(a)).then(e=>l(a,e)).catch(()=>void 0),Promise.resolve(e.subscribeState(n,s)).catch(()=>void 0),Promise.resolve(e.subscribeState(i,c)).catch(()=>void 0),Promise.resolve(e.subscribeState(a,l)).catch(()=>void 0),()=>{o=!1,e.unsubscribeState(n,s),e.unsubscribeState(i,c),e.unsubscribeState(a,l)}},[e,t]),n}function S(e){switch(e){case`ok`:return`success`;case`verifyRequired`:case`codeSent`:return`info`;case`codeInvalid`:case`codeRejected`:case`needCredentials`:case`throttled`:return`warning`;default:return`error`}}function C(e){return e===`verifyRequired`||e===`codeSent`||e===`codeInvalid`||e===`codeRejected`}function w({on:e,testId:t}){return y(a,{component:`span`,"data-testid":t,"data-on":e?`true`:`false`,sx:{display:`inline-block`,width:12,height:12,borderRadius:`50%`,flexShrink:0,bgcolor:e?`success.main`:`action.disabled`}})}function T(n){let{socket:i,namespace:o,values:s,onChange:c}=n,{apiKey:m,email:h,password:T,code:E}=s,D=u.useMemo(()=>b(i,o),[i,o]),O=x(i,o),[k,A]=u.useState(``),[j,M]=u.useState(null),[N,P]=u.useState(!1),[F,I]=u.useState({apiKey:m,email:h,password:T,code:E});u.useEffect(()=>{I(e=>{let t={...e},n=!1;return e.apiKey!==m&&(t.apiKey=m,n=!0),e.email!==h&&(t.email=h,n=!0),e.password!==T&&(t.password=T,n=!0),e.code!==E&&(t.code=E,n=!0),n?t:e})},[m,h,T,E]);let L=(e,t,n)=>{I(e=>({...e,[t]:n})),c(e,n)};u.useEffect(()=>{O.verifyPending&&P(!0)},[O.verifyPending]);let R=(e,...t)=>d.t(e,...t),z=e=>{M({status:e,text:R(`gsw_conn_st_${e}`)}),C(e)&&P(!0)},B=async()=>{A(`login`);try{let e=await D.testLogin({email:F.email,password:F.password,code:F.code});z(e.status)}catch{z(`loginFailed`)}finally{A(``)}},V=async()=>{A(`code`);try{let e=await D.requestCode({email:F.email,password:F.password});z(e.status)}catch{z(`loginFailed`)}finally{A(``)}},H=F.email.trim()!==``&&F.password.trim()!==``;return e(a,{sx:{maxWidth:640},children:[e(t,{direction:`row`,spacing:1.5,sx:{py:1,alignItems:`center`},children:[y(w,{on:!0,testId:`dot-lan`}),e(a,{children:[y(l,{variant:`subtitle2`,children:R(`gsw_conn_lan_title`)}),y(l,{variant:`body2`,color:`text.secondary`,children:R(`gsw_conn_lan_desc`)})]})]}),y(p,{}),e(t,{direction:`row`,spacing:1.5,sx:{py:1.5,alignItems:`flex-start`},children:[y(a,{sx:{pt:1},children:y(w,{on:O.cloud,testId:`dot-cloud`})}),e(a,{sx:{flexGrow:1},children:[y(l,{variant:`subtitle2`,children:R(`gsw_conn_cloud_title`)}),y(l,{variant:`body2`,color:`text.secondary`,sx:{mb:1},children:R(`gsw_conn_cloud_desc`)}),y(r,{fullWidth:!0,size:`small`,type:`password`,label:R(`gsw_conn_apikey_label`),value:F.apiKey,onChange:e=>L(`apiKey`,`apiKey`,e.target.value),slotProps:{htmlInput:{"data-testid":`conn-apikey`}},autoComplete:`off`})]})]}),y(p,{}),e(t,{direction:`row`,spacing:1.5,sx:{py:1.5,alignItems:`flex-start`},children:[y(a,{sx:{pt:1},children:y(w,{on:O.mqtt,testId:`dot-mqtt`})}),e(a,{sx:{flexGrow:1},children:[y(l,{variant:`subtitle2`,children:R(`gsw_conn_rt_title`)}),y(l,{variant:`body2`,color:`text.secondary`,sx:{mb:1},children:R(`gsw_conn_rt_desc`)}),e(t,{spacing:1,children:[y(r,{fullWidth:!0,size:`small`,label:R(`gsw_conn_email_label`),value:F.email,onChange:e=>L(`goveeEmail`,`email`,e.target.value),slotProps:{htmlInput:{"data-testid":`conn-email`}},autoComplete:`off`}),y(r,{fullWidth:!0,size:`small`,type:`password`,label:R(`gsw_conn_password_label`),value:F.password,onChange:e=>L(`goveePassword`,`password`,e.target.value),slotProps:{htmlInput:{"data-testid":`conn-password`}},autoComplete:`off`}),y(a,{children:y(f,{variant:`contained`,size:`small`,"data-testid":`conn-connect`,disabled:!H||k!==``,onClick:()=>void B(),startIcon:k===`login`?y(g,{size:16,color:`inherit`}):void 0,children:R(`gsw_conn_connect_btn`)})}),y(_,{in:N,unmountOnExit:!0,children:e(t,{spacing:1,sx:{mt:1,pl:1,borderLeft:`2px solid`,borderColor:`divider`},children:[y(l,{variant:`body2`,color:`text.secondary`,children:R(`gsw_conn_2fa_hint`)}),y(r,{fullWidth:!0,size:`small`,label:R(`gsw_conn_code_label`),value:F.code,onChange:e=>L(`mqttVerificationCode`,`code`,e.target.value),slotProps:{htmlInput:{maxLength:8}},autoComplete:`off`}),e(t,{direction:`row`,spacing:1,children:[y(f,{variant:`outlined`,size:`small`,disabled:!H||k!==``,onClick:()=>void V(),startIcon:k===`code`?y(g,{size:16,color:`inherit`}):void 0,children:R(`gsw_conn_request_btn`)}),y(f,{variant:`contained`,size:`small`,disabled:!H||F.code.trim()===``||k!==``,onClick:()=>void B(),startIcon:k===`login`?y(g,{size:16,color:`inherit`}):void 0,children:R(`gsw_conn_verify_btn`)})]})]})})]})]})]}),j&&y(v,{severity:S(j.status),sx:{mt:1},onClose:()=>M(null),children:j.text})]})}var E=class extends Error{};function D(e,t){return{async listDevices(){let n;try{n=await e.sendTo(t,`diagnostics`,{action:`list`})}catch(e){throw new E(e instanceof Error?e.message:String(e))}let r=n==null?void 0:n.devices;if(!Array.isArray(r))throw new E(`The adapter did not answer with a device list`);return r}}}function O(e){return e.filter(e=>e.online&&e.segments>0)}h();var k=4e3;function A(e,t){let n=u.useMemo(()=>D(e,t),[e,t]),[r,i]=u.useState({status:`loading`,slow:!1});return u.useEffect(()=>{let e=!0;i({status:`loading`,slow:!1});let t=setTimeout(()=>{i(e=>e.status===`loading`?{status:`loading`,slow:!0}:e)},k);return n.listDevices().then(t=>{e&&i({status:`ready`,devices:t})}).catch(t=>{e&&i({status:`failed`,message:t instanceof E&&t.message?t.message:d.t(`gsw_listFailed`)})}),()=>{e=!1,clearTimeout(t)}},[n]),r}function j({state:n}){return n.status===`loading`?y(a,{sx:{p:2},children:e(t,{direction:`row`,spacing:2,sx:{alignItems:`center`},children:[y(g,{size:24}),e(a,{children:[y(l,{variant:`body2`,children:d.t(`gsw_loadingDevices`)}),n.slow?y(l,{variant:`caption`,color:`text.secondary`,"data-testid":`list-slow-hint`,children:d.t(`gsw_loadingDevicesSlow`)}):null]})]})}):n.status===`failed`?y(a,{sx:{p:2},children:y(v,{severity:`error`,"data-testid":`list-failed`,children:n.message})}):null}function M(e){return typeof e.fileName==`string`}function N(e,t){return{exportReport(n){return e.sendTo(t,`diagnostics`,{action:`export`,device:n})}}}h();function P(e,t){let n=URL.createObjectURL(new Blob([t],{type:`application/json`})),r=document.createElement(`a`);r.href=n,r.download=e,document.body.appendChild(r),r.click(),r.remove(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}function F({socket:r,namespace:p}){let h=u.useMemo(()=>N(r,p),[r,p]),_=A(r,p),[b,x]=u.useState(``),[S,C]=u.useState(!1),[w,T]=u.useState(``),[E,D]=u.useState(``),O=_.status===`ready`?_.devices:[];u.useEffect(()=>{O.length===1&&x(O[0].value)},[O]);let k=u.useCallback(()=>{C(!0),T(``),D(``),h.exportReport(b).then(e=>{M(e)?(P(e.fileName,e.content),D(e.fileName)):T(e.error)}).catch(()=>T(d.t(`gsw_diagExportFailed`))).finally(()=>C(!1))},[h,b]);return _.status===`ready`?y(a,{sx:{p:2,maxWidth:720},children:e(t,{spacing:2,children:[y(l,{variant:`body2`,children:d.t(`gsw_diagIntro`)}),O.length===0?y(v,{severity:`info`,"data-testid":`diag-no-devices`,children:d.t(`gsw_diagNoDevices`)}):e(o,{children:[e(m,{fullWidth:!0,children:[y(c,{id:`gsw-diag-device`,children:d.t(`gsw_diagDevice`)}),y(s,{"data-testid":`diag-device-select`,labelId:`gsw-diag-device`,label:d.t(`gsw_diagDevice`),value:b,onChange:e=>x(String(e.target.value)),children:O.map(e=>y(i,{value:e.value,children:e.label},e.value))})]}),y(a,{children:y(f,{"data-testid":`diag-export`,variant:`contained`,disabled:!b||S,onClick:k,startIcon:S?y(g,{size:16}):void 0,children:d.t(`gsw_diagExport`)})})]}),E?e(v,{severity:`success`,children:[d.t(`gsw_diagDone`,E),` `,y(n,{href:`https://github.com/krobipd/ioBroker.govee-smart/issues/new/choose`,target:`_blank`,rel:`noreferrer`,children:d.t(`gsw_diagOpenIssue`)})]}):null,w?y(v,{severity:`error`,children:w}):null,y(l,{variant:`caption`,color:`text.secondary`,children:d.t(`gsw_diagPrivacy`)})]})}):y(j,{state:_})}h();var I={confirmed:{bgcolor:`success.main`,color:`success.contrastText`},flashing:{bgcolor:`warning.light`,color:`#000`,boxShadow:3},gap:{bgcolor:`error.main`,color:`error.contrastText`},open:{bgcolor:`action.disabledBackground`,color:`text.secondary`}};function L(e,t,n,r){return n===e?`flashing`:t.has(e)?`confirmed`:r.has(e)?`gap`:`open`}function R(e){let{total:t,confirmed:n,flashing:r,gaps:i,editable:o,onToggle:s}=e,c=new Set(n),l=new Set(i);return y(a,{sx:{display:`flex`,flexWrap:`wrap`,gap:.5},children:Array.from({length:Math.max(0,t)},(e,t)=>{let n=L(t,c,r,l);return y(a,{"data-testid":`seg-cell-${t}`,className:`seg-cell ${n}`,onClick:o?()=>s==null?void 0:s(t):void 0,sx:{width:34,height:34,display:`flex`,alignItems:`center`,justifyContent:`center`,borderRadius:1,fontSize:12,userSelect:`none`,cursor:o?`pointer`:`default`,...I[n]},children:t},t)})})}function z(e,t){let n=``,r=(n,r,i)=>{let a={action:n,device:r};return i&&(a.indices=i),e.sendTo(t,`segmentWizard`,a)};return{start(e){return n=e,r(`start`,e)},yes:()=>r(`yes`,n),no:()=>r(`no`,n),abort:()=>r(`abort`,n),apply:(e,t)=>r(`apply`,e,t)}}h();function B(e,t){let n=new Set(t),r=[];for(let t=0;t<e;t++)n.has(t)||r.push(t);return r}function V(n){let r=u.useMemo(()=>z(n.socket,n.namespace),[n.socket,n.namespace]),o=A(n.socket,n.namespace),p=u.useMemo(()=>o.status===`ready`?O(o.devices):[],[o]),[h,g]=u.useState(`select`),[_,b]=u.useState(``),[x,S]=u.useState(null),[C,w]=u.useState(0),[T,E]=u.useState([]),[D,k]=u.useState(0),[M,N]=u.useState(``);u.useEffect(()=>{b(p.length?p[0].value:``)},[p]);let P=()=>{S(null),g(`select`)},F=e=>e.error?(N(e.error),P(),!0):e.aborted?(N(``),P(),!0):e.applied||e.done?(k(e.segmentCount??0),S(null),g(`success`),!0):(N(``),e.snapshot&&S(e.snapshot),!1),I=async()=>{if(!_)return;N(``);let e=await r.start(_);F(e)||g(`measure`)},L=async e=>{F(await(e?r.yes():r.no()))},V=()=>{let e=x;if(!e||e.currentIndex<1)return;let t=e.currentIndex;w(t),E(e.confirmed.filter(e=>e<t).sort((e,t)=>e-t)),g(`review`)},H=e=>{E(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e].sort((e,t)=>e-t))},U=async()=>{T.length&&F(await r.apply(_,T))},W=async()=>{await r.abort();let e=await r.start(_);F(e)||g(`measure`)},G=async()=>{await r.abort(),P()},K=()=>{N(``),g(`select`)},q=M?y(v,{severity:`error`,"data-testid":`wiz-error`,sx:{mb:2},children:d.t(`gsw_error`,M)}):null;if(o.status!==`ready`)return y(j,{state:o});if(h===`select`)return e(a,{sx:{maxWidth:520},children:[q,p.length===0?y(v,{severity:`info`,"data-testid":`wiz-no-devices`,children:d.t(`gsw_noDevices`)}):e(t,{spacing:2,children:[e(m,{fullWidth:!0,children:[y(c,{children:d.t(`gsw_deviceLabel`)}),y(s,{"data-testid":`wiz-device-select`,value:_,label:d.t(`gsw_deviceLabel`),onChange:e=>b(e.target.value),children:p.map(e=>y(i,{value:e.value,children:d.t(`gsw_deviceOption`,e.label,String(e.segments))},e.value))})]}),y(a,{children:y(f,{variant:`contained`,"data-testid":`wiz-start`,disabled:!_,onClick:()=>void I(),children:d.t(`gsw_start`)})})]})]});if(h===`measure`&&x){let n=x.currentIndex;return e(a,{sx:{maxWidth:520},children:[y(l,{variant:`h6`,sx:{mb:1},children:d.t(`gsw_measureHint`)}),y(R,{total:n+1,confirmed:x.confirmed,flashing:n,gaps:B(n,x.confirmed),editable:!1}),y(l,{sx:{my:2},children:d.t(`gsw_question`,n)}),e(t,{direction:`row`,spacing:1,sx:{flexWrap:`wrap`},useFlexGap:!0,children:[y(f,{variant:`contained`,color:`success`,"data-testid":`wiz-lit`,onClick:()=>void L(!0),children:d.t(`gsw_lit`)}),y(f,{variant:`outlined`,"data-testid":`wiz-dark`,onClick:()=>void L(!1),children:d.t(`gsw_dark`)}),y(f,{variant:`contained`,"data-testid":`wiz-finish`,disabled:n<1,onClick:V,children:d.t(`gsw_finish`)}),y(f,{variant:`text`,color:`secondary`,"data-testid":`wiz-cancel`,onClick:()=>void G(),children:d.t(`gsw_cancel`)})]})]})}if(h===`review`){let n=T.length?Math.max(...T)+1:0,r=n-T.length,i=r>0?d.t(`gsw_resultGaps`,n,r):d.t(`gsw_resultNoGaps`,n);return e(a,{sx:{maxWidth:520},children:[y(l,{variant:`h6`,sx:{mb:1},children:i}),y(l,{variant:`body2`,sx:{mb:1,opacity:.8},children:d.t(`gsw_reviewHint`)}),y(R,{total:C,confirmed:T,flashing:null,gaps:B(C,T),editable:!0,onToggle:H}),e(t,{direction:`row`,spacing:1,sx:{mt:2,flexWrap:`wrap`},useFlexGap:!0,children:[y(f,{variant:`contained`,"data-testid":`wiz-apply`,disabled:!T.length,onClick:()=>void U(),children:d.t(`gsw_apply`)}),y(f,{variant:`outlined`,"data-testid":`wiz-remeasure`,onClick:()=>void W(),children:d.t(`gsw_remeasure`)}),y(f,{variant:`text`,color:`secondary`,"data-testid":`wiz-cancel`,onClick:()=>void G(),children:d.t(`gsw_cancel`)})]})]})}return e(a,{sx:{maxWidth:520},"data-testid":`wiz-success`,children:[y(v,{severity:`success`,sx:{mb:2},children:d.t(`gsw_applied`,D)}),y(f,{variant:`contained`,"data-testid":`wiz-close`,onClick:K,children:d.t(`gsw_close`)})]})}h();function H({socket:n,namespace:r}){let[i,o]=u.useState(`wizard`);return y(a,{sx:{p:2},children:e(t,{spacing:2,children:[y(l,{variant:`body2`,children:d.t(`gsw_expertIntro`)}),e(t,{direction:`row`,spacing:1,sx:{flexWrap:`wrap`},children:[y(f,{"data-testid":`expert-tool-wizard`,variant:i===`wizard`?`contained`:`outlined`,onClick:()=>o(`wizard`),children:d.t(`gsw_expertWizard`)}),y(f,{"data-testid":`expert-tool-diagnostics`,variant:i===`diagnostics`?`contained`:`outlined`,onClick:()=>o(`diagnostics`),children:d.t(`gsw_expertDiagnostics`)})]}),y(i===`wizard`?V:F,{socket:n,namespace:r})]})})}export{T as n,H as t};
|
|
1
|
+
import{Ba as e,Bi as t,Di as n,Kr as r,Mi as i,Qr as a,Ra as o,Ri as s,Ti as c,Xr as l,Ya as u,an as d,ei as f,fi as p,gi as m,ho as h,ii as g,oi as _,xi as v,za as y}from"./_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BqaV2gc_.js";h();function b(e,t){let n=(n,r)=>e.sendTo(t,`mqttAuth`,{action:n,email:r.email,password:r.password,code:r.code});return{testLogin:e=>n(`test`,e),requestCode:e=>n(`requestCode`,e)}}function x(e,t){let[n,r]=u.useState({cloud:!1,mqtt:!1,verifyPending:!1});return u.useEffect(()=>{if(!e)return;let n=`${t}.info.cloudConnected`,i=`${t}.info.mqttConnected`,a=`${t}.info.verificationPending`,o=!0,s=(e,t)=>{o&&r(e=>({...e,cloud:!!(t!=null&&t.val)}))},c=(e,t)=>{o&&r(e=>({...e,mqtt:!!(t!=null&&t.val)}))},l=(e,t)=>{o&&r(e=>({...e,verifyPending:!!(t!=null&&t.val)}))};return Promise.resolve(e.getState(n)).then(e=>s(n,e)).catch(()=>void 0),Promise.resolve(e.getState(i)).then(e=>c(i,e)).catch(()=>void 0),Promise.resolve(e.getState(a)).then(e=>l(a,e)).catch(()=>void 0),Promise.resolve(e.subscribeState(n,s)).catch(()=>void 0),Promise.resolve(e.subscribeState(i,c)).catch(()=>void 0),Promise.resolve(e.subscribeState(a,l)).catch(()=>void 0),()=>{o=!1,e.unsubscribeState(n,s),e.unsubscribeState(i,c),e.unsubscribeState(a,l)}},[e,t]),n}function S(e){switch(e){case`ok`:return`success`;case`verifyRequired`:case`codeSent`:return`info`;case`codeInvalid`:case`codeRejected`:case`needCredentials`:case`throttled`:return`warning`;default:return`error`}}function C(e){return e===`verifyRequired`||e===`codeSent`||e===`codeInvalid`||e===`codeRejected`}function w({on:e,testId:t}){return y(a,{component:`span`,"data-testid":t,"data-on":e?`true`:`false`,sx:{display:`inline-block`,width:12,height:12,borderRadius:`50%`,flexShrink:0,bgcolor:e?`success.main`:`action.disabled`}})}function T(n){let{socket:i,namespace:o,values:s,onChange:c}=n,{apiKey:m,email:h,password:T,code:E}=s,D=u.useMemo(()=>b(i,o),[i,o]),O=x(i,o),[k,A]=u.useState(``),[j,M]=u.useState(null),[N,P]=u.useState(!1),[F,I]=u.useState({apiKey:m,email:h,password:T,code:E});u.useEffect(()=>{I(e=>{let t={...e},n=!1;return e.apiKey!==m&&(t.apiKey=m,n=!0),e.email!==h&&(t.email=h,n=!0),e.password!==T&&(t.password=T,n=!0),e.code!==E&&(t.code=E,n=!0),n?t:e})},[m,h,T,E]);let L=(e,t,n)=>{I(e=>({...e,[t]:n})),c(e,n)};u.useEffect(()=>{O.verifyPending&&P(!0)},[O.verifyPending]);let R=(e,...t)=>d.t(e,...t),z=e=>{M({status:e,text:R(`gsw_conn_st_${e}`)}),C(e)&&P(!0)},B=async()=>{A(`login`);try{let e=await D.testLogin({email:F.email,password:F.password,code:F.code});z(e.status)}catch{z(`loginFailed`)}finally{A(``)}},V=async()=>{A(`code`);try{let e=await D.requestCode({email:F.email,password:F.password});z(e.status)}catch{z(`loginFailed`)}finally{A(``)}},H=F.email.trim()!==``&&F.password.trim()!==``;return e(a,{sx:{maxWidth:640},children:[e(t,{direction:`row`,spacing:1.5,sx:{py:1,alignItems:`center`},children:[y(w,{on:!0,testId:`dot-lan`}),e(a,{children:[y(l,{variant:`subtitle2`,children:R(`gsw_conn_lan_title`)}),y(l,{variant:`body2`,color:`text.secondary`,children:R(`gsw_conn_lan_desc`)})]})]}),y(p,{}),e(t,{direction:`row`,spacing:1.5,sx:{py:1.5,alignItems:`flex-start`},children:[y(a,{sx:{pt:1},children:y(w,{on:O.cloud,testId:`dot-cloud`})}),e(a,{sx:{flexGrow:1},children:[y(l,{variant:`subtitle2`,children:R(`gsw_conn_cloud_title`)}),y(l,{variant:`body2`,color:`text.secondary`,sx:{mb:1},children:R(`gsw_conn_cloud_desc`)}),y(r,{fullWidth:!0,size:`small`,type:`password`,label:R(`gsw_conn_apikey_label`),value:F.apiKey,onChange:e=>L(`apiKey`,`apiKey`,e.target.value),slotProps:{htmlInput:{"data-testid":`conn-apikey`}},autoComplete:`off`})]})]}),y(p,{}),e(t,{direction:`row`,spacing:1.5,sx:{py:1.5,alignItems:`flex-start`},children:[y(a,{sx:{pt:1},children:y(w,{on:O.mqtt,testId:`dot-mqtt`})}),e(a,{sx:{flexGrow:1},children:[y(l,{variant:`subtitle2`,children:R(`gsw_conn_rt_title`)}),y(l,{variant:`body2`,color:`text.secondary`,sx:{mb:1},children:R(`gsw_conn_rt_desc`)}),e(t,{spacing:1,children:[y(r,{fullWidth:!0,size:`small`,label:R(`gsw_conn_email_label`),value:F.email,onChange:e=>L(`goveeEmail`,`email`,e.target.value),slotProps:{htmlInput:{"data-testid":`conn-email`}},autoComplete:`off`}),y(r,{fullWidth:!0,size:`small`,type:`password`,label:R(`gsw_conn_password_label`),value:F.password,onChange:e=>L(`goveePassword`,`password`,e.target.value),slotProps:{htmlInput:{"data-testid":`conn-password`}},autoComplete:`off`}),y(a,{children:y(f,{variant:`contained`,size:`small`,"data-testid":`conn-connect`,disabled:!H||k!==``,onClick:()=>void B(),startIcon:k===`login`?y(g,{size:16,color:`inherit`}):void 0,children:R(`gsw_conn_connect_btn`)})}),y(_,{in:N,unmountOnExit:!0,children:e(t,{spacing:1,sx:{mt:1,pl:1,borderLeft:`2px solid`,borderColor:`divider`},children:[y(l,{variant:`body2`,color:`text.secondary`,children:R(`gsw_conn_2fa_hint`)}),y(r,{fullWidth:!0,size:`small`,label:R(`gsw_conn_code_label`),value:F.code,onChange:e=>L(`mqttVerificationCode`,`code`,e.target.value),slotProps:{htmlInput:{maxLength:8}},autoComplete:`off`}),e(t,{direction:`row`,spacing:1,children:[y(f,{variant:`outlined`,size:`small`,disabled:!H||k!==``,onClick:()=>void V(),startIcon:k===`code`?y(g,{size:16,color:`inherit`}):void 0,children:R(`gsw_conn_request_btn`)}),y(f,{variant:`contained`,size:`small`,disabled:!H||F.code.trim()===``||k!==``,onClick:()=>void B(),startIcon:k===`login`?y(g,{size:16,color:`inherit`}):void 0,children:R(`gsw_conn_verify_btn`)})]})]})})]})]})]}),j&&y(v,{severity:S(j.status),sx:{mt:1},onClose:()=>M(null),children:j.text})]})}var E=class extends Error{};function D(e,t){return{async listDevices(){let n;try{n=await e.sendTo(t,`diagnostics`,{action:`list`})}catch(e){throw new E(e instanceof Error?e.message:String(e))}let r=n==null?void 0:n.devices;if(!Array.isArray(r))throw new E(`The adapter did not answer with a device list`);return r}}}function O(e){return e.filter(e=>e.online&&e.segments>0)}h();var k=4e3;function A(e,t){let n=u.useMemo(()=>D(e,t),[e,t]),[r,i]=u.useState({status:`loading`,slow:!1});return u.useEffect(()=>{let e=!0;i({status:`loading`,slow:!1});let t=setTimeout(()=>{i(e=>e.status===`loading`?{status:`loading`,slow:!0}:e)},k);return n.listDevices().then(t=>{e&&i({status:`ready`,devices:t})}).catch(t=>{e&&i({status:`failed`,message:t instanceof E&&t.message?t.message:d.t(`gsw_listFailed`)})}),()=>{e=!1,clearTimeout(t)}},[n]),r}function j({state:n}){return n.status===`loading`?y(a,{sx:{p:2},children:e(t,{direction:`row`,spacing:2,sx:{alignItems:`center`},children:[y(g,{size:24}),e(a,{children:[y(l,{variant:`body2`,children:d.t(`gsw_loadingDevices`)}),n.slow?y(l,{variant:`caption`,color:`text.secondary`,"data-testid":`list-slow-hint`,children:d.t(`gsw_loadingDevicesSlow`)}):null]})]})}):n.status===`failed`?y(a,{sx:{p:2},children:y(v,{severity:`error`,"data-testid":`list-failed`,children:n.message})}):null}function M(e){return typeof e.fileName==`string`}function N(e,t){return{exportReport(n){return e.sendTo(t,`diagnostics`,{action:`export`,device:n})}}}h();function P(e,t){let n=URL.createObjectURL(new Blob([t],{type:`application/json`})),r=document.createElement(`a`);r.href=n,r.download=e,document.body.appendChild(r),r.click(),r.remove(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}function F({socket:r,namespace:p}){let h=u.useMemo(()=>N(r,p),[r,p]),_=A(r,p),[b,x]=u.useState(``),[S,C]=u.useState(!1),[w,T]=u.useState(``),[E,D]=u.useState(``),O=_.status===`ready`?_.devices:[];u.useEffect(()=>{O.length===1&&x(O[0].value)},[O]);let k=u.useCallback(()=>{C(!0),T(``),D(``),h.exportReport(b).then(e=>{M(e)?(P(e.fileName,e.content),D(e.fileName)):T(e.error)}).catch(()=>T(d.t(`gsw_diagExportFailed`))).finally(()=>C(!1))},[h,b]);return _.status===`ready`?y(a,{sx:{p:2,maxWidth:720},children:e(t,{spacing:2,children:[y(l,{variant:`body2`,children:d.t(`gsw_diagIntro`)}),O.length===0?y(v,{severity:`info`,"data-testid":`diag-no-devices`,children:d.t(`gsw_diagNoDevices`)}):e(o,{children:[e(m,{fullWidth:!0,children:[y(c,{id:`gsw-diag-device`,children:d.t(`gsw_diagDevice`)}),y(s,{"data-testid":`diag-device-select`,labelId:`gsw-diag-device`,label:d.t(`gsw_diagDevice`),value:b,onChange:e=>x(String(e.target.value)),children:O.map(e=>y(i,{value:e.value,children:e.label},e.value))})]}),y(a,{children:y(f,{"data-testid":`diag-export`,variant:`contained`,disabled:!b||S,onClick:k,startIcon:S?y(g,{size:16}):void 0,children:d.t(`gsw_diagExport`)})})]}),E?e(v,{severity:`success`,children:[d.t(`gsw_diagDone`,E),` `,y(n,{href:`https://github.com/krobipd/ioBroker.govee-smart/issues/new/choose`,target:`_blank`,rel:`noreferrer`,children:d.t(`gsw_diagOpenIssue`)})]}):null,w?y(v,{severity:`error`,children:w}):null,y(l,{variant:`caption`,color:`text.secondary`,children:d.t(`gsw_diagPrivacy`)})]})}):y(j,{state:_})}h();var I={confirmed:{bgcolor:`success.main`,color:`success.contrastText`},flashing:{bgcolor:`warning.light`,color:`#000`,boxShadow:3},gap:{bgcolor:`error.main`,color:`error.contrastText`},open:{bgcolor:`action.disabledBackground`,color:`text.secondary`}};function L(e,t,n,r){return n===e?`flashing`:t.has(e)?`confirmed`:r.has(e)?`gap`:`open`}function R(e){let{total:t,confirmed:n,flashing:r,gaps:i,editable:o,onToggle:s}=e,c=new Set(n),l=new Set(i);return y(a,{sx:{display:`flex`,flexWrap:`wrap`,gap:.5},children:Array.from({length:Math.max(0,t)},(e,t)=>{let n=L(t,c,r,l);return y(a,{"data-testid":`seg-cell-${t}`,className:`seg-cell ${n}`,onClick:o?()=>s==null?void 0:s(t):void 0,sx:{width:34,height:34,display:`flex`,alignItems:`center`,justifyContent:`center`,borderRadius:1,fontSize:12,userSelect:`none`,cursor:o?`pointer`:`default`,...I[n]},children:t},t)})})}function z(e,t){let n=``,r=(n,r,i)=>{let a={action:n,device:r};return i&&(a.indices=i),e.sendTo(t,`segmentWizard`,a)};return{start(e){return n=e,r(`start`,e)},yes:()=>r(`yes`,n),no:()=>r(`no`,n),abort:()=>r(`abort`,n),apply:(e,t)=>r(`apply`,e,t)}}h();function B(e,t){let n=new Set(t),r=[];for(let t=0;t<e;t++)n.has(t)||r.push(t);return r}function V(n){let r=u.useMemo(()=>z(n.socket,n.namespace),[n.socket,n.namespace]),o=A(n.socket,n.namespace),p=u.useMemo(()=>o.status===`ready`?O(o.devices):[],[o]),[h,g]=u.useState(`select`),[_,b]=u.useState(``),[x,S]=u.useState(null),[C,w]=u.useState(0),[T,E]=u.useState([]),[D,k]=u.useState(0),[M,N]=u.useState(``);u.useEffect(()=>{b(p.length?p[0].value:``)},[p]);let P=()=>{S(null),g(`select`)},F=e=>e.error?(N(e.error),P(),!0):e.aborted?(N(``),P(),!0):e.applied||e.done?(k(e.segmentCount??0),S(null),g(`success`),!0):(N(``),e.snapshot&&S(e.snapshot),!1),I=async()=>{if(!_)return;N(``);let e=await r.start(_);F(e)||g(`measure`)},L=async e=>{F(await(e?r.yes():r.no()))},V=()=>{let e=x;if(!e||e.currentIndex<1)return;let t=e.currentIndex;w(t),E(e.confirmed.filter(e=>e<t).sort((e,t)=>e-t)),g(`review`)},H=e=>{E(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e].sort((e,t)=>e-t))},U=async()=>{T.length&&F(await r.apply(_,T))},W=async()=>{await r.abort();let e=await r.start(_);F(e)||g(`measure`)},G=async()=>{await r.abort(),P()},K=()=>{N(``),g(`select`)},q=M?y(v,{severity:`error`,"data-testid":`wiz-error`,sx:{mb:2},children:d.t(`gsw_error`,M)}):null;if(o.status!==`ready`)return y(j,{state:o});if(h===`select`)return e(a,{sx:{maxWidth:520},children:[q,p.length===0?y(v,{severity:`info`,"data-testid":`wiz-no-devices`,children:d.t(`gsw_noDevices`)}):e(t,{spacing:2,children:[e(m,{fullWidth:!0,children:[y(c,{children:d.t(`gsw_deviceLabel`)}),y(s,{"data-testid":`wiz-device-select`,value:_,label:d.t(`gsw_deviceLabel`),onChange:e=>b(e.target.value),children:p.map(e=>y(i,{value:e.value,children:d.t(`gsw_deviceOption`,e.label,String(e.segments))},e.value))})]}),y(a,{children:y(f,{variant:`contained`,"data-testid":`wiz-start`,disabled:!_,onClick:()=>void I(),children:d.t(`gsw_start`)})})]})]});if(h===`measure`&&x){let n=x.currentIndex;return e(a,{sx:{maxWidth:520},children:[y(l,{variant:`h6`,sx:{mb:1},children:d.t(`gsw_measureHint`)}),y(R,{total:n+1,confirmed:x.confirmed,flashing:n,gaps:B(n,x.confirmed),editable:!1}),y(l,{sx:{my:2},children:d.t(`gsw_question`,n)}),e(t,{direction:`row`,spacing:1,sx:{flexWrap:`wrap`},useFlexGap:!0,children:[y(f,{variant:`contained`,color:`success`,"data-testid":`wiz-lit`,onClick:()=>void L(!0),children:d.t(`gsw_lit`)}),y(f,{variant:`outlined`,"data-testid":`wiz-dark`,onClick:()=>void L(!1),children:d.t(`gsw_dark`)}),y(f,{variant:`contained`,"data-testid":`wiz-finish`,disabled:n<1,onClick:V,children:d.t(`gsw_finish`)}),y(f,{variant:`text`,color:`secondary`,"data-testid":`wiz-cancel`,onClick:()=>void G(),children:d.t(`gsw_cancel`)})]})]})}if(h===`review`){let n=T.length?Math.max(...T)+1:0,r=n-T.length,i=r>0?d.t(`gsw_resultGaps`,n,r):d.t(`gsw_resultNoGaps`,n);return e(a,{sx:{maxWidth:520},children:[y(l,{variant:`h6`,sx:{mb:1},children:i}),y(l,{variant:`body2`,sx:{mb:1,opacity:.8},children:d.t(`gsw_reviewHint`)}),y(R,{total:C,confirmed:T,flashing:null,gaps:B(C,T),editable:!0,onToggle:H}),e(t,{direction:`row`,spacing:1,sx:{mt:2,flexWrap:`wrap`},useFlexGap:!0,children:[y(f,{variant:`contained`,"data-testid":`wiz-apply`,disabled:!T.length,onClick:()=>void U(),children:d.t(`gsw_apply`)}),y(f,{variant:`outlined`,"data-testid":`wiz-remeasure`,onClick:()=>void W(),children:d.t(`gsw_remeasure`)}),y(f,{variant:`text`,color:`secondary`,"data-testid":`wiz-cancel`,onClick:()=>void G(),children:d.t(`gsw_cancel`)})]})]})}return e(a,{sx:{maxWidth:520},"data-testid":`wiz-success`,children:[y(v,{severity:`success`,sx:{mb:2},children:d.t(`gsw_applied`,D)}),y(f,{variant:`contained`,"data-testid":`wiz-close`,onClick:K,children:d.t(`gsw_close`)})]})}h();var H=new Set([`_main`,`_expert`]);function U(e){let t=e.split(`.`)[0];try{let e=window._localStorage??window.localStorage,n=[];for(let r=0;r<e.length;r++){let i=e.key(r);i!=null&&i.endsWith(`.${t}`)&&H.has(e.getItem(i)??``)&&n.push(i)}for(let t of n)e.removeItem(t)}catch{}}function W({socket:n,namespace:r}){let[i,o]=u.useState(`wizard`);return u.useEffect(()=>U(r),[r]),y(a,{sx:{p:2},children:e(t,{spacing:2,children:[y(l,{variant:`body2`,children:d.t(`gsw_expertIntro`)}),e(t,{direction:`row`,spacing:1,sx:{flexWrap:`wrap`},children:[y(f,{"data-testid":`expert-tool-wizard`,variant:i===`wizard`?`contained`:`outlined`,onClick:()=>o(`wizard`),children:d.t(`gsw_expertWizard`)}),y(f,{"data-testid":`expert-tool-diagnostics`,variant:i===`diagnostics`?`contained`:`outlined`,onClick:()=>o(`diagnostics`),children:d.t(`gsw_expertDiagnostics`)})]}),y(i===`wizard`?V:F,{socket:n,namespace:r})]})})}export{T as n,W as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./virtual_mf-exposes___mfe_internal__ConfigCustomGoveeSegmentSet__customComponents_js-DtuKK_L7.js";import"./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomGoveeSegmentSet__customComponents_js-TmDuENES.js";import{$t as e,Ba as t,La as n,Qr as r,Ya as i,an as a,cn as o,ho as s,ya as c,za as l}from"./_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BqaV2gc_.js";import{t as u}from"./_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-ld5_knuQ.js";import{n as d,t as f}from"./ExpertPanel-BnVeJBS6.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})(),s();var p={gsw_deviceLabel:`Device`,gsw_noDevices:`No segment-capable devices found. Enter a Cloud API key in the adapter settings so device capabilities are known.`,gsw_start:`Start measuring`,gsw_measureHint:`Watch the strip — which segment lights up bright white?`,gsw_question:`Segment %s — is it lit?`,gsw_lit:`Lit`,gsw_dark:`Dark (gap)`,gsw_finish:`Finished — end of strip`,gsw_cancel:`Cancel`,gsw_reviewHint:`Click a cell to flip lit / gap, then apply.`,gsw_resultNoGaps:`%s segments, no gaps`,gsw_resultGaps:`%s segments, %s gap(s)`,gsw_apply:`Apply`,gsw_remeasure:`Measure again`,gsw_applied:`Applied: %s segments.`,gsw_error:`Wizard error: %s`,gsw_close:`Close`,gsw_conn_lan_title:`LAN — always on`,gsw_conn_lan_desc:`Local control for lights. No credentials needed.`,gsw_conn_cloud_title:`Cloud API key`,gsw_conn_cloud_desc:`Optional. Adds device names, scenes, snapshots and segments.`,gsw_conn_apikey_label:`Govee API key`,gsw_conn_rt_title:`Real-time status (Govee account)`,gsw_conn_rt_desc:`Optional. Enables live status push over the Govee cloud (AWS IoT).`,gsw_conn_email_label:`Account email`,gsw_conn_password_label:`Account password`,gsw_conn_connect_btn:`Connect`,gsw_conn_2fa_hint:`Govee sent a verification code by email. Enter it here to finish sign-in.`,gsw_conn_code_label:`Verification code`,gsw_conn_request_btn:`Request new code`,gsw_conn_verify_btn:`Confirm code`,gsw_conn_st_ok:`Connected. Save the settings to keep real-time status enabled.`,gsw_conn_st_verifyRequired:`Govee needs a verification code for this device. Check your email and enter the code.`,gsw_conn_st_codeInvalid:`The verification code is invalid. Request a new one and try again.`,gsw_conn_st_passwordRejected:`Email or password was rejected. Please check your credentials.`,gsw_conn_st_emailNotRegistered:`This email is not registered with Govee.`,gsw_conn_st_rateLimited:`Too many attempts. Wait a while before trying again.`,gsw_conn_st_accountLocked:`The account is temporarily locked by Govee. Try again later.`,gsw_conn_st_loginFailed:`Login failed. Please try again.`,gsw_conn_st_mqttNotUp:`Real-time service is not ready yet. Try again in a moment.`,gsw_conn_st_codeSent:`A new verification code was sent to your email.`,gsw_conn_st_codeRejected:`Govee rejected the verification code. Request a new one.`,gsw_conn_st_needCredentials:`Enter email and password first.`,gsw_conn_st_throttled:`Please wait a moment before requesting another code.`,gsw_conn_st_unknownAction:`Unknown action.`,gsw_diagIntro:`Pick a device and press the button: the adapter builds a diagnostics report and your browser saves it as a file. Attach that file to a GitHub issue — the issue forms ask for exactly it.`,gsw_diagDevice:`Device`,gsw_diagExport:`Create report and download`,gsw_diagDone:`Saved as %s.`,gsw_diagOpenIssue:`Open an issue`,gsw_diagNoDevices:`No devices yet. The report is per device — once the adapter has found one, it appears here.`,gsw_diagExportFailed:`The report could not be created. The adapter log says why.`,gsw_diagPrivacy:`The report is pseudonymised: addresses, mail addresses and device names are replaced by stable markers, device ids are shortened, and credentials never appear.`,gsw_loadingDevices:`Loading devices …`,gsw_loadingDevicesSlow:`Still loading — this needs the adapter instance to be running.`,gsw_listFailed:`Could not load the device list. Is the instance running?`,gsw_deviceOption:`%s — currently %s segments`,gsw_expertIntro:`Two tools for when something needs a closer look. Pick one — the device list loads when you do.`,gsw_expertWizard:`Segment detection`,gsw_expertDiagnostics:`Diagnostics`},m={gsw_deviceLabel:`Gerät`,gsw_noDevices:`Keine Geräte mit Segmenten gefunden. Trage einen Cloud-API-Key in den Adaptereinstellungen ein, damit die Gerätefähigkeiten bekannt sind.`,gsw_start:`Messung starten`,gsw_measureHint:`Beobachte den Strip — welches Segment leuchtet hell weiß auf?`,gsw_question:`Segment %s — leuchtet es?`,gsw_lit:`Leuchtet`,gsw_dark:`Dunkel (Lücke)`,gsw_finish:`Fertig — Strip zu Ende`,gsw_cancel:`Abbrechen`,gsw_reviewHint:`Zelle anklicken, um zwischen Leuchtet/Lücke zu wechseln, dann übernehmen.`,gsw_resultNoGaps:`%s Segmente, keine Lücke`,gsw_resultGaps:`%s Segmente, %s Lücke(n)`,gsw_apply:`Übernehmen`,gsw_remeasure:`Nochmal messen`,gsw_applied:`Übernommen: %s Segmente.`,gsw_error:`Wizard-Fehler: %s`,gsw_close:`Schließen`,gsw_conn_lan_title:`LAN — immer aktiv`,gsw_conn_lan_desc:`Lokale Steuerung für Lampen. Keine Zugangsdaten nötig.`,gsw_conn_cloud_title:`Cloud-API-Key`,gsw_conn_cloud_desc:`Optional. Ergänzt Gerätenamen, Szenen, Snapshots und Segmente.`,gsw_conn_apikey_label:`Govee-API-Key`,gsw_conn_rt_title:`Echtzeit-Status (Govee-Konto)`,gsw_conn_rt_desc:`Optional. Aktiviert Live-Status-Push über die Govee-Cloud (AWS IoT).`,gsw_conn_email_label:`Konto-E-Mail`,gsw_conn_password_label:`Konto-Passwort`,gsw_conn_connect_btn:`Verbinden`,gsw_conn_2fa_hint:`Govee hat einen Bestätigungscode per E-Mail geschickt. Zum Abschließen hier eingeben.`,gsw_conn_code_label:`Bestätigungscode`,gsw_conn_request_btn:`Neuen Code anfordern`,gsw_conn_verify_btn:`Code bestätigen`,gsw_conn_st_ok:`Verbunden. Zum dauerhaften Aktivieren die Einstellungen speichern.`,gsw_conn_st_verifyRequired:`Govee benötigt für dieses Gerät einen Bestätigungscode. E-Mail prüfen und Code eingeben.`,gsw_conn_st_codeInvalid:`Der Bestätigungscode ist ungültig. Neuen anfordern und erneut versuchen.`,gsw_conn_st_passwordRejected:`E-Mail oder Passwort wurde abgelehnt. Bitte Zugangsdaten prüfen.`,gsw_conn_st_emailNotRegistered:`Diese E-Mail ist bei Govee nicht registriert.`,gsw_conn_st_rateLimited:`Zu viele Versuche. Bitte etwas warten, bevor du es erneut versuchst.`,gsw_conn_st_accountLocked:`Das Konto ist vorübergehend von Govee gesperrt. Später erneut versuchen.`,gsw_conn_st_loginFailed:`Anmeldung fehlgeschlagen. Bitte erneut versuchen.`,gsw_conn_st_mqttNotUp:`Der Echtzeit-Dienst ist noch nicht bereit. Gleich erneut versuchen.`,gsw_conn_st_codeSent:`Ein neuer Bestätigungscode wurde an deine E-Mail geschickt.`,gsw_conn_st_codeRejected:`Govee hat den Bestätigungscode abgelehnt. Neuen anfordern.`,gsw_conn_st_needCredentials:`Zuerst E-Mail und Passwort eingeben.`,gsw_conn_st_throttled:`Bitte kurz warten, bevor du einen weiteren Code anforderst.`,gsw_conn_st_unknownAction:`Unbekannte Aktion.`,gsw_diagIntro:`Gerät wählen und auf den Knopf drücken: Der Adapter erstellt einen Diagnosebericht, und der Browser legt ihn als Datei ab. Diese Datei an ein GitHub-Issue anhängen — die Formulare fragen genau danach.`,gsw_diagDevice:`Gerät`,gsw_diagExport:`Bericht erstellen und herunterladen`,gsw_diagDone:`Gespeichert als %s.`,gsw_diagOpenIssue:`Issue eröffnen`,gsw_diagNoDevices:`Noch keine Geräte. Der Bericht gilt je Gerät — sobald der Adapter eines gefunden hat, erscheint es hier.`,gsw_diagExportFailed:`Der Bericht konnte nicht erstellt werden. Warum, steht im Adapter-Log.`,gsw_diagPrivacy:`Der Bericht ist anonymisiert: Adressen, E-Mail-Adressen und Gerätenamen werden durch gleichbleibende Marken ersetzt, Gerätekennungen gekürzt, Zugangsdaten tauchen gar nicht auf.`,gsw_loadingDevices:`Geräte werden geladen …`,gsw_loadingDevicesSlow:`Lädt noch — dafür muss die Adapter-Instanz laufen.`,gsw_listFailed:`Die Geräteliste konnte nicht geladen werden. Läuft die Instanz?`,gsw_deviceOption:`%s — bisher %s Segmente`,gsw_expertIntro:`Zwei Werkzeuge für den genaueren Blick. Eines auswählen — die Geräteliste wird dann geladen.`,gsw_expertWizard:`Segment-Erkennung`,gsw_expertDiagnostics:`Diagnose`},h={app:e=>({backgroundColor:e.palette.background.default,color:e.palette.text.primary,height:`100%`}),item:{padding:50,width:600}},g=class extends e{constructor(e){let t={...e};super(e,t),this.state={...this.state,data:{},originalData:{},theme:this.createTheme()},a.extendTranslations(p,`en`),a.extendTranslations(m,`de`);let n=(navigator.language||navigator.userLanguage||`en`).toLowerCase();a.setLanguage(n.substring(0,2))}render(){return this.state.loaded?l(n,{injectFirst:!0,children:l(c,{theme:this.state.theme,children:t(r,{sx:h.app,children:[l(`div`,{style:h.item,children:l(d,{socket:this.socket,namespace:`${this.adapterName}.${this.instance}`,values:{apiKey:String(this.state.data.apiKey??``),email:String(this.state.data.goveeEmail??``),password:String(this.state.data.goveePassword??``),code:String(this.state.data.mqttVerificationCode??``)},onChange:(e,t)=>this.setState({data:{...this.state.data,[e]:t}})})}),l(`div`,{style:h.item,children:l(f,{socket:this.socket,namespace:`${this.adapterName}.${this.instance}`})})]})})}):l(n,{injectFirst:!0,children:l(c,{theme:this.state.theme,children:l(o,{themeType:this.state.themeType})})})}};s(),window.adapterName=`govee-smart`;var _=document.getElementById(`root`);_&&u(_).render(l(i.StrictMode,{children:l(g,{socket:{port:8081}})}));
|
|
1
|
+
import"./virtual_mf-exposes___mfe_internal__ConfigCustomGoveeSegmentSet__customComponents_js-BjyhzC0c.js";import"./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomGoveeSegmentSet__customComponents_js-8hDFWCL-.js";import{$t as e,Ba as t,La as n,Qr as r,Ya as i,an as a,cn as o,ho as s,ya as c,za as l}from"./_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BqaV2gc_.js";import{t as u}from"./_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-ld5_knuQ.js";import{n as d,t as f}from"./ExpertPanel-DoLtERNi.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})(),s();var p={gsw_deviceLabel:`Device`,gsw_noDevices:`No segment-capable devices found. Enter a Cloud API key in the adapter settings so device capabilities are known.`,gsw_start:`Start measuring`,gsw_measureHint:`Watch the strip — which segment lights up bright white?`,gsw_question:`Segment %s — is it lit?`,gsw_lit:`Lit`,gsw_dark:`Dark (gap)`,gsw_finish:`Finished — end of strip`,gsw_cancel:`Cancel`,gsw_reviewHint:`Click a cell to flip lit / gap, then apply.`,gsw_resultNoGaps:`%s segments, no gaps`,gsw_resultGaps:`%s segments, %s gap(s)`,gsw_apply:`Apply`,gsw_remeasure:`Measure again`,gsw_applied:`Applied: %s segments.`,gsw_error:`Wizard error: %s`,gsw_close:`Close`,gsw_conn_lan_title:`LAN — always on`,gsw_conn_lan_desc:`Local control for lights. No credentials needed.`,gsw_conn_cloud_title:`Cloud API key`,gsw_conn_cloud_desc:`Optional. Adds device names, scenes, snapshots and segments.`,gsw_conn_apikey_label:`Govee API key`,gsw_conn_rt_title:`Real-time status (Govee account)`,gsw_conn_rt_desc:`Optional. Enables live status push over the Govee cloud (AWS IoT).`,gsw_conn_email_label:`Account email`,gsw_conn_password_label:`Account password`,gsw_conn_connect_btn:`Connect`,gsw_conn_2fa_hint:`Govee sent a verification code by email. Enter it here to finish sign-in.`,gsw_conn_code_label:`Verification code`,gsw_conn_request_btn:`Request new code`,gsw_conn_verify_btn:`Confirm code`,gsw_conn_st_ok:`Connected. Save the settings to keep real-time status enabled.`,gsw_conn_st_verifyRequired:`Govee needs a verification code for this device. Check your email and enter the code.`,gsw_conn_st_codeInvalid:`The verification code is invalid. Request a new one and try again.`,gsw_conn_st_passwordRejected:`Email or password was rejected. Please check your credentials.`,gsw_conn_st_emailNotRegistered:`This email is not registered with Govee.`,gsw_conn_st_rateLimited:`Too many attempts. Wait a while before trying again.`,gsw_conn_st_accountLocked:`The account is temporarily locked by Govee. Try again later.`,gsw_conn_st_loginFailed:`Login failed. Please try again.`,gsw_conn_st_mqttNotUp:`Real-time service is not ready yet. Try again in a moment.`,gsw_conn_st_codeSent:`A new verification code was sent to your email.`,gsw_conn_st_codeRejected:`Govee rejected the verification code. Request a new one.`,gsw_conn_st_needCredentials:`Enter email and password first.`,gsw_conn_st_throttled:`Please wait a moment before requesting another code.`,gsw_conn_st_unknownAction:`Unknown action.`,gsw_diagIntro:`Pick a device and press the button: the adapter builds a diagnostics report and your browser saves it as a file. Attach that file to a GitHub issue — the issue forms ask for exactly it.`,gsw_diagDevice:`Device`,gsw_diagExport:`Create report and download`,gsw_diagDone:`Saved as %s.`,gsw_diagOpenIssue:`Open an issue`,gsw_diagNoDevices:`No devices yet. The report is per device — once the adapter has found one, it appears here.`,gsw_diagExportFailed:`The report could not be created. The adapter log says why.`,gsw_diagPrivacy:`The report is pseudonymised: addresses, mail addresses and device names are replaced by stable markers, device ids are shortened, and credentials never appear.`,gsw_loadingDevices:`Loading devices …`,gsw_loadingDevicesSlow:`Still loading — this needs the adapter instance to be running.`,gsw_listFailed:`Could not load the device list. Is the instance running?`,gsw_deviceOption:`%s — currently %s segments`,gsw_expertIntro:`Two tools for when something needs a closer look. Pick one — the device list loads when you do.`,gsw_expertWizard:`Segment detection`,gsw_expertDiagnostics:`Diagnostics`},m={gsw_deviceLabel:`Gerät`,gsw_noDevices:`Keine Geräte mit Segmenten gefunden. Trage einen Cloud-API-Key in den Adaptereinstellungen ein, damit die Gerätefähigkeiten bekannt sind.`,gsw_start:`Messung starten`,gsw_measureHint:`Beobachte den Strip — welches Segment leuchtet hell weiß auf?`,gsw_question:`Segment %s — leuchtet es?`,gsw_lit:`Leuchtet`,gsw_dark:`Dunkel (Lücke)`,gsw_finish:`Fertig — Strip zu Ende`,gsw_cancel:`Abbrechen`,gsw_reviewHint:`Zelle anklicken, um zwischen Leuchtet/Lücke zu wechseln, dann übernehmen.`,gsw_resultNoGaps:`%s Segmente, keine Lücke`,gsw_resultGaps:`%s Segmente, %s Lücke(n)`,gsw_apply:`Übernehmen`,gsw_remeasure:`Nochmal messen`,gsw_applied:`Übernommen: %s Segmente.`,gsw_error:`Wizard-Fehler: %s`,gsw_close:`Schließen`,gsw_conn_lan_title:`LAN — immer aktiv`,gsw_conn_lan_desc:`Lokale Steuerung für Lampen. Keine Zugangsdaten nötig.`,gsw_conn_cloud_title:`Cloud-API-Key`,gsw_conn_cloud_desc:`Optional. Ergänzt Gerätenamen, Szenen, Snapshots und Segmente.`,gsw_conn_apikey_label:`Govee-API-Key`,gsw_conn_rt_title:`Echtzeit-Status (Govee-Konto)`,gsw_conn_rt_desc:`Optional. Aktiviert Live-Status-Push über die Govee-Cloud (AWS IoT).`,gsw_conn_email_label:`Konto-E-Mail`,gsw_conn_password_label:`Konto-Passwort`,gsw_conn_connect_btn:`Verbinden`,gsw_conn_2fa_hint:`Govee hat einen Bestätigungscode per E-Mail geschickt. Zum Abschließen hier eingeben.`,gsw_conn_code_label:`Bestätigungscode`,gsw_conn_request_btn:`Neuen Code anfordern`,gsw_conn_verify_btn:`Code bestätigen`,gsw_conn_st_ok:`Verbunden. Zum dauerhaften Aktivieren die Einstellungen speichern.`,gsw_conn_st_verifyRequired:`Govee benötigt für dieses Gerät einen Bestätigungscode. E-Mail prüfen und Code eingeben.`,gsw_conn_st_codeInvalid:`Der Bestätigungscode ist ungültig. Neuen anfordern und erneut versuchen.`,gsw_conn_st_passwordRejected:`E-Mail oder Passwort wurde abgelehnt. Bitte Zugangsdaten prüfen.`,gsw_conn_st_emailNotRegistered:`Diese E-Mail ist bei Govee nicht registriert.`,gsw_conn_st_rateLimited:`Zu viele Versuche. Bitte etwas warten, bevor du es erneut versuchst.`,gsw_conn_st_accountLocked:`Das Konto ist vorübergehend von Govee gesperrt. Später erneut versuchen.`,gsw_conn_st_loginFailed:`Anmeldung fehlgeschlagen. Bitte erneut versuchen.`,gsw_conn_st_mqttNotUp:`Der Echtzeit-Dienst ist noch nicht bereit. Gleich erneut versuchen.`,gsw_conn_st_codeSent:`Ein neuer Bestätigungscode wurde an deine E-Mail geschickt.`,gsw_conn_st_codeRejected:`Govee hat den Bestätigungscode abgelehnt. Neuen anfordern.`,gsw_conn_st_needCredentials:`Zuerst E-Mail und Passwort eingeben.`,gsw_conn_st_throttled:`Bitte kurz warten, bevor du einen weiteren Code anforderst.`,gsw_conn_st_unknownAction:`Unbekannte Aktion.`,gsw_diagIntro:`Gerät wählen und auf den Knopf drücken: Der Adapter erstellt einen Diagnosebericht, und der Browser legt ihn als Datei ab. Diese Datei an ein GitHub-Issue anhängen — die Formulare fragen genau danach.`,gsw_diagDevice:`Gerät`,gsw_diagExport:`Bericht erstellen und herunterladen`,gsw_diagDone:`Gespeichert als %s.`,gsw_diagOpenIssue:`Issue eröffnen`,gsw_diagNoDevices:`Noch keine Geräte. Der Bericht gilt je Gerät — sobald der Adapter eines gefunden hat, erscheint es hier.`,gsw_diagExportFailed:`Der Bericht konnte nicht erstellt werden. Warum, steht im Adapter-Log.`,gsw_diagPrivacy:`Der Bericht ist anonymisiert: Adressen, E-Mail-Adressen und Gerätenamen werden durch gleichbleibende Marken ersetzt, Gerätekennungen gekürzt, Zugangsdaten tauchen gar nicht auf.`,gsw_loadingDevices:`Geräte werden geladen …`,gsw_loadingDevicesSlow:`Lädt noch — dafür muss die Adapter-Instanz laufen.`,gsw_listFailed:`Die Geräteliste konnte nicht geladen werden. Läuft die Instanz?`,gsw_deviceOption:`%s — bisher %s Segmente`,gsw_expertIntro:`Zwei Werkzeuge für den genaueren Blick. Eines auswählen — die Geräteliste wird dann geladen.`,gsw_expertWizard:`Segment-Erkennung`,gsw_expertDiagnostics:`Diagnose`},h={app:e=>({backgroundColor:e.palette.background.default,color:e.palette.text.primary,height:`100%`}),item:{padding:50,width:600}},g=class extends e{constructor(e){let t={...e};super(e,t),this.state={...this.state,data:{},originalData:{},theme:this.createTheme()},a.extendTranslations(p,`en`),a.extendTranslations(m,`de`);let n=(navigator.language||navigator.userLanguage||`en`).toLowerCase();a.setLanguage(n.substring(0,2))}render(){return this.state.loaded?l(n,{injectFirst:!0,children:l(c,{theme:this.state.theme,children:t(r,{sx:h.app,children:[l(`div`,{style:h.item,children:l(d,{socket:this.socket,namespace:`${this.adapterName}.${this.instance}`,values:{apiKey:String(this.state.data.apiKey??``),email:String(this.state.data.goveeEmail??``),password:String(this.state.data.goveePassword??``),code:String(this.state.data.mqttVerificationCode??``)},onChange:(e,t)=>this.setState({data:{...this.state.data,[e]:t}})})}),l(`div`,{style:h.item,children:l(f,{socket:this.socket,namespace:`${this.adapterName}.${this.instance}`})})]})})}):l(n,{injectFirst:!0,children:l(c,{theme:this.state.theme,children:l(o,{themeType:this.state.themeType})})})}};s(),window.adapterName=`govee-smart`;var _=document.getElementById(`root`);_&&u(_).render(l(i.StrictMode,{children:l(g,{socket:{port:8081}})}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./virtual_mf-exposes___mfe_internal__ConfigCustomGoveeSegmentSet__customComponents_js-BjyhzC0c.js";export{e as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./vite-preload-helper-B7qeedMF.js";import{a as t,r as n}from"./_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-Bh78u5iG.js";({...t.global});var r=t.share;t.utils,typeof __VUE_HMR_RUNTIME__>`u`&&(globalThis.__VUE_HMR_RUNTIME__={createRecord(){},rerender(){},reload(){}});var i=`__mf_init__virtual:mf:__mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__mf_v__runtimeInit__mf_v__.js__`,a=globalThis[i];if(!a){let e,t,n=new Promise((n,r)=>{e=n,t=r});a=globalThis[i]={initPromise:n,initResolve:e,initReject:t}}var o=a.initResolve,s=`__mf_module_cache__`;globalThis[s]||={share:{},remote:{}},globalThis[s].share||={},globalThis[s].remote||={};var c=globalThis[s];for(let e of Object.keys(c.share))if(e.startsWith(`default:`)){let t=e.slice(8);c.share[t]===void 0&&(c.share[t]=c.share[e])}else if(!e.includes(`:`)){let t=`default:`+e;c.share[t]===void 0&&(c.share[t]=c.share[e])}var l={},u=Array.isArray(`default`)?`default`:[`default`],d=`default`,f=`ConfigCustomGoveeSegmentSet`,p,m;async function h(e){for(let t=0;;t++)try{return await e()}catch(e){throw e}}var g=Symbol(`mf.originalSharedProvider`),_={emit:e=>e},v=(e,t)=>{if(t!==`version-first`)return e;let n={};for(let[t,r]of Object.entries(e))n[t]=Object.assign({},r,{[g]:r});return n},y=(e,t)=>{if(!t)return;let n=Object.entries(e||{}),r=n.find(([,e])=>e===t);if(r)return{version:r[0],provider:t,registered:!0};if(typeof t.version==`string`&&t.version)return{version:t.version,provider:t,registered:!1};let i=n.filter(([,e])=>e===t||!!(t.from&&(e==null?void 0:e.from)===t.from));if(i.length===1)return{version:i[0][0],provider:t,registered:!1}},b=(e,t,n,i)=>{var a;if(!e||!n)return;let o=Array.isArray(n.scope)?n.scope:[n.scope||`default`],s=v(e,i),c={};for(let e of o)c[e||`default`]={[t]:s};let l=(a=r.getRegisteredShare(c,t,{...n,scope:o,strategy:i},_))==null?void 0:a.shared;return(l==null?void 0:l[g])||l},x=(e,t,n,r)=>{var i;let a=e=>S(e,n),o=Object.fromEntries(Object.entries(e||{}).filter(([,e])=>!a(e)));n!=null&&n.version&&((i=n.shareConfig)==null?void 0:i.import)!==!1&&(o[n.version]||(o[n.version]=n));let s=b(o,t,n,r);return a(s)?void 0:s},S=(e,t)=>e===t||!!(t!=null&&t.from&&(e==null?void 0:e.from)===t.from),C=(e,t,n,r,i,a,o,s,c)=>{var l,u;if(c!==`version-first`||!s)return;let d=t==null||(l=t.options)==null||(l=l.shared)==null?void 0:l[i],f=Array.isArray(d)?d.find(e=>(e==null?void 0:e.version)===a):void 0,p=((s==null?void 0:s.from)===(t==null||(u=t.options)==null?void 0:u.name)?s:void 0)||(S(f,s)?f:t?void 0:s);if(p)return e.some(e=>{var i,a;return e!==t&&(e==null||(i=e.options)==null?void 0:i.name)===(o==null?void 0:o.from)&&(e==null||(a=e.shareScopeMap)==null?void 0:a[r])===n})?p:void 0},w=(e,t,n,r,i,a,o,s,c)=>{let l=a.registered?C(e,t,n,r,i,a.version,a.provider,s,c):void 0,u=l||o;if(u&&!(a.registered&&!S(u,s)))return{provider:u,scopeRootProvider:l}};async function T(){return p||=h(()=>e(()=>import(`./_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1-CdZFIn7L.js`),[],import.meta.url)).catch(e=>{throw p=void 0,e}),p}async function E(){return m||=h(()=>e(()=>import(`./virtualExposes-DcvC5fsO.js`),[],import.meta.url)).then(e=>e.default??e).catch(e=>{throw m=void 0,e}),m}async function D(e={},t=[]){var r,i;let a=(e,t,n,r)=>{let i=(Array.isArray(r)?r[0]:r)||`default`,a=t||!n?e:e+`@`+n,o={canonical:i+`:`+a};return i==="default"&&(o.aliases=[a]),o},s=(e,t)=>{let n=e[t.canonical];if(n!==void 0)return n;let r=t.aliases||[];for(let n of r){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let r=e[n];if(r!==void 0)return e[t.canonical]=r,r}},p=Symbol.for(`module-federation.shared-cache-listeners`),m=Symbol.for(`module-federation.shared-cache-owners`),g=e=>{let t=e[m];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,m,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},_=(e,t)=>{var n;return(n=e[m])==null?void 0:n[t.canonical]},v=(e,t,n,r)=>{var i;e[t.canonical]=n;let a=t.aliases||[];for(let t of a)Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0});let o=e[m];r===void 0?o&&delete o[t.canonical]:g(e)[t.canonical]=r;let s=(i=e[p])==null?void 0:i[t.canonical];if(s)for(let e of s)e(n);return n},C=Symbol.for(`module-federation.tree-shaking-shared-cache`),E=e=>{let t=e[C];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,C,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},D=(e,t,n,r)=>{if(!Array.isArray(n))return r;let i=[...new Set(n)].sort(),a=E(e),o=a[t.canonical]||=[],s=o.find(e=>e.providedExports.length===i.length&&e.providedExports.every((e,t)=>e===i[t]));return s?s.value=r:o.push({providedExports:i,value:r}),r},O=Symbol.for(`module-federation.tree-shaking-shared-selection-cache`),k=e=>{let t=e[O];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,O,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},A=(e,t,n)=>{var r;let i=s(e,t);return i===void 0?(r=e[O])==null||(r=r[t.canonical])==null?void 0:r[n]:i},j=(e,t,n,r)=>{let i=k(e),a=i[t.canonical]||=Object.create(null);return a[n]=r,r},M=((r=globalThis.__FEDERATION__)==null?void 0:r.__INSTANCES__)||[],N=(i=t.find(e=>e==null?void 0:e.from))==null?void 0:i.from,ee=M.find(t=>{var n,r;return(t==null||(n=t.options)==null?void 0:n.name)===N&&(t==null||(r=t.shareScopeMap)==null?void 0:r.default)===e})||M.find(t=>{var n,r;return(t==null||(n=t.options)==null?void 0:n.name)!==f&&(t==null||(r=t.shareScopeMap)==null?void 0:r.default)===e}),P=Object.create(null);for(let[t,n]of Object.entries(e)){let e=P[t]=Object.create(null);for(let[t,r]of Object.entries(n))e[t]=Object.assign({},r)}let{usedShared:F,usedRemotes:I}=await T();var L=l[d];if(L||=l[d]={from:f},t.indexOf(L)>=0)return;t.push(L);let R=e=>{let t=e;for(let e=0;e<5;e++){let e=t==null?void 0:t.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(n.length>0&&n.some(e=>e!==void 0))break;t=e}return t},z=[],B=globalThis.window===void 0?await Promise.all([]):[],V=`__mf_vite_runtime_share_load_id__`,te=0,H=new Map,U=new Map,W=n({name:f,remotes:I,shared:F,plugins:[ne(),...z,...B],shareStrategy:`version-first`});W.initShareScopeMap(`default`,e);function ne(){return{name:`vite-share-pin-lifecycle-plugin`,resolveShare(e){var t;let n=(t=e.shareInfo)==null?void 0:t[V],r=n===void 0?void 0:U.get(n);if(!r)return e;let i=e.resolver;return e.resolver=(...e)=>(r.pinned.reapply(),i(...e)),r.pinned.reveal(),e}}}let re=W.sharedHandler.hooks.lifecycle.resolveShare,G=new WeakMap;re.on(e=>{var t;let n=(t=e.shareInfo)==null?void 0:t[V],r=e.resolver;return typeof r==`function`&&(e.resolver=(...e)=>{let t=r(...e),i=t==null?void 0:t.shared;return i&&(typeof i==`object`||typeof i==`function`)&&!G.has(i)&&G.set(i,{from:i.from}),n!==void 0&&i&&H.set(n,i),t}),e});let ie=(e,t,n,r)=>{if(!e||e[t]!==n)return;let i=Object.assign({},r,{version:r.version??t,scope:r.scope??(n==null?void 0:n.scope)??[`default`],strategy:`loaded-first`}),a=r.from;e[t]=i;let o=()=>n===void 0?e[t]===void 0:e[t]===n;return{provider:i,reveal(){return e[t]===i&&(n===void 0?delete e[t]:e[t]=n,!0)},reapply(){return o()?(e[t]=i,!0):!1},release(s,c=!0){return r.from=a,e[t]===i?c?s?(i.from=a,s&&i.lib&&(i.loaded=!0),r.strategy===void 0?delete i.strategy:i.strategy=r.strategy,!0):(n===void 0?delete e[t]:e[t]=n,!1):(n===void 0?delete e[t]:e[t]=n,!0):!c&&o()}}},ae=e=>Object.entries(e||{}).map(([e,t])=>({provider:t,version:e,from:t.from,registered:!0})),oe=(e,t)=>{if(t===void 0)return;let n;for(let r of e){let e=r.provider,i=e.treeShaking||e;if(r.loadedFactory===t||e.lib===t||i.lib===t){if(n)return;n=r}}return n},se=async(e,t,n)=>{let r=++te;U.set(r,{pinned:n});try{let n=await W.loadShare(e,{customShareInfo:{shareConfig:t,[V]:r}});return{factory:n===!1?void 0:n,selectedProvider:H.get(r)}}finally{H.delete(r),U.delete(r)}},K=async(e,t,n,r,i,a,o=!0)=>{let s=a.from,c=ie(n,r,i,a);if(!c)return;let l;try{l=await se(e,t,c)}catch(e){throw c.release(!1),e}let u=l==null?void 0:l.factory;if(u===void 0){c.release(!1);return}let d=ae(n),f=c.provider.treeShaking||c.provider,p=c.provider.lib===u||f.lib===u;if(!o&&p){let e=d.findIndex(e=>e.provider===c.provider);e!==-1&&d.splice(e,1)}!o&&!d.some(e=>e.provider===a)&&d.push({provider:a,version:r,from:s,registered:!1,loadedFactory:p?u:void 0});let m=!o&&l.selectedProvider===c.provider&&p?a:l.selectedProvider;if(m&&!d.some(e=>e.provider===m)){let e=G.get(m),t=typeof m.version==`string`&&m.version?m.version:r;d.push({provider:m,version:t,from:e?e.from:m.from,registered:(n==null?void 0:n[t])===m,loadedFactory:u})}let h=d.find(e=>e.provider===m)??oe(d,u);if(!c.release(!0,(h==null?void 0:h.provider)===c.provider)||!h)return;let g=G.get(h.provider);h.from=h.provider===a?s:g?g.from:h.provider.from,g&&(h.provider.from=g.from);let _=typeof u==`function`?u():u,v=await Promise.resolve(_);if(!(h.registered&&(n==null?void 0:n[h.version])!==h.provider))return{provider:h.provider,selection:h,resolved:v}},q=new Set,J=new Map,ce=async(t,n,r)=>{var i;let o=!!((i=n.shareConfig)!=null&&i.singleton);if(!o&&n.canLiveRebind!==!1)try{let i=x(r,t,n,`version-first`),l=y(r,i);if(!l)return;let{version:u}=l;if(!o&&u!==n.version||!i.lib&&!i.loading&&!(i.loaded&&typeof i.get==`function`))return;let d=a(t,o,n.version,n.scope);if(s(c.share,d)!==void 0)return;let f=e[t],p=f==null?void 0:f[u];if(l.registered&&!S(p,i))return;let m,h=i.lib;if(!h&&i.loading&&(h=await i.loading),!h&&i.loaded&&typeof i.get==`function`&&(h=await i.get()),!h)return;let g=typeof h==`function`?h():h,_=await Promise.resolve(g),b=l.registered?p:i;m={provider:b,selection:{provider:b,version:u,from:i.from,registered:l.registered},resolved:_};let C=m==null?void 0:m.provider,w=m==null?void 0:m.selection;if(!w)return;let T=m==null?void 0:m.resolved;if(T===void 0||s(c.share,d)!==void 0||w.registered&&(f==null?void 0:f[w.version])!==C)return;v(c.share,d,R(T),w.from),q.add(C)}catch(e){console.error(`[Module Federation] Failed to bridge materialized shared module "`+t+`"`,e)}},Y=async(t,n,r,i,o)=>{try{var l,u;let d=a(t,(l=n.shareConfig)==null?void 0:l.singleton,n.version,n.scope),p=s(c.share,d),m=_(c.share,d),h=x(r,t,n,`version-first`),g=h||b(r,t,n,`version-first`)||n,C=y(r,g);if(!C)return;let T=S(g,n),{version:E}=C,D=i==null?void 0:i[E],O=w(M,ee,e,`default`,t,C,h,D,`version-first`);if(!O&&!T)return;let{provider:k,scopeRootProvider:A}=O||{provider:g,scopeRootProvider:void 0};if(!((u=n.shareConfig)!=null&&u.singleton)||n.canLiveRebind===!1||p!==void 0&&m!==f)return;let j=e[t],N=j==null?void 0:j[E];if(C.registered&&!A&&!S(N,k))return;let P=await K(t,n.shareConfig,j,E,N,k,C.registered&&!T),F=P==null?void 0:P.provider,I=P==null?void 0:P.selection;if(!I||S(F,n)||o&&(o.version!==I.version||!S({from:I.from},o.provider))||q.has(F))return;let L=P==null?void 0:P.resolved;if(L===void 0)return;let z=s(c.share,d),B=_(c.share,d);if(z!==void 0&&B!==f||I.registered&&(j==null?void 0:j[I.version])!==F)return;o||J.set(t,{version:I.version,provider:{from:I.from}}),q.add(F);let V=R(L);v(c.share,d,V,I.from)}catch(e){console.error(`[Module Federation] Failed to bridge external shared module "`+t+`"`,e)}};for(let[e,t]of Object.entries(F))t.treeShaking||await ce(e,t,P[e]);for(let[e,t]of Object.entries(F)){var X;if(t.treeShaking)continue;let n=a(e,(X=t.shareConfig)==null?void 0:X.singleton,t.version,t.scope);if(s(c.share,n)!==void 0)continue;let r=a(e,!0,t.version,t.scope),i=s(c.share,r);i!==void 0&&v(c.share,n,i,_(c.share,r))}let Z=[`react`,`react/jsx-runtime`,`react-dom`,`react-dom/client`,`@mui/material`,`@mui/icons-material`,`@iobroker/gui-components`,`@iobroker/json-config`].filter(e=>F[e]!==void 0),Q=e=>e.startsWith(`@`)?e.split(`/`).slice(0,2).join(`/`):e.split(`/`)[0];for(let e of Object.keys(F)){if(Z.includes(e))continue;let t=Q(e),n=Z.indexOf(t);if(n===-1){Z.push(e);continue}let r=n;for(;r>0&&Q(Z[r-1])===t&&Z[r-1]!==t;)r--;Z.splice(r,0,e)}var le=async e=>{for(let r of e){var t,n;let e=F[r],i=a(r,(t=e.shareConfig)==null?void 0:t.singleton,e.version,e.scope);if(((n=e.shareConfig)==null?void 0:n.import)===!1||e.treeShaking||s(c.share,i)!==void 0)continue;let o=a(r,!0,e.version,e.scope),l=s(c.share,o);if(l!==void 0){v(c.share,i,l,_(c.share,o));continue}let u=await e.get(),d=typeof u==`function`?u():u,p=await Promise.resolve(d),m=(e=>{let t=e;for(let e=0;e<5;e++){let e=t==null?void 0:t.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(n.length>0&&n.some(e=>e!==void 0))break;t=e}return t})(p),h=m===p?{...p}:m;h.__esModule!==!0&&Object.defineProperty(h,"__esModule",{value:!0,enumerable:!1}),v(c.share,i,h,f)}};let ue=e=>{var t,n;let r=F[e];if(!r.treeShaking&&((t=r.shareConfig)==null?void 0:t.import)!==!1)return!1;let i=a(e,(n=r.shareConfig)==null?void 0:n.singleton,r.version,r.scope);return r.treeShaking?A(c.share,i,f)===void 0&&s(c.share,i)===void 0:s(c.share,i)===void 0},$=Z.findIndex(e=>{var t,n,r;let i=F[e],o=a(e,(t=i.shareConfig)==null?void 0:t.singleton,i.version,i.scope);return(i.treeShaking?A(c.share,o,f)??s(c.share,o):s(c.share,o))===void 0?i.treeShaking||((n=i.shareConfig)==null?void 0:n.import)===!1?!0:!((r=i.shareConfig)!=null&&r.singleton)||typeof x!=`function`?!1:!!x(P[e],e,i,`version-first`):!1}),de=$===-1?Z:Z.slice(0,$);var fe=$===-1?[]:Z.slice($);await le(de);try{await h(async()=>{await Promise.all(await W.initializeSharing(`default`,{strategy:`version-first`,from:`build`,initScope:t}))})}catch(e){console.error(`[Module Federation]`,e)}for(let[t,n]of Object.entries(F))n.treeShaking||await Y(t,n,e[t],P[t],void 0);try{var pe;let e=(pe=globalThis.__FEDERATION__)==null?void 0:pe.__SHARE__,t=Object.create(null);if(e)for(let[,n]of Object.entries(e))for(let e of u){let r=n==null?void 0:n[e];if(r)for(let[e,n]of Object.entries(r)){let r=F==null?void 0:F[e],i=P[e],a=J.get(e);if(!r||!i||!a||r.treeShaking)continue;let o=t[e]||(t[e]=Object.create(null));for(let[e,t]of Object.entries(n)){if(!t.lib||a.version!==e||!S(t,a.provider))continue;let n=i[e];(t===n||n!=null&&n.from&&t.from===n.from)&&(t===r||r.from&&t.from===r.from||o[e]===void 0&&(o[e]=t))}}}for(let[e,n]of Object.entries(t))await Y(e,F[e],n,P[e],J.get(e))}catch(e){console.error(`[Module Federation] Failed to bridge external shared modules`,e)}let me=async()=>{},he=async(t,n)=>{var r,i;let o=a(t,(r=n.shareConfig)==null?void 0:r.singleton,n.version,n.scope),l=n.treeShaking?A(c.share,o,f):s(c.share,o);if(((i=n.shareConfig)==null?void 0:i.import)!==!1||l!==void 0)return;let u=e=>{let t=e;for(let e=0;e<5;e++){let e=t==null?void 0:t.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(n.length>0&&n.some(e=>e!==void 0))break;t=e}return t},d=e==null?void 0:e[t],p=b(d,t,n,`version-first`)||n,m=y(d,p);if(!m)return;let{version:h}=m,g=d==null?void 0:d[h],_=await K(t,n.shareConfig,d,h,g,p,m.registered&&!S(p,n)),x=_==null?void 0:_.selection,C=_==null?void 0:_.provider,w=_==null?void 0:_.resolved;if(!x||S(C,n)||w===void 0||(n.treeShaking?A(c.share,o,f):s(c.share,o))!==void 0||x.registered&&(d==null?void 0:d[x.version])!==C)return;let T=u(w);if(n.treeShaking){let e=n.treeShaking.providedExports??n.treeShaking.usedExports??[];D(c.share,o,e,T),j(c.share,o,f,T)}else v(c.share,o,T,x.from)};for(let e of fe){let t=F[e];if(ue(e)){var ge;t.treeShaking?await me(e,t):((ge=t.shareConfig)==null?void 0:ge.import)===!1&&await he(e,t)}if(ue(e))break;await le([e])}return o(W),W}async function O(e){let t=await E();if(!(e in t))throw Error(`[Module Federation] Module ${e} does not exist in container.`);return c.pendingShareLoads&&await Promise.all(c.pendingShareLoads),t[e]().then(e=>()=>e)}export{D as n,O as t};
|
|
1
|
+
import{t as e}from"./vite-preload-helper-B7qeedMF.js";import{a as t,r as n}from"./_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-Bh78u5iG.js";({...t.global});var r=t.share;t.utils,typeof __VUE_HMR_RUNTIME__>`u`&&(globalThis.__VUE_HMR_RUNTIME__={createRecord(){},rerender(){},reload(){}});var i=`__mf_init__virtual:mf:__mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__mf_v__runtimeInit__mf_v__.js__`,a=globalThis[i];if(!a){let e,t,n=new Promise((n,r)=>{e=n,t=r});a=globalThis[i]={initPromise:n,initResolve:e,initReject:t}}var o=a.initResolve,s=`__mf_module_cache__`;globalThis[s]||={share:{},remote:{}},globalThis[s].share||={},globalThis[s].remote||={};var c=globalThis[s];for(let e of Object.keys(c.share))if(e.startsWith(`default:`)){let t=e.slice(8);c.share[t]===void 0&&(c.share[t]=c.share[e])}else if(!e.includes(`:`)){let t=`default:`+e;c.share[t]===void 0&&(c.share[t]=c.share[e])}var l={},u=Array.isArray(`default`)?`default`:[`default`],d=`default`,f=`ConfigCustomGoveeSegmentSet`,p,m;async function h(e){for(let t=0;;t++)try{return await e()}catch(e){throw e}}var g=Symbol(`mf.originalSharedProvider`),_={emit:e=>e},v=(e,t)=>{if(t!==`version-first`)return e;let n={};for(let[t,r]of Object.entries(e))n[t]=Object.assign({},r,{[g]:r});return n},y=(e,t)=>{if(!t)return;let n=Object.entries(e||{}),r=n.find(([,e])=>e===t);if(r)return{version:r[0],provider:t,registered:!0};if(typeof t.version==`string`&&t.version)return{version:t.version,provider:t,registered:!1};let i=n.filter(([,e])=>e===t||!!(t.from&&(e==null?void 0:e.from)===t.from));if(i.length===1)return{version:i[0][0],provider:t,registered:!1}},b=(e,t,n,i)=>{var a;if(!e||!n)return;let o=Array.isArray(n.scope)?n.scope:[n.scope||`default`],s=v(e,i),c={};for(let e of o)c[e||`default`]={[t]:s};let l=(a=r.getRegisteredShare(c,t,{...n,scope:o,strategy:i},_))==null?void 0:a.shared;return(l==null?void 0:l[g])||l},x=(e,t,n,r)=>{var i;let a=e=>S(e,n),o=Object.fromEntries(Object.entries(e||{}).filter(([,e])=>!a(e)));n!=null&&n.version&&((i=n.shareConfig)==null?void 0:i.import)!==!1&&(o[n.version]||(o[n.version]=n));let s=b(o,t,n,r);return a(s)?void 0:s},S=(e,t)=>e===t||!!(t!=null&&t.from&&(e==null?void 0:e.from)===t.from),C=(e,t,n,r,i,a,o,s,c)=>{var l,u;if(c!==`version-first`||!s)return;let d=t==null||(l=t.options)==null||(l=l.shared)==null?void 0:l[i],f=Array.isArray(d)?d.find(e=>(e==null?void 0:e.version)===a):void 0,p=((s==null?void 0:s.from)===(t==null||(u=t.options)==null?void 0:u.name)?s:void 0)||(S(f,s)?f:t?void 0:s);if(p)return e.some(e=>{var i,a;return e!==t&&(e==null||(i=e.options)==null?void 0:i.name)===(o==null?void 0:o.from)&&(e==null||(a=e.shareScopeMap)==null?void 0:a[r])===n})?p:void 0},w=(e,t,n,r,i,a,o,s,c)=>{let l=a.registered?C(e,t,n,r,i,a.version,a.provider,s,c):void 0,u=l||o;if(u&&!(a.registered&&!S(u,s)))return{provider:u,scopeRootProvider:l}};async function T(){return p||=h(()=>e(()=>import(`./_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1-CdZFIn7L.js`),[],import.meta.url)).catch(e=>{throw p=void 0,e}),p}async function E(){return m||=h(()=>e(()=>import(`./virtualExposes-ChPmNKIy.js`),[],import.meta.url)).then(e=>e.default??e).catch(e=>{throw m=void 0,e}),m}async function D(e={},t=[]){var r,i;let a=(e,t,n,r)=>{let i=(Array.isArray(r)?r[0]:r)||`default`,a=t||!n?e:e+`@`+n,o={canonical:i+`:`+a};return i==="default"&&(o.aliases=[a]),o},s=(e,t)=>{let n=e[t.canonical];if(n!==void 0)return n;let r=t.aliases||[];for(let n of r){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let r=e[n];if(r!==void 0)return e[t.canonical]=r,r}},p=Symbol.for(`module-federation.shared-cache-listeners`),m=Symbol.for(`module-federation.shared-cache-owners`),g=e=>{let t=e[m];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,m,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},_=(e,t)=>{var n;return(n=e[m])==null?void 0:n[t.canonical]},v=(e,t,n,r)=>{var i;e[t.canonical]=n;let a=t.aliases||[];for(let t of a)Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0});let o=e[m];r===void 0?o&&delete o[t.canonical]:g(e)[t.canonical]=r;let s=(i=e[p])==null?void 0:i[t.canonical];if(s)for(let e of s)e(n);return n},C=Symbol.for(`module-federation.tree-shaking-shared-cache`),E=e=>{let t=e[C];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,C,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},D=(e,t,n,r)=>{if(!Array.isArray(n))return r;let i=[...new Set(n)].sort(),a=E(e),o=a[t.canonical]||=[],s=o.find(e=>e.providedExports.length===i.length&&e.providedExports.every((e,t)=>e===i[t]));return s?s.value=r:o.push({providedExports:i,value:r}),r},O=Symbol.for(`module-federation.tree-shaking-shared-selection-cache`),k=e=>{let t=e[O];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,O,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},A=(e,t,n)=>{var r;let i=s(e,t);return i===void 0?(r=e[O])==null||(r=r[t.canonical])==null?void 0:r[n]:i},j=(e,t,n,r)=>{let i=k(e),a=i[t.canonical]||=Object.create(null);return a[n]=r,r},M=((r=globalThis.__FEDERATION__)==null?void 0:r.__INSTANCES__)||[],N=(i=t.find(e=>e==null?void 0:e.from))==null?void 0:i.from,ee=M.find(t=>{var n,r;return(t==null||(n=t.options)==null?void 0:n.name)===N&&(t==null||(r=t.shareScopeMap)==null?void 0:r.default)===e})||M.find(t=>{var n,r;return(t==null||(n=t.options)==null?void 0:n.name)!==f&&(t==null||(r=t.shareScopeMap)==null?void 0:r.default)===e}),P=Object.create(null);for(let[t,n]of Object.entries(e)){let e=P[t]=Object.create(null);for(let[t,r]of Object.entries(n))e[t]=Object.assign({},r)}let{usedShared:F,usedRemotes:I}=await T();var L=l[d];if(L||=l[d]={from:f},t.indexOf(L)>=0)return;t.push(L);let R=e=>{let t=e;for(let e=0;e<5;e++){let e=t==null?void 0:t.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(n.length>0&&n.some(e=>e!==void 0))break;t=e}return t},z=[],B=globalThis.window===void 0?await Promise.all([]):[],V=`__mf_vite_runtime_share_load_id__`,te=0,H=new Map,U=new Map,W=n({name:f,remotes:I,shared:F,plugins:[ne(),...z,...B],shareStrategy:`version-first`});W.initShareScopeMap(`default`,e);function ne(){return{name:`vite-share-pin-lifecycle-plugin`,resolveShare(e){var t;let n=(t=e.shareInfo)==null?void 0:t[V],r=n===void 0?void 0:U.get(n);if(!r)return e;let i=e.resolver;return e.resolver=(...e)=>(r.pinned.reapply(),i(...e)),r.pinned.reveal(),e}}}let re=W.sharedHandler.hooks.lifecycle.resolveShare,G=new WeakMap;re.on(e=>{var t;let n=(t=e.shareInfo)==null?void 0:t[V],r=e.resolver;return typeof r==`function`&&(e.resolver=(...e)=>{let t=r(...e),i=t==null?void 0:t.shared;return i&&(typeof i==`object`||typeof i==`function`)&&!G.has(i)&&G.set(i,{from:i.from}),n!==void 0&&i&&H.set(n,i),t}),e});let ie=(e,t,n,r)=>{if(!e||e[t]!==n)return;let i=Object.assign({},r,{version:r.version??t,scope:r.scope??(n==null?void 0:n.scope)??[`default`],strategy:`loaded-first`}),a=r.from;e[t]=i;let o=()=>n===void 0?e[t]===void 0:e[t]===n;return{provider:i,reveal(){return e[t]===i&&(n===void 0?delete e[t]:e[t]=n,!0)},reapply(){return o()?(e[t]=i,!0):!1},release(s,c=!0){return r.from=a,e[t]===i?c?s?(i.from=a,s&&i.lib&&(i.loaded=!0),r.strategy===void 0?delete i.strategy:i.strategy=r.strategy,!0):(n===void 0?delete e[t]:e[t]=n,!1):(n===void 0?delete e[t]:e[t]=n,!0):!c&&o()}}},ae=e=>Object.entries(e||{}).map(([e,t])=>({provider:t,version:e,from:t.from,registered:!0})),oe=(e,t)=>{if(t===void 0)return;let n;for(let r of e){let e=r.provider,i=e.treeShaking||e;if(r.loadedFactory===t||e.lib===t||i.lib===t){if(n)return;n=r}}return n},se=async(e,t,n)=>{let r=++te;U.set(r,{pinned:n});try{let n=await W.loadShare(e,{customShareInfo:{shareConfig:t,[V]:r}});return{factory:n===!1?void 0:n,selectedProvider:H.get(r)}}finally{H.delete(r),U.delete(r)}},K=async(e,t,n,r,i,a,o=!0)=>{let s=a.from,c=ie(n,r,i,a);if(!c)return;let l;try{l=await se(e,t,c)}catch(e){throw c.release(!1),e}let u=l==null?void 0:l.factory;if(u===void 0){c.release(!1);return}let d=ae(n),f=c.provider.treeShaking||c.provider,p=c.provider.lib===u||f.lib===u;if(!o&&p){let e=d.findIndex(e=>e.provider===c.provider);e!==-1&&d.splice(e,1)}!o&&!d.some(e=>e.provider===a)&&d.push({provider:a,version:r,from:s,registered:!1,loadedFactory:p?u:void 0});let m=!o&&l.selectedProvider===c.provider&&p?a:l.selectedProvider;if(m&&!d.some(e=>e.provider===m)){let e=G.get(m),t=typeof m.version==`string`&&m.version?m.version:r;d.push({provider:m,version:t,from:e?e.from:m.from,registered:(n==null?void 0:n[t])===m,loadedFactory:u})}let h=d.find(e=>e.provider===m)??oe(d,u);if(!c.release(!0,(h==null?void 0:h.provider)===c.provider)||!h)return;let g=G.get(h.provider);h.from=h.provider===a?s:g?g.from:h.provider.from,g&&(h.provider.from=g.from);let _=typeof u==`function`?u():u,v=await Promise.resolve(_);if(!(h.registered&&(n==null?void 0:n[h.version])!==h.provider))return{provider:h.provider,selection:h,resolved:v}},q=new Set,J=new Map,ce=async(t,n,r)=>{var i;let o=!!((i=n.shareConfig)!=null&&i.singleton);if(!o&&n.canLiveRebind!==!1)try{let i=x(r,t,n,`version-first`),l=y(r,i);if(!l)return;let{version:u}=l;if(!o&&u!==n.version||!i.lib&&!i.loading&&!(i.loaded&&typeof i.get==`function`))return;let d=a(t,o,n.version,n.scope);if(s(c.share,d)!==void 0)return;let f=e[t],p=f==null?void 0:f[u];if(l.registered&&!S(p,i))return;let m,h=i.lib;if(!h&&i.loading&&(h=await i.loading),!h&&i.loaded&&typeof i.get==`function`&&(h=await i.get()),!h)return;let g=typeof h==`function`?h():h,_=await Promise.resolve(g),b=l.registered?p:i;m={provider:b,selection:{provider:b,version:u,from:i.from,registered:l.registered},resolved:_};let C=m==null?void 0:m.provider,w=m==null?void 0:m.selection;if(!w)return;let T=m==null?void 0:m.resolved;if(T===void 0||s(c.share,d)!==void 0||w.registered&&(f==null?void 0:f[w.version])!==C)return;v(c.share,d,R(T),w.from),q.add(C)}catch(e){console.error(`[Module Federation] Failed to bridge materialized shared module "`+t+`"`,e)}},Y=async(t,n,r,i,o)=>{try{var l,u;let d=a(t,(l=n.shareConfig)==null?void 0:l.singleton,n.version,n.scope),p=s(c.share,d),m=_(c.share,d),h=x(r,t,n,`version-first`),g=h||b(r,t,n,`version-first`)||n,C=y(r,g);if(!C)return;let T=S(g,n),{version:E}=C,D=i==null?void 0:i[E],O=w(M,ee,e,`default`,t,C,h,D,`version-first`);if(!O&&!T)return;let{provider:k,scopeRootProvider:A}=O||{provider:g,scopeRootProvider:void 0};if(!((u=n.shareConfig)!=null&&u.singleton)||n.canLiveRebind===!1||p!==void 0&&m!==f)return;let j=e[t],N=j==null?void 0:j[E];if(C.registered&&!A&&!S(N,k))return;let P=await K(t,n.shareConfig,j,E,N,k,C.registered&&!T),F=P==null?void 0:P.provider,I=P==null?void 0:P.selection;if(!I||S(F,n)||o&&(o.version!==I.version||!S({from:I.from},o.provider))||q.has(F))return;let L=P==null?void 0:P.resolved;if(L===void 0)return;let z=s(c.share,d),B=_(c.share,d);if(z!==void 0&&B!==f||I.registered&&(j==null?void 0:j[I.version])!==F)return;o||J.set(t,{version:I.version,provider:{from:I.from}}),q.add(F);let V=R(L);v(c.share,d,V,I.from)}catch(e){console.error(`[Module Federation] Failed to bridge external shared module "`+t+`"`,e)}};for(let[e,t]of Object.entries(F))t.treeShaking||await ce(e,t,P[e]);for(let[e,t]of Object.entries(F)){var X;if(t.treeShaking)continue;let n=a(e,(X=t.shareConfig)==null?void 0:X.singleton,t.version,t.scope);if(s(c.share,n)!==void 0)continue;let r=a(e,!0,t.version,t.scope),i=s(c.share,r);i!==void 0&&v(c.share,n,i,_(c.share,r))}let Z=[`react`,`react/jsx-runtime`,`react-dom`,`react-dom/client`,`@mui/material`,`@mui/icons-material`,`@iobroker/gui-components`,`@iobroker/json-config`].filter(e=>F[e]!==void 0),Q=e=>e.startsWith(`@`)?e.split(`/`).slice(0,2).join(`/`):e.split(`/`)[0];for(let e of Object.keys(F)){if(Z.includes(e))continue;let t=Q(e),n=Z.indexOf(t);if(n===-1){Z.push(e);continue}let r=n;for(;r>0&&Q(Z[r-1])===t&&Z[r-1]!==t;)r--;Z.splice(r,0,e)}var le=async e=>{for(let r of e){var t,n;let e=F[r],i=a(r,(t=e.shareConfig)==null?void 0:t.singleton,e.version,e.scope);if(((n=e.shareConfig)==null?void 0:n.import)===!1||e.treeShaking||s(c.share,i)!==void 0)continue;let o=a(r,!0,e.version,e.scope),l=s(c.share,o);if(l!==void 0){v(c.share,i,l,_(c.share,o));continue}let u=await e.get(),d=typeof u==`function`?u():u,p=await Promise.resolve(d),m=(e=>{let t=e;for(let e=0;e<5;e++){let e=t==null?void 0:t.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(n.length>0&&n.some(e=>e!==void 0))break;t=e}return t})(p),h=m===p?{...p}:m;h.__esModule!==!0&&Object.defineProperty(h,"__esModule",{value:!0,enumerable:!1}),v(c.share,i,h,f)}};let ue=e=>{var t,n;let r=F[e];if(!r.treeShaking&&((t=r.shareConfig)==null?void 0:t.import)!==!1)return!1;let i=a(e,(n=r.shareConfig)==null?void 0:n.singleton,r.version,r.scope);return r.treeShaking?A(c.share,i,f)===void 0&&s(c.share,i)===void 0:s(c.share,i)===void 0},$=Z.findIndex(e=>{var t,n,r;let i=F[e],o=a(e,(t=i.shareConfig)==null?void 0:t.singleton,i.version,i.scope);return(i.treeShaking?A(c.share,o,f)??s(c.share,o):s(c.share,o))===void 0?i.treeShaking||((n=i.shareConfig)==null?void 0:n.import)===!1?!0:!((r=i.shareConfig)!=null&&r.singleton)||typeof x!=`function`?!1:!!x(P[e],e,i,`version-first`):!1}),de=$===-1?Z:Z.slice(0,$);var fe=$===-1?[]:Z.slice($);await le(de);try{await h(async()=>{await Promise.all(await W.initializeSharing(`default`,{strategy:`version-first`,from:`build`,initScope:t}))})}catch(e){console.error(`[Module Federation]`,e)}for(let[t,n]of Object.entries(F))n.treeShaking||await Y(t,n,e[t],P[t],void 0);try{var pe;let e=(pe=globalThis.__FEDERATION__)==null?void 0:pe.__SHARE__,t=Object.create(null);if(e)for(let[,n]of Object.entries(e))for(let e of u){let r=n==null?void 0:n[e];if(r)for(let[e,n]of Object.entries(r)){let r=F==null?void 0:F[e],i=P[e],a=J.get(e);if(!r||!i||!a||r.treeShaking)continue;let o=t[e]||(t[e]=Object.create(null));for(let[e,t]of Object.entries(n)){if(!t.lib||a.version!==e||!S(t,a.provider))continue;let n=i[e];(t===n||n!=null&&n.from&&t.from===n.from)&&(t===r||r.from&&t.from===r.from||o[e]===void 0&&(o[e]=t))}}}for(let[e,n]of Object.entries(t))await Y(e,F[e],n,P[e],J.get(e))}catch(e){console.error(`[Module Federation] Failed to bridge external shared modules`,e)}let me=async()=>{},he=async(t,n)=>{var r,i;let o=a(t,(r=n.shareConfig)==null?void 0:r.singleton,n.version,n.scope),l=n.treeShaking?A(c.share,o,f):s(c.share,o);if(((i=n.shareConfig)==null?void 0:i.import)!==!1||l!==void 0)return;let u=e=>{let t=e;for(let e=0;e<5;e++){let e=t==null?void 0:t.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(n.length>0&&n.some(e=>e!==void 0))break;t=e}return t},d=e==null?void 0:e[t],p=b(d,t,n,`version-first`)||n,m=y(d,p);if(!m)return;let{version:h}=m,g=d==null?void 0:d[h],_=await K(t,n.shareConfig,d,h,g,p,m.registered&&!S(p,n)),x=_==null?void 0:_.selection,C=_==null?void 0:_.provider,w=_==null?void 0:_.resolved;if(!x||S(C,n)||w===void 0||(n.treeShaking?A(c.share,o,f):s(c.share,o))!==void 0||x.registered&&(d==null?void 0:d[x.version])!==C)return;let T=u(w);if(n.treeShaking){let e=n.treeShaking.providedExports??n.treeShaking.usedExports??[];D(c.share,o,e,T),j(c.share,o,f,T)}else v(c.share,o,T,x.from)};for(let e of fe){let t=F[e];if(ue(e)){var ge;t.treeShaking?await me(e,t):((ge=t.shareConfig)==null?void 0:ge.import)===!1&&await he(e,t)}if(ue(e))break;await le([e])}return o(W),W}async function O(e){let t=await E();if(!(e in t))throw Error(`[Module Federation] Module ${e} does not exist in container.`);return c.pendingShareLoads&&await Promise.all(c.pendingShareLoads),t[e]().then(e=>()=>e)}export{D as n,O as t};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Components-DWq4U-Jh.js","./ExpertPanel-DoLtERNi.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{t as e}from"./vite-preload-helper-B7qeedMF.js";var t={"./Components":async()=>{let t=await e(()=>import(`./Components-DWq4U-Jh.js`),__vite__mapDeps([0,1]),import.meta.url),n={};return Object.assign(n,t),Object.defineProperty(n,"__esModule",{value:!0,enumerable:!1}),n}};export{t as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Components-
|
|
2
|
-
import{t as e}from"./vite-preload-helper-B7qeedMF.js";var t={},n=new Set,r=Promise.resolve();async function i(e){let t=r.then(e,e);return r=t.then(()=>void 0,()=>void 0),t}async function a(e){if(typeof document>`u`)return;let r=t[e]||[];await Promise.all(r.map(e=>{let t=new URL(e,import.meta.url).href;return n.has(t)||(n.add(t),document.querySelector(`link[rel="stylesheet"][href="${t}"]`))?Promise.resolve():new Promise((e,n)=>{let r=document.createElement(`link`);r.rel=`stylesheet`,r.href=t,r.onload=()=>e(),r.onerror=()=>n(Error(`[Module Federation] Failed to load CSS asset: ${t}`)),document.head.appendChild(r)})}))}var o={"./Components":async()=>{await a(`./Components`),await Promise.all([]);let t=await i(()=>e(()=>import(`./Components-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Components-DWq4U-Jh.js","./ExpertPanel-DoLtERNi.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{t as e}from"./vite-preload-helper-B7qeedMF.js";var t={},n=new Set,r=Promise.resolve();async function i(e){let t=r.then(e,e);return r=t.then(()=>void 0,()=>void 0),t}async function a(e){if(typeof document>`u`)return;let r=t[e]||[];await Promise.all(r.map(e=>{let t=new URL(e,import.meta.url).href;return n.has(t)||(n.add(t),document.querySelector(`link[rel="stylesheet"][href="${t}"]`))?Promise.resolve():new Promise((e,n)=>{let r=document.createElement(`link`);r.rel=`stylesheet`,r.href=t,r.onload=()=>e(),r.onerror=()=>n(Error(`[Module Federation] Failed to load CSS asset: ${t}`)),document.head.appendChild(r)})}))}var o={"./Components":async()=>{await a(`./Components`),await Promise.all([]);let t=await i(()=>e(()=>import(`./Components-DWq4U-Jh.js`),__vite__mapDeps([0,1]),import.meta.url)),n=t&&t.__mf_remote_dependency_pending;n&&typeof n.then==`function`&&await n;let r={};return Object.assign(r,t),Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),r}};export{o as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e,t}from"./assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomGoveeSegmentSet__customComponents_js-
|
|
1
|
+
import{n as e,t}from"./assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomGoveeSegmentSet__customComponents_js-8hDFWCL-.js";export{t as get,e as init};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"ConfigCustomGoveeSegmentSet","name":"ConfigCustomGoveeSegmentSet","metaData":{"name":"ConfigCustomGoveeSegmentSet","type":"app","buildInfo":{"buildVersion":"1.0.0","buildName":"ConfigCustomGoveeSegmentSet"},"remoteEntry":{"name":"customComponents.js","path":"","type":"module"},"ssrRemoteEntry":{"name":"customComponents.ssr.js","path":"","type":"module"},"types":{"path":"","name":"","zip":"@mf-types.zip","api":"@mf-types.d.ts"},"globalName":"ConfigCustomGoveeSegmentSet","pluginVersion":"0.2.5","publicPath":"auto"},"shared":[{"id":"ConfigCustomGoveeSegmentSet:@iobroker/gui-components","name":"@iobroker/gui-components","version":"10.0.12","singleton":true,"requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__prebuild___mf_0_iobroker_mf_1_gui_mf_2_components__prebuild__-DXxYvebj.js"]},"css":{"async":[],"sync":[]}}},{"id":"ConfigCustomGoveeSegmentSet:@iobroker/json-config","name":"@iobroker/json-config","version":"9.0.16","singleton":true,"requiredVersion":"*","assets":{"js":{"async":["assets/lib-D_TOKWDo.js"],"sync":["assets/_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-Bh78u5iG.js"]},"css":{"async":[],"sync":[]}}},{"id":"ConfigCustomGoveeSegmentSet:@mui/icons-material","name":"@mui/icons-material","version":"9.2.0","singleton":true,"requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BqaV2gc_.js"]},"css":{"async":[],"sync":[]}}},{"id":"ConfigCustomGoveeSegmentSet:@mui/material","name":"@mui/material","version":"9.2.0","singleton":true,"requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BqaV2gc_.js"]},"css":{"async":[],"sync":[]}}},{"id":"ConfigCustomGoveeSegmentSet:react","name":"react","version":"19.2.8","singleton":true,"requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BqaV2gc_.js"]},"css":{"async":[],"sync":[]}}},{"id":"ConfigCustomGoveeSegmentSet:react-dom","name":"react-dom","version":"19.2.8","singleton":true,"requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BqaV2gc_.js"]},"css":{"async":[],"sync":[]}}},{"id":"ConfigCustomGoveeSegmentSet:react/jsx-runtime","name":"react/jsx-runtime","version":"19.2.8","singleton":true,"requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BqaV2gc_.js"]},"css":{"async":[],"sync":[]}}},{"id":"ConfigCustomGoveeSegmentSet:react-dom/client","name":"react-dom/client","version":"19.2.8","singleton":true,"requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-ld5_knuQ.js"]},"css":{"async":[],"sync":[]}}}],"remotes":[],"exposes":[{"id":"ConfigCustomGoveeSegmentSet:Components","name":"Components","assets":{"js":{"async":["assets/lib-D_TOKWDo.js"],"sync":["assets/Components-
|
|
1
|
+
{"id":"ConfigCustomGoveeSegmentSet","name":"ConfigCustomGoveeSegmentSet","metaData":{"name":"ConfigCustomGoveeSegmentSet","type":"app","buildInfo":{"buildVersion":"1.0.0","buildName":"ConfigCustomGoveeSegmentSet"},"remoteEntry":{"name":"customComponents.js","path":"","type":"module"},"ssrRemoteEntry":{"name":"customComponents.ssr.js","path":"","type":"module"},"types":{"path":"","name":"","zip":"@mf-types.zip","api":"@mf-types.d.ts"},"globalName":"ConfigCustomGoveeSegmentSet","pluginVersion":"0.2.5","publicPath":"auto"},"shared":[{"id":"ConfigCustomGoveeSegmentSet:@iobroker/gui-components","name":"@iobroker/gui-components","version":"10.0.12","singleton":true,"requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__prebuild___mf_0_iobroker_mf_1_gui_mf_2_components__prebuild__-DXxYvebj.js"]},"css":{"async":[],"sync":[]}}},{"id":"ConfigCustomGoveeSegmentSet:@iobroker/json-config","name":"@iobroker/json-config","version":"9.0.16","singleton":true,"requiredVersion":"*","assets":{"js":{"async":["assets/lib-D_TOKWDo.js"],"sync":["assets/_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-Bh78u5iG.js"]},"css":{"async":[],"sync":[]}}},{"id":"ConfigCustomGoveeSegmentSet:@mui/icons-material","name":"@mui/icons-material","version":"9.2.0","singleton":true,"requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BqaV2gc_.js"]},"css":{"async":[],"sync":[]}}},{"id":"ConfigCustomGoveeSegmentSet:@mui/material","name":"@mui/material","version":"9.2.0","singleton":true,"requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BqaV2gc_.js"]},"css":{"async":[],"sync":[]}}},{"id":"ConfigCustomGoveeSegmentSet:react","name":"react","version":"19.2.8","singleton":true,"requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BqaV2gc_.js"]},"css":{"async":[],"sync":[]}}},{"id":"ConfigCustomGoveeSegmentSet:react-dom","name":"react-dom","version":"19.2.8","singleton":true,"requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BqaV2gc_.js"]},"css":{"async":[],"sync":[]}}},{"id":"ConfigCustomGoveeSegmentSet:react/jsx-runtime","name":"react/jsx-runtime","version":"19.2.8","singleton":true,"requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BqaV2gc_.js"]},"css":{"async":[],"sync":[]}}},{"id":"ConfigCustomGoveeSegmentSet:react-dom/client","name":"react-dom/client","version":"19.2.8","singleton":true,"requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/_virtual_mf___mfe_internal__ConfigCustomGoveeSegmentSet__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-ld5_knuQ.js"]},"css":{"async":[],"sync":[]}}}],"remotes":[],"exposes":[{"id":"ConfigCustomGoveeSegmentSet:Components","name":"Components","assets":{"js":{"async":["assets/lib-D_TOKWDo.js"],"sync":["assets/Components-DWq4U-Jh.js"]},"css":{"async":[],"sync":[]}},"path":"./Components"}]}
|
package/admin/i18n/de.json
CHANGED
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
"errDeviceNotFound": "Gerät nicht gefunden: {key}",
|
|
34
34
|
"errNoSegments": "{name} hat keine Segmente — Assistent nicht anwendbar.",
|
|
35
35
|
"errDeviceOffline": "{name} ist gerade nicht erreichbar — der Assistent braucht ein antwortendes Gerät.",
|
|
36
|
+
"errCommandRefused": "{name}: der Befehl konnte nicht gesendet werden ({msg}) — der Assistent wurde beendet.",
|
|
36
37
|
"errNoWizard": "Kein Assistent aktiv. Bitte zuerst 'Start' klicken.",
|
|
37
38
|
"errNoWizardShort": "Kein Assistent aktiv",
|
|
38
39
|
"errUnknownAction": "Unbekannte Aktion: {action}",
|
|
@@ -71,8 +72,8 @@
|
|
|
71
72
|
"musicAutoColor": "Musik Auto-Farbe",
|
|
72
73
|
"musicMode": "Musik-Modus",
|
|
73
74
|
"musicSensitivity": "Musik-Empfindlichkeit",
|
|
74
|
-
"
|
|
75
|
-
"
|
|
75
|
+
"bindLabel": "Netzwerk-Interface",
|
|
76
|
+
"bindTooltip": "Netzwerk-Interface für LAN-Discovery und -Steuerung. Standard (0.0.0.0 = alle Interfaces) beibehalten, außer dieser Host hat mehrere Netzwerk-Interfaces.",
|
|
76
77
|
"online": "Online",
|
|
77
78
|
"power": "Ein/Aus",
|
|
78
79
|
"refreshCloud": "Cloud-Daten aktualisieren",
|
|
@@ -106,20 +107,19 @@
|
|
|
106
107
|
"devicesTotal": "Geräte gesamt",
|
|
107
108
|
"devicesOnline": "Geräte online",
|
|
108
109
|
"devicesAllOnline": "Alle Geräte online",
|
|
110
|
+
"descDevicesAllOnline": "Wahr nur, solange jedes bekannte Gerät erreichbar ist — ohne Geräte bleibt der Wert falsch, damit eine leere Installation keine Vollzähligkeit meldet.",
|
|
109
111
|
"information": "Information",
|
|
110
112
|
"infoConnection": "Adapter verbunden",
|
|
111
113
|
"infoMqttConnected": "MQTT verbunden",
|
|
112
114
|
"infoCloudConnected": "Cloud-API verbunden",
|
|
113
115
|
"infoOpenapiMqttConnected": "Govee OpenAPI MQTT verbunden",
|
|
114
116
|
"devicesFolder": "Geräte",
|
|
115
|
-
"localSnapshotsFolder": "Vom Benutzer gespeicherte lokale Snapshots",
|
|
116
117
|
"infoManualSyncDevices": "Geräte manuell synchronisieren",
|
|
117
118
|
"infoManualSyncDevicesDesc": "Auf true setzen, um die Geräteliste jetzt mit dem Govee-Konto abzugleichen: neu hinzugefügte Geräte kommen dazu, aus dem Konto gelöschte werden entfernt. Kein Neustart nötig. Szenen/Snapshots bestehender Geräte bleiben unberührt — dafür den Refresh-Button am Gerät nutzen.",
|
|
118
119
|
"infoOpenapiMqttConnectedDesc": "Push-Kanal für Sensor- und Appliance-Ereignisse. Unabhängig vom AWS-IoT-MQTT, das für Status-Push der regulären Govee-Lampen genutzt wird.",
|
|
119
120
|
"infoConnectionDesc": "Wahr, solange der Adapter arbeitet — mindestens ein Gerät antwortet, oder, bevor ein Gerät bekannt ist, läuft der LAN-Empfänger. Ob ein bestimmtes Gerät erreichbar ist, sagt dessen eigenes info.online.",
|
|
120
121
|
"infoCloudConnectedDesc": "Wahr, solange die Govee-Cloud-API antwortet. Sie braucht den API-Schlüssel und liefert Geräteliste, Szenen, Segmente und Cloud-Befehle.",
|
|
121
122
|
"infoMqttConnectedDesc": "Wahr, solange die Echtzeit-Kontoverbindung steht. Sie braucht E-Mail und Passwort und schickt Statusänderungen von sich aus, statt dass der Adapter sie abfragt.",
|
|
122
|
-
"diagnosticsFolder": "Diagnoseberichte",
|
|
123
123
|
"diagnosticsLastExport": "Letzter Diagnose-Export",
|
|
124
124
|
"diagnosticsLastExportDesc": "Wann zuletzt ein Diagnosebericht für dieses Gerät erzeugt wurde.",
|
|
125
125
|
"segmentChannel": "Segment %s",
|
|
@@ -158,5 +158,20 @@
|
|
|
158
158
|
"descMembers": "Die Geräte, die diese App-Gruppe gemeinsam schaltet, mit ihrem Namen im Objektbaum.",
|
|
159
159
|
"descMusicAutoColor": "Ob die Lampe im Musikmodus ihre Farben selbst wählt, statt bei einer festen Farbe zu bleiben.",
|
|
160
160
|
"descDreamViewToggle": "Ob die Lampe den Bildschirmfarben folgt, die eine Govee-DreamView-Kamera aufnimmt.",
|
|
161
|
-
"descDiyScene": "Eine der Szenen, die du selbst im DIY-Editor der Govee-App gebaut hast — leer, bis du eine angelegt hast."
|
|
161
|
+
"descDiyScene": "Eine der Szenen, die du selbst im DIY-Editor der Govee-App gebaut hast — leer, bis du eine angelegt hast.",
|
|
162
|
+
"capMainLightToggle": "Hauptlicht",
|
|
163
|
+
"capBackgroundLightToggle": "Hintergrundlicht",
|
|
164
|
+
"capFanToggle": "Ventilator",
|
|
165
|
+
"capFanSpeedMode": "Lüfterstufe",
|
|
166
|
+
"capReverseAirflowToggle": "Umgekehrte Luftrichtung",
|
|
167
|
+
"capPillarLightToggle": "Säulenlicht",
|
|
168
|
+
"capBaseLightToggle": "Sockellicht",
|
|
169
|
+
"descReverseAirflowToggle": "Ob der Ventilator andersherum dreht und die Luft nach oben statt nach unten drückt — die Wintereinstellung eines Deckenventilators.",
|
|
170
|
+
"descPillarLightToggle": "Ob der aufrechte Teil der Leuchte leuchtet; der Sockel hat einen eigenen Schalter.",
|
|
171
|
+
"descBaseLightToggle": "Ob der Sockel der Leuchte leuchtet; der aufrechte Teil hat einen eigenen Schalter.",
|
|
172
|
+
"descWarmMistToggle": "Ob der Luftbefeuchter das Wasser vor dem Vernebeln erwärmt — warmer statt kühler Nebel.",
|
|
173
|
+
"descPresetScene": "Eine Auswahlliste der fertigen Szenen dieses Modells; welche es gibt, gibt Govee vor und unterscheidet sich je Modell.",
|
|
174
|
+
"descMembersUnreachable": "Welche Mitglieder der Gruppe gerade nicht erreichbar sind, benannt wie im Objektbaum — leer, solange alle antworten.",
|
|
175
|
+
"portLabel": "LAN-Empfangsport",
|
|
176
|
+
"portTooltip": "Vom Govee-LAN-Protokoll vorgegeben: Antworten der Lampen kommen auf UDP 4002 an. Eine zweite Instanz auf diesem Host kann ihn nicht teilen — die Admin warnt, wenn ein anderer Adapter den Port nutzt."
|
|
162
177
|
}
|
package/admin/i18n/en.json
CHANGED
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
"errDeviceNotFound": "Device not found: {key}",
|
|
34
34
|
"errNoSegments": "{name} has no segments — wizard not applicable.",
|
|
35
35
|
"errDeviceOffline": "{name} is not reachable right now — the wizard needs the device to answer.",
|
|
36
|
+
"errCommandRefused": "{name}: the command could not be sent ({msg}) — the wizard stopped.",
|
|
36
37
|
"errNoWizard": "No wizard active. Please click 'Start' first.",
|
|
37
38
|
"errNoWizardShort": "No wizard active",
|
|
38
39
|
"errUnknownAction": "Unknown action: {action}",
|
|
@@ -71,8 +72,8 @@
|
|
|
71
72
|
"musicAutoColor": "Music Auto Color",
|
|
72
73
|
"musicMode": "Music Mode",
|
|
73
74
|
"musicSensitivity": "Music Sensitivity",
|
|
74
|
-
"
|
|
75
|
-
"
|
|
75
|
+
"bindLabel": "Network Interface",
|
|
76
|
+
"bindTooltip": "Select the network interface for LAN discovery and control. Keep the default (0.0.0.0 = all interfaces) unless this host has multiple network interfaces.",
|
|
76
77
|
"online": "Online",
|
|
77
78
|
"power": "Power",
|
|
78
79
|
"refreshCloud": "Refresh Cloud Data",
|
|
@@ -106,20 +107,19 @@
|
|
|
106
107
|
"devicesTotal": "Devices total",
|
|
107
108
|
"devicesOnline": "Devices online",
|
|
108
109
|
"devicesAllOnline": "All devices online",
|
|
110
|
+
"descDevicesAllOnline": "True only while every device the adapter knows is reachable — with no devices at all it stays false, so an empty installation cannot report completeness.",
|
|
109
111
|
"information": "Information",
|
|
110
112
|
"infoConnection": "Adapter connected",
|
|
111
113
|
"infoMqttConnected": "MQTT connected",
|
|
112
114
|
"infoCloudConnected": "Cloud API connected",
|
|
113
115
|
"infoOpenapiMqttConnected": "Govee OpenAPI MQTT connected",
|
|
114
116
|
"devicesFolder": "Devices",
|
|
115
|
-
"localSnapshotsFolder": "User-saved local snapshots",
|
|
116
117
|
"infoManualSyncDevices": "Manually sync devices",
|
|
117
118
|
"infoManualSyncDevicesDesc": "Write true to sync the device list with your Govee account now: adds newly added devices and removes ones you deleted from the account. No restart needed. Scenes/snapshots of existing devices are not touched — use the per-device refresh button for that.",
|
|
118
119
|
"infoOpenapiMqttConnectedDesc": "Push channel for sensor and appliance events. Independent of the AWS-IoT MQTT used for status push of regular Govee lights.",
|
|
119
120
|
"infoConnectionDesc": "True while the adapter is working — at least one device answers, or, before any device is known, the LAN listener is running. Whether one particular device is reachable is what its own info.online says.",
|
|
120
121
|
"infoCloudConnectedDesc": "True while the Govee Cloud API answers. It needs the API key and supplies the device list, scenes, segments and cloud commands.",
|
|
121
122
|
"infoMqttConnectedDesc": "True while the real-time account connection is up. It needs email and password and pushes status changes by itself instead of the adapter polling for them.",
|
|
122
|
-
"diagnosticsFolder": "Diagnostics reports",
|
|
123
123
|
"diagnosticsLastExport": "Last diagnostics export",
|
|
124
124
|
"diagnosticsLastExportDesc": "When the most recent diagnostics report was taken for this device.",
|
|
125
125
|
"segmentChannel": "Segment %s",
|
|
@@ -158,5 +158,20 @@
|
|
|
158
158
|
"descMembers": "The devices this app group switches together, as they are named in the object tree.",
|
|
159
159
|
"descMusicAutoColor": "Whether the light picks its own colours in music mode instead of keeping one fixed colour.",
|
|
160
160
|
"descDreamViewToggle": "Whether the light follows the screen colours a Govee DreamView camera captures.",
|
|
161
|
-
"descDiyScene": "One of the scenes you built yourself in the DIY editor of the Govee app — empty until you have made one."
|
|
161
|
+
"descDiyScene": "One of the scenes you built yourself in the DIY editor of the Govee app — empty until you have made one.",
|
|
162
|
+
"capMainLightToggle": "Main light",
|
|
163
|
+
"capBackgroundLightToggle": "Background light",
|
|
164
|
+
"capFanToggle": "Fan",
|
|
165
|
+
"capFanSpeedMode": "Fan speed",
|
|
166
|
+
"capReverseAirflowToggle": "Reverse airflow",
|
|
167
|
+
"capPillarLightToggle": "Pillar light",
|
|
168
|
+
"capBaseLightToggle": "Base light",
|
|
169
|
+
"descReverseAirflowToggle": "Whether the fan turns the other way and pushes the air up instead of down — the winter setting of a ceiling fan.",
|
|
170
|
+
"descPillarLightToggle": "Whether the upright part of the lamp is lit; the base has a switch of its own.",
|
|
171
|
+
"descBaseLightToggle": "Whether the lamp's base is lit; the upright part has a switch of its own.",
|
|
172
|
+
"descWarmMistToggle": "Whether the humidifier heats the water before misting — warm mist instead of cool.",
|
|
173
|
+
"descPresetScene": "A dropdown over the ready-made scenes this model offers; which ones exist comes from Govee and differs per model.",
|
|
174
|
+
"descMembersUnreachable": "Which of the group's members are currently unreachable, as they are named in the object tree — empty while all of them answer.",
|
|
175
|
+
"portLabel": "LAN listen port",
|
|
176
|
+
"portTooltip": "Fixed by the Govee LAN protocol: replies from your lights arrive on UDP 4002. A second instance on this host cannot share it — the admin warns when another adapter uses the port."
|
|
162
177
|
}
|
package/admin/i18n/es.json
CHANGED
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
"errDeviceNotFound": "Dispositivo no encontrado: {key}",
|
|
34
34
|
"errNoSegments": "{name} no tiene segmentos; el asistente no se aplica.",
|
|
35
35
|
"errDeviceOffline": "{name} no está accesible ahora mismo: el asistente necesita que el dispositivo responda.",
|
|
36
|
+
"errCommandRefused": "{name}: no se pudo enviar el comando ({msg}) — el asistente se detuvo.",
|
|
36
37
|
"errNoWizard": "Ningún asistente activo. Primero haga clic en \"Iniciar\".",
|
|
37
38
|
"errNoWizardShort": "Ningún asistente activo",
|
|
38
39
|
"errUnknownAction": "Acción desconocida: {action}",
|
|
@@ -71,8 +72,8 @@
|
|
|
71
72
|
"musicAutoColor": "Color automático de música",
|
|
72
73
|
"musicMode": "Modo música",
|
|
73
74
|
"musicSensitivity": "Sensibilidad musical",
|
|
74
|
-
"
|
|
75
|
-
"
|
|
75
|
+
"bindLabel": "Interfaz de red",
|
|
76
|
+
"bindTooltip": "Selecciona la interfaz de red para el descubrimiento y control LAN. Mantén el valor predeterminado (0.0.0.0 = todas) salvo que este host tenga varias interfaces.",
|
|
76
77
|
"online": "Conectado",
|
|
77
78
|
"power": "Encendido",
|
|
78
79
|
"refreshCloud": "Actualizar datos Cloud",
|
|
@@ -106,20 +107,19 @@
|
|
|
106
107
|
"devicesTotal": "Dispositivos en total",
|
|
107
108
|
"devicesOnline": "Dispositivos en línea",
|
|
108
109
|
"devicesAllOnline": "Todos los dispositivos en línea",
|
|
110
|
+
"descDevicesAllOnline": "Verdadero solo mientras todos los dispositivos conocidos estén accesibles: sin dispositivos permanece falso, para que una instalación vacía no informe de completitud.",
|
|
109
111
|
"information": "Información",
|
|
110
112
|
"infoConnection": "Adaptador conectado",
|
|
111
113
|
"infoMqttConnected": "MQTT conectado",
|
|
112
114
|
"infoCloudConnected": "Cloud API conectado",
|
|
113
115
|
"infoOpenapiMqttConnected": "Govee OpenAPI MQTT conectado",
|
|
114
116
|
"devicesFolder": "Dispositivos",
|
|
115
|
-
"localSnapshotsFolder": "Instantáneas locales guardadas por el usuario",
|
|
116
117
|
"infoManualSyncDevices": "Sincronizar dispositivos manualmente",
|
|
117
118
|
"infoManualSyncDevicesDesc": "Establecer en true para sincronizar ahora la lista de dispositivos con la cuenta Govee: se añaden los nuevos y se eliminan los borrados de la cuenta. Sin reinicio. Las escenas/instantáneas de los dispositivos existentes no se tocan: usa el botón de actualización por dispositivo.",
|
|
118
119
|
"infoOpenapiMqttConnectedDesc": "Canal push para eventos de sensores y electrodomésticos. Independiente del MQTT AWS-IoT usado para el estado de las lámparas Govee.",
|
|
119
120
|
"infoConnectionDesc": "Verdadero mientras el adaptador funciona: al menos un dispositivo responde o, antes de conocer ningún dispositivo, el receptor LAN está activo. Si un dispositivo concreto es accesible lo indica su propio info.online.",
|
|
120
121
|
"infoCloudConnectedDesc": "Verdadero mientras la API en la nube de Govee responde. Necesita la clave API y proporciona la lista de dispositivos, escenas, segmentos y comandos en la nube.",
|
|
121
122
|
"infoMqttConnectedDesc": "Verdadero mientras la conexión de cuenta en tiempo real está activa. Necesita correo electrónico y contraseña y envía los cambios de estado por sí misma, en lugar de que el adaptador los consulte.",
|
|
122
|
-
"diagnosticsFolder": "Informes de diagnóstico",
|
|
123
123
|
"diagnosticsLastExport": "Última exportación de diagnóstico",
|
|
124
124
|
"diagnosticsLastExportDesc": "Cuándo se generó el último informe de diagnóstico de este dispositivo.",
|
|
125
125
|
"segmentChannel": "Segmento %s",
|
|
@@ -158,5 +158,20 @@
|
|
|
158
158
|
"descMembers": "Los dispositivos que este grupo de la app conmuta juntos, con su nombre en el árbol de objetos.",
|
|
159
159
|
"descMusicAutoColor": "Si la luz elige sus propios colores en el modo música en lugar de mantener un color fijo.",
|
|
160
160
|
"descDreamViewToggle": "Si la luz sigue los colores de la pantalla que capta una cámara Govee DreamView.",
|
|
161
|
-
"descDiyScene": "Una de las escenas que creaste tú mismo en el editor DIY de la app Govee — vacío hasta que crees una."
|
|
161
|
+
"descDiyScene": "Una de las escenas que creaste tú mismo en el editor DIY de la app Govee — vacío hasta que crees una.",
|
|
162
|
+
"capMainLightToggle": "Luz principal",
|
|
163
|
+
"capBackgroundLightToggle": "Luz de fondo",
|
|
164
|
+
"capFanToggle": "Ventilador",
|
|
165
|
+
"capFanSpeedMode": "Velocidad del ventilador",
|
|
166
|
+
"capReverseAirflowToggle": "Flujo de aire inverso",
|
|
167
|
+
"capPillarLightToggle": "Luz de la columna",
|
|
168
|
+
"capBaseLightToggle": "Luz de la base",
|
|
169
|
+
"descReverseAirflowToggle": "Si el ventilador gira al revés y empuja el aire hacia arriba en lugar de hacia abajo: el ajuste de invierno de un ventilador de techo.",
|
|
170
|
+
"descPillarLightToggle": "Si la parte vertical de la lámpara está encendida; la base tiene su propio interruptor.",
|
|
171
|
+
"descBaseLightToggle": "Si la base de la lámpara está encendida; la parte vertical tiene su propio interruptor.",
|
|
172
|
+
"descWarmMistToggle": "Si el humidificador calienta el agua antes de nebulizarla: vapor cálido en lugar de frío.",
|
|
173
|
+
"descPresetScene": "Una lista desplegable con las escenas predefinidas de este modelo; cuáles existen lo define Govee y varía según el modelo.",
|
|
174
|
+
"descMembersUnreachable": "Qué miembros del grupo están ahora inaccesibles, con los nombres del árbol de objetos: vacío mientras todos respondan.",
|
|
175
|
+
"portLabel": "Puerto de escucha LAN",
|
|
176
|
+
"portTooltip": "Fijado por el protocolo LAN de Govee: las respuestas de las lámparas llegan por UDP 4002. Una segunda instancia en este host no puede compartirlo — el admin avisa si otro adaptador usa el puerto."
|
|
162
177
|
}
|
package/admin/i18n/fr.json
CHANGED
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
"errDeviceNotFound": "Appareil introuvable : {key}",
|
|
34
34
|
"errNoSegments": "{name} n'a pas de segments – assistant non applicable.",
|
|
35
35
|
"errDeviceOffline": "{name} n'est pas joignable actuellement — l'assistant a besoin que l'appareil réponde.",
|
|
36
|
+
"errCommandRefused": "{name} : la commande n'a pas pu être envoyée ({msg}) — l'assistant s'est arrêté.",
|
|
36
37
|
"errNoWizard": "Aucun assistant actif. Veuillez d'abord cliquer sur « Démarrer ».",
|
|
37
38
|
"errNoWizardShort": "Aucun assistant actif",
|
|
38
39
|
"errUnknownAction": "Action inconnue : {action}",
|
|
@@ -71,8 +72,8 @@
|
|
|
71
72
|
"musicAutoColor": "Couleur auto musique",
|
|
72
73
|
"musicMode": "Mode musique",
|
|
73
74
|
"musicSensitivity": "Sensibilité musicale",
|
|
74
|
-
"
|
|
75
|
-
"
|
|
75
|
+
"bindLabel": "Interface réseau",
|
|
76
|
+
"bindTooltip": "Sélectionnez l'interface réseau pour la découverte et le contrôle LAN. Conservez la valeur par défaut (0.0.0.0 = toutes) sauf si cet hôte possède plusieurs interfaces.",
|
|
76
77
|
"online": "En ligne",
|
|
77
78
|
"power": "Marche/Arrêt",
|
|
78
79
|
"refreshCloud": "Actualiser données Cloud",
|
|
@@ -106,20 +107,19 @@
|
|
|
106
107
|
"devicesTotal": "Appareils au total",
|
|
107
108
|
"devicesOnline": "Appareils en ligne",
|
|
108
109
|
"devicesAllOnline": "Tous les appareils en ligne",
|
|
110
|
+
"descDevicesAllOnline": "Vrai uniquement tant que tous les appareils connus sont joignables — sans appareil, la valeur reste fausse afin qu'une installation vide n'annonce pas l'exhaustivité.",
|
|
109
111
|
"information": "Information",
|
|
110
112
|
"infoConnection": "Adaptateur connecté",
|
|
111
113
|
"infoMqttConnected": "MQTT connecté",
|
|
112
114
|
"infoCloudConnected": "API Cloud connectée",
|
|
113
115
|
"infoOpenapiMqttConnected": "Govee OpenAPI MQTT connecté",
|
|
114
116
|
"devicesFolder": "Appareils",
|
|
115
|
-
"localSnapshotsFolder": "Snapshots locaux enregistrés par l'utilisateur",
|
|
116
117
|
"infoManualSyncDevices": "Synchroniser les appareils manuellement",
|
|
117
118
|
"infoManualSyncDevicesDesc": "Mettre à true pour synchroniser la liste des appareils avec le compte Govee : les nouveaux appareils sont ajoutés, ceux supprimés du compte sont retirés. Aucun redémarrage requis. Les scènes/instantanés des appareils existants ne sont pas modifiés — utiliser le bouton d'actualisation par appareil.",
|
|
118
119
|
"infoOpenapiMqttConnectedDesc": "Canal push pour les événements des capteurs et appareils. Indépendant du MQTT AWS-IoT utilisé pour l'état des lampes Govee.",
|
|
119
120
|
"infoConnectionDesc": "Vrai tant que l'adaptateur fonctionne : au moins un appareil répond ou, avant qu'un appareil ne soit connu, le récepteur LAN est actif. Pour savoir si un appareil précis est joignable, consultez son propre info.online.",
|
|
120
121
|
"infoCloudConnectedDesc": "Vrai tant que l'API cloud de Govee répond. Elle nécessite la clé API et fournit la liste des appareils, les scènes, les segments et les commandes cloud.",
|
|
121
122
|
"infoMqttConnectedDesc": "Vrai tant que la connexion au compte en temps réel est établie. Elle nécessite l'e-mail et le mot de passe et transmet les changements d'état d'elle-même, sans interrogation par l'adaptateur.",
|
|
122
|
-
"diagnosticsFolder": "Rapports de diagnostic",
|
|
123
123
|
"diagnosticsLastExport": "Dernier export de diagnostic",
|
|
124
124
|
"diagnosticsLastExportDesc": "Quand le dernier rapport de diagnostic a été généré pour cet appareil.",
|
|
125
125
|
"segmentChannel": "Segment %s",
|
|
@@ -158,5 +158,20 @@
|
|
|
158
158
|
"descMembers": "Les appareils que ce groupe de l'application commute ensemble, tels que nommés dans l'arbre d'objets.",
|
|
159
159
|
"descMusicAutoColor": "Si la lampe choisit elle-même ses couleurs en mode musique au lieu de garder une couleur fixe.",
|
|
160
160
|
"descDreamViewToggle": "Si la lampe suit les couleurs de l'écran captées par une caméra Govee DreamView.",
|
|
161
|
-
"descDiyScene": "Une des scènes que vous avez créées vous-même dans l'éditeur DIY de l'application Govee — vide tant que vous n'en avez pas créé."
|
|
161
|
+
"descDiyScene": "Une des scènes que vous avez créées vous-même dans l'éditeur DIY de l'application Govee — vide tant que vous n'en avez pas créé.",
|
|
162
|
+
"capMainLightToggle": "Lumière principale",
|
|
163
|
+
"capBackgroundLightToggle": "Lumière d'ambiance",
|
|
164
|
+
"capFanToggle": "Ventilateur",
|
|
165
|
+
"capFanSpeedMode": "Vitesse du ventilateur",
|
|
166
|
+
"capReverseAirflowToggle": "Flux d'air inversé",
|
|
167
|
+
"capPillarLightToggle": "Lumière de la colonne",
|
|
168
|
+
"capBaseLightToggle": "Lumière du socle",
|
|
169
|
+
"descReverseAirflowToggle": "Si le ventilateur tourne dans l'autre sens et pousse l'air vers le haut plutôt que vers le bas — le réglage hiver d'un ventilateur de plafond.",
|
|
170
|
+
"descPillarLightToggle": "Si la partie verticale du lampadaire est allumée ; le socle a son propre interrupteur.",
|
|
171
|
+
"descBaseLightToggle": "Si le socle du lampadaire est allumé ; la partie verticale a son propre interrupteur.",
|
|
172
|
+
"descWarmMistToggle": "Si l'humidificateur chauffe l'eau avant de la vaporiser — brume chaude au lieu de froide.",
|
|
173
|
+
"descPresetScene": "Une liste déroulante des scènes prêtes à l'emploi de ce modèle ; lesquelles existent dépend de Govee et varie selon le modèle.",
|
|
174
|
+
"descMembersUnreachable": "Quels membres du groupe sont actuellement injoignables, nommés comme dans l'arborescence — vide tant que tous répondent.",
|
|
175
|
+
"portLabel": "Port d'écoute LAN",
|
|
176
|
+
"portTooltip": "Imposé par le protocole LAN Govee : les réponses des lampes arrivent sur UDP 4002. Une seconde instance sur cet hôte ne peut pas le partager — l'admin avertit si un autre adaptateur utilise le port."
|
|
162
177
|
}
|