iobroker.satellite-display 0.0.1 → 0.0.2
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/LICENSE +21 -21
- package/README.md +12 -0
- package/admin/custom/assets/Components-Dd31YUW5.js +1 -0
- package/admin/custom/customComponents.js +1 -1
- package/admin/custom/i18n/de.json +6 -1
- package/admin/custom/i18n/en.json +6 -1
- package/admin/custom/i18n/es.json +6 -1
- package/admin/custom/i18n/fr.json +6 -1
- package/admin/custom/i18n/it.json +6 -1
- package/admin/custom/i18n/nl.json +6 -1
- package/admin/custom/i18n/pl.json +6 -1
- package/admin/custom/i18n/pt.json +6 -1
- package/admin/custom/i18n/ru.json +6 -1
- package/admin/custom/i18n/uk.json +6 -1
- package/admin/custom/i18n/zh-cn.json +6 -1
- package/io-package.json +14 -1
- package/lib/layout.js +30 -5
- package/lib/satellite.js +20 -1
- package/lib/values.js +29 -2
- package/main.js +66 -9
- package/package.json +1 -1
- package/admin/custom/assets/Components-Dqt07U-e.js +0 -1
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 sadam6752-tech <sadam6752@gmail.com>
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 sadam6752-tech <sadam6752@gmail.com>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -46,6 +46,7 @@ to 8 tiles. Swipe left from the clock to reach them; a page without tiles is ski
|
|
|
46
46
|
| Switch | name, toggle; the tile lights up when on | small, square, wide | toggles the state |
|
|
47
47
|
| Dimmer | name, toggle, slider, percent | wide, large | toggle and slider write the states |
|
|
48
48
|
| Button | icon, name | small, square, wide | writes `true` to the state |
|
|
49
|
+
| Thermostat | name, arc with the current temperature, − target +, a dot for the heating relay | square, large | − and + write the target |
|
|
49
50
|
|
|
50
51
|
## Settings
|
|
51
52
|
|
|
@@ -66,6 +67,11 @@ Details of the kinds:
|
|
|
66
67
|
writes the level when it is released. The second state is its on/off. Without a second state a level of 0 is off,
|
|
67
68
|
and switching on restores the last level.
|
|
68
69
|
- **Button:** writes `true` (or `1` for a number state), e.g. to a scene or a script trigger.
|
|
70
|
+
- **Thermostat:** three states: the current temperature (the arc), the target temperature (written by − and +)
|
|
71
|
+
and, optional, the heating relay (the dot: green on, grey off). − and + change the target on the screen at
|
|
72
|
+
once by the step (0.5 unless set); one second after the last press the adapter writes it. The scale and the
|
|
73
|
+
limits of the target come from the object of the target temperature (`min`/`max`), else 5-30. Needs the
|
|
74
|
+
satellite firmware **2.0.1**; an older firmware is reported in the log and the tile is left out.
|
|
69
75
|
- A value that is no number (text, `true`/`false`) shows as text on a value tile.
|
|
70
76
|
|
|
71
77
|
The toggle and the slider change at once on the screen. When the device does not follow, the tile shows the real
|
|
@@ -98,6 +104,12 @@ again by itself.
|
|
|
98
104
|
### **WORK IN PROGRESS**
|
|
99
105
|
-->
|
|
100
106
|
|
|
107
|
+
### 0.0.2 (2026-11-09)
|
|
108
|
+
|
|
109
|
+
- Thermostat tile: current temperature in an arc, the target temperature with − and +, a dot for the heating
|
|
110
|
+
relay (satellite firmware 2.0.1)
|
|
111
|
+
- Released through GitHub Actions with provenance
|
|
112
|
+
|
|
101
113
|
### 0.0.1 (2026-11-09)
|
|
102
114
|
|
|
103
115
|
- First version: tile pages on the touch display of ESPHome voice satellites, with a graphical tile editor
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./_virtual_mf___mfe_internal__SatDisplay__mf_owner__180606781360439__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-BtcMQbqk.js";import{$r as e,Dn as t,K as n,Mt as r,Qr as i,Qt as a,Sn as o,Yt as s,Zr as c,Zt as l,_ as u,cn as d,en as f,m as p,on as m,pt as h,rn as g,tn as _,zn as v}from"./_virtual_mf___mfe_internal__SatDisplay__mf_owner__180606781360439__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-B7AZpjV-.js";import{t as y}from"./_virtual_mf___mfe_internal__SatDisplay__mf_owner__180606781360439__loadShare__shared-B2hx53j0.js";var b={s:[1,1],q:[1,2],w:[2,1],l:[2,2]},x={value:[`s`,`q`,`w`,`l`],gauge:[`q`,`l`],bar:[`q`,`w`,`l`],chart:[`w`,`l`],switch:[`s`,`q`,`w`],dimmer:[`w`,`l`],button:[`s`,`q`,`w`],thermostat:[`q`,`l`]},S=`lightbulb.lamp.ceiling-light.power-plug.power.fan.radiator.thermometer.water-percent.flash.solar-power.battery.window-closed.window-open.door.garage.blinds.lock.lock-open.bell.television.movie.music.speaker.coffee.washing-machine.dishwasher.car.home.bed.sofa.shower.weather-sunny.weather-night.alarm.play.pause.stop.check.close`.split(`.`);function C(e,t){let n=e=>String(e||``).trim().toLowerCase().replace(/[^a-z0-9_-]+/g,`_`).replace(/^_+|_+$/g,``)||`satellite`;return n(e)===n(t)}function w(e,t,n){let[r,i]=b[e];return t>=0&&n>=0&&t+r<=2&&n+i<=4}function T(e,t){let[n,r]=b[e.size],[i,a]=b[t.size];return e.col<t.col+i&&t.col<e.col+n&&e.row<t.row+a&&t.row<e.row+r}function E(e,t,n,r,i,a,o=-1){return w(r,i,a)?!e.some((e,s)=>s!==o&&e.enabled!==!1&&C(e.satellite,t)&&Number(e.page)===n&&b[e.size]&&T(e,{size:r,col:i,row:a})):!1}function D(e,t,n,r,i=-1){for(let a=0;a<4;a++)for(let o=0;o<2;o++)if(E(e,t,n,r,o,a,i))return{col:o,row:a};return null}function O(e,t,n,r,i){return e.findIndex(e=>e.enabled!==!1&&C(e.satellite,t)&&Number(e.page)===n&&b[e.size]&&T(e,{size:`s`,col:r,row:i}))}function k(e,t,n){return e.map((e,t)=>({t:e,i:t})).filter(e=>e.t.enabled!==!1&&C(e.t.satellite,t)&&Number(e.t.page)===n).slice(8).map(e=>e.i)}function A(e,t,n,r){return{enabled:!0,satellite:e,page:t,col:n,row:r,size:`s`,type:`value`,state:``,state2:``,state3:``,label:``,unit:``,icon:``,decimals:``,min:``,max:``,step:``}}var j=1.5,M=e=>Math.round(e*j),N=e=>6+e*157,P=e=>6+Math.floor(e*117/2),F={value:`sd_kind_value`,gauge:`sd_kind_gauge`,bar:`sd_kind_bar`,chart:`sd_kind_chart`,switch:`sd_kind_switch`,dimmer:`sd_kind_dimmer`,button:`sd_kind_button`,thermostat:`sd_kind_thermostat`},I={s:`1 × 1`,q:`1 × 2`,w:`2 × 1`,l:`2 × 2`},L={screen:`#0B1118`,tile:`#18212B`,tileOn:`#0C4A6E`,label:`#8A9AAC`,accent:`#38BDF8`,track:`#2E3A47`,heatOn:`#4CAF50`,heatOff:`#4B5563`},R={TileEditor:class extends y{constructor(e){super(e),this.state={...this.state,satellite:``,page:1,selected:-1,pickFor:null,dragging:-1,values:{},names:{}}}async componentDidMount(){await super.componentDidMount();let e=this.satelliteNames();e.length&&this.setState({satellite:e[0]},()=>void this.readStates())}tiles(){let e=y.getValue(this.props.data,`tiles`);return Array.isArray(e)?e:[]}satelliteNames(){let e=y.getValue(this.props.data,`satellites`),t=(Array.isArray(e)?e:[]).map(e=>String((e==null?void 0:e.name)||``).trim()).filter(Boolean);for(let e of this.tiles()){let n=String(e.satellite||``).trim();n&&!t.some(e=>C(e,n))&&t.push(n)}return t}isConfigured(e){let t=y.getValue(this.props.data,`satellites`);return(Array.isArray(t)?t:[]).some(t=>C((t==null?void 0:t.name)||``,e))}setTiles(e,t=this.state.selected){this.setState({selected:t},()=>void this.onChange(`tiles`,e,()=>void this.readStates()))}update(e,t){let n=this.tiles().map((n,r)=>r===e?{...n,...t}:n);this.setTiles(n)}async readStates(){let e=this.props.oContext.socket,t=new Set;for(let e of this.pageTiles())for(let n of[e.tile.state,e.tile.state2,e.tile.state3])n&&!(n in this.state.values)&&t.add(n);if(!t.size)return;let n={},r={},i=u.getLanguage();for(let o of t)try{var a;let t=await e.getState(o);n[o]=t==null?void 0:t.val;let s=await e.getObject(o),c=s==null||(a=s.common)==null?void 0:a.name;r[o]=typeof c==`object`&&c?c[i]||c.en||``:String(c||``)}catch{n[o]=void 0}this.setState(e=>({values:{...e.values,...n},names:{...e.names,...r}}))}pageTiles(){return this.tiles().map((e,t)=>({tile:e,index:t})).filter(e=>e.tile.enabled!==!1&&C(e.tile.satellite,this.state.satellite)&&Number(e.tile.page)===this.state.page&&!!b[e.tile.size])}addAt(e,t){let n=[...this.tiles(),A(this.state.satellite,this.state.page,e,t)];this.setTiles(n,n.length-1)}moveTo(e,t,n){let r=this.tiles()[e];r&&E(this.tiles(),this.state.satellite,this.state.page,r.size,t,n,e)&&this.update(e,{col:t,row:n})}remove(e){this.setTiles(this.tiles().filter((t,n)=>n!==e),-1)}changeKind(e,t){let n=this.tiles()[e],{size:r,col:i,row:a}=n;if(!x[t].includes(r)){let o=x[t].find(t=>E(this.tiles(),n.satellite,Number(n.page),t,i,a,e));if(o)r=o;else for(let o of x[t]){let t=D(this.tiles(),n.satellite,Number(n.page),o,e);if(t){r=o,{col:i,row:a}=t;break}}}this.update(e,{type:t,size:r,col:i,row:a,state2:t===`dimmer`||t===`thermostat`?n.state2:``,state3:t===`thermostat`&&n.state3||``})}changePage(e,t){let n=this.tiles()[e],r=D(this.tiles(),n.satellite,t,n.size,e);r&&(this.update(e,{page:t,...r}),this.setState({page:t}))}renderTileFace(t,n,r){let a=this.state.values[t.state],o=t.label||this.state.names[t.state]||t.state.split(`.`).pop()||u.t(`sd_no_state`),s=typeof a==`number`?a:NaN,l=t.unit&&t.type!==`dimmer`?` ${t.unit}`:``,d=a==null?`–`:typeof a==`number`?`${Number(a.toFixed(t.decimals===``||t.decimals===null?1:Number(t.decimals)))}${l}`:`${String(a)}${typeof a==`boolean`?``:l}`,f=t.type===`dimmer`&&t.state2?!!this.state.values[t.state2]:a===!0||typeof a==`number`&&a>0,p=t.min===``||t.min===null?0:Number(t.min),m=t.max===``||t.max===null?100:Number(t.max),h=Number.isFinite(s)&&m>p?Math.max(0,Math.min(1,(s-p)/(m-p))):.5,g=i(`div`,{style:{color:L.label,fontSize:M(10),whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`},children:o}),_=r>M(60),v=i(`div`,{style:{fontSize:M(_?22:14)},children:d}),y=i(`div`,{style:{width:M(26),height:M(14),borderRadius:M(7),background:f?L.accent:L.track,position:`relative`,flex:`none`},children:i(`div`,{style:{position:`absolute`,top:M(2),left:M(f?14:2),width:M(10),height:M(10),borderRadius:`50%`,background:`#fff`}})}),b=(t,n)=>{let r=t/2-M(4),a=Math.PI*2*r*.75;return e(`svg`,{width:t,height:t,style:n,children:[i(`circle`,{cx:t/2,cy:t/2,r,fill:`none`,stroke:L.track,strokeWidth:M(5),strokeDasharray:`${a} ${a*2}`,transform:`rotate(135 ${t/2} ${t/2})`,strokeLinecap:`round`}),i(`circle`,{cx:t/2,cy:t/2,r,fill:`none`,stroke:L.accent,strokeWidth:M(5),strokeDasharray:`${a*h} ${a*3}`,transform:`rotate(135 ${t/2} ${t/2})`,strokeLinecap:`round`}),i(`text`,{x:t/2,y:t/2+M(4),textAnchor:`middle`,fill:`#fff`,fontSize:M(11),children:d})]})};switch(t.type){case`thermostat`:{let n=this.state.values[t.state2],r=Number(t.step)>0?Number(t.step):.5,a=typeof n==`number`?`${n.toFixed(+(r<1))}${t.unit?` ${t.unit}`:``}`:`–`,o=t.state3?this.state.values[t.state3]:void 0,s=t.state3&&o!=null?i(`div`,{style:{position:`absolute`,right:M(6),top:M(5),width:M(10),height:M(10),borderRadius:`50%`,background:o===!0||Number(o)>0?L.heatOn:L.heatOff}}):null,l=e(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,color:L.label,flex:1},children:[i(`span`,{style:{fontSize:M(18),fontWeight:700},children:`−`}),i(`span`,{style:{fontSize:t.size===`l`?M(22):M(11),color:t.size===`l`?`#fff`:L.label},children:a}),i(`span`,{style:{fontSize:M(18),fontWeight:700},children:`+`})]});return t.size===`l`?e(c,{children:[s,g,e(`div`,{style:{display:`flex`,alignItems:`center`,gap:M(12)},children:[b(M(52),{display:`block`,flex:`none`}),l]})]}):e(c,{children:[s,g,b(M(46),{display:`block`,margin:`0 auto`}),i(`div`,{style:{display:`flex`,marginTop:-M(4)},children:l})]})}case`gauge`:{let t=M(56),n=t/2-M(4),r=Math.PI*2*n*.75;return e(c,{children:[g,e(`svg`,{width:t,height:t,style:{display:`block`,margin:`${M(2)}px auto 0`},children:[i(`circle`,{cx:t/2,cy:t/2,r:n,fill:`none`,stroke:L.track,strokeWidth:M(5),strokeDasharray:`${r} ${r*2}`,transform:`rotate(135 ${t/2} ${t/2})`,strokeLinecap:`round`}),i(`circle`,{cx:t/2,cy:t/2,r:n,fill:`none`,stroke:L.accent,strokeWidth:M(5),strokeDasharray:`${r*h} ${r*3}`,transform:`rotate(135 ${t/2} ${t/2})`,strokeLinecap:`round`}),i(`text`,{x:t/2,y:t/2+M(4),textAnchor:`middle`,fill:`#fff`,fontSize:M(11),children:d})]})]})}case`bar`:return e(c,{children:[g,v,i(`div`,{style:{height:M(5),background:L.track,borderRadius:M(3),marginTop:M(_?14:2)},children:i(`div`,{style:{width:`${h*100}%`,height:`100%`,background:L.accent,borderRadius:M(3)}})})]});case`chart`:return e(c,{children:[g,v,i(`svg`,{width:n-M(16),height:M(18),style:{display:`block`},children:i(`polyline`,{fill:`none`,stroke:L.accent,strokeWidth:2,points:[0,.6,.4,.7,.3,.5,.2,.45,.35].map((e,t)=>`${t*(n-M(16))/8},${e*M(18)}`).join(` `)})})]});case`switch`:return e(`div`,{style:{display:`flex`,alignItems:_?`flex-start`:`center`,gap:M(6),height:`100%`,flexDirection:_?`column`:`row`,justifyContent:`space-between`},children:[i(`div`,{style:{flex:1,minWidth:0},children:g}),i(`div`,{style:{alignSelf:`flex-end`},children:y})]});case`dimmer`:return e(`div`,{style:{display:`flex`,alignItems:`center`,gap:M(6),height:`100%`},children:[i(`div`,{style:{width:M(40),minWidth:0},children:g}),y,i(`div`,{style:{flex:1,height:M(5),background:L.track,borderRadius:M(3)},children:i(`div`,{style:{width:`${Number.isFinite(s)?Math.max(0,Math.min(100,s)):50}%`,height:`100%`,background:L.accent,borderRadius:M(3)}})}),i(`div`,{style:{fontSize:M(11),width:M(30),textAlign:`right`},children:Number.isFinite(s)?`${Math.round(s)} %`:`–`})]});case`button`:return e(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`center`,height:`100%`,gap:M(6),flexDirection:_?`column`:`row`},children:[t.icon?e(`span`,{style:{color:L.accent,fontSize:M(9)},children:[`◉ `,t.icon]}):null,i(`span`,{style:{fontSize:M(11)},children:o})]});default:return r<=M(53)&&n<=M(151)?e(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,height:`100%`},children:[i(`div`,{style:{minWidth:0,flex:1},children:g}),i(`div`,{style:{fontSize:M(13)},children:d})]}):e(c,{children:[g,v]})}}renderScreen(){let t=this.tiles(),n=new Set(k(t,this.state.satellite,this.state.page)),a=[];for(let e=0;e<4;e++)for(let n=0;n<2;n++)O(t,this.state.satellite,this.state.page,n,e)===-1&&a.push(i(f,{title:u.t(`sd_add_here`),children:i(`div`,{onClick:()=>this.addAt(n,e),onDragOver:e=>e.preventDefault(),onDrop:t=>{t.preventDefault(),this.moveTo(this.state.dragging,n,e)},style:{position:`absolute`,left:M(N(n)),top:M(P(e)),width:M(151),height:M(P(e+1)-6-P(e)),border:`1px dashed #3a4654`,borderRadius:M(8),display:`flex`,alignItems:`center`,justifyContent:`center`,color:`#56657a`,cursor:`pointer`,boxSizing:`border-box`},children:i(r,{})})},`c${n}${e}`));return e(`div`,{style:{position:`relative`,width:M(320),height:M(240),background:L.screen,borderRadius:10,outline:`8px solid #2a2a2a`,margin:8,flex:`none`,fontFamily:`Roboto, sans-serif`},children:[a,this.pageTiles().map(({tile:e,index:t})=>{let[r,a]=b[e.size],o=M(r===2?308:151),s=M(P(e.row+a)-6-P(e.row)),c=t===this.state.selected,l=e.type===`switch`&&(this.state.values[e.state]===!0||Number(this.state.values[e.state])>0);return i(`div`,{draggable:!0,onDragStart:()=>this.setState({dragging:t,selected:t}),onDragEnd:()=>this.setState({dragging:-1}),onDragOver:e=>e.preventDefault(),onDrop:e=>{var t;e.preventDefault();let n=(t=e.currentTarget.parentElement)==null?void 0:t.getBoundingClientRect();if(n){let t=Math.min(1,Math.max(0,Math.floor((e.clientX-n.left)/M(157)))),r=Math.min(3,Math.max(0,Math.floor((e.clientY-n.top)/M(58.5))));this.moveTo(this.state.dragging,t,r)}},onClick:()=>this.setState({selected:t}),title:n.has(t)?u.t(`sd_too_many`):``,style:{position:`absolute`,left:M(N(e.col)),top:M(P(e.row)),width:o,height:s,boxSizing:`border-box`,padding:`${M(4)}px ${M(7)}px`,display:e.type===`thermostat`?`flex`:void 0,flexDirection:e.type===`thermostat`?`column`:void 0,background:l?L.tileOn:L.tile,borderRadius:M(8),color:`#fff`,cursor:`grab`,overflow:`hidden`,border:`2px solid ${c?L.accent:n.has(t)?`#EF4444`:`transparent`}`,opacity:n.has(t)?.5:1,userSelect:`none`},children:this.renderTileFace(e,o,s)},t)})]})}renderStateField(n,r,a,o){return e(g,{sx:{display:`flex`,gap:1,alignItems:`center`},children:[i(s,{variant:`standard`,fullWidth:!0,label:u.t(o),value:r[a]||``,onChange:e=>this.update(n,{[a]:e.target.value})}),i(t,{size:`small`,title:u.t(`sd_pick_state`),onClick:()=>this.setState({pickFor:a}),children:i(h,{})})]})}renderPanel(){let t=this.state.selected,r=this.tiles()[t];if(!r||!C(r.satellite,this.state.satellite))return i(_,{variant:`body2`,sx:{opacity:.7,p:1},children:u.t(`sd_hint`)});let f=this.tiles(),p=e=>e===``?``:Number(e),h=r.type===`gauge`||r.type===`bar`||r.type===`chart`||r.type===`thermostat`,y=r.type===`dimmer`?`sd_level_state`:r.type===`thermostat`?`sd_current_state`:`sd_state`;return e(g,{sx:{display:`flex`,flexDirection:`column`,gap:1.5,minWidth:260,maxWidth:360,flex:1},children:[i(o,{control:i(d,{checked:r.enabled!==!1,onChange:e=>this.update(t,{enabled:e.target.checked})}),label:u.t(`sd_active`)}),i(s,{select:!0,variant:`standard`,label:u.t(`sd_kind`),value:r.type,onChange:e=>this.changeKind(t,e.target.value),children:Object.keys(x).map(e=>i(v,{value:e,children:u.t(F[e])},e))}),e(g,{children:[i(_,{variant:`caption`,sx:{opacity:.7},children:u.t(`sd_size`)}),i(a,{exclusive:!0,size:`small`,value:r.size,sx:{display:`flex`},onChange:(e,n)=>n&&this.update(t,{size:n}),children:x[r.type].map(e=>i(l,{value:e,sx:{flex:1},disabled:e!==r.size&&!E(f,r.satellite,Number(r.page),e,r.col,r.row,t),children:I[e]},e))})]}),this.renderStateField(t,r,`state`,y),r.type===`dimmer`?this.renderStateField(t,r,`state2`,`sd_onoff_state`):null,r.type===`thermostat`?this.renderStateField(t,r,`state2`,`sd_target_state`):null,r.type===`thermostat`?this.renderStateField(t,r,`state3`,`sd_relay_state`):null,e(g,{sx:{display:`flex`,gap:1},children:[i(s,{variant:`standard`,sx:{flex:2},label:u.t(`sd_label`),placeholder:this.state.names[r.state]||``,value:r.label||``,slotProps:{htmlInput:{maxLength:24}},onChange:e=>this.update(t,{label:e.target.value})}),r.type!==`dimmer`&&r.type!==`button`&&r.type!==`switch`?i(s,{variant:`standard`,sx:{flex:1},label:u.t(`sd_unit`),value:r.unit||``,slotProps:{htmlInput:{maxLength:8}},onChange:e=>this.update(t,{unit:e.target.value})}):null]}),r.type===`button`||r.type===`switch`&&r.size===`q`?e(s,{select:!0,variant:`standard`,label:u.t(`sd_icon`),value:r.icon||``,onChange:e=>this.update(t,{icon:e.target.value}),children:[i(v,{value:``,children:`–`}),S.map(e=>i(v,{value:e,children:e},e))]}):null,r.type===`value`||h?e(g,{sx:{display:`flex`,gap:1},children:[i(s,{variant:`standard`,type:`number`,sx:{flex:1},label:u.t(`sd_decimals`),value:r.decimals??``,slotProps:{htmlInput:{min:0,max:3}},onChange:e=>this.update(t,{decimals:p(e.target.value)})}),h?e(c,{children:[i(s,{variant:`standard`,type:`number`,sx:{flex:1},label:u.t(`sd_min`),value:r.min??``,onChange:e=>this.update(t,{min:p(e.target.value)})}),i(s,{variant:`standard`,type:`number`,sx:{flex:1},label:u.t(`sd_max`),value:r.max??``,onChange:e=>this.update(t,{max:p(e.target.value)})})]}):null]}):null,r.type===`thermostat`?i(s,{variant:`standard`,type:`number`,label:u.t(`sd_step`),placeholder:`0.5`,value:r.step??``,slotProps:{htmlInput:{min:.1,step:.1}},onChange:e=>this.update(t,{step:p(e.target.value)})}):null,i(s,{select:!0,variant:`standard`,label:u.t(`sd_page`),value:Number(r.page),onChange:e=>this.changePage(t,Number(e.target.value)),children:[1,2,3,4].map(e=>i(v,{value:e,disabled:e!==Number(r.page)&&!D(f,r.satellite,e,r.size,t),children:e},e))}),i(m,{color:`error`,variant:`outlined`,startIcon:i(n,{}),onClick:()=>this.remove(t),children:u.t(`sd_delete`)})]})}renderPicker(){let e=this.state.selected,t=this.state.pickFor,n=this.tiles()[e];return!t||!n?null:i(p,{dialogName:`satelliteDisplayTile`,socket:this.props.oContext.socket,theme:this.props.oContext.theme,themeType:this.props.oContext.themeType,imagePrefix:`../..`,selected:n[t]||``,onClose:()=>this.setState({pickFor:null}),onOk:n=>{let r=Array.isArray(n)?n[0]:n;this.setState({pickFor:null}),r&&this.update(e,{[t]:r})}})}renderItem(){let t=this.satelliteNames();if(!t.length)return i(_,{sx:{p:2},children:u.t(`sd_no_satellites`)});let n=t.find(e=>C(e,this.state.satellite))||t[0],r=[1,2,3,4].map(e=>this.tiles().filter(t=>t.enabled!==!1&&C(t.satellite,n)&&Number(t.page)===e).length),o=this.tiles().filter(e=>e.enabled===!1&&C(e.satellite,n)&&Number(e.page)===this.state.page).length;return e(g,{sx:{width:`100%`},children:[e(g,{sx:{display:`flex`,gap:2,alignItems:`center`,flexWrap:`wrap`,mb:2},children:[i(s,{select:!0,variant:`standard`,label:u.t(`sd_satellite`),value:n,sx:{minWidth:180},onChange:e=>this.setState({satellite:e.target.value,selected:-1},()=>void this.readStates()),children:t.map(e=>i(v,{value:e,children:this.isConfigured(e)?e:`${e} (${u.t(`sd_not_configured`)})`},e))}),i(a,{exclusive:!0,size:`small`,value:this.state.page,onChange:(e,t)=>t&&this.setState({page:t,selected:-1},()=>void this.readStates()),children:Array.from({length:4},(e,t)=>t+1).map(t=>e(l,{value:t,children:[u.t(`sd_page`),` `,t,r[t-1]?` (${r[t-1]})`:``]},t))})]}),e(g,{sx:{display:`flex`,gap:3,alignItems:`flex-start`,flexWrap:`wrap`},children:[e(g,{children:[this.renderScreen(),e(_,{variant:`caption`,component:`div`,sx:{opacity:.7,mt:2,maxWidth:M(320)},children:[u.t(`sd_how`),o?` ${u.t(`sd_disabled_count`,o)}`:``]})]}),this.renderPanel()]}),this.renderPicker()]})}}};export{R as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./assets/dist-ClWhWsnT.js";import{t}from"./assets/helpers-DYkm0lQU.js";import{t as n}from"./assets/vite-preload-helper-D97eqSzU.js";var r={},i=new Set,a=new Map;function o(e,t){let n=a.get(e);return n||(n=Promise.resolve().then(t).catch(t=>{throw a.delete(e),t}),a.set(e,n)),n}async function s(e){if(typeof document>`u`)return;let t=r[e]||[];await Promise.all(t.map(e=>{let t=new URL(e,import.meta.url).href;return i.has(t)||(i.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 c={"./Components":async()=>{await s(`./Components`),await Promise.all([]);let e=await o(`./Components`,()=>n(()=>import(`./assets/Components-Dqt07U-e.js`),[],import.meta.url)),t=e&&e.__mf_remote_dependency_pending;t&&typeof t.then==`function`&&await t;let r={};return Object.assign(r,e),Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),r}};typeof __VUE_HMR_RUNTIME__>`u`&&(globalThis.__VUE_HMR_RUNTIME__={createRecord(){},rerender(){},reload(){}});var l=`__mf_init__virtual:mf:__mfe_internal__SatDisplay__mf_owner__180606781360439__mf_v__runtimeInit__mf_v__.js__`,u=globalThis[l];if(!u){let e,t,n=new Promise((n,r)=>{e=n,t=r});u=globalThis[l]={initPromise:n,initResolve:e,initReject:t}}var d=u.initResolve,f=`__mf_module_cache__`;globalThis[f]||={share:{},remote:{}},globalThis[f].share||={},globalThis[f].remote||={};var p=globalThis[f];for(let e of Object.keys(p.share))if(e.startsWith(`default:`)){let t=e.slice(8);p.share[t]===void 0&&(p.share[t]=p.share[e])}else if(!e.includes(`:`)){let t=`default:`+e;p.share[t]===void 0&&(p.share[t]=p.share[e])}var m={},h=Array.isArray(`default`)?`default`:[`default`],g=`default`,_=`SatDisplay`,v=[[`react`],[`react/jsx-runtime`,`react-dom`,`@emotion/react`],[`react-dom/client`,`@emotion/styled`],[`@mui/material`],[`@mui/icons-material`],[`@iobroker/gui-components`],[`@iobroker/json-config`]],y,b;async function x(e){for(let t=0;;t++)try{return await e()}catch(e){throw e}}var S=Symbol(`mf.originalSharedProvider`),C={emit:e=>e},w=e=>Array.isArray(e.scope)?e.scope:[e.scope||`default`],T=(e,t)=>{if(t!==`version-first`)return e;let n={};for(let[t,r]of Object.entries(e))n[t]=Object.assign({},r,{[S]:r});return n},E=(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}},D=(e,n,r,i)=>{var a;if(!e||!r)return;let o=Object.fromEntries(Object.entries(e).filter(([,e])=>{var t;return(e==null||(t=e.shareConfig)==null?void 0:t.import)!==!1}));if(Object.keys(o).length===0)return;let s=w(r),c=T(o,i),l={};for(let e of s)l[e||`default`]={[n]:c};let u=(a=t.getRegisteredShare(l,n,{...r,scope:s,strategy:i},C))==null?void 0:a.shared;return(u==null?void 0:u[S])||u},O=(e,t,n,r)=>{var i;let a=e=>k(e,n),o=Object.fromEntries(Object.entries(e||{}).filter(([,e])=>{var t;return!a(e)&&(e==null||(t=e.shareConfig)==null?void 0:t.import)!==!1}));n!=null&&n.version&&((i=n.shareConfig)==null?void 0:i.import)!==!1&&(o[n.version]||(o[n.version]=n));let s=D(o,t,n,r);return a(s)?void 0:s},k=(e,t)=>e===t||!!(t!=null&&t.from&&(e==null?void 0:e.from)===t.from),A=(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)||(k(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},ee=(e,t,n,r,i,a,o,s,c)=>{let l=a.registered?A(e,t,n,r,i,a.version,a.provider,s,c):void 0,u=l||o;if(u&&(!a.registered||k(u,s)))return{provider:u,scopeRootProvider:l}};async function te(){return y||=x(()=>n(()=>import(`./assets/_virtual_mf-localSharedImportMap___mfe_internal__SatDisplay__mf_owner__1-Bp0DvNe1.js`),[],import.meta.url)).catch(e=>{throw y=void 0,e}),y}async function j(){return c}async function M(t={},n=[],r={}){var i,a;let o=(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}},c=Symbol.for(`module-federation.shared-cache-listeners`),l=Symbol.for(`module-federation.shared-cache-owners`),f=e=>{let t=e[l];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,l,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},y=(e,t)=>{var n;return(n=e[l])==null?void 0:n[t.canonical]},S=e=>{let t=[e,e==null?void 0:e.default];for(let e of t)if(e&&typeof e==`object`){for(let t of[`__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE`,`__TEST_INTERNALS`,`__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED`]){let n=e[t];if(n&&typeof n==`object`)return{internals:n}}if(typeof e.useState==`function`)return{hook:e.useState}}},C=(e,t)=>{if(e===t)return!0;let n=S(e),r=S(t);if(!n||!r)return!1;let i=n.internals,a=r.internals;return i!==void 0||a!==void 0?i!==void 0&&i===a:typeof n.hook==`function`&&n.hook===r.hook},w=(e,t,n,r)=>{var i;let a=s(e,t);if(a!==void 0&&C(a,n))return n;e[t.canonical]=n;let o=t.aliases||[];for(let t of o)Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0});let u=e[l];r===void 0?u&&delete u[t.canonical]:f(e)[t.canonical]=r;let d=(i=e[c])==null?void 0:i[t.canonical];if(d)for(let e of d)e(n);return n},T=Symbol.for(`module-federation.tree-shaking-shared-cache`),A=e=>{let t=e[T];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,T,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},j=(e,t,n,r)=>{if(!Array.isArray(n))return r;let i=[...new Set(n)].sort(),a=A(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},M=Symbol.for(`module-federation.tree-shaking-shared-selection-cache`),N=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},P=(e,t,n)=>{var r;let i=s(e,t);return i===void 0?(r=e[M])==null||(r=r[t.canonical])==null?void 0:r[n]:i},F=(e,t,n,r)=>{let i=N(e),a=i[t.canonical]||=Object.create(null);return a[n]=r,r},I=((i=globalThis.__FEDERATION__)==null?void 0:i.__INSTANCES__)||[],L=(a=n.find(e=>e==null?void 0:e.from))==null?void 0:a.from,ne=I.find(e=>{var n,r;return(e==null||(n=e.options)==null?void 0:n.name)===L&&(e==null||(r=e.shareScopeMap)==null?void 0:r.default)===t})||I.find(e=>{var n,r;return(e==null||(n=e.options)==null?void 0:n.name)!==_&&(e==null||(r=e.shareScopeMap)==null?void 0:r.default)===t}),R=Object.create(null),re=e=>{let t=Object.create(null);for(let[n,r]of Object.entries(e||{}))t[n]=Object.assign(Object.create(null),r);return t},ie=(e,t)=>{var n;for(let[i,a]of Object.entries(((n=q.shareScopeMap)==null?void 0:n[e])||{}))for(let[e,n]of Object.entries(a||{})){var r;if(!n||n.get===((r=B[i])==null?void 0:r.get))continue;let a=t[i]||={};a[e]===void 0&&(a[e]=n)}},ae=(e,t)=>{ie(e,t);let n=!ne&&Object.values(t||{}).some(e=>Object.values(e||{}).some(V)),r=n?re(t):t;return R[e]={host:t,runtime:r,isWebpackScope:n},r},oe=()=>{let e=Object.values(R).filter(({isWebpackScope:e})=>e);if(e.length!==0)for(let{host:t,runtime:n}of e)for(let[e,r]of Object.entries(t||{})){let t=n[e]||=Object.create(null);for(let[e,n]of Object.entries(r||{}))t[e]=n}},z=Object.create(null);for(let[e,n]of Object.entries(t)){let t=z[e]=Object.create(null);for(let[e,r]of Object.entries(n))t[e]=Object.assign({},r)}let{usedShared:B,usedRemotes:se}=await te();function V(e){if(typeof(e==null?void 0:e.get)!=`function`)return!1;let t=Function.prototype.toString.call(e.get);return t.includes(`__webpack_require__`)||/\.\s*e\s*\([^)]*\)\s*\.then\s*\(/.test(t)}let ce=Object.values(z).some(e=>Object.values(e||{}).some(V)),le=e=>{let t=e.split(`/`);return e.startsWith(`@`)?t.slice(0,2).join(`/`):t[0]},H=(e,n,r,i)=>{if(typeof O!=`function`)return;let a=le(e),o=!i||a===e?[[e,n]]:[[e,n],[a,B[a]]];for(let[n,i]of o){if(!i)continue;let a=O(r?n===e?r:z[n]:z[n]??t[n],n,i,`version-first`);if(a)return a}},ue=(e,t,n)=>{let r=H(e,t,n,!0);return r&&V(r)&&!r.lib&&!r.loaded?r:void 0};var U=m[g];if(U||=m[g]={from:_},n.indexOf(U)>=0)return;n.push(U);let de=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.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t},fe=[],pe=globalThis.window===void 0?await Promise.all([]):[],W=`__mf_vite_runtime_share_load_id__`,me=0,G=new Map,K=new Map,q=e({name:_,remotes:se,shared:B,plugins:[he(),ge(),...fe,...pe],shareStrategy:`version-first`});q.initShareScopeMap(`default`,ae(`default`,t));function he(){return{name:`vite-share-pin-lifecycle-plugin`,resolveShare(e){var t;let n=(t=e.shareInfo)==null?void 0:t[W],r=n===void 0?void 0:K.get(n);if(!r)return e;let i=e.resolver;return e.resolver=(...e)=>(r.pinned.reapply(),i(...e)),r.pinned.reveal(),e}}}function ge(){return{name:`vite-real-name-snapshot-plugin`,afterLoadSnapshot(e){let t=e&&e.remoteSnapshot,n=t&&t.globalName,r=t&&t.version;if(!n||!r||!t.remoteEntry)return e;let i=globalThis.__FEDERATION__&&globalThis.__FEDERATION__.moduleInfo,a=n+`:`+r;return i&&!i[a]&&(i[a]=t),e}}}let _e=q.sharedHandler.hooks.lifecycle.resolveShare;if(!q.__mfKeepAdoptedProviders){var J,ve;q.__mfKeepAdoptedProviders=!0,(J=q.sharedHandler)==null||(J=J.hooks)==null||(J=J.lifecycle)==null||(J=J.afterRegisterShare)==null||(ve=J.on)==null||ve.call(J,e=>{var t,n,r;let{shared:i,previousShared:a,registeredShared:o}=e||{};if((i==null||(t=i.shareConfig)==null?void 0:t.import)!==!1||o!==i||!a||((n=a.shareConfig)==null?void 0:n.import)===!1)return;let s=(r=q.shareScopeMap)==null||(r=r[e.scope])==null?void 0:r[e.pkgName];s&&s[i.version]===i&&(s[i.version]=a)})}let Y=new WeakMap;_e.on(e=>{var t;let n=(t=e.shareInfo)==null?void 0:t[W],r=e.resolver;return typeof r==`function`&&(e.resolver=(...t)=>{var i;let a=r(...t);if((a==null||(i=a.shared)==null||(i=i.shareConfig)==null?void 0:i.import)===!1&&typeof D==`function`&&B[e.pkgName]){var o,s;let t=D((o=e.shareScopeMap)==null||(o=o[e.scope])==null?void 0:o[e.pkgName],e.pkgName,B[e.pkgName],`version-first`);t&&((s=t.shareConfig)==null?void 0:s.import)!==!1&&(a={shared:t,useTreesShaking:a.useTreesShaking})}let c=a==null?void 0:a.shared;return c&&(typeof c==`object`||typeof c==`function`)&&!Y.has(c)&&Y.set(c,{from:c.from}),n!==void 0&&c&&G.set(n,c),a}),e});let ye=(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()}}},be=e=>Object.entries(e||{}).map(([e,t])=>({provider:t,version:e,from:t.from,registered:!0})),xe=(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=++me;K.set(r,{pinned:n});try{let n=await q.loadShare(e,{customShareInfo:{shareConfig:t,[W]:r}});return{factory:n===!1?void 0:n,selectedProvider:G.get(r)}}finally{G.delete(r),K.delete(r)}},Ce=async(e,t,n,r,i,a,o=!0)=>{let s=a.from,c=ye(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=be(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=Y.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)??xe(d,u);if(!c.release(!0,(h==null?void 0:h.provider)===c.provider)||!h)return;let g=Y.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}},X=new Set,we=new Map,Te=async(e,n,r)=>{var i;let a=!!((i=n.shareConfig)!=null&&i.singleton);if(!a&&n.canLiveRebind!==!1)try{var c,l;let i=O(r,e,n,`version-first`),u=E(r,i);if(!u||((c=n.shareConfig)==null?void 0:c.import)===!1&&k(i,n)||(i==null||(l=i.shareConfig)==null?void 0:l.import)===!1)return;let{version:d}=u;if(!a&&d!==n.version||!i.lib&&!i.loading&&!(i.loaded&&typeof i.get==`function`))return;let f=o(e,a,n.version,n.scope);if(s(p.share,f)!==void 0)return;let m=t[e],h=m==null?void 0:m[d];if(u.registered&&!k(h,i))return;let g,_=i.lib;if(!_&&V(i)||(!_&&i.loading&&(_=await i.loading),!_&&i.loaded&&typeof i.get==`function`&&(_=await i.get()),!_))return;let v=typeof _==`function`?_():_,y=await Promise.resolve(v),b=u.registered?h:i;g={provider:b,selection:{provider:b,version:d,from:i.from,registered:u.registered},resolved:y};let x=g==null?void 0:g.provider,S=g==null?void 0:g.selection;if(!S)return;let C=g==null?void 0:g.resolved;if(C===void 0||s(p.share,f)!==void 0||S.registered&&(m==null?void 0:m[S.version])!==x)return;w(p.share,f,de(C),S.from),X.add(x)}catch(t){console.error(`[Module Federation] Failed to bridge materialized shared module "`+e+`"`,t)}},Ee=async(e,n,r,i,a)=>{try{var c,l,u,d;let f=o(e,(c=n.shareConfig)==null?void 0:c.singleton,n.version,n.scope),m=s(p.share,f),h=y(p.share,f),g=O(r,e,n,`version-first`),v=g||D(r,e,n,`version-first`)||n,b=E(r,v);if(!b)return;let x=k(v,n),{version:S}=b;if(!((l=n.shareConfig)!=null&&l.singleton)&&S!==n.version)return;let C=i==null?void 0:i[S],T=ee(I,ne,t,`default`,e,b,g,C,`version-first`);if(!T&&!x)return;let{provider:A,scopeRootProvider:te}=T||{provider:v,scopeRootProvider:void 0};if(n.canLiveRebind===!1||((u=n.shareConfig)==null?void 0:u.import)===!1&&k(A,n)||(A==null||(d=A.shareConfig)==null?void 0:d.import)===!1||m!==void 0&&h!==_)return;let j=t[e],M=j==null?void 0:j[S];if(b.registered&&!te&&!k(M,A))return;let N=await Ce(e,n.shareConfig,j,S,M,A,b.registered&&!x),P=N==null?void 0:N.provider,F=N==null?void 0:N.selection;if(!F||k(P,n)||a&&(a.version!==F.version||!k({from:F.from},a.provider))||X.has(P))return;let L=N==null?void 0:N.resolved;if(L===void 0)return;let R=s(p.share,f),re=y(p.share,f);if(R!==void 0&&re!==_||F.registered&&(j==null?void 0:j[F.version])!==P)return;a||we.set(e,{version:F.version,provider:{from:F.from}}),X.add(P);let ie=de(L);w(p.share,f,ie,F.from)}catch(t){console.error(`[Module Federation] Failed to bridge external shared module "`+e+`"`,t)}};for(let e of v)await Promise.all(e.map(async e=>{let t=B[e];t&&t.materialize!==!1&&!t.treeShaking&&await Te(e,t,z[e])}));for(let[e,t]of Object.entries(B)){var De;if(t.treeShaking)continue;let n=o(e,(De=t.shareConfig)==null?void 0:De.singleton,t.version,t.scope);if(s(p.share,n)!==void 0)continue;let r=o(e,!0,t.version,t.scope),i=s(p.share,r);i!==void 0&&w(p.share,n,i,y(p.share,r))}let Oe=[`react`,`react/jsx-runtime`,`react-dom`,`@emotion/react`,`react-dom/client`,`@emotion/styled`,`@mui/material`,`@mui/icons-material`,`@iobroker/gui-components`,`@iobroker/json-config`],ke=[[`react`],[`react/jsx-runtime`,`react-dom`,`@emotion/react`],[`react-dom/client`,`@emotion/styled`],[`@mui/material`],[`@mui/icons-material`],[`@iobroker/gui-components`],[`@iobroker/json-config`]],Z=new Map(Oe.map((e,t)=>[e,t])),Ae={1:[0],2:[0],3:[0],4:[0,2],5:[3,0],6:[3,5,0,2],7:[6,0],8:[0,2,7,6],9:[3,5,8,7,6,0,2]},Q=Oe.filter(e=>{var t;return B[e]&&(B[e].materialize!==!1||((t=B[e].shareConfig)==null?void 0:t.import)===!1&&!B[e].lazy)});p.providerInit||=new Map;let je=(e,t)=>{let n=p.providerInit.get(e);if(n)return n;let r=Promise.resolve().then(t);return p.providerInit.set(e,r),r.catch(()=>p.providerInit.delete(e)),r};var Me=async e=>{let t=new Set(e);for(let e of ke)await Promise.all(e.filter(e=>t.has(e)).map(async e=>{var t,n,r;let i=B[e],a=o(e,(t=i.shareConfig)==null?void 0:t.singleton,i.version,i.scope);if(((n=i.shareConfig)==null?void 0:n.import)===!1||i.treeShaking||s(p.share,a)!==void 0)return;let c=o(e,!0,i.version,i.scope),l=s(p.share,c);if(l!==void 0){w(p.share,a,l,y(p.share,c));return}let u=typeof H==`function`?H(e,i):void 0;if(u){var d,f;let t=u.lib;if(!t&&u.loading&&(t=await u.loading),!t&&u.loaded&&typeof u.get==`function`&&(t=await u.get()),t){let e=typeof t==`function`?t():t,n=await Promise.resolve(e);w(p.share,a,(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.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t})(n),u.from);return}if(typeof V==`function`&&V(u)&&((d=i.shareConfig)!=null&&d.singleton||((f=E(z[e],u))==null?void 0:f.version)===i.version))return}let m=a.canonical,h=await je(m,async()=>{let e=await i.get(),t=typeof e==`function`?e():e;return Promise.resolve(t)});for(let t of((r=q.options.shared)==null?void 0:r[e])||[])t.get===i.get&&(t.eager=!0);let g=(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.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t})(h),v=g===h?{...h}:g;v.__esModule!==!0&&Object.defineProperty(v,"__esModule",{value:!0,enumerable:!1}),w(p.share,a,v,_)}))};let $=e=>{var t,n;let r=B[e];if(!r.treeShaking&&((t=r.shareConfig)==null?void 0:t.import)!==!1)return!1;let i=o(e,(n=r.shareConfig)==null?void 0:n.singleton,r.version,r.scope);return r.treeShaking?P(p.share,i,_)===void 0&&s(p.share,i)===void 0:s(p.share,i)===void 0},Ne=e=>{var t,n;let r=B[e],i=o(e,(t=r.shareConfig)==null?void 0:t.singleton,r.version,r.scope);return(r.treeShaking?P(p.share,i,_)??s(p.share,i):s(p.share,i))===void 0?r.treeShaking||((n=r.shareConfig)==null?void 0:n.import)===!1?!0:typeof O==`function`&&!!O(z[e],e,r,`version-first`):!1},Pe=e=>{let t=!0;for(;t;){t=!1;for(let n of Q){let r=Z.get(n);e.has(r)||(Ae[r]||[]).some(t=>e.has(t))&&(e.add(r),t=!0)}}return e},Fe=Pe(new Set(Q.filter(Ne).map(e=>Z.get(e)))),Ie=Q.filter(e=>!Fe.has(Z.get(e)));var Le=Q.filter(e=>Fe.has(Z.get(e)));await Me(Ie);try{await x(async()=>{await Promise.all(await q.initializeSharing(`default`,{strategy:`version-first`,from:`build`,initScope:n}))})}catch(e){console.error(`[Module Federation]`,e)}oe();let Re=async()=>{for(let e of v)await Promise.all(e.map(async e=>{let n=B[e];n&&n.materialize!==!1&&!n.treeShaking&&await Ee(e,n,t[e],z[e],void 0)}))};ce?b=Re:await Re();try{var ze;let e=(ze=globalThis.__FEDERATION__)==null?void 0:ze.__SHARE__,t=Object.create(null);if(e)for(let[,n]of Object.entries(e))for(let e of h){let r=n==null?void 0:n[e];if(r)for(let[e,n]of Object.entries(r)){let r=B==null?void 0:B[e],i=z[e],a=we.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||!k(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 of v)await Promise.all(e.map(async e=>{let n=t[e];n&&await Ee(e,B[e],n,z[e],we.get(e))}))}catch(e){console.error(`[Module Federation] Failed to bridge external shared modules`,e)}let Be=async()=>{},Ve=async(e,n)=>{var r,i;let a=o(e,(r=n.shareConfig)==null?void 0:r.singleton,n.version,n.scope),c=n.treeShaking?P(p.share,a,_):s(p.share,a);if(((i=n.shareConfig)==null?void 0:i.import)!==!1||c!==void 0||ue(e,n,z[e]))return;let l=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.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t},u=t==null?void 0:t[e],d=D(u,e,n,`version-first`)||n,f=E(u,d);if(!f)return;let m=e=>{var t;return e===n||(e==null||(t=e.shareConfig)==null?void 0:t.import)===!1};if(m(d))return;let{version:h}=f,g=u==null?void 0:u[h],v=await Ce(e,n.shareConfig,u,h,g,d,f.registered),y=v==null?void 0:v.selection,b=v==null?void 0:v.provider,x=v==null?void 0:v.resolved;if(!y||m(b)||x===void 0||(n.treeShaking?P(p.share,a,_):s(p.share,a))!==void 0||y.registered&&(u==null?void 0:u[y.version])!==b)return;let S=l(x);if(n.treeShaking){let e=n.treeShaking.providedExports??n.treeShaking.usedExports??[];j(p.share,a,e,S),F(p.share,a,_,S)}else w(p.share,a,S,y.from)},He=[],Ue=new Set;for(let e of Le){let t=B[e],n=Z.get(e);if($(e))try{var We;t.treeShaking?await Be(e,t):((We=t.shareConfig)==null?void 0:We.import)===!1&&await Ve(e,t)}catch(t){console.error(`[Module Federation] Failed to resolve runtime-only shared module "${e}"`,t)}$(e)&&Ue.add(n)}Pe(Ue),He.push(...Le.filter(e=>!Ue.has(Z.get(e)))),await Me(He);let Ge=new Map;return u.loadLazyShares=async e=>{let n=new Set(e);for(let e of v)await Promise.all(e.filter(e=>n.has(e)).map(e=>{let n=B[e];if(!n||!n.lazy||!$(e))return;let r=Ge.get(e);return r||(r=Ee(e,n,t[e],z[e],void 0).then(()=>$(e)?Ve(e,n):void 0),r.catch(()=>Ge.delete(e)),Ge.set(e,r)),r}))},d(q),q}async function N(e){let t=await j();if(!(e in t))throw Error(`[Module Federation] Module ${e} does not exist in container.`);return b&&await b(),p.pendingShareLoads&&await Promise.all(p.pendingShareLoads),t[e]().then(e=>()=>e)}export{N as get,M as init};
|
|
1
|
+
import{t as e}from"./assets/dist-ClWhWsnT.js";import{t}from"./assets/helpers-DYkm0lQU.js";import{t as n}from"./assets/vite-preload-helper-D97eqSzU.js";var r={},i=new Set,a=new Map;function o(e,t){let n=a.get(e);return n||(n=Promise.resolve().then(t).catch(t=>{throw a.delete(e),t}),a.set(e,n)),n}async function s(e){if(typeof document>`u`)return;let t=r[e]||[];await Promise.all(t.map(e=>{let t=new URL(e,import.meta.url).href;return i.has(t)||(i.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 c={"./Components":async()=>{await s(`./Components`),await Promise.all([]);let e=await o(`./Components`,()=>n(()=>import(`./assets/Components-Dd31YUW5.js`),[],import.meta.url)),t=e&&e.__mf_remote_dependency_pending;t&&typeof t.then==`function`&&await t;let r={};return Object.assign(r,e),Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),r}};typeof __VUE_HMR_RUNTIME__>`u`&&(globalThis.__VUE_HMR_RUNTIME__={createRecord(){},rerender(){},reload(){}});var l=`__mf_init__virtual:mf:__mfe_internal__SatDisplay__mf_owner__180606781360439__mf_v__runtimeInit__mf_v__.js__`,u=globalThis[l];if(!u){let e,t,n=new Promise((n,r)=>{e=n,t=r});u=globalThis[l]={initPromise:n,initResolve:e,initReject:t}}var d=u.initResolve,f=`__mf_module_cache__`;globalThis[f]||={share:{},remote:{}},globalThis[f].share||={},globalThis[f].remote||={};var p=globalThis[f];for(let e of Object.keys(p.share))if(e.startsWith(`default:`)){let t=e.slice(8);p.share[t]===void 0&&(p.share[t]=p.share[e])}else if(!e.includes(`:`)){let t=`default:`+e;p.share[t]===void 0&&(p.share[t]=p.share[e])}var m={},h=Array.isArray(`default`)?`default`:[`default`],g=`default`,_=`SatDisplay`,v=[[`react`],[`react/jsx-runtime`,`react-dom`,`@emotion/react`],[`react-dom/client`,`@emotion/styled`],[`@mui/material`],[`@mui/icons-material`],[`@iobroker/gui-components`],[`@iobroker/json-config`]],y,b;async function x(e){for(let t=0;;t++)try{return await e()}catch(e){throw e}}var S=Symbol(`mf.originalSharedProvider`),C={emit:e=>e},w=e=>Array.isArray(e.scope)?e.scope:[e.scope||`default`],T=(e,t)=>{if(t!==`version-first`)return e;let n={};for(let[t,r]of Object.entries(e))n[t]=Object.assign({},r,{[S]:r});return n},E=(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}},D=(e,n,r,i)=>{var a;if(!e||!r)return;let o=Object.fromEntries(Object.entries(e).filter(([,e])=>{var t;return(e==null||(t=e.shareConfig)==null?void 0:t.import)!==!1}));if(Object.keys(o).length===0)return;let s=w(r),c=T(o,i),l={};for(let e of s)l[e||`default`]={[n]:c};let u=(a=t.getRegisteredShare(l,n,{...r,scope:s,strategy:i},C))==null?void 0:a.shared;return(u==null?void 0:u[S])||u},O=(e,t,n,r)=>{var i;let a=e=>k(e,n),o=Object.fromEntries(Object.entries(e||{}).filter(([,e])=>{var t;return!a(e)&&(e==null||(t=e.shareConfig)==null?void 0:t.import)!==!1}));n!=null&&n.version&&((i=n.shareConfig)==null?void 0:i.import)!==!1&&(o[n.version]||(o[n.version]=n));let s=D(o,t,n,r);return a(s)?void 0:s},k=(e,t)=>e===t||!!(t!=null&&t.from&&(e==null?void 0:e.from)===t.from),A=(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)||(k(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},ee=(e,t,n,r,i,a,o,s,c)=>{let l=a.registered?A(e,t,n,r,i,a.version,a.provider,s,c):void 0,u=l||o;if(u&&(!a.registered||k(u,s)))return{provider:u,scopeRootProvider:l}};async function te(){return y||=x(()=>n(()=>import(`./assets/_virtual_mf-localSharedImportMap___mfe_internal__SatDisplay__mf_owner__1-Bp0DvNe1.js`),[],import.meta.url)).catch(e=>{throw y=void 0,e}),y}async function j(){return c}async function M(t={},n=[],r={}){var i,a;let o=(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}},c=Symbol.for(`module-federation.shared-cache-listeners`),l=Symbol.for(`module-federation.shared-cache-owners`),f=e=>{let t=e[l];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,l,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},y=(e,t)=>{var n;return(n=e[l])==null?void 0:n[t.canonical]},S=e=>{let t=[e,e==null?void 0:e.default];for(let e of t)if(e&&typeof e==`object`){for(let t of[`__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE`,`__TEST_INTERNALS`,`__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED`]){let n=e[t];if(n&&typeof n==`object`)return{internals:n}}if(typeof e.useState==`function`)return{hook:e.useState}}},C=(e,t)=>{if(e===t)return!0;let n=S(e),r=S(t);if(!n||!r)return!1;let i=n.internals,a=r.internals;return i!==void 0||a!==void 0?i!==void 0&&i===a:typeof n.hook==`function`&&n.hook===r.hook},w=(e,t,n,r)=>{var i;let a=s(e,t);if(a!==void 0&&C(a,n))return n;e[t.canonical]=n;let o=t.aliases||[];for(let t of o)Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0});let u=e[l];r===void 0?u&&delete u[t.canonical]:f(e)[t.canonical]=r;let d=(i=e[c])==null?void 0:i[t.canonical];if(d)for(let e of d)e(n);return n},T=Symbol.for(`module-federation.tree-shaking-shared-cache`),A=e=>{let t=e[T];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,T,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},j=(e,t,n,r)=>{if(!Array.isArray(n))return r;let i=[...new Set(n)].sort(),a=A(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},M=Symbol.for(`module-federation.tree-shaking-shared-selection-cache`),N=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},P=(e,t,n)=>{var r;let i=s(e,t);return i===void 0?(r=e[M])==null||(r=r[t.canonical])==null?void 0:r[n]:i},F=(e,t,n,r)=>{let i=N(e),a=i[t.canonical]||=Object.create(null);return a[n]=r,r},I=((i=globalThis.__FEDERATION__)==null?void 0:i.__INSTANCES__)||[],L=(a=n.find(e=>e==null?void 0:e.from))==null?void 0:a.from,ne=I.find(e=>{var n,r;return(e==null||(n=e.options)==null?void 0:n.name)===L&&(e==null||(r=e.shareScopeMap)==null?void 0:r.default)===t})||I.find(e=>{var n,r;return(e==null||(n=e.options)==null?void 0:n.name)!==_&&(e==null||(r=e.shareScopeMap)==null?void 0:r.default)===t}),R=Object.create(null),re=e=>{let t=Object.create(null);for(let[n,r]of Object.entries(e||{}))t[n]=Object.assign(Object.create(null),r);return t},ie=(e,t)=>{var n;for(let[i,a]of Object.entries(((n=q.shareScopeMap)==null?void 0:n[e])||{}))for(let[e,n]of Object.entries(a||{})){var r;if(!n||n.get===((r=B[i])==null?void 0:r.get))continue;let a=t[i]||={};a[e]===void 0&&(a[e]=n)}},ae=(e,t)=>{ie(e,t);let n=!ne&&Object.values(t||{}).some(e=>Object.values(e||{}).some(V)),r=n?re(t):t;return R[e]={host:t,runtime:r,isWebpackScope:n},r},oe=()=>{let e=Object.values(R).filter(({isWebpackScope:e})=>e);if(e.length!==0)for(let{host:t,runtime:n}of e)for(let[e,r]of Object.entries(t||{})){let t=n[e]||=Object.create(null);for(let[e,n]of Object.entries(r||{}))t[e]=n}},z=Object.create(null);for(let[e,n]of Object.entries(t)){let t=z[e]=Object.create(null);for(let[e,r]of Object.entries(n))t[e]=Object.assign({},r)}let{usedShared:B,usedRemotes:se}=await te();function V(e){if(typeof(e==null?void 0:e.get)!=`function`)return!1;let t=Function.prototype.toString.call(e.get);return t.includes(`__webpack_require__`)||/\.\s*e\s*\([^)]*\)\s*\.then\s*\(/.test(t)}let ce=Object.values(z).some(e=>Object.values(e||{}).some(V)),le=e=>{let t=e.split(`/`);return e.startsWith(`@`)?t.slice(0,2).join(`/`):t[0]},H=(e,n,r,i)=>{if(typeof O!=`function`)return;let a=le(e),o=!i||a===e?[[e,n]]:[[e,n],[a,B[a]]];for(let[n,i]of o){if(!i)continue;let a=O(r?n===e?r:z[n]:z[n]??t[n],n,i,`version-first`);if(a)return a}},ue=(e,t,n)=>{let r=H(e,t,n,!0);return r&&V(r)&&!r.lib&&!r.loaded?r:void 0};var U=m[g];if(U||=m[g]={from:_},n.indexOf(U)>=0)return;n.push(U);let de=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.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t},fe=[],pe=globalThis.window===void 0?await Promise.all([]):[],W=`__mf_vite_runtime_share_load_id__`,me=0,G=new Map,K=new Map,q=e({name:_,remotes:se,shared:B,plugins:[he(),ge(),...fe,...pe],shareStrategy:`version-first`});q.initShareScopeMap(`default`,ae(`default`,t));function he(){return{name:`vite-share-pin-lifecycle-plugin`,resolveShare(e){var t;let n=(t=e.shareInfo)==null?void 0:t[W],r=n===void 0?void 0:K.get(n);if(!r)return e;let i=e.resolver;return e.resolver=(...e)=>(r.pinned.reapply(),i(...e)),r.pinned.reveal(),e}}}function ge(){return{name:`vite-real-name-snapshot-plugin`,afterLoadSnapshot(e){let t=e&&e.remoteSnapshot,n=t&&t.globalName,r=t&&t.version;if(!n||!r||!t.remoteEntry)return e;let i=globalThis.__FEDERATION__&&globalThis.__FEDERATION__.moduleInfo,a=n+`:`+r;return i&&!i[a]&&(i[a]=t),e}}}let _e=q.sharedHandler.hooks.lifecycle.resolveShare;if(!q.__mfKeepAdoptedProviders){var J,ve;q.__mfKeepAdoptedProviders=!0,(J=q.sharedHandler)==null||(J=J.hooks)==null||(J=J.lifecycle)==null||(J=J.afterRegisterShare)==null||(ve=J.on)==null||ve.call(J,e=>{var t,n,r;let{shared:i,previousShared:a,registeredShared:o}=e||{};if((i==null||(t=i.shareConfig)==null?void 0:t.import)!==!1||o!==i||!a||((n=a.shareConfig)==null?void 0:n.import)===!1)return;let s=(r=q.shareScopeMap)==null||(r=r[e.scope])==null?void 0:r[e.pkgName];s&&s[i.version]===i&&(s[i.version]=a)})}let Y=new WeakMap;_e.on(e=>{var t;let n=(t=e.shareInfo)==null?void 0:t[W],r=e.resolver;return typeof r==`function`&&(e.resolver=(...t)=>{var i;let a=r(...t);if((a==null||(i=a.shared)==null||(i=i.shareConfig)==null?void 0:i.import)===!1&&typeof D==`function`&&B[e.pkgName]){var o,s;let t=D((o=e.shareScopeMap)==null||(o=o[e.scope])==null?void 0:o[e.pkgName],e.pkgName,B[e.pkgName],`version-first`);t&&((s=t.shareConfig)==null?void 0:s.import)!==!1&&(a={shared:t,useTreesShaking:a.useTreesShaking})}let c=a==null?void 0:a.shared;return c&&(typeof c==`object`||typeof c==`function`)&&!Y.has(c)&&Y.set(c,{from:c.from}),n!==void 0&&c&&G.set(n,c),a}),e});let ye=(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()}}},be=e=>Object.entries(e||{}).map(([e,t])=>({provider:t,version:e,from:t.from,registered:!0})),xe=(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=++me;K.set(r,{pinned:n});try{let n=await q.loadShare(e,{customShareInfo:{shareConfig:t,[W]:r}});return{factory:n===!1?void 0:n,selectedProvider:G.get(r)}}finally{G.delete(r),K.delete(r)}},Ce=async(e,t,n,r,i,a,o=!0)=>{let s=a.from,c=ye(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=be(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=Y.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)??xe(d,u);if(!c.release(!0,(h==null?void 0:h.provider)===c.provider)||!h)return;let g=Y.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}},X=new Set,we=new Map,Te=async(e,n,r)=>{var i;let a=!!((i=n.shareConfig)!=null&&i.singleton);if(!a&&n.canLiveRebind!==!1)try{var c,l;let i=O(r,e,n,`version-first`),u=E(r,i);if(!u||((c=n.shareConfig)==null?void 0:c.import)===!1&&k(i,n)||(i==null||(l=i.shareConfig)==null?void 0:l.import)===!1)return;let{version:d}=u;if(!a&&d!==n.version||!i.lib&&!i.loading&&!(i.loaded&&typeof i.get==`function`))return;let f=o(e,a,n.version,n.scope);if(s(p.share,f)!==void 0)return;let m=t[e],h=m==null?void 0:m[d];if(u.registered&&!k(h,i))return;let g,_=i.lib;if(!_&&V(i)||(!_&&i.loading&&(_=await i.loading),!_&&i.loaded&&typeof i.get==`function`&&(_=await i.get()),!_))return;let v=typeof _==`function`?_():_,y=await Promise.resolve(v),b=u.registered?h:i;g={provider:b,selection:{provider:b,version:d,from:i.from,registered:u.registered},resolved:y};let x=g==null?void 0:g.provider,S=g==null?void 0:g.selection;if(!S)return;let C=g==null?void 0:g.resolved;if(C===void 0||s(p.share,f)!==void 0||S.registered&&(m==null?void 0:m[S.version])!==x)return;w(p.share,f,de(C),S.from),X.add(x)}catch(t){console.error(`[Module Federation] Failed to bridge materialized shared module "`+e+`"`,t)}},Ee=async(e,n,r,i,a)=>{try{var c,l,u,d;let f=o(e,(c=n.shareConfig)==null?void 0:c.singleton,n.version,n.scope),m=s(p.share,f),h=y(p.share,f),g=O(r,e,n,`version-first`),v=g||D(r,e,n,`version-first`)||n,b=E(r,v);if(!b)return;let x=k(v,n),{version:S}=b;if(!((l=n.shareConfig)!=null&&l.singleton)&&S!==n.version)return;let C=i==null?void 0:i[S],T=ee(I,ne,t,`default`,e,b,g,C,`version-first`);if(!T&&!x)return;let{provider:A,scopeRootProvider:te}=T||{provider:v,scopeRootProvider:void 0};if(n.canLiveRebind===!1||((u=n.shareConfig)==null?void 0:u.import)===!1&&k(A,n)||(A==null||(d=A.shareConfig)==null?void 0:d.import)===!1||m!==void 0&&h!==_)return;let j=t[e],M=j==null?void 0:j[S];if(b.registered&&!te&&!k(M,A))return;let N=await Ce(e,n.shareConfig,j,S,M,A,b.registered&&!x),P=N==null?void 0:N.provider,F=N==null?void 0:N.selection;if(!F||k(P,n)||a&&(a.version!==F.version||!k({from:F.from},a.provider))||X.has(P))return;let L=N==null?void 0:N.resolved;if(L===void 0)return;let R=s(p.share,f),re=y(p.share,f);if(R!==void 0&&re!==_||F.registered&&(j==null?void 0:j[F.version])!==P)return;a||we.set(e,{version:F.version,provider:{from:F.from}}),X.add(P);let ie=de(L);w(p.share,f,ie,F.from)}catch(t){console.error(`[Module Federation] Failed to bridge external shared module "`+e+`"`,t)}};for(let e of v)await Promise.all(e.map(async e=>{let t=B[e];t&&t.materialize!==!1&&!t.treeShaking&&await Te(e,t,z[e])}));for(let[e,t]of Object.entries(B)){var De;if(t.treeShaking)continue;let n=o(e,(De=t.shareConfig)==null?void 0:De.singleton,t.version,t.scope);if(s(p.share,n)!==void 0)continue;let r=o(e,!0,t.version,t.scope),i=s(p.share,r);i!==void 0&&w(p.share,n,i,y(p.share,r))}let Oe=[`react`,`react/jsx-runtime`,`react-dom`,`@emotion/react`,`react-dom/client`,`@emotion/styled`,`@mui/material`,`@mui/icons-material`,`@iobroker/gui-components`,`@iobroker/json-config`],ke=[[`react`],[`react/jsx-runtime`,`react-dom`,`@emotion/react`],[`react-dom/client`,`@emotion/styled`],[`@mui/material`],[`@mui/icons-material`],[`@iobroker/gui-components`],[`@iobroker/json-config`]],Z=new Map(Oe.map((e,t)=>[e,t])),Ae={1:[0],2:[0],3:[0],4:[0,2],5:[3,0],6:[3,5,0,2],7:[6,0],8:[0,2,7,6],9:[3,5,8,7,6,0,2]},Q=Oe.filter(e=>{var t;return B[e]&&(B[e].materialize!==!1||((t=B[e].shareConfig)==null?void 0:t.import)===!1&&!B[e].lazy)});p.providerInit||=new Map;let je=(e,t)=>{let n=p.providerInit.get(e);if(n)return n;let r=Promise.resolve().then(t);return p.providerInit.set(e,r),r.catch(()=>p.providerInit.delete(e)),r};var Me=async e=>{let t=new Set(e);for(let e of ke)await Promise.all(e.filter(e=>t.has(e)).map(async e=>{var t,n,r;let i=B[e],a=o(e,(t=i.shareConfig)==null?void 0:t.singleton,i.version,i.scope);if(((n=i.shareConfig)==null?void 0:n.import)===!1||i.treeShaking||s(p.share,a)!==void 0)return;let c=o(e,!0,i.version,i.scope),l=s(p.share,c);if(l!==void 0){w(p.share,a,l,y(p.share,c));return}let u=typeof H==`function`?H(e,i):void 0;if(u){var d,f;let t=u.lib;if(!t&&u.loading&&(t=await u.loading),!t&&u.loaded&&typeof u.get==`function`&&(t=await u.get()),t){let e=typeof t==`function`?t():t,n=await Promise.resolve(e);w(p.share,a,(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.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t})(n),u.from);return}if(typeof V==`function`&&V(u)&&((d=i.shareConfig)!=null&&d.singleton||((f=E(z[e],u))==null?void 0:f.version)===i.version))return}let m=a.canonical,h=await je(m,async()=>{let e=await i.get(),t=typeof e==`function`?e():e;return Promise.resolve(t)});for(let t of((r=q.options.shared)==null?void 0:r[e])||[])t.get===i.get&&(t.eager=!0);let g=(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.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t})(h),v=g===h?{...h}:g;v.__esModule!==!0&&Object.defineProperty(v,"__esModule",{value:!0,enumerable:!1}),w(p.share,a,v,_)}))};let $=e=>{var t,n;let r=B[e];if(!r.treeShaking&&((t=r.shareConfig)==null?void 0:t.import)!==!1)return!1;let i=o(e,(n=r.shareConfig)==null?void 0:n.singleton,r.version,r.scope);return r.treeShaking?P(p.share,i,_)===void 0&&s(p.share,i)===void 0:s(p.share,i)===void 0},Ne=e=>{var t,n;let r=B[e],i=o(e,(t=r.shareConfig)==null?void 0:t.singleton,r.version,r.scope);return(r.treeShaking?P(p.share,i,_)??s(p.share,i):s(p.share,i))===void 0?r.treeShaking||((n=r.shareConfig)==null?void 0:n.import)===!1?!0:typeof O==`function`&&!!O(z[e],e,r,`version-first`):!1},Pe=e=>{let t=!0;for(;t;){t=!1;for(let n of Q){let r=Z.get(n);e.has(r)||(Ae[r]||[]).some(t=>e.has(t))&&(e.add(r),t=!0)}}return e},Fe=Pe(new Set(Q.filter(Ne).map(e=>Z.get(e)))),Ie=Q.filter(e=>!Fe.has(Z.get(e)));var Le=Q.filter(e=>Fe.has(Z.get(e)));await Me(Ie);try{await x(async()=>{await Promise.all(await q.initializeSharing(`default`,{strategy:`version-first`,from:`build`,initScope:n}))})}catch(e){console.error(`[Module Federation]`,e)}oe();let Re=async()=>{for(let e of v)await Promise.all(e.map(async e=>{let n=B[e];n&&n.materialize!==!1&&!n.treeShaking&&await Ee(e,n,t[e],z[e],void 0)}))};ce?b=Re:await Re();try{var ze;let e=(ze=globalThis.__FEDERATION__)==null?void 0:ze.__SHARE__,t=Object.create(null);if(e)for(let[,n]of Object.entries(e))for(let e of h){let r=n==null?void 0:n[e];if(r)for(let[e,n]of Object.entries(r)){let r=B==null?void 0:B[e],i=z[e],a=we.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||!k(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 of v)await Promise.all(e.map(async e=>{let n=t[e];n&&await Ee(e,B[e],n,z[e],we.get(e))}))}catch(e){console.error(`[Module Federation] Failed to bridge external shared modules`,e)}let Be=async()=>{},Ve=async(e,n)=>{var r,i;let a=o(e,(r=n.shareConfig)==null?void 0:r.singleton,n.version,n.scope),c=n.treeShaking?P(p.share,a,_):s(p.share,a);if(((i=n.shareConfig)==null?void 0:i.import)!==!1||c!==void 0||ue(e,n,z[e]))return;let l=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.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t},u=t==null?void 0:t[e],d=D(u,e,n,`version-first`)||n,f=E(u,d);if(!f)return;let m=e=>{var t;return e===n||(e==null||(t=e.shareConfig)==null?void 0:t.import)===!1};if(m(d))return;let{version:h}=f,g=u==null?void 0:u[h],v=await Ce(e,n.shareConfig,u,h,g,d,f.registered),y=v==null?void 0:v.selection,b=v==null?void 0:v.provider,x=v==null?void 0:v.resolved;if(!y||m(b)||x===void 0||(n.treeShaking?P(p.share,a,_):s(p.share,a))!==void 0||y.registered&&(u==null?void 0:u[y.version])!==b)return;let S=l(x);if(n.treeShaking){let e=n.treeShaking.providedExports??n.treeShaking.usedExports??[];j(p.share,a,e,S),F(p.share,a,_,S)}else w(p.share,a,S,y.from)},He=[],Ue=new Set;for(let e of Le){let t=B[e],n=Z.get(e);if($(e))try{var We;t.treeShaking?await Be(e,t):((We=t.shareConfig)==null?void 0:We.import)===!1&&await Ve(e,t)}catch(t){console.error(`[Module Federation] Failed to resolve runtime-only shared module "${e}"`,t)}$(e)&&Ue.add(n)}Pe(Ue),He.push(...Le.filter(e=>!Ue.has(Z.get(e)))),await Me(He);let Ge=new Map;return u.loadLazyShares=async e=>{let n=new Set(e);for(let e of v)await Promise.all(e.filter(e=>n.has(e)).map(e=>{let n=B[e];if(!n||!n.lazy||!$(e))return;let r=Ge.get(e);return r||(r=Ee(e,n,t[e],z[e],void 0).then(()=>$(e)?Ve(e,n):void 0),r.catch(()=>Ge.delete(e)),Ge.set(e,r)),r}))},d(q),q}async function N(e){let t=await j();if(!(e in t))throw Error(`[Module Federation] Module ${e} does not exist in container.`);return b&&await b(),p.pendingShareLoads&&await Promise.all(p.pendingShareLoads),t[e]().then(e=>()=>e)}export{N as get,M as init};
|
|
2
2
|
if (typeof document !== 'undefined' && document.head) {
|
|
3
3
|
try {
|
|
4
4
|
for (const __mfWarmupPath of ["assets/_virtual_mf-localSharedImportMap___mfe_internal__SatDisplay__mf_owner__1-Bp0DvNe1.js","assets/dist-ClWhWsnT.js","assets/vite-preload-helper-D97eqSzU.js","assets/utils-BLvN1RVq.js"]) {
|
|
@@ -29,5 +29,10 @@
|
|
|
29
29
|
"sd_satellite": "Satellit",
|
|
30
30
|
"sd_not_configured": "nicht in der Liste der Satelliten",
|
|
31
31
|
"sd_how": "Eine freie Zelle anklicken fügt eine Kachel hinzu, eine Kachel ziehen verschiebt sie. Die Vorschau zeigt die aktuellen Werte; die Farben des Satelliten können leicht abweichen.",
|
|
32
|
-
"sd_disabled_count": "%s inaktive Kachel(n) auf dieser Seite werden nicht gezeigt."
|
|
32
|
+
"sd_disabled_count": "%s inaktive Kachel(n) auf dieser Seite werden nicht gezeigt.",
|
|
33
|
+
"sd_kind_thermostat": "Thermostat mit Sollwert",
|
|
34
|
+
"sd_current_state": "Ist-Temperatur",
|
|
35
|
+
"sd_target_state": "Soll-Temperatur",
|
|
36
|
+
"sd_relay_state": "Heizungsrelais (optional, der Punkt)",
|
|
37
|
+
"sd_step": "Schrittweite von − / +"
|
|
33
38
|
}
|
|
@@ -29,5 +29,10 @@
|
|
|
29
29
|
"sd_satellite": "Satellite",
|
|
30
30
|
"sd_not_configured": "not in the list of satellites",
|
|
31
31
|
"sd_how": "Click a free cell to add a tile, drag a tile to move it. The preview shows the current values; the colours of the satellite may differ a little.",
|
|
32
|
-
"sd_disabled_count": "%s inactive tile(s) on this page are not shown."
|
|
32
|
+
"sd_disabled_count": "%s inactive tile(s) on this page are not shown.",
|
|
33
|
+
"sd_kind_thermostat": "Thermostat",
|
|
34
|
+
"sd_current_state": "Current temperature",
|
|
35
|
+
"sd_target_state": "Target temperature",
|
|
36
|
+
"sd_relay_state": "Heating relay (optional, the dot)",
|
|
37
|
+
"sd_step": "Step of − / +"
|
|
33
38
|
}
|
|
@@ -29,5 +29,10 @@
|
|
|
29
29
|
"sd_satellite": "Satélite",
|
|
30
30
|
"sd_not_configured": "no está en la lista de satélites",
|
|
31
31
|
"sd_how": "Haga clic en una celda libre para añadir un mosaico, arrastre un mosaico para moverlo. La vista previa muestra los valores actuales; los colores del satélite pueden variar un poco.",
|
|
32
|
-
"sd_disabled_count": "%s mosaico(s) inactivo(s) en esta página no se muestran."
|
|
32
|
+
"sd_disabled_count": "%s mosaico(s) inactivo(s) en esta página no se muestran.",
|
|
33
|
+
"sd_kind_thermostat": "Termostato",
|
|
34
|
+
"sd_current_state": "Temperatura actual",
|
|
35
|
+
"sd_target_state": "Temperatura deseada",
|
|
36
|
+
"sd_relay_state": "Relé de la calefacción (opcional, el punto)",
|
|
37
|
+
"sd_step": "Paso de − / +"
|
|
33
38
|
}
|
|
@@ -29,5 +29,10 @@
|
|
|
29
29
|
"sd_satellite": "Satellite vocal",
|
|
30
30
|
"sd_not_configured": "absent de la liste des satellites",
|
|
31
31
|
"sd_how": "Cliquez sur une case libre pour ajouter une tuile, faites glisser une tuile pour la déplacer. L'aperçu montre les valeurs actuelles ; les couleurs du satellite peuvent différer un peu.",
|
|
32
|
-
"sd_disabled_count": "%s tuile(s) inactive(s) sur cette page ne sont pas affichées."
|
|
32
|
+
"sd_disabled_count": "%s tuile(s) inactive(s) sur cette page ne sont pas affichées.",
|
|
33
|
+
"sd_kind_thermostat": "Thermostat d'ambiance",
|
|
34
|
+
"sd_current_state": "Température actuelle",
|
|
35
|
+
"sd_target_state": "Température de consigne",
|
|
36
|
+
"sd_relay_state": "Relais du chauffage (facultatif, le point)",
|
|
37
|
+
"sd_step": "Pas de − / +"
|
|
33
38
|
}
|
|
@@ -29,5 +29,10 @@
|
|
|
29
29
|
"sd_satellite": "Satellite vocale",
|
|
30
30
|
"sd_not_configured": "non nell'elenco dei satelliti",
|
|
31
31
|
"sd_how": "Fai clic su una cella libera per aggiungere un riquadro, trascina un riquadro per spostarlo. L'anteprima mostra i valori attuali; i colori del satellite possono differire un po'.",
|
|
32
|
-
"sd_disabled_count": "%s riquadro/i inattivo/i in questa pagina non sono mostrati."
|
|
32
|
+
"sd_disabled_count": "%s riquadro/i inattivo/i in questa pagina non sono mostrati.",
|
|
33
|
+
"sd_kind_thermostat": "Termostato",
|
|
34
|
+
"sd_current_state": "Temperatura attuale",
|
|
35
|
+
"sd_target_state": "Temperatura desiderata",
|
|
36
|
+
"sd_relay_state": "Relè del riscaldamento (facoltativo, il punto)",
|
|
37
|
+
"sd_step": "Passo di − / +"
|
|
33
38
|
}
|
|
@@ -29,5 +29,10 @@
|
|
|
29
29
|
"sd_satellite": "Satelliet",
|
|
30
30
|
"sd_not_configured": "niet in de lijst met satellieten",
|
|
31
31
|
"sd_how": "Klik op een vrije cel om een tegel toe te voegen, sleep een tegel om hem te verplaatsen. De voorvertoning toont de huidige waarden; de kleuren van de satelliet kunnen iets afwijken.",
|
|
32
|
-
"sd_disabled_count": "%s inactieve tegel(s) op deze pagina worden niet getoond."
|
|
32
|
+
"sd_disabled_count": "%s inactieve tegel(s) op deze pagina worden niet getoond.",
|
|
33
|
+
"sd_kind_thermostat": "Thermostaat",
|
|
34
|
+
"sd_current_state": "Huidige temperatuur",
|
|
35
|
+
"sd_target_state": "Gewenste temperatuur",
|
|
36
|
+
"sd_relay_state": "Verwarmingsrelais (optioneel, de stip)",
|
|
37
|
+
"sd_step": "Stap van − / +"
|
|
33
38
|
}
|
|
@@ -29,5 +29,10 @@
|
|
|
29
29
|
"sd_satellite": "Satelita",
|
|
30
30
|
"sd_not_configured": "brak na liście satelitów",
|
|
31
31
|
"sd_how": "Kliknij wolną komórkę, aby dodać kafelek, przeciągnij kafelek, aby go przenieść. Podgląd pokazuje bieżące wartości; kolory na satelicie mogą się nieco różnić.",
|
|
32
|
-
"sd_disabled_count": "Nieaktywne kafelki na tej stronie, które nie są pokazane: %s."
|
|
32
|
+
"sd_disabled_count": "Nieaktywne kafelki na tej stronie, które nie są pokazane: %s.",
|
|
33
|
+
"sd_kind_thermostat": "Termostat z nastawą",
|
|
34
|
+
"sd_current_state": "Temperatura bieżąca",
|
|
35
|
+
"sd_target_state": "Temperatura zadana",
|
|
36
|
+
"sd_relay_state": "Przekaźnik ogrzewania (opcjonalnie, kropka)",
|
|
37
|
+
"sd_step": "Krok − / +"
|
|
33
38
|
}
|
|
@@ -29,5 +29,10 @@
|
|
|
29
29
|
"sd_satellite": "Satélite",
|
|
30
30
|
"sd_not_configured": "não está na lista de satélites",
|
|
31
31
|
"sd_how": "Clique numa célula livre para adicionar um mosaico, arraste um mosaico para o mover. A pré-visualização mostra os valores atuais; as cores do satélite podem diferir um pouco.",
|
|
32
|
-
"sd_disabled_count": "%s mosaico(s) inativo(s) nesta página não são mostrados."
|
|
32
|
+
"sd_disabled_count": "%s mosaico(s) inativo(s) nesta página não são mostrados.",
|
|
33
|
+
"sd_kind_thermostat": "Termostato",
|
|
34
|
+
"sd_current_state": "Temperatura atual",
|
|
35
|
+
"sd_target_state": "Temperatura desejada",
|
|
36
|
+
"sd_relay_state": "Relé do aquecimento (opcional, o ponto)",
|
|
37
|
+
"sd_step": "Passo de − / +"
|
|
33
38
|
}
|
|
@@ -29,5 +29,10 @@
|
|
|
29
29
|
"sd_satellite": "Сателлит",
|
|
30
30
|
"sd_not_configured": "нет в списке сателлитов",
|
|
31
31
|
"sd_how": "Нажмите на свободную клетку, чтобы добавить плитку, перетащите плитку, чтобы переместить. Превью показывает текущие значения; цвета на сателлите могут немного отличаться.",
|
|
32
|
-
"sd_disabled_count": "Неактивных плиток на этой странице, которые не показаны: %s."
|
|
32
|
+
"sd_disabled_count": "Неактивных плиток на этой странице, которые не показаны: %s.",
|
|
33
|
+
"sd_kind_thermostat": "Термостат",
|
|
34
|
+
"sd_current_state": "Текущая температура",
|
|
35
|
+
"sd_target_state": "Заданная температура",
|
|
36
|
+
"sd_relay_state": "Реле отопления (необязательно, индикатор)",
|
|
37
|
+
"sd_step": "Шаг − / +"
|
|
33
38
|
}
|
|
@@ -29,5 +29,10 @@
|
|
|
29
29
|
"sd_satellite": "Сателіт",
|
|
30
30
|
"sd_not_configured": "немає у списку сателітів",
|
|
31
31
|
"sd_how": "Натисніть на вільну клітинку, щоб додати плитку, перетягніть плитку, щоб перемістити. Попередній перегляд показує поточні значення; кольори на сателіті можуть трохи відрізнятися.",
|
|
32
|
-
"sd_disabled_count": "Неактивних плиток на цій сторінці, які не показано: %s."
|
|
32
|
+
"sd_disabled_count": "Неактивних плиток на цій сторінці, які не показано: %s.",
|
|
33
|
+
"sd_kind_thermostat": "Термостат",
|
|
34
|
+
"sd_current_state": "Поточна температура",
|
|
35
|
+
"sd_target_state": "Задана температура",
|
|
36
|
+
"sd_relay_state": "Реле опалення (необов'язково, індикатор)",
|
|
37
|
+
"sd_step": "Крок − / +"
|
|
33
38
|
}
|
|
@@ -29,5 +29,10 @@
|
|
|
29
29
|
"sd_satellite": "卫星设备",
|
|
30
30
|
"sd_not_configured": "不在卫星设备列表中",
|
|
31
31
|
"sd_how": "点击空白格添加磁贴,拖动磁贴可移动它。预览显示当前数值;卫星设备上的颜色可能略有不同。",
|
|
32
|
-
"sd_disabled_count": "此页有 %s 个未启用的磁贴未显示。"
|
|
32
|
+
"sd_disabled_count": "此页有 %s 个未启用的磁贴未显示。",
|
|
33
|
+
"sd_kind_thermostat": "恒温器",
|
|
34
|
+
"sd_current_state": "当前温度",
|
|
35
|
+
"sd_target_state": "目标温度",
|
|
36
|
+
"sd_relay_state": "供暖继电器(可选,圆点)",
|
|
37
|
+
"sd_step": "− / + 的步长"
|
|
33
38
|
}
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "satellite-display",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.2",
|
|
5
5
|
"news": {
|
|
6
|
+
"0.0.2": {
|
|
7
|
+
"en": "Thermostat tile: current temperature, target with - and +, heating relay (satellite firmware 2.0.1)",
|
|
8
|
+
"de": "Thermostat-Kachel: Ist-Temperatur, Soll mit - und +, Heizungsrelais (Satelliten-Firmware 2.0.1)",
|
|
9
|
+
"ru": "Плитка термостата: текущая температура, заданная с - и +, реле отопления (прошивка сателлита 2.0.1)",
|
|
10
|
+
"pt": "Bloco de termostato: temperatura atual, alvo com - e +, relé do aquecimento (firmware do satélite 2.0.1)",
|
|
11
|
+
"nl": "Thermostaattegel: huidige temperatuur, doel met - en +, verwarmingsrelais (satellietfirmware 2.0.1)",
|
|
12
|
+
"fr": "Tuile thermostat : température actuelle, consigne avec - et +, relais du chauffage (firmware du satellite 2.0.1)",
|
|
13
|
+
"it": "Riquadro termostato: temperatura attuale, obiettivo con - e +, relè del riscaldamento (firmware del satellite 2.0.1)",
|
|
14
|
+
"es": "Mosaico de termostato: temperatura actual, objetivo con - y +, relé de la calefacción (firmware del satélite 2.0.1)",
|
|
15
|
+
"pl": "Kafelek termostatu: temperatura bieżąca, zadana z - i +, przekaźnik ogrzewania (firmware satelity 2.0.1)",
|
|
16
|
+
"uk": "Плитка термостата: поточна температура, задана з - і +, реле опалення (прошивка сателіта 2.0.1)",
|
|
17
|
+
"zh-cn": "恒温器磁贴:当前温度、用 - 和 + 调节的目标温度、供暖继电器(卫星固件 2.0.1)"
|
|
18
|
+
},
|
|
6
19
|
"0.0.1": {
|
|
7
20
|
"en": "First version: tile pages on the touch display of ESPHome voice satellites",
|
|
8
21
|
"de": "Erste Version: Kachelseiten auf dem Touch-Display von ESPHome-Sprachsatelliten",
|
package/lib/layout.js
CHANGED
|
@@ -18,8 +18,12 @@ const TYPES = {
|
|
|
18
18
|
switch: ['s', 'q', 'w'],
|
|
19
19
|
dimmer: ['w', 'l'],
|
|
20
20
|
button: ['s', 'q', 'w'],
|
|
21
|
+
thermostat: ['q', 'l'],
|
|
21
22
|
};
|
|
22
23
|
|
|
24
|
+
/** Step of the - / + buttons of a thermostat when none is set */
|
|
25
|
+
const DEFAULT_STEP = 0.5;
|
|
26
|
+
|
|
23
27
|
/** Icons the firmware has (components/tiles/tiles.cpp of the satellite firmware) */
|
|
24
28
|
const ICONS = [
|
|
25
29
|
'lightbulb',
|
|
@@ -82,9 +86,11 @@ const ICONS = [
|
|
|
82
86
|
* @property {number} gridCol - Column 0..1 of the top left cell
|
|
83
87
|
* @property {number} gridRow - Row 0..3 of the top left cell
|
|
84
88
|
* @property {string} size - s, q, w or l
|
|
85
|
-
* @property {string} type - value, gauge, bar, chart, switch, dimmer or
|
|
86
|
-
* @property {string} state - Bound state
|
|
87
|
-
* @property {string} state2 - On/off state of a dimmer (optional)
|
|
89
|
+
* @property {string} type - value, gauge, bar, chart, switch, dimmer, button or thermostat
|
|
90
|
+
* @property {string} state - Bound state (the current temperature of a thermostat)
|
|
91
|
+
* @property {string} state2 - On/off state of a dimmer (optional), target temperature of a thermostat
|
|
92
|
+
* @property {string} state3 - Heating relay of a thermostat (optional)
|
|
93
|
+
* @property {number} step - Step of the - / + buttons of a thermostat
|
|
88
94
|
* @property {string} label - Name on the tile, empty = name of the object
|
|
89
95
|
* @property {string} unit - Unit, empty = unit of the object
|
|
90
96
|
* @property {string} icon - Icon name or empty
|
|
@@ -223,6 +229,12 @@ function normalizeTiles(rows, satellites, problems) {
|
|
|
223
229
|
problems.push(`${where}: no state chosen`);
|
|
224
230
|
continue;
|
|
225
231
|
}
|
|
232
|
+
const state2 = type === 'dimmer' || type === 'thermostat' ? String(row.state2 || '').trim() : '';
|
|
233
|
+
if (type === 'thermostat' && !state2) {
|
|
234
|
+
problems.push(`${where}: a thermostat needs the state of its target temperature`);
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
const step = numberOrNull(row.step);
|
|
226
238
|
let icon = String(row.icon || '').trim();
|
|
227
239
|
if (icon.startsWith('mdi:')) {
|
|
228
240
|
icon = icon.slice(4);
|
|
@@ -242,7 +254,9 @@ function normalizeTiles(rows, satellites, problems) {
|
|
|
242
254
|
size,
|
|
243
255
|
type,
|
|
244
256
|
state,
|
|
245
|
-
state2
|
|
257
|
+
state2,
|
|
258
|
+
state3: type === 'thermostat' ? String(row.state3 || '').trim() : '',
|
|
259
|
+
step: step !== null && step > 0 ? step : DEFAULT_STEP,
|
|
246
260
|
label: String(row.label || '').trim(),
|
|
247
261
|
unit: String(row.unit || '').trim(),
|
|
248
262
|
icon,
|
|
@@ -254,4 +268,15 @@ function normalizeTiles(rows, satellites, problems) {
|
|
|
254
268
|
return result;
|
|
255
269
|
}
|
|
256
270
|
|
|
257
|
-
module.exports = {
|
|
271
|
+
module.exports = {
|
|
272
|
+
PAGES,
|
|
273
|
+
SLOTS,
|
|
274
|
+
SIZES,
|
|
275
|
+
TYPES,
|
|
276
|
+
ICONS,
|
|
277
|
+
DEFAULT_STEP,
|
|
278
|
+
idOf,
|
|
279
|
+
numberOrNull,
|
|
280
|
+
normalizeSatellites,
|
|
281
|
+
normalizeTiles,
|
|
282
|
+
};
|
package/lib/satellite.js
CHANGED
|
@@ -7,6 +7,8 @@ const { EventEmitter } = require('node:events');
|
|
|
7
7
|
|
|
8
8
|
/** The actions the firmware 2.0.0 brings (docs/TILES.md of the satellite firmware) */
|
|
9
9
|
const TILE_ACTIONS = ['tile_set', 'tile_value', 'tile_text', 'tile_state', 'tile_history', 'tile_clear'];
|
|
10
|
+
/** Actions of newer firmware; without them the tiles that need them are left out */
|
|
11
|
+
const OPTIONAL_ACTIONS = { tile_setpoint: '2.0.1' };
|
|
10
12
|
|
|
11
13
|
/** Argument types of ESPHome actions (ServiceArgType of api.proto) */
|
|
12
14
|
const ARG = { BOOL: 0, INT: 1, FLOAT: 2, STRING: 3, BOOL_ARRAY: 4, INT_ARRAY: 5, FLOAT_ARRAY: 6, STRING_ARRAY: 7 };
|
|
@@ -268,6 +270,14 @@ class SatelliteLink extends EventEmitter {
|
|
|
268
270
|
}
|
|
269
271
|
}
|
|
270
272
|
|
|
273
|
+
/**
|
|
274
|
+
* @param {string} name - Action
|
|
275
|
+
* @returns {boolean} True when the firmware of the satellite has it
|
|
276
|
+
*/
|
|
277
|
+
has(name) {
|
|
278
|
+
return this.actions.has(name);
|
|
279
|
+
}
|
|
280
|
+
|
|
271
281
|
/**
|
|
272
282
|
* Calls an action of the satellite.
|
|
273
283
|
*
|
|
@@ -293,4 +303,13 @@ class SatelliteLink extends EventEmitter {
|
|
|
293
303
|
}
|
|
294
304
|
}
|
|
295
305
|
|
|
296
|
-
module.exports = {
|
|
306
|
+
module.exports = {
|
|
307
|
+
SatelliteLink,
|
|
308
|
+
TILE_ACTIONS,
|
|
309
|
+
OPTIONAL_ACTIONS,
|
|
310
|
+
ARG,
|
|
311
|
+
convertArg,
|
|
312
|
+
parseTileInput,
|
|
313
|
+
skipUnknownMessages,
|
|
314
|
+
UnknownMessage,
|
|
315
|
+
};
|
package/lib/values.js
CHANGED
|
@@ -140,24 +140,50 @@ function switchValue(on, common) {
|
|
|
140
140
|
return on;
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
+
/**
|
|
144
|
+
* The target temperature a thermostat tile asks for, on the grid of its step and within the range of the object.
|
|
145
|
+
*
|
|
146
|
+
* @param {number} value - Setpoint from the satellite
|
|
147
|
+
* @param {number} step - Step of the - / + buttons
|
|
148
|
+
* @param {Partial<ioBroker.StateCommon>} common - Common part of the object of the target temperature
|
|
149
|
+
* @returns {number} Value to write
|
|
150
|
+
*/
|
|
151
|
+
function setpointValue(value, step, common) {
|
|
152
|
+
let v = step > 0 ? Math.round(value / step) * step : value;
|
|
153
|
+
if (typeof common.min === 'number') {
|
|
154
|
+
v = Math.max(common.min, v);
|
|
155
|
+
}
|
|
156
|
+
if (typeof common.max === 'number') {
|
|
157
|
+
v = Math.min(common.max, v);
|
|
158
|
+
}
|
|
159
|
+
// no 21.500000000000004
|
|
160
|
+
return Math.round(v * 1000) / 1000;
|
|
161
|
+
}
|
|
162
|
+
|
|
143
163
|
/**
|
|
144
164
|
* The arguments of tile_set for a tile, the empty fields filled from the object of its state.
|
|
145
165
|
*
|
|
146
166
|
* @param {import('./layout').Tile} tile - Tile from the settings
|
|
147
167
|
* @param {ioBroker.Object | null | undefined} obj - Object of its state
|
|
148
168
|
* @param {string} lang - Language of the system
|
|
169
|
+
* @param {ioBroker.Object | null} [obj2] - Object of the second state (the target temperature of a thermostat)
|
|
149
170
|
* @returns {Record<string, string | number>} Arguments of tile_set
|
|
150
171
|
*/
|
|
151
|
-
function tileArgs(tile, obj, lang) {
|
|
172
|
+
function tileArgs(tile, obj, lang, obj2) {
|
|
152
173
|
const common = /** @type {Partial<ioBroker.StateCommon>} */ (obj?.common || {});
|
|
174
|
+
const common2 = /** @type {Partial<ioBroker.StateCommon>} */ (obj2?.common || {});
|
|
153
175
|
let label = tile.label || nameOf(common.name, lang) || tile.state.split('.').pop() || '';
|
|
154
176
|
label = label.slice(0, 24);
|
|
155
|
-
const unit = (tile.type === 'dimmer' ? '' : tile.unit || common.unit || '').slice(0, 8);
|
|
177
|
+
const unit = (tile.type === 'dimmer' ? '' : tile.unit || common.unit || common2.unit || '').slice(0, 8);
|
|
156
178
|
let min = tile.min;
|
|
157
179
|
let max = tile.max;
|
|
158
180
|
if (tile.type === 'gauge' || tile.type === 'bar') {
|
|
159
181
|
min ??= typeof common.min === 'number' ? common.min : 0;
|
|
160
182
|
max ??= typeof common.max === 'number' ? common.max : 100;
|
|
183
|
+
} else if (tile.type === 'thermostat') {
|
|
184
|
+
// the scale of the arc and the limits of the target: from the object of the target temperature
|
|
185
|
+
min ??= typeof common2.min === 'number' ? common2.min : 5;
|
|
186
|
+
max ??= typeof common2.max === 'number' ? common2.max : 30;
|
|
161
187
|
} else if (tile.type === 'chart') {
|
|
162
188
|
// equal values: the chart scales itself
|
|
163
189
|
min ??= 0;
|
|
@@ -197,5 +223,6 @@ module.exports = {
|
|
|
197
223
|
levelPercent,
|
|
198
224
|
levelValue,
|
|
199
225
|
switchValue,
|
|
226
|
+
setpointValue,
|
|
200
227
|
tileArgs,
|
|
201
228
|
};
|
package/main.js
CHANGED
|
@@ -7,10 +7,19 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
const utils = require('@iobroker/adapter-core');
|
|
10
|
-
const { SatelliteLink } = require('./lib/satellite');
|
|
10
|
+
const { SatelliteLink, OPTIONAL_ACTIONS } = require('./lib/satellite');
|
|
11
11
|
const { normalizeSatellites, normalizeTiles } = require('./lib/layout');
|
|
12
12
|
const { NAMES } = require('./lib/names');
|
|
13
|
-
const {
|
|
13
|
+
const {
|
|
14
|
+
toNumber,
|
|
15
|
+
isOn,
|
|
16
|
+
textOf,
|
|
17
|
+
levelPercent,
|
|
18
|
+
levelValue,
|
|
19
|
+
switchValue,
|
|
20
|
+
setpointValue,
|
|
21
|
+
tileArgs,
|
|
22
|
+
} = require('./lib/values');
|
|
14
23
|
|
|
15
24
|
/** After a touch the tile shows the real state again after this time (when the device did not follow) */
|
|
16
25
|
const RESYNC_MS = 3000;
|
|
@@ -27,7 +36,8 @@ const CHART_POINTS = 60;
|
|
|
27
36
|
* @property {Tile} tile - The tile
|
|
28
37
|
* @property {Record<string, string | number>} args - Its tile_set arguments
|
|
29
38
|
* @property {Partial<ioBroker.StateCommon>} common - Common part of the object of its state
|
|
30
|
-
* @property {Partial<ioBroker.StateCommon>} common2 - Common part of the object of the on/off
|
|
39
|
+
* @property {Partial<ioBroker.StateCommon>} common2 - Common part of the object of the second state (on/off of a
|
|
40
|
+
* dimmer, target temperature of a thermostat)
|
|
31
41
|
* @property {number} lastLevel - Last level above 0 of a dimmer (switched on again with it)
|
|
32
42
|
*/
|
|
33
43
|
|
|
@@ -54,6 +64,8 @@ class SatelliteDisplay extends utils.Adapter {
|
|
|
54
64
|
this.stopping = false;
|
|
55
65
|
/** @type {Set<string>} read-only states already reported */
|
|
56
66
|
this.readOnlyWarned = new Set();
|
|
67
|
+
/** @type {Set<string>} satellites already told that their firmware is too old for a tile */
|
|
68
|
+
this.oldFirmwareWarned = new Set();
|
|
57
69
|
}
|
|
58
70
|
|
|
59
71
|
async onReady() {
|
|
@@ -178,16 +190,19 @@ class SatelliteDisplay extends utils.Adapter {
|
|
|
178
190
|
for (const tile of tiles) {
|
|
179
191
|
const obj = await objectOf(tile.state);
|
|
180
192
|
const obj2 = tile.state2 ? await objectOf(tile.state2) : null;
|
|
193
|
+
if (tile.state3) {
|
|
194
|
+
await objectOf(tile.state3);
|
|
195
|
+
}
|
|
181
196
|
/** @type {Bound} */
|
|
182
197
|
const b = {
|
|
183
198
|
tile,
|
|
184
|
-
args: tileArgs(tile, obj, this.lang),
|
|
199
|
+
args: tileArgs(tile, obj, this.lang, obj2),
|
|
185
200
|
common: /** @type {Partial<ioBroker.StateCommon>} */ (obj?.common || {}),
|
|
186
201
|
common2: /** @type {Partial<ioBroker.StateCommon>} */ (obj2?.common || {}),
|
|
187
202
|
lastLevel: 100,
|
|
188
203
|
};
|
|
189
204
|
this.bound.push(b);
|
|
190
|
-
for (const id of [tile.state, tile.state2].filter(Boolean)) {
|
|
205
|
+
for (const id of [tile.state, tile.state2, tile.state3].filter(Boolean)) {
|
|
191
206
|
const list = this.byState.get(id) || [];
|
|
192
207
|
list.push(b);
|
|
193
208
|
this.byState.set(id, list);
|
|
@@ -230,7 +245,7 @@ class SatelliteDisplay extends utils.Adapter {
|
|
|
230
245
|
return;
|
|
231
246
|
}
|
|
232
247
|
link.call('tile_clear', { page: 0 });
|
|
233
|
-
const mine = this.bound.filter(b => b.tile.satellite === sat.id);
|
|
248
|
+
const mine = this.bound.filter(b => b.tile.satellite === sat.id && this.supported(sat, link, b));
|
|
234
249
|
for (const b of mine) {
|
|
235
250
|
link.call('tile_set', b.args);
|
|
236
251
|
}
|
|
@@ -242,6 +257,28 @@ class SatelliteDisplay extends utils.Adapter {
|
|
|
242
257
|
}
|
|
243
258
|
}
|
|
244
259
|
|
|
260
|
+
/**
|
|
261
|
+
* A thermostat needs the action tile_setpoint of a newer firmware; without it the tile is left out.
|
|
262
|
+
*
|
|
263
|
+
* @param {SatelliteConfig} sat - Satellite
|
|
264
|
+
* @param {SatelliteLink} link - Its connection
|
|
265
|
+
* @param {Bound} b - Tile
|
|
266
|
+
* @returns {boolean} True when the firmware can show the tile
|
|
267
|
+
*/
|
|
268
|
+
supported(sat, link, b) {
|
|
269
|
+
if (b.tile.type !== 'thermostat' || link.has('tile_setpoint')) {
|
|
270
|
+
return true;
|
|
271
|
+
}
|
|
272
|
+
const key = `${sat.id}/tile_setpoint`;
|
|
273
|
+
if (!this.oldFirmwareWarned.has(key)) {
|
|
274
|
+
this.oldFirmwareWarned.add(key);
|
|
275
|
+
this.log.warn(
|
|
276
|
+
`${sat.name}: a thermostat tile needs the satellite firmware ${OPTIONAL_ACTIONS.tile_setpoint} or newer, it is left out`,
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
281
|
+
|
|
245
282
|
/**
|
|
246
283
|
* Sends the current values of a tile.
|
|
247
284
|
*
|
|
@@ -254,9 +291,9 @@ class SatelliteDisplay extends utils.Adapter {
|
|
|
254
291
|
try {
|
|
255
292
|
const state = await this.getForeignStateAsync(b.tile.state);
|
|
256
293
|
this.push(b, b.tile.state, state?.val);
|
|
257
|
-
|
|
258
|
-
const
|
|
259
|
-
this.push(b,
|
|
294
|
+
for (const id of [b.tile.state2, b.tile.state3].filter(Boolean)) {
|
|
295
|
+
const other = await this.getForeignStateAsync(id);
|
|
296
|
+
this.push(b, id, other?.val);
|
|
260
297
|
}
|
|
261
298
|
} catch (e) {
|
|
262
299
|
this.log.debug(`Reading ${b.tile.state} failed: ${e.message}`);
|
|
@@ -314,6 +351,24 @@ class SatelliteDisplay extends utils.Adapter {
|
|
|
314
351
|
link.call('tile_state', { page, slot, on: isOn(val) });
|
|
315
352
|
}
|
|
316
353
|
break;
|
|
354
|
+
case 'thermostat':
|
|
355
|
+
// one state can be bound twice (e.g. the target as the current value too): send each meaning
|
|
356
|
+
if (id === b.tile.state) {
|
|
357
|
+
const n = toNumber(val);
|
|
358
|
+
if (n !== null) {
|
|
359
|
+
link.call('tile_value', { page, slot, value: n });
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
if (id === b.tile.state2 && link.has('tile_setpoint')) {
|
|
363
|
+
const n = toNumber(val);
|
|
364
|
+
if (n !== null) {
|
|
365
|
+
link.call('tile_setpoint', { page, slot, value: n, step: b.tile.step });
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
if (id === b.tile.state3) {
|
|
369
|
+
link.call('tile_state', { page, slot, on: isOn(val) });
|
|
370
|
+
}
|
|
371
|
+
break;
|
|
317
372
|
default:
|
|
318
373
|
break;
|
|
319
374
|
}
|
|
@@ -426,6 +481,8 @@ class SatelliteDisplay extends utils.Adapter {
|
|
|
426
481
|
b.lastLevel = input.value;
|
|
427
482
|
}
|
|
428
483
|
target = { id: tile.state, val: levelValue(input.value, b.common), common: b.common };
|
|
484
|
+
} else if (tile.type === 'thermostat' && input.input === 'setpoint') {
|
|
485
|
+
target = { id: tile.state2, val: setpointValue(input.value, tile.step, b.common2), common: b.common2 };
|
|
429
486
|
} else if (tile.type === 'button' && input.input === 'press') {
|
|
430
487
|
target = { id: tile.state, val: b.common.type === 'number' ? 1 : true, common: b.common };
|
|
431
488
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.satellite-display",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "Tile pages on the touch display of ESPHome voice satellites: values, gauges, charts, switches, dimmers and buttons bound to ioBroker states",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "sadam6752-tech",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./_virtual_mf___mfe_internal__SatDisplay__mf_owner__180606781360439__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-BtcMQbqk.js";import{$r as e,Dn as t,K as n,Mt as r,Qr as i,Qt as a,Sn as o,Yt as s,Zr as c,Zt as l,_ as u,cn as d,en as f,m as p,on as m,pt as h,rn as g,tn as _,zn as v}from"./_virtual_mf___mfe_internal__SatDisplay__mf_owner__180606781360439__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-B7AZpjV-.js";import{t as y}from"./_virtual_mf___mfe_internal__SatDisplay__mf_owner__180606781360439__loadShare__shared-B2hx53j0.js";var b={s:[1,1],q:[1,2],w:[2,1],l:[2,2]},x={value:[`s`,`q`,`w`,`l`],gauge:[`q`,`l`],bar:[`q`,`w`,`l`],chart:[`w`,`l`],switch:[`s`,`q`,`w`],dimmer:[`w`,`l`],button:[`s`,`q`,`w`]},S=`lightbulb.lamp.ceiling-light.power-plug.power.fan.radiator.thermometer.water-percent.flash.solar-power.battery.window-closed.window-open.door.garage.blinds.lock.lock-open.bell.television.movie.music.speaker.coffee.washing-machine.dishwasher.car.home.bed.sofa.shower.weather-sunny.weather-night.alarm.play.pause.stop.check.close`.split(`.`);function C(e,t){let n=e=>String(e||``).trim().toLowerCase().replace(/[^a-z0-9_-]+/g,`_`).replace(/^_+|_+$/g,``)||`satellite`;return n(e)===n(t)}function w(e,t,n){let[r,i]=b[e];return t>=0&&n>=0&&t+r<=2&&n+i<=4}function T(e,t){let[n,r]=b[e.size],[i,a]=b[t.size];return e.col<t.col+i&&t.col<e.col+n&&e.row<t.row+a&&t.row<e.row+r}function E(e,t,n,r,i,a,o=-1){return w(r,i,a)?!e.some((e,s)=>s!==o&&e.enabled!==!1&&C(e.satellite,t)&&Number(e.page)===n&&b[e.size]&&T(e,{size:r,col:i,row:a})):!1}function D(e,t,n,r,i=-1){for(let a=0;a<4;a++)for(let o=0;o<2;o++)if(E(e,t,n,r,o,a,i))return{col:o,row:a};return null}function O(e,t,n,r,i){return e.findIndex(e=>e.enabled!==!1&&C(e.satellite,t)&&Number(e.page)===n&&b[e.size]&&T(e,{size:`s`,col:r,row:i}))}function k(e,t,n){return e.map((e,t)=>({t:e,i:t})).filter(e=>e.t.enabled!==!1&&C(e.t.satellite,t)&&Number(e.t.page)===n).slice(8).map(e=>e.i)}function A(e,t,n,r){return{enabled:!0,satellite:e,page:t,col:n,row:r,size:`s`,type:`value`,state:``,state2:``,label:``,unit:``,icon:``,decimals:``,min:``,max:``}}var j=1.5,M=e=>Math.round(e*j),N=e=>6+e*157,P=e=>6+Math.floor(e*117/2),F={value:`sd_kind_value`,gauge:`sd_kind_gauge`,bar:`sd_kind_bar`,chart:`sd_kind_chart`,switch:`sd_kind_switch`,dimmer:`sd_kind_dimmer`,button:`sd_kind_button`},I={s:`1 × 1`,q:`1 × 2`,w:`2 × 1`,l:`2 × 2`},L={screen:`#0B1118`,tile:`#18212B`,tileOn:`#0C4A6E`,label:`#8A9AAC`,accent:`#38BDF8`,track:`#2E3A47`},R={TileEditor:class extends y{constructor(e){super(e),this.state={...this.state,satellite:``,page:1,selected:-1,pickFor:null,dragging:-1,values:{},names:{}}}async componentDidMount(){await super.componentDidMount();let e=this.satelliteNames();e.length&&this.setState({satellite:e[0]},()=>void this.readStates())}tiles(){let e=y.getValue(this.props.data,`tiles`);return Array.isArray(e)?e:[]}satelliteNames(){let e=y.getValue(this.props.data,`satellites`),t=(Array.isArray(e)?e:[]).map(e=>String((e==null?void 0:e.name)||``).trim()).filter(Boolean);for(let e of this.tiles()){let n=String(e.satellite||``).trim();n&&!t.some(e=>C(e,n))&&t.push(n)}return t}isConfigured(e){let t=y.getValue(this.props.data,`satellites`);return(Array.isArray(t)?t:[]).some(t=>C((t==null?void 0:t.name)||``,e))}setTiles(e,t=this.state.selected){this.setState({selected:t},()=>void this.onChange(`tiles`,e,()=>void this.readStates()))}update(e,t){let n=this.tiles().map((n,r)=>r===e?{...n,...t}:n);this.setTiles(n)}async readStates(){let e=this.props.oContext.socket,t=new Set;for(let e of this.pageTiles())for(let n of[e.tile.state,e.tile.state2])n&&!(n in this.state.values)&&t.add(n);if(!t.size)return;let n={},r={},i=u.getLanguage();for(let o of t)try{var a;let t=await e.getState(o);n[o]=t==null?void 0:t.val;let s=await e.getObject(o),c=s==null||(a=s.common)==null?void 0:a.name;r[o]=typeof c==`object`&&c?c[i]||c.en||``:String(c||``)}catch{n[o]=void 0}this.setState(e=>({values:{...e.values,...n},names:{...e.names,...r}}))}pageTiles(){return this.tiles().map((e,t)=>({tile:e,index:t})).filter(e=>e.tile.enabled!==!1&&C(e.tile.satellite,this.state.satellite)&&Number(e.tile.page)===this.state.page&&!!b[e.tile.size])}addAt(e,t){let n=[...this.tiles(),A(this.state.satellite,this.state.page,e,t)];this.setTiles(n,n.length-1)}moveTo(e,t,n){let r=this.tiles()[e];r&&E(this.tiles(),this.state.satellite,this.state.page,r.size,t,n,e)&&this.update(e,{col:t,row:n})}remove(e){this.setTiles(this.tiles().filter((t,n)=>n!==e),-1)}changeKind(e,t){let n=this.tiles()[e],{size:r,col:i,row:a}=n;if(!x[t].includes(r)){let o=x[t].find(t=>E(this.tiles(),n.satellite,Number(n.page),t,i,a,e));if(o)r=o;else for(let o of x[t]){let t=D(this.tiles(),n.satellite,Number(n.page),o,e);if(t){r=o,{col:i,row:a}=t;break}}}this.update(e,{type:t,size:r,col:i,row:a,state2:t===`dimmer`?n.state2:``})}changePage(e,t){let n=this.tiles()[e],r=D(this.tiles(),n.satellite,t,n.size,e);r&&(this.update(e,{page:t,...r}),this.setState({page:t}))}renderTileFace(t,n,r){let a=this.state.values[t.state],o=t.label||this.state.names[t.state]||t.state.split(`.`).pop()||u.t(`sd_no_state`),s=typeof a==`number`?a:NaN,l=t.unit&&t.type!==`dimmer`?` ${t.unit}`:``,d=a==null?`–`:typeof a==`number`?`${Number(a.toFixed(t.decimals===``||t.decimals===null?1:Number(t.decimals)))}${l}`:`${String(a)}${typeof a==`boolean`?``:l}`,f=t.type===`dimmer`&&t.state2?!!this.state.values[t.state2]:a===!0||typeof a==`number`&&a>0,p=t.min===``||t.min===null?0:Number(t.min),m=t.max===``||t.max===null?100:Number(t.max),h=Number.isFinite(s)&&m>p?Math.max(0,Math.min(1,(s-p)/(m-p))):.5,g=i(`div`,{style:{color:L.label,fontSize:M(10),whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`},children:o}),_=r>M(60),v=i(`div`,{style:{fontSize:M(_?22:14)},children:d}),y=i(`div`,{style:{width:M(26),height:M(14),borderRadius:M(7),background:f?L.accent:L.track,position:`relative`,flex:`none`},children:i(`div`,{style:{position:`absolute`,top:M(2),left:M(f?14:2),width:M(10),height:M(10),borderRadius:`50%`,background:`#fff`}})});switch(t.type){case`gauge`:{let t=M(56),n=t/2-M(4),r=Math.PI*2*n*.75;return e(c,{children:[g,e(`svg`,{width:t,height:t,style:{display:`block`,margin:`${M(2)}px auto 0`},children:[i(`circle`,{cx:t/2,cy:t/2,r:n,fill:`none`,stroke:L.track,strokeWidth:M(5),strokeDasharray:`${r} ${r*2}`,transform:`rotate(135 ${t/2} ${t/2})`,strokeLinecap:`round`}),i(`circle`,{cx:t/2,cy:t/2,r:n,fill:`none`,stroke:L.accent,strokeWidth:M(5),strokeDasharray:`${r*h} ${r*3}`,transform:`rotate(135 ${t/2} ${t/2})`,strokeLinecap:`round`}),i(`text`,{x:t/2,y:t/2+M(4),textAnchor:`middle`,fill:`#fff`,fontSize:M(11),children:d})]})]})}case`bar`:return e(c,{children:[g,v,i(`div`,{style:{height:M(5),background:L.track,borderRadius:M(3),marginTop:M(_?14:2)},children:i(`div`,{style:{width:`${h*100}%`,height:`100%`,background:L.accent,borderRadius:M(3)}})})]});case`chart`:return e(c,{children:[g,v,i(`svg`,{width:n-M(16),height:M(18),style:{display:`block`},children:i(`polyline`,{fill:`none`,stroke:L.accent,strokeWidth:2,points:[0,.6,.4,.7,.3,.5,.2,.45,.35].map((e,t)=>`${t*(n-M(16))/8},${e*M(18)}`).join(` `)})})]});case`switch`:return e(`div`,{style:{display:`flex`,alignItems:_?`flex-start`:`center`,gap:M(6),height:`100%`,flexDirection:_?`column`:`row`,justifyContent:`space-between`},children:[i(`div`,{style:{flex:1,minWidth:0},children:g}),i(`div`,{style:{alignSelf:`flex-end`},children:y})]});case`dimmer`:return e(`div`,{style:{display:`flex`,alignItems:`center`,gap:M(6),height:`100%`},children:[i(`div`,{style:{width:M(40),minWidth:0},children:g}),y,i(`div`,{style:{flex:1,height:M(5),background:L.track,borderRadius:M(3)},children:i(`div`,{style:{width:`${Number.isFinite(s)?Math.max(0,Math.min(100,s)):50}%`,height:`100%`,background:L.accent,borderRadius:M(3)}})}),i(`div`,{style:{fontSize:M(11),width:M(30),textAlign:`right`},children:Number.isFinite(s)?`${Math.round(s)} %`:`–`})]});case`button`:return e(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`center`,height:`100%`,gap:M(6),flexDirection:_?`column`:`row`},children:[t.icon?e(`span`,{style:{color:L.accent,fontSize:M(9)},children:[`◉ `,t.icon]}):null,i(`span`,{style:{fontSize:M(11)},children:o})]});default:return r<=M(53)&&n<=M(151)?e(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,height:`100%`},children:[i(`div`,{style:{minWidth:0,flex:1},children:g}),i(`div`,{style:{fontSize:M(13)},children:d})]}):e(c,{children:[g,v]})}}renderScreen(){let t=this.tiles(),n=new Set(k(t,this.state.satellite,this.state.page)),a=[];for(let e=0;e<4;e++)for(let n=0;n<2;n++)O(t,this.state.satellite,this.state.page,n,e)===-1&&a.push(i(f,{title:u.t(`sd_add_here`),children:i(`div`,{onClick:()=>this.addAt(n,e),onDragOver:e=>e.preventDefault(),onDrop:t=>{t.preventDefault(),this.moveTo(this.state.dragging,n,e)},style:{position:`absolute`,left:M(N(n)),top:M(P(e)),width:M(151),height:M(P(e+1)-6-P(e)),border:`1px dashed #3a4654`,borderRadius:M(8),display:`flex`,alignItems:`center`,justifyContent:`center`,color:`#56657a`,cursor:`pointer`,boxSizing:`border-box`},children:i(r,{})})},`c${n}${e}`));return e(`div`,{style:{position:`relative`,width:M(320),height:M(240),background:L.screen,borderRadius:10,outline:`8px solid #2a2a2a`,margin:8,flex:`none`,fontFamily:`Roboto, sans-serif`},children:[a,this.pageTiles().map(({tile:e,index:t})=>{let[r,a]=b[e.size],o=M(r===2?308:151),s=M(P(e.row+a)-6-P(e.row)),c=t===this.state.selected,l=e.type===`switch`&&(this.state.values[e.state]===!0||Number(this.state.values[e.state])>0);return i(`div`,{draggable:!0,onDragStart:()=>this.setState({dragging:t,selected:t}),onDragEnd:()=>this.setState({dragging:-1}),onDragOver:e=>e.preventDefault(),onDrop:e=>{var t;e.preventDefault();let n=(t=e.currentTarget.parentElement)==null?void 0:t.getBoundingClientRect();if(n){let t=Math.min(1,Math.max(0,Math.floor((e.clientX-n.left)/M(157)))),r=Math.min(3,Math.max(0,Math.floor((e.clientY-n.top)/M(58.5))));this.moveTo(this.state.dragging,t,r)}},onClick:()=>this.setState({selected:t}),title:n.has(t)?u.t(`sd_too_many`):``,style:{position:`absolute`,left:M(N(e.col)),top:M(P(e.row)),width:o,height:s,boxSizing:`border-box`,padding:`${M(4)}px ${M(7)}px`,background:l?L.tileOn:L.tile,borderRadius:M(8),color:`#fff`,cursor:`grab`,overflow:`hidden`,border:`2px solid ${c?L.accent:n.has(t)?`#EF4444`:`transparent`}`,opacity:n.has(t)?.5:1,userSelect:`none`},children:this.renderTileFace(e,o,s)},t)})]})}renderStateField(n,r,a,o){return e(g,{sx:{display:`flex`,gap:1,alignItems:`center`},children:[i(s,{variant:`standard`,fullWidth:!0,label:u.t(o),value:r[a]||``,onChange:e=>this.update(n,{[a]:e.target.value})}),i(t,{size:`small`,title:u.t(`sd_pick_state`),onClick:()=>this.setState({pickFor:a}),children:i(h,{})})]})}renderPanel(){let t=this.state.selected,r=this.tiles()[t];if(!r||!C(r.satellite,this.state.satellite))return i(_,{variant:`body2`,sx:{opacity:.7,p:1},children:u.t(`sd_hint`)});let f=this.tiles(),p=e=>e===``?``:Number(e),h=r.type===`gauge`||r.type===`bar`||r.type===`chart`;return e(g,{sx:{display:`flex`,flexDirection:`column`,gap:1.5,minWidth:260,maxWidth:360,flex:1},children:[i(o,{control:i(d,{checked:r.enabled!==!1,onChange:e=>this.update(t,{enabled:e.target.checked})}),label:u.t(`sd_active`)}),i(s,{select:!0,variant:`standard`,label:u.t(`sd_kind`),value:r.type,onChange:e=>this.changeKind(t,e.target.value),children:Object.keys(x).map(e=>i(v,{value:e,children:u.t(F[e])},e))}),e(g,{children:[i(_,{variant:`caption`,sx:{opacity:.7},children:u.t(`sd_size`)}),i(a,{exclusive:!0,size:`small`,value:r.size,sx:{display:`flex`},onChange:(e,n)=>n&&this.update(t,{size:n}),children:x[r.type].map(e=>i(l,{value:e,sx:{flex:1},disabled:e!==r.size&&!E(f,r.satellite,Number(r.page),e,r.col,r.row,t),children:I[e]},e))})]}),this.renderStateField(t,r,`state`,r.type===`dimmer`?`sd_level_state`:`sd_state`),r.type===`dimmer`?this.renderStateField(t,r,`state2`,`sd_onoff_state`):null,e(g,{sx:{display:`flex`,gap:1},children:[i(s,{variant:`standard`,sx:{flex:2},label:u.t(`sd_label`),placeholder:this.state.names[r.state]||``,value:r.label||``,slotProps:{htmlInput:{maxLength:24}},onChange:e=>this.update(t,{label:e.target.value})}),r.type!==`dimmer`&&r.type!==`button`&&r.type!==`switch`?i(s,{variant:`standard`,sx:{flex:1},label:u.t(`sd_unit`),value:r.unit||``,slotProps:{htmlInput:{maxLength:8}},onChange:e=>this.update(t,{unit:e.target.value})}):null]}),r.type===`button`||r.type===`switch`&&r.size===`q`?e(s,{select:!0,variant:`standard`,label:u.t(`sd_icon`),value:r.icon||``,onChange:e=>this.update(t,{icon:e.target.value}),children:[i(v,{value:``,children:`–`}),S.map(e=>i(v,{value:e,children:e},e))]}):null,r.type===`value`||h?e(g,{sx:{display:`flex`,gap:1},children:[i(s,{variant:`standard`,type:`number`,sx:{flex:1},label:u.t(`sd_decimals`),value:r.decimals??``,slotProps:{htmlInput:{min:0,max:3}},onChange:e=>this.update(t,{decimals:p(e.target.value)})}),h?e(c,{children:[i(s,{variant:`standard`,type:`number`,sx:{flex:1},label:u.t(`sd_min`),value:r.min??``,onChange:e=>this.update(t,{min:p(e.target.value)})}),i(s,{variant:`standard`,type:`number`,sx:{flex:1},label:u.t(`sd_max`),value:r.max??``,onChange:e=>this.update(t,{max:p(e.target.value)})})]}):null]}):null,i(s,{select:!0,variant:`standard`,label:u.t(`sd_page`),value:Number(r.page),onChange:e=>this.changePage(t,Number(e.target.value)),children:[1,2,3,4].map(e=>i(v,{value:e,disabled:e!==Number(r.page)&&!D(f,r.satellite,e,r.size,t),children:e},e))}),i(m,{color:`error`,variant:`outlined`,startIcon:i(n,{}),onClick:()=>this.remove(t),children:u.t(`sd_delete`)})]})}renderPicker(){let e=this.state.selected,t=this.state.pickFor,n=this.tiles()[e];return!t||!n?null:i(p,{dialogName:`satelliteDisplayTile`,socket:this.props.oContext.socket,theme:this.props.oContext.theme,themeType:this.props.oContext.themeType,imagePrefix:`../..`,selected:n[t]||``,onClose:()=>this.setState({pickFor:null}),onOk:n=>{let r=Array.isArray(n)?n[0]:n;this.setState({pickFor:null}),r&&this.update(e,{[t]:r})}})}renderItem(){let t=this.satelliteNames();if(!t.length)return i(_,{sx:{p:2},children:u.t(`sd_no_satellites`)});let n=t.find(e=>C(e,this.state.satellite))||t[0],r=[1,2,3,4].map(e=>this.tiles().filter(t=>t.enabled!==!1&&C(t.satellite,n)&&Number(t.page)===e).length),o=this.tiles().filter(e=>e.enabled===!1&&C(e.satellite,n)&&Number(e.page)===this.state.page).length;return e(g,{sx:{width:`100%`},children:[e(g,{sx:{display:`flex`,gap:2,alignItems:`center`,flexWrap:`wrap`,mb:2},children:[i(s,{select:!0,variant:`standard`,label:u.t(`sd_satellite`),value:n,sx:{minWidth:180},onChange:e=>this.setState({satellite:e.target.value,selected:-1},()=>void this.readStates()),children:t.map(e=>i(v,{value:e,children:this.isConfigured(e)?e:`${e} (${u.t(`sd_not_configured`)})`},e))}),i(a,{exclusive:!0,size:`small`,value:this.state.page,onChange:(e,t)=>t&&this.setState({page:t,selected:-1},()=>void this.readStates()),children:Array.from({length:4},(e,t)=>t+1).map(t=>e(l,{value:t,children:[u.t(`sd_page`),` `,t,r[t-1]?` (${r[t-1]})`:``]},t))})]}),e(g,{sx:{display:`flex`,gap:3,alignItems:`flex-start`,flexWrap:`wrap`},children:[e(g,{children:[this.renderScreen(),e(_,{variant:`caption`,component:`div`,sx:{opacity:.7,mt:2,maxWidth:M(320)},children:[u.t(`sd_how`),o?` ${u.t(`sd_disabled_count`,o)}`:``]})]}),this.renderPanel()]}),this.renderPicker()]})}}};export{R as default};
|