iobroker.alias-workbench 0.10.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +58 -98
  2. package/admin/css/werkbank.css +88 -0
  3. package/admin/i18n/de.json +766 -1
  4. package/admin/i18n/en.json +766 -1
  5. package/admin/i18n/es.json +766 -1
  6. package/admin/i18n/fr.json +766 -1
  7. package/admin/i18n/it.json +766 -1
  8. package/admin/i18n/nl.json +766 -1
  9. package/admin/i18n/pl.json +766 -1
  10. package/admin/i18n/pt.json +766 -1
  11. package/admin/i18n/ru.json +766 -1
  12. package/admin/i18n/uk.json +766 -1
  13. package/admin/i18n/zh-cn.json +766 -1
  14. package/admin/js/ablage.js +118 -0
  15. package/admin/js/attrappe.js +749 -0
  16. package/admin/js/baum.js +52 -5
  17. package/admin/js/detail.js +64 -3
  18. package/admin/js/entwurf.js +246 -31
  19. package/admin/js/ergebnis.js +77 -2
  20. package/admin/js/katalog.js +235 -40
  21. package/admin/js/mqtt.js +297 -27
  22. package/admin/js/musternamen.js +70 -26
  23. package/admin/js/objekte.js +2 -0
  24. package/admin/js/quellentausch.js +823 -16
  25. package/admin/js/schreiben.js +3 -2
  26. package/admin/js/sprache.js +11 -8
  27. package/admin/js/vorlagen.js +8 -3
  28. package/admin/js/vorlagenblatt.js +228 -64
  29. package/admin/js/werte.js +294 -5
  30. package/admin/js/zielleiste.js +19 -10
  31. package/admin/js/zuordnung.js +8 -7
  32. package/admin/js/zustand.js +32 -0
  33. package/admin/js/zustandsliste.js +9 -2
  34. package/admin/tab.html +24 -0
  35. package/admin/vorlagen/hm-dimmer.json +32 -8
  36. package/admin/vorlagen/hm-fensterkontakt-hm.json +20 -5
  37. package/admin/vorlagen/hm-fensterkontakt-hmip.json +28 -7
  38. package/admin/vorlagen/hm-heizgruppe.json +38 -11
  39. package/admin/vorlagen/hm-heizkoerper.json +42 -12
  40. package/admin/vorlagen/hm-rollladen.json +28 -7
  41. package/admin/vorlagen/hm-schaltaktor-lampe.json +24 -6
  42. package/admin/vorlagen/hm-schaltaktor-mehrfach.json +32 -8
  43. package/admin/vorlagen/hm-schaltaktor-steckdose.json +24 -6
  44. package/admin/vorlagen/hm-temperatur-feuchte.json +8 -2
  45. package/admin/vorlagen/hm-wandthermostat.json +36 -9
  46. package/admin/vorlagen/messpunkt.json +40 -10
  47. package/admin/vorlagen/tasmota-lampe.json +48 -12
  48. package/admin/vorlagen/tasmota-mehrfach.json +40 -10
  49. package/admin/vorlagen/tasmota-rgb.json +36 -9
  50. package/admin/vorlagen/tasmota-steckdose.json +56 -14
  51. package/io-package.json +41 -28
  52. package/package.json +3 -3
  53. package/admin/sprachen/de.json +0 -685
  54. package/admin/sprachen/en.json +0 -685
@@ -0,0 +1,118 @@
1
+ /* Was wir uns aus dem Admin holen, einmal ablegen statt jedes Mal suchen.
2
+
3
+ Zwei Stellen zapfen den Admin an: der Aufzaehlungskatalog
4
+ (katalog.js, 58 Raeume und 62 Funktionen mit Namen und Bildern) und
5
+ die Musternamen (musternamen.js, „socket" -> „Steckdose"). Beide
6
+ suchen in denselben Buendeln, und seit Admin 8.0.x steht beides sogar
7
+ in derselben Datei — einem Sammelmodul von 7,9 MB.
8
+
9
+ Gemessen am 07.10.2026: ohne Ablage wurden davon bei **jedem** Oeffnen
10
+ des Reiters 1 727 KB uebertragen und 854 ms gewartet, fuer zusammen
11
+ rund 550 KB Nutzlast. Darum liegt das Ergebnis danach hier.
12
+
13
+ Wann wird neu geholt? Wenn der Admin seine Buendel neu schreibt. Als
14
+ Stempel dienen die Dateinamen aus `index.html` — sie tragen einen
15
+ Hash und wechseln bei jeder Aenderung. Die Versionsnummer taugt dafuer
16
+ nicht: ein Zwischenbau traegt dieselbe.
17
+
18
+ Warum der Dateibereich und nicht etwas anderes: die Adapter-
19
+ konfiguration wird bei jedem Start und bei jedem Oeffnen der
20
+ Einstellungen gelesen und ist heute 26 KB gross; ein Datenpunkt liegt
21
+ auf dem Produktivsystem in Redis, also im Arbeitsspeicher; der
22
+ Browserspeicher haengt am einzelnen Geraet. */
23
+
24
+ import { socket } from './verbindung.js';
25
+
26
+ var ORT = 'alias-workbench.0';
27
+ var DATEI = 'katalog.json';
28
+ var ABLAGE_NAME = { en: 'Alias Workbench — Storage', de: 'Alias-Werkbank — Ablage' };
29
+
30
+ function nameIstAlt(name) {
31
+ return name === 'Alias-Werkbank — Ablage' || name === 'Alias-Werkbank - Ablage';
32
+ }
33
+
34
+ /* Den Dateibereich gibt es nur zu einem Objekt vom Typ `meta`. Adapter
35
+ mit Dienstteil bekommen es vom js-controller; die Werkbank ist
36
+ `onlyWWW`, also gibt es keines — `writeFile` antwortet dann mit
37
+ „alias-workbench.0 is not an object of type meta".
38
+
39
+ `alias-workbench.admin` waere der falsche Platz: dorthin schreibt
40
+ `iobroker upload` die Oberflaechendateien und raeumt dabei alles
41
+ andere weg. Fuer neue Installationen steht das Objekt zusaetzlich in
42
+ io-package.json. */
43
+ function bereit() {
44
+ return new Promise(function (fertig) {
45
+ try {
46
+ socket.emit('getObject', ORT, function (err, o) {
47
+ if (o && o.type === 'meta' && !nameIstAlt(o.common && o.common.name)) { return fertig(true); }
48
+ var neu = (o && o.type === 'meta') ? o : { type: 'meta', native: {} };
49
+ neu.common = neu.common || {};
50
+ neu.common.name = ABLAGE_NAME;
51
+ neu.common.type = 'meta.user';
52
+ socket.emit('setObject', ORT, neu, function (fehler) { fertig(!fehler); });
53
+ });
54
+ } catch { fertig(false); }
55
+ setTimeout(function () { fertig(false); }, 8000);
56
+ });
57
+ }
58
+
59
+ /* Woran man erkennt, dass der Admin seine Buendel neu geschrieben hat. */
60
+ export function stempelAus(html) {
61
+ return (html.match(/assets\/[A-Za-z0-9_\-.]+\.js/g) || []).slice().sort().join(' ');
62
+ }
63
+
64
+ /* Einmal gelesen reicht fuer die ganze Sitzung: beide Leser fragen beim
65
+ Laden kurz hintereinander, und ein zweiter Abruf ueber die Leitung
66
+ braucht es dafuer nicht. */
67
+ var gelesen = null;
68
+
69
+ export function leseAblage() {
70
+ if (gelesen) { return gelesen; }
71
+ gelesen = new Promise(function (fertig) {
72
+ try {
73
+ socket.emit('readFile', ORT, DATEI, function (err, daten) {
74
+ if (err || typeof daten !== 'string') { return fertig(null); }
75
+ try { fertig(JSON.parse(daten)); } catch { fertig(null); }
76
+ });
77
+ } catch { fertig(null); }
78
+ setTimeout(function () { fertig(null); }, 12000);
79
+ });
80
+ return gelesen;
81
+ }
82
+
83
+ /* Den eigenen Teil dazulegen, ohne den des anderen zu verlieren.
84
+
85
+ Katalog und Musternamen schreiben unabhaengig voneinander. Wer stur
86
+ seine eigene Fassung hinlegt, loescht dem anderen den Abschnitt —
87
+ also vorher lesen, zusammenfuehren, dann schreiben. Stimmt der
88
+ Stempel nicht mehr, faengt die Datei von vorn an: was zum alten
89
+ Buendel gehoerte, gilt nicht mehr. */
90
+ export function ergaenzeAblage(stempel, teil) {
91
+ return leseAblage().then(function (alt) {
92
+ var neu = (alt && alt.stempel === stempel) ? alt : { stempel: stempel };
93
+ Object.keys(teil).forEach(function (k) { neu[k] = teil[k]; });
94
+ gelesen = Promise.resolve(neu);
95
+ return bereit().then(function (da) {
96
+ if (!da) { return null; }
97
+ var text = JSON.stringify(neu);
98
+ return new Promise(function (fertig) {
99
+ var erledigt = false;
100
+ var einmal = function () { if (!erledigt) { erledigt = true; fertig(); } };
101
+ try {
102
+ /* `writeFile64` ist der heutige Weg, `writeFile` der alte.
103
+ Welcher antwortet, entscheidet die Admin-Fassung. */
104
+ var b64 = btoa(unescape(encodeURIComponent(text)));
105
+ socket.emit('writeFile64', ORT, DATEI, b64, function (err) {
106
+ if (!err) { return einmal(); }
107
+ try {
108
+ socket.emit('writeFile', ORT, DATEI, text, function () { einmal(); });
109
+ } catch { einmal(); }
110
+ });
111
+ } catch { einmal(); }
112
+ /* Antwortet gar nichts, ist das kein Grund zu warten — die Daten
113
+ stehen ja schon, nur die Abkuerzung fuers naechste Mal fehlt. */
114
+ setTimeout(einmal, 8000);
115
+ });
116
+ });
117
+ })['catch'](function () { return null; });
118
+ }