iobroker.eos-admin 7.9.52 → 7.9.53
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/adminWww/assets/Objects-DPw53Native.js +878 -0
- package/adminWww/assets/bootstrap-DPWrite53.js +317 -0
- package/adminWww/assets/hostInit-DPWrite53.js +2 -0
- package/adminWww/assets/index-DPAdapter53.js +950 -0
- package/adminWww/assets/index-DPWrite53.js +2 -0
- package/adminWww/index.html +9 -9
- package/adminWww/js/eos-objects-state-tools.js +26 -443
- package/adminWww/mf-manifest.json +1 -1
- package/adminWww/remoteEntry-DPWrite53.js +2 -0
- package/build/main.js +7 -4
- package/io-package.json +8 -4
- package/package.json +1 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./bootstrap-DPWrite53.js","./DefaultPropsProvider-BiXBMQYQ.js","./_commonjsHelpers-CE1G-McA.js","./iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js","./emotion-serialize.esm-Q4o_CgeF.js","./iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-BywLg1Xe.js","./iobroker_admin__loadShare__react__loadShare__-LM7uyL45.js","./ace-DEUjyTIn.js","./iobroker_admin__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__-LFZoiUTt.js","./iobroker_admin__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__-CpA7pnS5.js","./iobroker_admin__loadShare__leaflet__loadShare__-CNUAG3AH.js","./ext-language_tools-ylAoucDh.js","./iobroker_admin__loadShare__react_mf_2_dropzone__loadShare__-CwjnV48g.js","./iobroker_admin__loadShare__react_mf_2_dom__loadShare__-CVeAXnkk.js","./preload-helper-BDBacUwf.js","./iobroker_admin__loadShare___mf_0_mui_mf_1_icons_mf_2_material__loadShare__-CJO5yP3h.js","./sdk-C-e-e2gd.js","./extends-CF3RwP-h.js","./assertThisInitialized-B0aQ9eG_.js","./useTheme-Bl-M1DYp.js","./createTheme-DFX8CY6F.js","./blue-CagzI6CQ.js","./index-DcK0RDrH.js","./ThemeProvider-BOFFjWAF.js","./emotion-cache.browser.esm-BgJfNZJN.js","./setYear-3ufv5yRD.js","./en-US-DBFJNIH6.js","./bootstrap-D57bMhRi.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{_ as c}from"./preload-helper-BDBacUwf.js";import"./iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))s(e);new MutationObserver(e=>{for(const r of e)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?r.credentials="include":e.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function s(e){if(e.ep)return;e.ep=!0;const r=n(e);fetch(e.href,r)}})();c(()=>import("./bootstrap-DPWrite53.js").then(i=>i.o),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]),import.meta.url);
|
package/adminWww/index.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
translate="no"
|
|
5
5
|
>
|
|
6
6
|
<head>
|
|
7
|
-
<script type="module" src="./assets/hostInit-
|
|
7
|
+
<script type="module" src="./assets/hostInit-DPWrite53.js?v=53"></script>
|
|
8
8
|
|
|
9
9
|
<meta charset="utf-8" />
|
|
10
10
|
<link
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
rel="stylesheet"
|
|
32
32
|
href="css/leaflet.css"
|
|
33
33
|
/>
|
|
34
|
-
<link rel="stylesheet" href="./css/eos-branding.css?v=
|
|
34
|
+
<link rel="stylesheet" href="./css/eos-branding.css?v=53" />
|
|
35
35
|
<link
|
|
36
36
|
rel="manifest"
|
|
37
37
|
href="manifest.json"
|
|
@@ -151,15 +151,15 @@
|
|
|
151
151
|
false,
|
|
152
152
|
);
|
|
153
153
|
</script>
|
|
154
|
-
<script src="./js/eos-performance-guard.js?v=
|
|
155
|
-
<script type="module" crossorigin src="./assets/index-
|
|
154
|
+
<script src="./js/eos-performance-guard.js?v=53"></script>
|
|
155
|
+
<script type="module" crossorigin src="./assets/index-DPWrite53.js?v=53"></script>
|
|
156
156
|
<link rel="modulepreload" crossorigin href="./assets/preload-helper-BDBacUwf.js">
|
|
157
157
|
<link rel="modulepreload" crossorigin href="./assets/iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js">
|
|
158
|
-
<script defer src="./js/eos-branding.js?v=
|
|
159
|
-
<script defer src="./js/eos-security-ui.js?v=
|
|
160
|
-
<script defer src="./js/eos-role-ui.js?v=
|
|
161
|
-
<script defer src="./js/eos-assistant.js?v=
|
|
162
|
-
<script defer src="./js/eos-objects-state-tools.js?v=
|
|
158
|
+
<script defer src="./js/eos-branding.js?v=53"></script>
|
|
159
|
+
<script defer src="./js/eos-security-ui.js?v=53"></script>
|
|
160
|
+
<script defer src="./js/eos-role-ui.js?v=53"></script>
|
|
161
|
+
<script defer src="./js/eos-assistant.js?v=53"></script>
|
|
162
|
+
<script defer src="./js/eos-objects-state-tools.js?v=53"></script>
|
|
163
163
|
</head>
|
|
164
164
|
<body>
|
|
165
165
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
|
@@ -1,447 +1,30 @@
|
|
|
1
1
|
(() => {
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
'[title*="Wert schreiben"]',
|
|
31
|
-
'[title*="Write value"]'
|
|
32
|
-
].join(',');
|
|
33
|
-
|
|
34
|
-
const interactiveIgnoreSelector = [
|
|
35
|
-
`.${DIALOG_CLASS}`,
|
|
36
|
-
'button',
|
|
37
|
-
'[role="button"]',
|
|
38
|
-
'a[href]',
|
|
39
|
-
'input',
|
|
40
|
-
'select',
|
|
41
|
-
'textarea',
|
|
42
|
-
'.MuiIconButton-root',
|
|
43
|
-
'.MuiCheckbox-root',
|
|
44
|
-
'.MuiMenuItem-root',
|
|
45
|
-
'.MuiAutocomplete-option',
|
|
46
|
-
'.copyButton'
|
|
47
|
-
].join(',');
|
|
48
|
-
|
|
49
|
-
const normalizeText = value => String(value ?? '').replace(/\s+/g, ' ').trim();
|
|
50
|
-
|
|
51
|
-
const getSocket = () =>
|
|
52
|
-
window.NEXOWATT_EOS_OBJECTS_SOCKET ||
|
|
53
|
-
window.NEXOWATT_EOS_SOCKET ||
|
|
54
|
-
window.socket ||
|
|
55
|
-
null;
|
|
56
|
-
|
|
57
|
-
const waitForSocket = async () => {
|
|
58
|
-
for (let i = 0; i < 40; i += 1) {
|
|
59
|
-
const socket = getSocket();
|
|
60
|
-
if (socket && (typeof socket.sendTo === 'function' || typeof socket.setState === 'function')) return socket;
|
|
61
|
-
await delay(50);
|
|
62
|
-
}
|
|
63
|
-
throw new Error('Socket ist noch nicht bereit');
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
const withTimeout = async (promise, ms, fallback = null) => {
|
|
67
|
-
let timer;
|
|
68
|
-
try {
|
|
69
|
-
return await Promise.race([
|
|
70
|
-
Promise.resolve(promise),
|
|
71
|
-
new Promise(resolve => { timer = window.setTimeout(() => resolve(fallback), ms); }),
|
|
72
|
-
]);
|
|
73
|
-
} finally {
|
|
74
|
-
if (timer) window.clearTimeout(timer);
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
const parseBoolean = value => {
|
|
79
|
-
if (value === true || value === 1) return true;
|
|
80
|
-
if (value === false || value === 0 || value == null) return false;
|
|
81
|
-
const normalized = String(value).trim().toLowerCase();
|
|
82
|
-
return normalized === 'true' || normalized === '1' || normalized === 'on' || normalized === 'yes' || normalized === 'ja' || normalized === 'ein';
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
const isNullToken = value => /^\s*(\(null\)|null|undefined)?\s*$/i.test(String(value ?? ''));
|
|
86
|
-
|
|
87
|
-
const stripUnit = value => String(value ?? '')
|
|
88
|
-
.replace(/^\s*\((null|undefined)\)\s*$/i, '$1')
|
|
89
|
-
.replace(/\s+(?:%|°C|°F|K|W|kW|Wh|kWh|VA|VAr|A|V|Hz|bar|mbar|Pa|hPa|l|L|m³|m3|s|min|h|d)$/i, '')
|
|
90
|
-
.trim();
|
|
91
|
-
|
|
92
|
-
const inferTypeFromValue = value => {
|
|
93
|
-
const text = stripUnit(value);
|
|
94
|
-
if (/^(true|false|0|1|on|off|yes|no|ja|nein|ein|aus)$/i.test(text)) return 'boolean';
|
|
95
|
-
if (/^-?\d+(?:[.,]\d+)?$/.test(text)) return 'number';
|
|
96
|
-
if (/^\s*[\[{]/.test(String(value || ''))) return 'json';
|
|
97
|
-
return 'string';
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
const coerceValue = (rawValue, type) => {
|
|
101
|
-
const raw = String(rawValue ?? '');
|
|
102
|
-
if (isNullToken(raw) && type !== 'string' && type !== 'json') return null;
|
|
103
|
-
if (type === 'boolean') return parseBoolean(raw);
|
|
104
|
-
if (type === 'number') {
|
|
105
|
-
const normalized = stripUnit(raw).replace(',', '.');
|
|
106
|
-
const number = Number(normalized);
|
|
107
|
-
if (!Number.isFinite(number)) throw new Error(`Ungültige Zahl: ${raw}`);
|
|
108
|
-
return number;
|
|
109
|
-
}
|
|
110
|
-
if (type === 'json' || type === 'object') {
|
|
111
|
-
if (isNullToken(raw)) return null;
|
|
112
|
-
return JSON.parse(raw);
|
|
113
|
-
}
|
|
114
|
-
return raw;
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
const stateToString = value => {
|
|
118
|
-
if (value === null || value === undefined) return 'null';
|
|
119
|
-
if (typeof value === 'object') {
|
|
120
|
-
try { return JSON.stringify(value, null, 2); } catch (_) { return String(value); }
|
|
121
|
-
}
|
|
122
|
-
return String(value);
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
const formatWriteError = error => {
|
|
126
|
-
if (!error) return 'unbekannter Fehler';
|
|
127
|
-
if (typeof error === 'string') return error;
|
|
128
|
-
if (error.message) return error.message;
|
|
129
|
-
try { return JSON.stringify(error); } catch (_) { return String(error); }
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
let cachedEosAdminInstance = null;
|
|
133
|
-
const normalizeInstanceId = value => {
|
|
134
|
-
if (!value) return null;
|
|
135
|
-
if (typeof value === 'string') {
|
|
136
|
-
const id = value.replace(/^system\.adapter\./, '').trim();
|
|
137
|
-
return /^eos-admin\.\d+$/.test(id) ? id : null;
|
|
138
|
-
}
|
|
139
|
-
if (typeof value === 'object') return normalizeInstanceId(value._id || value.id || value.instance || value.namespace);
|
|
140
|
-
return null;
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
const resolveEosAdminInstance = async socket => {
|
|
144
|
-
if (cachedEosAdminInstance) return cachedEosAdminInstance;
|
|
145
|
-
const explicit = normalizeInstanceId(window.NEXOWATT_EOS_ADMIN_INSTANCE || window.adminInstance || window.adapterInstance);
|
|
146
|
-
if (explicit) return (cachedEosAdminInstance = explicit);
|
|
147
|
-
if (socket && typeof socket.getCurrentInstance === 'function') {
|
|
148
|
-
try {
|
|
149
|
-
const current = normalizeInstanceId(await withTimeout(socket.getCurrentInstance(), 700, null));
|
|
150
|
-
if (current) return (cachedEosAdminInstance = current);
|
|
151
|
-
} catch (_) { /* fallback below */ }
|
|
152
|
-
}
|
|
153
|
-
if (socket && typeof socket.getAdapterInstances === 'function') {
|
|
154
|
-
try {
|
|
155
|
-
const instances = await withTimeout(socket.getAdapterInstances('eos-admin'), 900, []);
|
|
156
|
-
const list = Array.isArray(instances) ? instances : [];
|
|
157
|
-
const alive = list.find(instance => normalizeInstanceId(instance) && instance?.common?.enabled !== false);
|
|
158
|
-
const id = normalizeInstanceId(alive || list[0]);
|
|
159
|
-
if (id) return (cachedEosAdminInstance = id);
|
|
160
|
-
} catch (_) { /* fallback below */ }
|
|
161
|
-
}
|
|
162
|
-
return (cachedEosAdminInstance = 'eos-admin.0');
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
const callEosAdmin = async (socket, command, message) => {
|
|
166
|
-
const instance = await resolveEosAdminInstance(socket);
|
|
167
|
-
if (!instance) throw new Error('EOS Admin Instanz konnte nicht ermittelt werden');
|
|
168
|
-
|
|
169
|
-
if (socket && typeof socket.sendTo === 'function') {
|
|
170
|
-
const result = socket.sendTo(instance, command, message);
|
|
171
|
-
if (result && typeof result.then === 'function') return await withTimeout(result, 7000, { ok: false, error: 'sendTo Timeout' });
|
|
172
|
-
if (result !== undefined) return result;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
const rawSocket = socket?._socket || socket?.socket || window.socket;
|
|
176
|
-
if (rawSocket && typeof rawSocket.emit === 'function') {
|
|
177
|
-
return await withTimeout(new Promise((resolve, reject) => {
|
|
178
|
-
try {
|
|
179
|
-
rawSocket.emit('sendTo', instance, command, message, response => resolve(response));
|
|
180
|
-
} catch (error) {
|
|
181
|
-
reject(error);
|
|
182
|
-
}
|
|
183
|
-
}), 7000, { ok: false, error: 'raw sendTo Timeout' });
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
throw new Error('socket.sendTo ist nicht verfügbar');
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
const writeStateUnrestricted = async (socket, id, state) => {
|
|
190
|
-
if (!socket) throw new Error('Socket ist nicht bereit');
|
|
191
|
-
|
|
192
|
-
let backendError = null;
|
|
193
|
-
try {
|
|
194
|
-
const response = await callEosAdmin(socket, 'eos:writeState', { id, state });
|
|
195
|
-
if (response === 'permissionError') throw new Error('sendTo permissionError');
|
|
196
|
-
if (response && response.ok === false) throw new Error(response.error || 'EOS Backend hat das Schreiben abgelehnt');
|
|
197
|
-
if (response && response.error) throw new Error(response.error);
|
|
198
|
-
return { ok: true, via: 'eos-admin' };
|
|
199
|
-
} catch (error) {
|
|
200
|
-
backendError = error;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
if (typeof socket.setState === 'function') {
|
|
204
|
-
try {
|
|
205
|
-
await withTimeout(socket.setState(id, state), 7000);
|
|
206
|
-
return { ok: true, via: 'socket' };
|
|
207
|
-
} catch (directError) {
|
|
208
|
-
throw new Error(`EOS-Backend: ${formatWriteError(backendError)}\nDirekt: ${formatWriteError(directError)}`);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
throw new Error(`EOS-Backend: ${formatWriteError(backendError)}\nDirekt: socket.setState ist nicht verfügbar`);
|
|
213
|
-
};
|
|
214
|
-
|
|
215
|
-
window.NEXOWATT_EOS_WRITE_STATE_UNRESTRICTED = writeStateUnrestricted;
|
|
216
|
-
|
|
217
|
-
const injectDialogStyle = () => {
|
|
218
|
-
if (document.getElementById('eos-dp-write-style')) return;
|
|
219
|
-
const style = document.createElement('style');
|
|
220
|
-
style.id = 'eos-dp-write-style';
|
|
221
|
-
style.textContent = `
|
|
222
|
-
html.${ACTIVE_CLASS} .eos-object-value-cell,[data-eos-object-value-cell]{pointer-events:auto!important;cursor:pointer!important}
|
|
223
|
-
.eos-dp-write-backdrop{position:fixed;inset:0;z-index:9000;background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;padding:18px;font-family:Roboto,Arial,sans-serif}.eos-dp-write-dialog{width:min(640px,calc(100vw - 36px));max-height:calc(100vh - 36px);overflow:auto;background:#061827;color:#fff;border:1px solid rgba(0,255,180,.45);border-radius:16px;box-shadow:0 18px 60px rgba(0,0,0,.65),0 0 34px rgba(0,255,180,.22);padding:18px}.eos-dp-write-dialog h3{margin:0 0 8px;font-size:19px;color:#18f4c0}.eos-dp-write-id{font-family:monospace;font-size:12px;opacity:.82;word-break:break-all;margin-bottom:12px}.eos-dp-write-meta{font-size:12px;opacity:.76;margin-bottom:12px}.eos-dp-write-dialog label{display:block;font-size:13px;margin:12px 0 6px}.eos-dp-write-dialog input[type=text],.eos-dp-write-dialog textarea,.eos-dp-write-dialog select{box-sizing:border-box;width:100%;background:#07111d;color:#fff;border:1px solid rgba(255,255,255,.28);border-radius:8px;padding:10px;font-size:15px;outline:none}.eos-dp-write-dialog textarea{min-height:130px;font-family:monospace}.eos-dp-write-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:18px;flex-wrap:wrap}.eos-dp-write-actions button{border:0;border-radius:10px;padding:9px 16px;font-weight:700;cursor:pointer}.eos-dp-write-primary{background:#00d6a1;color:#03130f}.eos-dp-write-secondary{background:#273746;color:#fff}.eos-dp-write-actions button:disabled{opacity:.55;cursor:wait}.eos-dp-write-error{color:#ff7676;margin-top:10px;font-size:13px;white-space:pre-wrap}.eos-dp-write-hint{font-size:12px;opacity:.72;margin-top:8px}.eos-dp-write-toast{position:fixed;right:18px;bottom:84px;z-index:9050;background:#05251e;border:1px solid rgba(0,255,180,.45);box-shadow:0 8px 28px rgba(0,0,0,.45);color:#fff;border-radius:12px;padding:10px 14px;font:13px Roboto,Arial,sans-serif}.eos-object-value-cell.eos-dp-write-pulse{outline:2px solid #00d6a1;outline-offset:-2px}`;
|
|
224
|
-
document.head.appendChild(style);
|
|
225
|
-
};
|
|
226
|
-
|
|
227
|
-
const showToast = (message, ms = 1800) => {
|
|
228
|
-
injectDialogStyle();
|
|
229
|
-
document.querySelectorAll('.eos-dp-write-toast').forEach(el => el.remove());
|
|
230
|
-
const toast = document.createElement('div');
|
|
231
|
-
toast.className = 'eos-dp-write-toast';
|
|
232
|
-
toast.textContent = message;
|
|
233
|
-
document.body.appendChild(toast);
|
|
234
|
-
window.setTimeout(() => toast.remove(), ms);
|
|
235
|
-
};
|
|
236
|
-
|
|
237
|
-
const closeExistingDialog = () => document.querySelector(`.${DIALOG_CLASS}`)?.remove();
|
|
238
|
-
|
|
239
|
-
const resolveIdFromCell = cell => {
|
|
240
|
-
if (!cell) return '';
|
|
241
|
-
const direct = cell.getAttribute?.('data-eos-object-value-cell') || cell.closest?.('[data-eos-object-value-cell]')?.getAttribute('data-eos-object-value-cell');
|
|
242
|
-
if (direct) return direct.trim();
|
|
243
|
-
const row = cell.closest?.('[data-eos-object-id],[data-id],[data-nodeid],[role="treeitem"],[role="row"],tr,li');
|
|
244
|
-
const attrs = ['data-eos-object-id', 'data-id', 'data-nodeid', 'id'];
|
|
245
|
-
for (const attr of attrs) {
|
|
246
|
-
const value = row?.getAttribute?.(attr);
|
|
247
|
-
if (value && value.includes('.')) return value.replace(/^.*?(?=(?:system|alias|enum|javascript|mqtt|modbus|e3dc|0_userdata|nexowatt|ems|hm-rpc|zigbee|shelly|sonoff|mihome|knx|fhem|sql|influxdb)\.)/, '').trim();
|
|
248
|
-
}
|
|
249
|
-
return '';
|
|
250
|
-
};
|
|
251
|
-
|
|
252
|
-
const readObjectAndState = async (socket, id, visibleValue) => {
|
|
253
|
-
const objectPromise = typeof socket.getObject === 'function' ? socket.getObject(id) : Promise.resolve(null);
|
|
254
|
-
const statePromise = typeof socket.getState === 'function' ? socket.getState(id) : Promise.resolve(null);
|
|
255
|
-
const [objResult, stateResult] = await Promise.allSettled([
|
|
256
|
-
withTimeout(objectPromise, 1800, null),
|
|
257
|
-
withTimeout(statePromise, 1800, null),
|
|
258
|
-
]);
|
|
259
|
-
const obj = objResult.status === 'fulfilled' ? objResult.value : null;
|
|
260
|
-
const state = stateResult.status === 'fulfilled' ? stateResult.value : null;
|
|
261
|
-
const common = obj?.common || {};
|
|
262
|
-
const current = state && Object.prototype.hasOwnProperty.call(state, 'val') ? state.val : stripUnit(visibleValue);
|
|
263
|
-
let type = common.type || typeof current;
|
|
264
|
-
if (!type || type === 'undefined' || type === 'object') type = type === 'object' ? 'json' : inferTypeFromValue(current);
|
|
265
|
-
if (type === 'array') type = 'json';
|
|
266
|
-
const role = String(common.role || '');
|
|
267
|
-
const states = common.states && typeof common.states === 'object' ? common.states : null;
|
|
268
|
-
return { obj, state, common, current, type, role, states };
|
|
269
|
-
};
|
|
270
|
-
|
|
271
|
-
const openWriteDialog = async (cell, event) => {
|
|
272
|
-
const id = resolveIdFromCell(cell);
|
|
273
|
-
if (!id || busyIds.has(id)) return;
|
|
274
|
-
busyIds.add(id);
|
|
275
|
-
injectDialogStyle();
|
|
276
|
-
cell?.classList?.add('eos-dp-write-pulse');
|
|
277
|
-
window.setTimeout(() => cell?.classList?.remove('eos-dp-write-pulse'), 650);
|
|
278
|
-
|
|
279
|
-
try {
|
|
280
|
-
const socket = await waitForSocket();
|
|
281
|
-
const visibleValue = normalizeText(cell?.textContent || '');
|
|
282
|
-
const meta = await readObjectAndState(socket, id, visibleValue);
|
|
283
|
-
const { obj, common, current, type, role, states } = meta;
|
|
284
|
-
|
|
285
|
-
if (obj && obj.type && obj.type !== 'state') {
|
|
286
|
-
showToast(`EOS: "${id}" ist kein State (${obj.type})`);
|
|
287
|
-
busyIds.delete(id);
|
|
288
|
-
return;
|
|
289
|
-
}
|
|
290
|
-
if (common.type === 'file') {
|
|
291
|
-
showToast('EOS: Datei-Datenpunkte werden nicht als normaler State-Wert geschrieben.');
|
|
292
|
-
busyIds.delete(id);
|
|
293
|
-
return;
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
if (/^button/.test(role) && (type === 'boolean' || type === 'string' || !type)) {
|
|
297
|
-
await writeStateUnrestricted(socket, id, { val: true, ack: false, q: 0 });
|
|
298
|
-
showToast(`Befehl geschrieben: ${id}`);
|
|
299
|
-
busyIds.delete(id);
|
|
300
|
-
return;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
closeExistingDialog();
|
|
304
|
-
const backdrop = document.createElement('div');
|
|
305
|
-
backdrop.className = DIALOG_CLASS;
|
|
306
|
-
const dialog = document.createElement('div');
|
|
307
|
-
dialog.className = 'eos-dp-write-dialog';
|
|
308
|
-
dialog.setAttribute('role', 'dialog');
|
|
309
|
-
dialog.setAttribute('aria-modal', 'true');
|
|
310
|
-
dialog.innerHTML = `
|
|
311
|
-
<h3>Datenpunkt schreiben</h3>
|
|
312
|
-
<div class="eos-dp-write-id"></div>
|
|
313
|
-
<div class="eos-dp-write-meta"></div>
|
|
314
|
-
<label class="eos-dp-write-label">Neuer Wert</label>
|
|
315
|
-
<div class="eos-dp-write-input-wrap"></div>
|
|
316
|
-
<label style="display:flex;align-items:center;gap:8px;margin-top:12px"><input class="eos-dp-write-ack" type="checkbox"> ack=true schreiben</label>
|
|
317
|
-
<div class="eos-dp-write-hint">EOS schreibt direkt über die Backend-Bridge. common.write/read blockiert hier nicht mehr.</div>
|
|
318
|
-
<div class="eos-dp-write-error" hidden></div>
|
|
319
|
-
<div class="eos-dp-write-actions"><button class="eos-dp-write-secondary" type="button">Abbrechen</button><button class="eos-dp-write-primary" type="button">Schreiben</button></div>`;
|
|
320
|
-
backdrop.appendChild(dialog);
|
|
321
|
-
document.body.appendChild(backdrop);
|
|
322
|
-
|
|
323
|
-
dialog.querySelector('.eos-dp-write-id').textContent = id;
|
|
324
|
-
dialog.querySelector('.eos-dp-write-meta').textContent = `Typ: ${type}${role ? ` · Rolle: ${role}` : ''}${common.unit ? ` · Einheit: ${common.unit}` : ''}${obj ? '' : ' · Objekt lädt langsam / Fallback aktiv'}`;
|
|
325
|
-
|
|
326
|
-
const inputWrap = dialog.querySelector('.eos-dp-write-input-wrap');
|
|
327
|
-
let input;
|
|
328
|
-
if (states) {
|
|
329
|
-
input = document.createElement('select');
|
|
330
|
-
Object.keys(states).forEach(key => {
|
|
331
|
-
const option = document.createElement('option');
|
|
332
|
-
option.value = key;
|
|
333
|
-
option.textContent = `${states[key]} (${key})`;
|
|
334
|
-
input.appendChild(option);
|
|
335
|
-
});
|
|
336
|
-
input.value = current == null ? Object.keys(states)[0] || '' : String(current);
|
|
337
|
-
} else if (type === 'boolean') {
|
|
338
|
-
input = document.createElement('select');
|
|
339
|
-
input.innerHTML = '<option value="true">true</option><option value="false">false</option><option value="null">null</option>';
|
|
340
|
-
input.value = current == null ? 'null' : (parseBoolean(current) ? 'true' : 'false');
|
|
341
|
-
} else if (type === 'json') {
|
|
342
|
-
input = document.createElement('textarea');
|
|
343
|
-
input.value = stateToString(current);
|
|
344
|
-
} else {
|
|
345
|
-
input = document.createElement('input');
|
|
346
|
-
input.type = 'text';
|
|
347
|
-
input.value = stateToString(current);
|
|
348
|
-
}
|
|
349
|
-
input.className = 'eos-dp-write-input';
|
|
350
|
-
inputWrap.appendChild(input);
|
|
351
|
-
|
|
352
|
-
const errorEl = dialog.querySelector('.eos-dp-write-error');
|
|
353
|
-
const cancelBtn = dialog.querySelector('.eos-dp-write-secondary');
|
|
354
|
-
const writeBtn = dialog.querySelector('.eos-dp-write-primary');
|
|
355
|
-
const ackInput = dialog.querySelector('.eos-dp-write-ack');
|
|
356
|
-
|
|
357
|
-
const close = () => {
|
|
358
|
-
backdrop.remove();
|
|
359
|
-
busyIds.delete(id);
|
|
360
|
-
};
|
|
361
|
-
|
|
362
|
-
const write = async () => {
|
|
363
|
-
errorEl.hidden = true;
|
|
364
|
-
writeBtn.disabled = true;
|
|
365
|
-
cancelBtn.disabled = true;
|
|
366
|
-
try {
|
|
367
|
-
const effectiveType = states ? (common.type || type) : type;
|
|
368
|
-
const value = coerceValue(input.value, effectiveType);
|
|
369
|
-
await writeStateUnrestricted(socket, id, { val: value, ack: !!ackInput.checked, q: 0 });
|
|
370
|
-
close();
|
|
371
|
-
showToast(`Geschrieben: ${id}`);
|
|
372
|
-
} catch (error) {
|
|
373
|
-
errorEl.textContent = `Schreiben fehlgeschlagen:\n${error?.message || error}`;
|
|
374
|
-
errorEl.hidden = false;
|
|
375
|
-
writeBtn.disabled = false;
|
|
376
|
-
cancelBtn.disabled = false;
|
|
377
|
-
}
|
|
378
|
-
};
|
|
379
|
-
|
|
380
|
-
cancelBtn.addEventListener('click', close);
|
|
381
|
-
writeBtn.addEventListener('click', write);
|
|
382
|
-
backdrop.addEventListener('click', e => { if (e.target === backdrop) close(); });
|
|
383
|
-
input.addEventListener('keydown', e => {
|
|
384
|
-
if ((e.key === 'Enter' && type !== 'json') || (e.key === 'Enter' && e.ctrlKey)) {
|
|
385
|
-
e.preventDefault();
|
|
386
|
-
write();
|
|
387
|
-
}
|
|
388
|
-
if (e.key === 'Escape') close();
|
|
389
|
-
});
|
|
390
|
-
window.setTimeout(() => input.focus(), 30);
|
|
391
|
-
} catch (error) {
|
|
392
|
-
busyIds.delete(id);
|
|
393
|
-
window.alert(`EOS: Datenpunkt konnte nicht geschrieben werden:\n${error?.message || error}`);
|
|
394
|
-
}
|
|
395
|
-
};
|
|
396
|
-
|
|
397
|
-
const handleClickCapture = event => {
|
|
398
|
-
if (!setSurfaceState()) return;
|
|
399
|
-
if (event.defaultPrevented || event.button !== 0) return;
|
|
400
|
-
if (event.ctrlKey || event.metaKey || event.altKey) return;
|
|
401
|
-
if (event.target?.closest?.(`.${DIALOG_CLASS}`)) return;
|
|
402
|
-
if (event.target?.closest?.(interactiveIgnoreSelector) && !event.target?.closest?.(valueCellSelector)) return;
|
|
403
|
-
const cell = event.target?.closest?.(valueCellSelector);
|
|
404
|
-
if (!cell) return;
|
|
405
|
-
const id = resolveIdFromCell(cell);
|
|
406
|
-
if (!id) return;
|
|
407
|
-
event.preventDefault();
|
|
408
|
-
event.stopPropagation();
|
|
409
|
-
event.stopImmediatePropagation?.();
|
|
410
|
-
openWriteDialog(cell, event);
|
|
411
|
-
};
|
|
412
|
-
|
|
413
|
-
const handleKeydownCapture = event => {
|
|
414
|
-
if (!setSurfaceState() || event.key !== 'Enter') return;
|
|
415
|
-
const cell = event.target?.closest?.(valueCellSelector);
|
|
416
|
-
if (!cell) return;
|
|
417
|
-
const id = resolveIdFromCell(cell);
|
|
418
|
-
if (!id) return;
|
|
419
|
-
event.preventDefault();
|
|
420
|
-
event.stopPropagation();
|
|
421
|
-
event.stopImmediatePropagation?.();
|
|
422
|
-
openWriteDialog(cell, event);
|
|
423
|
-
};
|
|
424
|
-
|
|
425
|
-
const handlePointerOver = event => {
|
|
426
|
-
if (!setSurfaceState()) return;
|
|
427
|
-
const cell = event.target?.closest?.(valueCellSelector);
|
|
428
|
-
if (cell && resolveIdFromCell(cell)) {
|
|
429
|
-
cell.classList.add('eos-object-value-cell');
|
|
430
|
-
cell.setAttribute('tabindex', '0');
|
|
431
|
-
if (!cell.getAttribute('title')) cell.setAttribute('title', 'Klicken: Wert schreiben');
|
|
432
|
-
}
|
|
433
|
-
};
|
|
434
|
-
|
|
435
|
-
const start = () => {
|
|
436
|
-
setSurfaceState();
|
|
437
|
-
injectDialogStyle();
|
|
438
|
-
document.addEventListener('click', handleClickCapture, true);
|
|
439
|
-
document.addEventListener('keydown', handleKeydownCapture, true);
|
|
440
|
-
document.addEventListener('pointerover', handlePointerOver, true);
|
|
441
|
-
window.addEventListener('hashchange', setSurfaceState);
|
|
442
|
-
window.addEventListener('popstate', setSurfaceState);
|
|
443
|
-
};
|
|
444
|
-
|
|
445
|
-
if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', start, { once: true });
|
|
446
|
-
else start();
|
|
4
|
+
/**
|
|
5
|
+
* v53: native ObjectBrowser write mode
|
|
6
|
+
*
|
|
7
|
+
* The earlier EOS fast-write fallback captured value-cell clicks before the
|
|
8
|
+
* ioBroker ObjectBrowser could process them. That made the UI look writable
|
|
9
|
+
* for every state and caused unreliable writes on large object trees.
|
|
10
|
+
*
|
|
11
|
+
* From v53 on, this helper is intentionally passive: it only publishes a
|
|
12
|
+
* version marker and removes the unrestricted writer from older cached
|
|
13
|
+
* sessions. The original ioBroker ObjectBrowser decides writability via
|
|
14
|
+
* common.write and performs the state write through socket.setState.
|
|
15
|
+
*/
|
|
16
|
+
window.NEXOWATT_EOS_OBJECTS_STATE_TOOLS_VERSION = 'v53-native-objectbrowser-write';
|
|
17
|
+
window.NEXOWATT_EOS_OBJECTS_STATE_TOOLS_MODE = 'native-objectbrowser';
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
delete window.NEXOWATT_EOS_WRITE_STATE_UNRESTRICTED;
|
|
21
|
+
} catch {
|
|
22
|
+
window.NEXOWATT_EOS_WRITE_STATE_UNRESTRICTED = undefined;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
document.documentElement.classList.remove('eos-dp-write-ready');
|
|
27
|
+
} catch {
|
|
28
|
+
// ignore
|
|
29
|
+
}
|
|
447
30
|
})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"iobroker_admin","name":"iobroker_admin","metaData":{"name":"iobroker_admin","type":"app","buildInfo":{"buildVersion":"1.0.0","buildName":"iobroker_admin"},"remoteEntry":{"name":"remoteEntry-
|
|
1
|
+
{"id":"iobroker_admin","name":"iobroker_admin","metaData":{"name":"iobroker_admin","type":"app","buildInfo":{"buildVersion":"1.0.0","buildName":"iobroker_admin"},"remoteEntry":{"name":"remoteEntry-DPWrite53.js","path":"","type":"module"},"ssrRemoteEntry":{"name":"remoteEntry-DPWrite53.js","path":"","type":"module"},"types":{"path":"","name":""},"globalName":"iobroker_admin","pluginVersion":"0.2.5","publicPath":"./"},"shared":[{"id":"iobroker_admin:@emotion/react","name":"@emotion/react","version":"11.14.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/emotion-react.browser.esm-DrKG52pD.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@emotion/styled","name":"@emotion/styled","version":"11.14.1","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/emotion-styled.browser.esm-DOdpWCne.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@iobroker/adapter-react-v5","name":"@iobroker/adapter-react-v5","version":"8.2.9","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-DPAdapter53.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@iobroker/json-config","name":"@iobroker/json-config","version":"8.4.7","requiredVersion":"*","assets":{"js":{"async":["assets/index-D9Ej0pc9.js"],"sync":["assets/index-mSK_krgD.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@iobroker/dm-gui-components","name":"@iobroker/dm-gui-components","version":"9.1.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-bCuipom1.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:date-fns","name":"date-fns","version":"4.1.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-Cqq5gIUF.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:date-fns/locale","name":"date-fns/locale","version":"4.1.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/locale-CLe3aX4T.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:leaflet","name":"leaflet","version":"1.9.4","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/leaflet-src-B651YTWC.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:leaflet-geosearch","name":"leaflet-geosearch","version":"4.2.2","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/geosearch.module-BA4ww39P.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:react-ace","name":"react-ace","version":"13.0.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-C_anklzA.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:react-dropzone","name":"react-dropzone","version":"15.0.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-CXZCHHB6.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:semver","name":"semver","version":"7.7.4","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-CkI9667U.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@mui/x-date-pickers","name":"@mui/x-date-pickers","version":"7.29.4","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-uASdmaE6.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:react","name":"react","version":"18.3.1","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-4wMOc304.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:react-dom","name":"react-dom","version":"18.3.1","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-D2Em8S_O.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@mui/material","name":"@mui/material","version":"6.5.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-8JYjTPhv.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@mui/icons-material","name":"@mui/icons-material","version":"6.5.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-jy_3EbfW.js"]},"css":{"async":[],"sync":[]}}}],"remotes":[],"exposes":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./assets/emotion-react.browser.esm-DrKG52pD.js","./assets/iobroker_admin__loadShare__react__loadShare__-LM7uyL45.js","./assets/_commonjsHelpers-CE1G-McA.js","./assets/iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js","./assets/emotion-cache.browser.esm-BgJfNZJN.js","./assets/extends-CF3RwP-h.js","./assets/emotion-use-insertion-effect-with-fallbacks.browser.esm-D9zECpgL.js","./assets/emotion-serialize.esm-Q4o_CgeF.js","./assets/emotion-styled.browser.esm-DOdpWCne.js","./assets/iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-BywLg1Xe.js","./assets/index-DPAdapter53.js","./assets/createTheme-DFX8CY6F.js","./assets/blue-CagzI6CQ.js","./assets/sdk-C-e-e2gd.js","./assets/iobroker_admin__loadShare___mf_0_mui_mf_1_icons_mf_2_material__loadShare__-CJO5yP3h.js","./assets/Google-Cq8JZDSn.js","./assets/index-DcK0RDrH.js","./assets/pl-Dib-_u5L.js","./assets/iobroker_admin__loadShare__react_mf_2_dropzone__loadShare__-CwjnV48g.js","./assets/useTheme-CUNq4tF-.js","./assets/defaultTheme-Cx_JJUAa.js","./assets/useTheme-Bl-M1DYp.js","./assets/index-bCuipom1.js","./assets/iobroker_admin__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__-LFZoiUTt.js","./assets/iobroker_admin__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__-CpA7pnS5.js","./assets/index-mSK_krgD.js","./assets/index-8HslT92O.js","./assets/_commonjs-dynamic-modules-TDtrdbi3.js","./assets/___vite-browser-external_commonjs-proxy-DMh1aSo_.js","./assets/iobroker_admin__loadShare__react_mf_2_dom__loadShare__-CVeAXnkk.js","./assets/ext-language_tools-ylAoucDh.js","./assets/preload-helper-BDBacUwf.js","./assets/index-jy_3EbfW.js","./assets/DefaultPropsProvider-BiXBMQYQ.js","./assets/createSvgIcon-CfRgdNUH.js","./assets/index-8JYjTPhv.js","./assets/amber-D7aVlNg3.js","./assets/TextField-CqVU6uzA.js","./assets/assertThisInitialized-B0aQ9eG_.js","./assets/ThemeProvider-BOFFjWAF.js","./assets/index-uASdmaE6.js","./assets/index-Cqq5gIUF.js","./assets/setYear-3ufv5yRD.js","./assets/en-US-DBFJNIH6.js","./assets/isSameWeek-DzRXk46v.js","./assets/locale-CLe3aX4T.js","./assets/leaflet-src-B651YTWC.js","./assets/geosearch.module-BA4ww39P.js","./assets/iobroker_admin__loadShare__leaflet__loadShare__-CNUAG3AH.js","./assets/index-4wMOc304.js","./assets/index-C_anklzA.js","./assets/ace-DEUjyTIn.js","./assets/index-D2Em8S_O.js","./assets/index-CXZCHHB6.js","./assets/index-CkI9667U.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{i as m,a as p}from"./assets/iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js";import s from"./assets/virtualExposes-BIHI7g3E.js";import{_ as a}from"./assets/preload-helper-BDBacUwf.js";const n={"@emotion/react":async()=>await a(()=>import("./assets/emotion-react.browser.esm-DrKG52pD.js"),__vite__mapDeps([0,1,2,3,4,5,6,7]),import.meta.url),"@emotion/styled":async()=>await a(()=>import("./assets/emotion-styled.browser.esm-DOdpWCne.js"),__vite__mapDeps([8,5,9,3,7,6,1,2]),import.meta.url),"@iobroker/adapter-react-v5":async()=>await a(()=>import("./assets/index-DPAdapter53.js"),__vite__mapDeps([10,11,12,1,2,3,13,14,15,16,17,18,19,20,21,9]),import.meta.url),"@iobroker/dm-gui-components":async()=>await a(()=>import("./assets/index-bCuipom1.js"),__vite__mapDeps([22,1,2,3,14,23,24]),import.meta.url),"@iobroker/json-config":async()=>await a(()=>import("./assets/index-mSK_krgD.js"),__vite__mapDeps([25,1,2,3,26,27,28,14,23,29,12,15,16,30,18,31]),import.meta.url),"@mui/icons-material":async()=>await a(()=>import("./assets/index-jy_3EbfW.js"),__vite__mapDeps([32,33,2,3,7,9,1,34,11,12,20]),import.meta.url),"@mui/material":async()=>await a(()=>import("./assets/index-8JYjTPhv.js"),__vite__mapDeps([35,11,12,1,2,3,36,34,33,7,9,20,37,21,38,19,5,29,16,39,4]),import.meta.url),"@mui/x-date-pickers":async()=>await a(()=>import("./assets/index-uASdmaE6.js"),__vite__mapDeps([40,1,2,3,33,7,9,34,11,12,20,5,37,21,38,19,29,16]),import.meta.url),"date-fns":async()=>await a(()=>import("./assets/index-Cqq5gIUF.js"),__vite__mapDeps([41,42,43,44]),import.meta.url),"date-fns/locale":async()=>await a(()=>import("./assets/locale-CLe3aX4T.js"),__vite__mapDeps([45,43,44]),import.meta.url),leaflet:async()=>await a(()=>import("./assets/leaflet-src-B651YTWC.js").then(t=>t.l),__vite__mapDeps([46,2]),import.meta.url),"leaflet-geosearch":async()=>await a(()=>import("./assets/geosearch.module-BA4ww39P.js"),__vite__mapDeps([47,48,3]),import.meta.url),react:async()=>await a(()=>import("./assets/index-4wMOc304.js").then(t=>t.i),__vite__mapDeps([49,2]),import.meta.url),"react-ace":async()=>await a(()=>import("./assets/index-C_anklzA.js").then(t=>t.i),__vite__mapDeps([50,51,16,2,1,3]),import.meta.url),"react-dom":async()=>await a(()=>import("./assets/index-D2Em8S_O.js").then(t=>t.i),__vite__mapDeps([52,2,1,3]),import.meta.url),"react-dropzone":async()=>await a(()=>import("./assets/index-CXZCHHB6.js"),__vite__mapDeps([53,1,2,3,16]),import.meta.url),semver:async()=>await a(()=>import("./assets/index-CkI9667U.js").then(t=>t.i),__vite__mapDeps([54,2]),import.meta.url)},o={"@emotion/react":{name:"@emotion/react",version:"11.14.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@emotion/react"].loaded=!0;const{"@emotion/react":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"@emotion/styled":{name:"@emotion/styled",version:"11.14.1",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@emotion/styled"].loaded=!0;const{"@emotion/styled":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"@iobroker/adapter-react-v5":{name:"@iobroker/adapter-react-v5",version:"8.2.9",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@iobroker/adapter-react-v5"].loaded=!0;const{"@iobroker/adapter-react-v5":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"@iobroker/dm-gui-components":{name:"@iobroker/dm-gui-components",version:"9.1.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@iobroker/dm-gui-components"].loaded=!0;const{"@iobroker/dm-gui-components":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"@iobroker/json-config":{name:"@iobroker/json-config",version:"8.4.7",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@iobroker/json-config"].loaded=!0;const{"@iobroker/json-config":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"@mui/icons-material":{name:"@mui/icons-material",version:"6.5.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@mui/icons-material"].loaded=!0;const{"@mui/icons-material":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"@mui/material":{name:"@mui/material",version:"6.5.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@mui/material"].loaded=!0;const{"@mui/material":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"@mui/x-date-pickers":{name:"@mui/x-date-pickers",version:"7.29.4",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@mui/x-date-pickers"].loaded=!0;const{"@mui/x-date-pickers":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"date-fns":{name:"date-fns",version:"4.1.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["date-fns"].loaded=!0;const{"date-fns":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"date-fns/locale":{name:"date-fns/locale",version:"4.1.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["date-fns/locale"].loaded=!0;const{"date-fns/locale":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},leaflet:{name:"leaflet",version:"1.9.4",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o.leaflet.loaded=!0;const{leaflet:e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"leaflet-geosearch":{name:"leaflet-geosearch",version:"4.2.2",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["leaflet-geosearch"].loaded=!0;const{"leaflet-geosearch":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},react:{name:"react",version:"18.3.1",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o.react.loaded=!0;const{react:e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"react-ace":{name:"react-ace",version:"13.0.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["react-ace"].loaded=!0;const{"react-ace":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"react-dom":{name:"react-dom",version:"18.3.1",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["react-dom"].loaded=!0;const{"react-dom":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"react-dropzone":{name:"react-dropzone",version:"15.0.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["react-dropzone"].loaded=!0;const{"react-dropzone":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},semver:{name:"semver",version:"7.7.4",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o.semver.loaded=!0;const{semver:e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}}},f=[],u={},l="default",d="iobroker_admin";async function y(e={},t=[]){const r=m({name:d,remotes:f,shared:o,plugins:[],shareStrategy:"version-first"});var i=u[l];if(i||(i=u[l]={from:d}),!(t.indexOf(i)>=0)){t.push(i),r.initShareScopeMap("default",e);try{await Promise.all(await r.initializeSharing("default",{strategy:"version-first",from:"build",initScope:t}))}catch(c){console.error(c)}return p.initResolve(r),r}}function b(e){if(!(e in s))throw new Error(`Module ${e} does not exist in container.`);return s[e]().then(t=>()=>t)}export{b as get,y as init};
|
package/build/main.js
CHANGED
|
@@ -393,10 +393,9 @@ class Admin extends adapter_core_1.Adapter {
|
|
|
393
393
|
};
|
|
394
394
|
|
|
395
395
|
/**
|
|
396
|
-
* EOS frontend state-write bridge.
|
|
397
|
-
*
|
|
398
|
-
*
|
|
399
|
-
* error is returned to the browser instead of failing silently.
|
|
396
|
+
* EOS frontend state-write bridge. It follows the ioBroker state contract:
|
|
397
|
+
* only objects of type "state" with common.write !== false may be written from the UI.
|
|
398
|
+
* Read-only states stay read-only; writable command/register states are sent with ack=false.
|
|
400
399
|
*/
|
|
401
400
|
async processEosWriteStateMessage(obj) {
|
|
402
401
|
const respond = (response) => {
|
|
@@ -430,6 +429,10 @@ class Admin extends adapter_core_1.Adapter {
|
|
|
430
429
|
respond({ ok: false, error: `Object "${id}" is not a state (${objDef.type})` });
|
|
431
430
|
return;
|
|
432
431
|
}
|
|
432
|
+
if (objDef.common?.write === false) {
|
|
433
|
+
respond({ ok: false, error: `Object "${id}" is read-only (common.write=false)` });
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
433
436
|
if (objDef.common?.type === 'file') {
|
|
434
437
|
respond({ ok: false, error: `Object "${id}" is a file state and cannot be written as a normal value` });
|
|
435
438
|
return;
|