iobroker.eos-admin 7.10.2 → 7.10.3
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/INSTALL_TEST_V7.10.3.md +7 -0
- package/MERGE_UPDATE_README_V7.10.3.md +3 -0
- package/NEXOWATT_EOS_BUILD_INFO.json +16 -15
- package/NEXOWATT_EOS_PREBUILT_MANIFEST.json +13 -11
- package/PUBLISH_STABLE_V7.10.3.md +10 -0
- package/README.md +4 -4
- package/README_STABILITY_V7.10.3.md +5 -0
- package/RELEASE_ACCEPTANCE_V7.10.3.md +3 -0
- package/RELEASE_NOTES_V7.10.3.md +7 -0
- package/adminWww/css/eos-auto-update.css +4 -3
- package/adminWww/index.html +2 -2
- package/adminWww/js/eos-auto-update.js +127 -33
- package/io-package.json +10 -5
- package/package.json +14 -12
- package/tools/nexowatt-auto-update-placement-selftest.cjs +46 -0
- package/tools/nexowatt-merge-update-selftest.cjs +1 -1
- package/tools/{nexowatt-stable-v7102-selftest.cjs → nexowatt-stable-v7103-selftest.cjs} +21 -11
- package/tools/nexowatt-validate-package.cjs +18 -9
- package/INSTALL_TEST_V7.10.2.md +0 -22
- package/MERGE_UPDATE_README_V7.10.2.md +0 -11
- package/PUBLISH_STABLE_V7.10.2.md +0 -21
- package/README_STABILITY_V7.10.2.md +0 -20
- package/RELEASE_ACCEPTANCE_V7.10.2.md +0 -13
- package/RELEASE_NOTES_V7.10.2.md +0 -11
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Installationstest 7.10.3
|
|
2
|
+
|
|
3
|
+
1. Version 7.10.3 installieren und EOS Admin starten.
|
|
4
|
+
2. Mindestens 60 Sekunden prüfen, dass kein Start-/Stop-Loop auftritt.
|
|
5
|
+
3. Übersicht und Module öffnen: Die Karte **Automatische Adapter-Updates** darf dort nicht sichtbar sein.
|
|
6
|
+
4. Schraubenschlüssel öffnen: Die Karte muss direkt unter der Kopfleiste der Systemeinstellungen erscheinen.
|
|
7
|
+
5. Schalter einmal deaktivieren und wieder aktivieren; Status und Repository müssen weiter angezeigt werden.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
# Merge-/Update-Hinweis 7.10.3
|
|
2
|
+
|
|
3
|
+
Für einen reproduzierbaren Stand den bisherigen Arbeitsordner vollständig ersetzen oder die Repository-ZIP in einen leeren Ordner entpacken. Danach `npm publish --dry-run` ausführen. Eine Vermischung mit älteren `adminWww/js/eos-auto-update.js`-Dateien würde die alte globale Platzierung wieder aktivieren und wird durch die Selbsttests blockiert.
|
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "7.10.
|
|
2
|
+
"version": "7.10.3",
|
|
3
3
|
"channel": "stable-latest",
|
|
4
|
-
"baseFrontend": "validated 7.10.
|
|
4
|
+
"baseFrontend": "validated 7.10.2 stable runtime with automatic adapter updates relocated into System Settings",
|
|
5
5
|
"runtimeEntry": "v84",
|
|
6
|
-
"releaseType": "stable-
|
|
7
|
-
"release": "stable-
|
|
8
|
-
"label": "v7-10-
|
|
6
|
+
"releaseType": "stable-system-settings-auto-update-placement",
|
|
7
|
+
"release": "stable-system-settings-auto-update-placement",
|
|
8
|
+
"label": "v7-10-3",
|
|
9
9
|
"notes": [
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
10
|
+
"Retains the validated 7.10.2 restart-loop and package-completeness fixes.",
|
|
11
|
+
"The automatic NexoWatt adapter update card is no longer mounted in the normal overview or module pages.",
|
|
12
|
+
"The update control is mounted only inside the administrator System Settings dialog opened with the wrench button.",
|
|
13
|
+
"A dedicated placement selftest prevents the card from returning to global page content."
|
|
14
14
|
],
|
|
15
15
|
"changes": [
|
|
16
|
-
"
|
|
17
|
-
"Added
|
|
18
|
-
"
|
|
19
|
-
"Added
|
|
20
|
-
"Guaranteed build/lib/eosRequestSecurity.js is compiled and packaged before release."
|
|
16
|
+
"Moved Automatic Adapter Updates from the normal page content into System Settings.",
|
|
17
|
+
"Added a dedicated auto-update cache key so browsers cannot keep the old global placement script.",
|
|
18
|
+
"Kept backend update policy, state storage and delayed startup reconciliation unchanged.",
|
|
19
|
+
"Added source/build drift and placement guards for the auto-update UI."
|
|
21
20
|
],
|
|
22
21
|
"brandingCacheVersion": 7101,
|
|
23
22
|
"shellCacheVersion": 7101,
|
|
24
23
|
"nativeShellVersion": 7101,
|
|
25
24
|
"shellCacheTag": "7101",
|
|
26
|
-
"repositoryEntry": "nexowatt-eos-admin-repository-entry-v7-10-
|
|
25
|
+
"repositoryEntry": "nexowatt-eos-admin-repository-entry-v7-10-3.json",
|
|
26
|
+
"autoUpdateCacheVersion": 7103,
|
|
27
|
+
"autoUpdateCacheTag": "7103"
|
|
27
28
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"format": 1,
|
|
3
3
|
"package": "iobroker.eos-admin",
|
|
4
|
-
"version": "7.10.
|
|
4
|
+
"version": "7.10.3",
|
|
5
5
|
"algorithm": "sha256",
|
|
6
|
-
"fileCount":
|
|
6
|
+
"fileCount": 1388,
|
|
7
7
|
"trackedRoots": [
|
|
8
8
|
"src",
|
|
9
9
|
"build",
|
|
@@ -519,7 +519,7 @@
|
|
|
519
519
|
"adminWww/css/admin.css.map": "63cffcac00f528b795caf1374125620f465316273524aa7ed339d2ae1c00e840",
|
|
520
520
|
"adminWww/css/app.css": "a127b375efd87a6de99722b03b5532e1877578ba66295e1989c055a64497c668",
|
|
521
521
|
"adminWww/css/app.css.map": "5dc84ea65945c673c3d75d2ccbd258221eb09c79f61fff7b1326b7c37aea90c4",
|
|
522
|
-
"adminWww/css/eos-auto-update.css": "
|
|
522
|
+
"adminWww/css/eos-auto-update.css": "05c4602b50e45f4c181b2868cc1977f8538d5879a6b0b02c0410491cc2c9cbcd",
|
|
523
523
|
"adminWww/css/eos-ems-overview.css": "fe9278e76035b6b2b5cdde93668a0a720ca1276bd7ab54a077c8af6d0eede255",
|
|
524
524
|
"adminWww/css/images/layers-2x.png": "066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf",
|
|
525
525
|
"adminWww/css/images/layers.png": "1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6",
|
|
@@ -552,11 +552,11 @@
|
|
|
552
552
|
"adminWww/img/le.png": "ef5ebb7112926f646e781a326b639f56888fafe0891b9b000178091b4f8ed9dd",
|
|
553
553
|
"adminWww/img/logo.svg": "1167118074ff84d8cef82ad80c38609719dacfde9417126e46966c1ec986534b",
|
|
554
554
|
"adminWww/img/no-image.svg": "25fc382f4ad3a36f8a637cd966b9107368e1f11906d706102ad5f37db6f57f34",
|
|
555
|
-
"adminWww/index.html": "
|
|
555
|
+
"adminWww/index.html": "4cf338768e78f3050282508bd60fb964ca2ce7bd6153951ef6a87ece4af108b2",
|
|
556
556
|
"adminWww/js/adapter-settings.js": "fb2e538a3385899f7fd47275ec588051c735d8f778a44b89f40f5eb820a31dbc",
|
|
557
557
|
"adminWww/js/eos-account-management.js": "dbba398605b2391ac1a7ec97cf7eb84da7f929ea16bfb6761750cd700a687fbe",
|
|
558
558
|
"adminWww/js/eos-assistant.js": "be43f49fd5310d2962365035556c37109d4868856e874e1f964c4b2f05bb6beb",
|
|
559
|
-
"adminWww/js/eos-auto-update.js": "
|
|
559
|
+
"adminWww/js/eos-auto-update.js": "60b5d0bfd6600546868b815a3af35bcc9ce8853ce40b519cb6cbc53e07788021",
|
|
560
560
|
"adminWww/js/eos-basic-settings.js": "deb942d2a0d7385743b27ed1562ce19fead693582e9baa2c9eaccaa3aa401728",
|
|
561
561
|
"adminWww/js/eos-branding-sanitizer.js": "de6f30e7758d552f52a0c84f02861e24f290ef872957f7b58d80f873d66c934c",
|
|
562
562
|
"adminWww/js/eos-ems-overview.js": "ed5d81492b757628ddb2a5d4be4e3e7e7665c3a3a943f5ce15358140cd18630a",
|
|
@@ -809,7 +809,7 @@
|
|
|
809
809
|
"src-admin/public/css/admin.css.map": "63cffcac00f528b795caf1374125620f465316273524aa7ed339d2ae1c00e840",
|
|
810
810
|
"src-admin/public/css/app.css": "a127b375efd87a6de99722b03b5532e1877578ba66295e1989c055a64497c668",
|
|
811
811
|
"src-admin/public/css/app.css.map": "5dc84ea65945c673c3d75d2ccbd258221eb09c79f61fff7b1326b7c37aea90c4",
|
|
812
|
-
"src-admin/public/css/eos-auto-update.css": "
|
|
812
|
+
"src-admin/public/css/eos-auto-update.css": "05c4602b50e45f4c181b2868cc1977f8538d5879a6b0b02c0410491cc2c9cbcd",
|
|
813
813
|
"src-admin/public/css/eos-ems-overview.css": "fe9278e76035b6b2b5cdde93668a0a720ca1276bd7ab54a077c8af6d0eede255",
|
|
814
814
|
"src-admin/public/css/images/layers-2x.png": "066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf",
|
|
815
815
|
"src-admin/public/css/images/layers.png": "1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6",
|
|
@@ -843,7 +843,7 @@
|
|
|
843
843
|
"src-admin/public/js/adapter-settings.js": "fb2e538a3385899f7fd47275ec588051c735d8f778a44b89f40f5eb820a31dbc",
|
|
844
844
|
"src-admin/public/js/eos-account-management.js": "dbba398605b2391ac1a7ec97cf7eb84da7f929ea16bfb6761750cd700a687fbe",
|
|
845
845
|
"src-admin/public/js/eos-assistant.js": "be43f49fd5310d2962365035556c37109d4868856e874e1f964c4b2f05bb6beb",
|
|
846
|
-
"src-admin/public/js/eos-auto-update.js": "
|
|
846
|
+
"src-admin/public/js/eos-auto-update.js": "60b5d0bfd6600546868b815a3af35bcc9ce8853ce40b519cb6cbc53e07788021",
|
|
847
847
|
"src-admin/public/js/eos-basic-settings.js": "deb942d2a0d7385743b27ed1562ce19fead693582e9baa2c9eaccaa3aa401728",
|
|
848
848
|
"src-admin/public/js/eos-branding-sanitizer.js": "de6f30e7758d552f52a0c84f02861e24f290ef872957f7b58d80f873d66c934c",
|
|
849
849
|
"src-admin/public/js/eos-ems-overview.js": "ed5d81492b757628ddb2a5d4be4e3e7e7665c3a3a943f5ce15358140cd18630a",
|
|
@@ -1323,7 +1323,7 @@
|
|
|
1323
1323
|
"src-admin/src/tabs/Objects.tsx": "834773b07b613b96f58d053496ed1de0e0b8cbf987a3b33314c85e8495a836f6",
|
|
1324
1324
|
"src-admin/src/tabs/Users.tsx": "45ed37e57b66f7e23eb465aef9ad9db55613b40bf44530ab81d6206806de102d",
|
|
1325
1325
|
"src-admin/src/types.d.ts": "3cfac48af5f8416b55b89c0daca78499dbbd402c0b44cc661112b76953ba3344",
|
|
1326
|
-
"src-admin/src/version.json": "
|
|
1326
|
+
"src-admin/src/version.json": "7513428c66d4dc8f6c1910d07e4dd4f35ea2d0707816bb774a15f9137cd736b5",
|
|
1327
1327
|
"src/i18n/de.json": "85d4ecfedf15d78984922b05377063b808ae8c5a75944af323e72a2c3a483d50",
|
|
1328
1328
|
"src/i18n/en.json": "6a0156a1b026903821d395ef2ceef845e90531f323a218f97f5abefaabb46a23",
|
|
1329
1329
|
"src/i18n/es.json": "54369f8044dfa222779849d2f158eb100188a43816d6c42a64575122cb528a30",
|
|
@@ -1358,6 +1358,7 @@
|
|
|
1358
1358
|
"tools/nexowatt-account-password-flow-selftest.cjs": "8794de7a6743f83e9fbf22c71c3c0434211b4a6944068c6ecd57a6f119bedc4a",
|
|
1359
1359
|
"tools/nexowatt-apply-ems-overview.cjs": "520d84ce95b3e99f1f559728799f1d412d84e30c441283aa42fd188b17fd242e",
|
|
1360
1360
|
"tools/nexowatt-assistant-separation-selftest.cjs": "f7cd60b831e6e19f6c2381ac0996807001dcc3247dbe7dcc30d010498b5e82c3",
|
|
1361
|
+
"tools/nexowatt-auto-update-placement-selftest.cjs": "f9fb5e1b2065a70660bffdc62829210a2388259e4c0f32c77acf7ecfa1606110",
|
|
1361
1362
|
"tools/nexowatt-auto-update-selftest.cjs": "1c7500ca3f0264658aa778758dc14d10353dc3857ef7c9803591654cba9b13d5",
|
|
1362
1363
|
"tools/nexowatt-backend-runtime-selftest.cjs": "22eaeef2fe80c71af7e86db66e049612faf6285b47c69d9d446e2d1231d2c21f",
|
|
1363
1364
|
"tools/nexowatt-branding-selftest.cjs": "3aa00be3716fb5349c45ef761ddab639c51381a265ec086ddda45ecee89d39d5",
|
|
@@ -1377,7 +1378,7 @@
|
|
|
1377
1378
|
"tools/nexowatt-internal-reserve-selftest.cjs": "5d90e42b2f1d4aac1039fce14bf18a952e9c5665203e8caae112737c5dcd265e",
|
|
1378
1379
|
"tools/nexowatt-login-layout-selftest.cjs": "4d1aa1f58a8f117ab7485d883c75603df277043b838dcaa0de3143acb6d885ab",
|
|
1379
1380
|
"tools/nexowatt-manual-write-policy-selftest.cjs": "a41057610972d681120bf35e0321029facc08b098c79da9b131980f80bd3fdce",
|
|
1380
|
-
"tools/nexowatt-merge-update-selftest.cjs": "
|
|
1381
|
+
"tools/nexowatt-merge-update-selftest.cjs": "26ae0f257c375598441bba70ca59aef93d522140df9f04c879c757b9446b5f1f",
|
|
1381
1382
|
"tools/nexowatt-modern-ui-selftest.cjs": "e0caf8244ff5e3431052f9cb5e2b59a64a50c92ca37ec51e286200e1ed37edc0",
|
|
1382
1383
|
"tools/nexowatt-module-popup-selftest.cjs": "31f02e8cf0bfd61d7769e1095c93887a34cfbbd76a9805ef4931cea6dff53ddf",
|
|
1383
1384
|
"tools/nexowatt-native-shell-selftest.cjs": "13aabd3a19f0c0422bbc1c676718685b77c88a526167a7b511fa6c9ab2ac860c",
|
|
@@ -1392,16 +1393,17 @@
|
|
|
1392
1393
|
"tools/nexowatt-repair-eos-admin-update.cjs": "f28c1999b0f75139e582770ad649d17d11f9e909ac49d13c31be5fa5b36253e3",
|
|
1393
1394
|
"tools/nexowatt-role-access-selftest.cjs": "5d88eaeac77ff1460f28caca68a197b4cd820fbc3cf5194ff3bff036d4b20814",
|
|
1394
1395
|
"tools/nexowatt-runtime-cleanup-selftest.cjs": "8c5a5aaf51290436ceef40f7c5a28e602a428558582ee54bb94d57ed70cc3662",
|
|
1395
|
-
"tools/nexowatt-stability-check.cjs": "
|
|
1396
|
+
"tools/nexowatt-stability-check.cjs": "d9366597a16be83f41925f20983b8826663b6c9b925bca18ffa2dc24b0414c89",
|
|
1396
1397
|
"tools/nexowatt-stable-v7101-selftest.cjs": "817d09861ef29c52a67f64ec5b8f4ad4654ce7e6486eded786bb16f3c773eaf8",
|
|
1397
1398
|
"tools/nexowatt-stable-v7102-selftest.cjs": "75baab5f8069569ad4896e5018f3c5ccbbda2c2297aca5c5146bce94f9cf795d",
|
|
1399
|
+
"tools/nexowatt-stable-v7103-selftest.cjs": "166d4bfc8c1e9ecad5e04dbcf8174cad4bd6d22eebe373376d7d888a77b31662",
|
|
1398
1400
|
"tools/nexowatt-stable-v94-selftest.cjs": "5226881b3ad8918c67921ffb37716490f053ec88e7c0f24827a5eda7c75d4019",
|
|
1399
1401
|
"tools/nexowatt-stable-v95-selftest.cjs": "0b15fcd329eb2994e64c407ab04eaafab7c38c4688136c197bf9601e1c35ee07",
|
|
1400
1402
|
"tools/nexowatt-stable-v97-selftest.cjs": "4f50ad6e53b8de7eb045d56657cccd846883eacd8a877d51240d78153ba53d80",
|
|
1401
1403
|
"tools/nexowatt-sync-release-version.cjs": "2478d714533ece21a275071ef6e5467f73c2fa33d0a63d76f408dc048a86c6f6",
|
|
1402
1404
|
"tools/nexowatt-ui-overview-runtime-selftest.cjs": "838a8f44f4ba322424e35ebbb01e4a55bb9cc90b8625033086969114744386b4",
|
|
1403
1405
|
"tools/nexowatt-update-selftest.cjs": "c38c454135f98de683de8fa15fc4b9032063823f0f55fcfc8b675f551fd342f5",
|
|
1404
|
-
"tools/nexowatt-validate-package.cjs": "
|
|
1406
|
+
"tools/nexowatt-validate-package.cjs": "da7388459745d6eedebee5ed9c4821e89c75ea8850f59eeb0fb744621fc202e3",
|
|
1405
1407
|
"tools/nexowatt-value-column-selftest.cjs": "29d0a9bbea05a87dcf8ee09c86cc81acb6c59e1e34801890768f5e342083871a",
|
|
1406
1408
|
"tools/nexowatt-version-sync-selftest.cjs": "65d7c8634b6d5581f337365e13a1a9432c7d47dbf5aebc237886730c32ba5e94",
|
|
1407
1409
|
"tsconfig.build.json": "d3a31263975a13de77b97af9ff246d89931f3abb594047be2739cf11378b97f5",
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# NPM-Veröffentlichung 7.10.3
|
|
2
|
+
|
|
3
|
+
Aus einer frisch entpackten Repository-ZIP ausführen:
|
|
4
|
+
|
|
5
|
+
```powershell
|
|
6
|
+
npm publish --dry-run
|
|
7
|
+
npm publish
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Der Publish-Workflow ist dependency-frei und darf weder `tsc`, `tsx`, `npm install` noch einen verschachtelten `npm pack`-Prozess verlangen.
|
package/README.md
CHANGED
|
@@ -13,9 +13,9 @@ Standard-Port: 8081
|
|
|
13
13
|
|
|
14
14
|
Damit überschreibt der Adapter den offiziellen `admin`-Adapter nicht mehr. Die alte ioBroker-Admin-Oberfläche kann parallel vorhanden bleiben, während NexoWatt-Systeme über `eos-admin.0` die EOS-Oberfläche nutzen.
|
|
15
15
|
|
|
16
|
-
## Aktueller Stable-Verkaufskandidat 7.10.
|
|
16
|
+
## Aktueller Stable-Verkaufskandidat 7.10.3
|
|
17
17
|
|
|
18
|
-
Version 7.10.
|
|
18
|
+
Version 7.10.3 übernimmt den validierten und absturzfreien Stand 7.10.2. Die Einstellung **Automatische Adapter-Updates** liegt jetzt ausschließlich in den **Systemeinstellungen** hinter dem Schraubenschlüssel. Auf Übersicht, Module und allen anderen Hauptseiten wird die Karte nicht mehr angezeigt. Die restart-sichere Updateverwaltung, der verzögerte Repository-Abgleich und die vollständige Backend-Paketprüfung bleiben unverändert.
|
|
19
19
|
|
|
20
20
|
Verwaltete Installateur- und Endkundenkonten verwenden das Startpasswort `nexowatt`. Nach der ersten Anmeldung beziehungsweise nach einem Reset muss unmittelbar ein persönliches Passwort vergeben werden. Der Reset und die persönliche Passwortvergabe schreiben das reale ioBroker-Benutzerkennwort; EOS-Metadaten werden davon getrennt aktualisiert.
|
|
21
21
|
|
|
@@ -33,7 +33,7 @@ Minimaler Repository-Eintrag:
|
|
|
33
33
|
{
|
|
34
34
|
"eos-admin": {
|
|
35
35
|
"name": "eos-admin",
|
|
36
|
-
"version": "7.10.
|
|
36
|
+
"version": "7.10.3",
|
|
37
37
|
"title": "NexoWatt EOS Admin",
|
|
38
38
|
"desc": {
|
|
39
39
|
"de": "NexoWatt EOS Administrationsoberfläche als eigenständiger Adapter.",
|
|
@@ -141,7 +141,7 @@ npm publish --dry-run --tag latest
|
|
|
141
141
|
npm publish --tag latest
|
|
142
142
|
```
|
|
143
143
|
|
|
144
|
-
Die Version muss vor jedem erneuten Publish erhöht werden. Für 7.10.
|
|
144
|
+
Die Version muss vor jedem erneuten Publish erhöht werden. Für 7.10.3 wird direkt aus der vollständig geprüften Repository-ZIP veröffentlicht; `npm publish` benötigt dabei weiterhin weder `tsc` noch `tsx`.
|
|
145
145
|
|
|
146
146
|
## Lizenz
|
|
147
147
|
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# NexoWatt EOS Admin 7.10.3 – Stabilitätsstand
|
|
2
|
+
|
|
3
|
+
Version 7.10.3 übernimmt die validierten Backend-, Paket- und Restart-Schutzmaßnahmen aus 7.10.2 unverändert. Die sichtbare Karte **Automatische Adapter-Updates** wird ausschließlich im Dialog **Systemeinstellungen** hinter dem Schraubenschlüssel eingebunden. Sie darf weder in der Übersicht noch in Module, Dienste, Datenpunkte oder anderen Hauptseiten erscheinen.
|
|
4
|
+
|
|
5
|
+
Die Browserdateien `src-admin/public/js/eos-auto-update.js` und `adminWww/js/eos-auto-update.js` sowie die zugehörigen CSS-Dateien müssen identisch sein. Der Cache-Schlüssel `7103` erzwingt nach dem Update das Laden der neuen Platzierungslogik.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Release Notes 7.10.3
|
|
2
|
+
|
|
3
|
+
- Automatische NexoWatt-Adapter-Updates aus dem normalen Seiteninhalt entfernt.
|
|
4
|
+
- Update-Karte ausschließlich in **Systemeinstellungen** hinter dem Schraubenschlüssel platziert.
|
|
5
|
+
- Keine Änderung an Stable-Repository, verwalteten Adaptern oder Update-Backendlogik.
|
|
6
|
+
- Eigener Browser-Cache-Schlüssel `7103` verhindert die Verwendung der alten Platzierung.
|
|
7
|
+
- Neuer Placement-Selbsttest verhindert eine spätere Rückkehr auf Übersicht oder Module.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
/* NexoWatt EOS
|
|
2
|
-
.eos-nexowatt-auto-update{box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:28px;width:calc(100% - 32px);margin:
|
|
1
|
+
/* NexoWatt EOS stable auto-update settings card: visible only inside the System Settings dialog. */
|
|
2
|
+
.eos-nexowatt-auto-update{box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:28px;flex:none;width:calc(100% - 32px);margin:16px;padding:20px 24px;border:1px solid rgba(0,229,138,.28);border-radius:20px;background:linear-gradient(120deg,rgba(0,71,66,.62),rgba(4,25,39,.96) 52%,rgba(4,21,34,.98));color:#effbff;box-shadow:0 16px 36px rgba(0,0,0,.18)}
|
|
3
|
+
.eos-nexowatt-auto-update[data-context="system-settings"]{position:relative;z-index:1}
|
|
3
4
|
.eos-nexowatt-auto-update[data-enabled="false"]{border-color:rgba(117,145,160,.34);background:linear-gradient(120deg,rgba(31,54,65,.72),rgba(4,21,34,.98))}
|
|
4
|
-
.eos-nau-copy{min-width:0;flex:1}.eos-nau-eyebrow{display:block;margin-bottom:5px;color:#00e58a;font-size:.72rem;font-weight:900;letter-spacing:.13em;text-transform:uppercase}.eos-nau-copy h2{margin:0 0 6px;font-size:1.
|
|
5
|
+
.eos-nau-copy{min-width:0;flex:1}.eos-nau-eyebrow{display:block;margin-bottom:5px;color:#00e58a;font-size:.72rem;font-weight:900;letter-spacing:.13em;text-transform:uppercase}.eos-nau-copy h2{margin:0 0 6px;font-size:1.25rem;line-height:1.2}.eos-nau-copy p{max-width:960px;margin:0;color:#a9c2d0;font-size:.82rem;line-height:1.55}.eos-nau-meta{display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:13px;color:#84a8ba;font-size:.72rem}.eos-nau-meta strong{color:#d9f6ee}.eos-nau-adapters{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}.eos-nau-adapters span{padding:5px 9px;border:1px solid rgba(0,229,138,.24);border-radius:999px;background:rgba(0,229,138,.08);color:#b9f6db;font-size:.7rem;font-weight:800}.eos-nau-error{margin-top:10px;padding:8px 10px;border:1px solid rgba(255,183,77,.38);border-radius:9px;background:rgba(255,152,0,.09);color:#ffd18d;font-size:.72rem}.eos-nau-switch{display:grid;grid-template-columns:50px auto;grid-template-rows:auto auto;align-items:center;column-gap:10px;min-width:160px;cursor:pointer}.eos-nau-switch input{position:absolute;opacity:0;pointer-events:none}.eos-nau-track{grid-row:1/3;position:relative;width:50px;height:28px;border:1px solid rgba(130,161,176,.55);border-radius:999px;background:#273e4c;transition:.2s}.eos-nau-thumb{position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#b6c8d1;box-shadow:0 3px 8px rgba(0,0,0,.28);transition:.2s}.eos-nau-switch input:checked+.eos-nau-track{border-color:#00e58a;background:rgba(0,229,138,.26)}.eos-nau-switch input:checked+.eos-nau-track .eos-nau-thumb{left:25px;background:#00e58a}.eos-nau-switch strong{align-self:end;font-size:.82rem}.eos-nau-switch small{align-self:start;color:#83a2b2;font-size:.67rem}.eos-nau-switch input:focus-visible+.eos-nau-track{outline:2px solid #4bdcff;outline-offset:3px}@media(max-width:760px){.eos-nexowatt-auto-update{align-items:flex-start;flex-direction:column}.eos-nau-switch{align-self:flex-end}}
|
package/adminWww/index.html
CHANGED
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
/>
|
|
39
39
|
<link rel="stylesheet" href="./css/nexowatt-native-shell.css?v=7101" />
|
|
40
40
|
<link rel="stylesheet" href="./css/eos-ems-overview.css?v=7101" />
|
|
41
|
-
<link rel="stylesheet" href="./css/eos-auto-update.css?v=
|
|
41
|
+
<link rel="stylesheet" href="./css/eos-auto-update.css?v=7103" />
|
|
42
42
|
<link
|
|
43
43
|
rel="manifest"
|
|
44
44
|
href="manifest.json"
|
|
@@ -169,7 +169,7 @@
|
|
|
169
169
|
<script defer src="./js/eos-role-ui.js?v=7101"></script>
|
|
170
170
|
<script defer src="./js/eos-ems-overview.js?v=7101"></script>
|
|
171
171
|
|
|
172
|
-
<script defer src="./js/eos-auto-update.js?v=
|
|
172
|
+
<script defer src="./js/eos-auto-update.js?v=7103"></script>
|
|
173
173
|
<script defer src="./js/eos-assistant.js?v=7101"></script>
|
|
174
174
|
</head>
|
|
175
175
|
<body>
|
|
@@ -1,78 +1,172 @@
|
|
|
1
1
|
(() => {
|
|
2
2
|
'use strict';
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
const VERSION = 'v7103-system-settings-only';
|
|
4
5
|
const ROOT_ID = 'eos-nexowatt-auto-update';
|
|
6
|
+
const SYSTEM_DIALOG_SELECTOR = '[role="dialog"][aria-labelledby="system-settings-dialog-title"]';
|
|
5
7
|
const script = document.currentScript;
|
|
6
8
|
const API = new URL('../nexowatt/updates/', script?.src || document.baseURI).href;
|
|
9
|
+
|
|
7
10
|
let busy = false;
|
|
8
11
|
let lastLoad = 0;
|
|
12
|
+
let latestStatus = null;
|
|
9
13
|
let pollTimer = 0;
|
|
10
14
|
|
|
11
15
|
const role = () => String(window.NEXOWATT_EOS_ACCESS_ROLE || 'admin').toLowerCase();
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
16
|
+
const esc = value =>
|
|
17
|
+
String(value ?? '').replace(/[&<>'"]/g, char =>
|
|
18
|
+
({ '&': '&', '<': '<', '>': '>', "'": ''', '"': '"' })[char],
|
|
19
|
+
);
|
|
20
|
+
const formatTime = value =>
|
|
21
|
+
value
|
|
22
|
+
? new Intl.DateTimeFormat(undefined, { dateStyle: 'short', timeStyle: 'medium' }).format(new Date(value))
|
|
23
|
+
: '–';
|
|
24
|
+
|
|
25
|
+
const getSystemSettingsMount = () => {
|
|
26
|
+
const dialog = document.querySelector(SYSTEM_DIALOG_SELECTOR);
|
|
27
|
+
if (!dialog) return null;
|
|
28
|
+
|
|
29
|
+
const content = dialog.querySelector('.MuiDialogContent-root');
|
|
30
|
+
if (!content) return null;
|
|
31
|
+
|
|
32
|
+
const appBar = Array.from(content.children).find(element => element.classList?.contains('MuiAppBar-root')) ||
|
|
33
|
+
content.querySelector('.MuiAppBar-root');
|
|
34
|
+
|
|
35
|
+
return { dialog, content, appBar };
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const systemSettingsActive = () => Boolean(getSystemSettingsMount());
|
|
15
39
|
|
|
16
40
|
const ensureRoot = () => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
41
|
+
const existing = document.getElementById(ROOT_ID);
|
|
42
|
+
if (role() !== 'admin') {
|
|
43
|
+
existing?.remove();
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const mount = getSystemSettingsMount();
|
|
48
|
+
if (!mount) {
|
|
49
|
+
existing?.remove();
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (existing && mount.content.contains(existing)) return existing;
|
|
54
|
+
existing?.remove();
|
|
55
|
+
|
|
56
|
+
const root = document.createElement('section');
|
|
21
57
|
root.id = ROOT_ID;
|
|
22
58
|
root.className = 'eos-nexowatt-auto-update';
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (
|
|
59
|
+
root.dataset.context = 'system-settings';
|
|
60
|
+
root.setAttribute('data-eos-system-settings-only', 'true');
|
|
61
|
+
root.setAttribute('aria-label', 'NexoWatt Stable-Update-Einstellungen');
|
|
62
|
+
|
|
63
|
+
if (mount.appBar?.parentElement === mount.content) {
|
|
64
|
+
mount.content.insertBefore(root, mount.appBar.nextSibling);
|
|
65
|
+
} else {
|
|
66
|
+
mount.content.prepend(root);
|
|
67
|
+
}
|
|
28
68
|
return root;
|
|
29
69
|
};
|
|
30
70
|
|
|
31
71
|
const render = status => {
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
72
|
+
latestStatus = { ...(latestStatus || {}), ...(status || {}) };
|
|
73
|
+
const root = ensureRoot();
|
|
74
|
+
if (!root) return;
|
|
75
|
+
|
|
76
|
+
const enabled = latestStatus?.enabled !== false;
|
|
77
|
+
const managed = Array.isArray(latestStatus?.managedAdapters) ? latestStatus.managedAdapters : [];
|
|
78
|
+
const error = String(latestStatus?.error || '');
|
|
79
|
+
|
|
36
80
|
root.dataset.enabled = String(enabled);
|
|
37
|
-
root.innerHTML = `<div class="eos-nau-copy"><span class="eos-nau-eyebrow">NexoWatt Stable</span><h2>Automatische Adapter-Updates</h2><p>${enabled ? 'Installierte NexoWatt-Adapter werden automatisch aktualisiert, sobald im erkannten Stable-Repository eine neuere stabile Version verfügbar ist.' : 'Automatische NexoWatt-Updates sind deaktiviert. Vorherige ioBroker-Update-Richtlinien wurden wiederhergestellt.'}</p><div class="eos-nau-meta"><span>Repository: <strong>${esc(
|
|
81
|
+
root.innerHTML = `<div class="eos-nau-copy"><span class="eos-nau-eyebrow">NexoWatt Stable</span><h2>Automatische Adapter-Updates</h2><p>${enabled ? 'Installierte NexoWatt-Adapter werden automatisch aktualisiert, sobald im erkannten Stable-Repository eine neuere stabile Version verfügbar ist.' : 'Automatische NexoWatt-Updates sind deaktiviert. Vorherige ioBroker-Update-Richtlinien wurden wiederhergestellt.'}</p><div class="eos-nau-meta"><span>Repository: <strong>${esc(latestStatus?.repository || 'wird erkannt')}</strong></span><span>Letzter Abgleich: <strong>${esc(formatTime(latestStatus?.lastSync))}</strong></span><span>Richtlinie: <strong>alle neueren Stable-Versionen</strong></span></div>${managed.length ? `<div class="eos-nau-adapters">${managed.map(name => `<span>${esc(name)}</span>`).join('')}</div>` : ''}${error ? `<div class="eos-nau-error">${esc(error)}</div>` : ''}</div><label class="eos-nau-switch"><input type="checkbox" ${enabled ? 'checked' : ''} ${busy ? 'disabled' : ''}><span class="eos-nau-track"><span class="eos-nau-thumb"></span></span><strong>${enabled ? 'Aktiv' : 'Deaktiviert'}</strong><small>jederzeit änderbar</small></label>`;
|
|
38
82
|
root.querySelector('input')?.addEventListener('change', event => void save(Boolean(event.currentTarget.checked)));
|
|
39
83
|
};
|
|
40
84
|
|
|
41
85
|
const request = async (path, options = {}) => {
|
|
42
|
-
const response = await fetch(new URL(path, API), {
|
|
86
|
+
const response = await fetch(new URL(path, API), {
|
|
87
|
+
cache: 'no-store',
|
|
88
|
+
credentials: 'same-origin',
|
|
89
|
+
...options,
|
|
90
|
+
});
|
|
43
91
|
const data = await response.json().catch(() => ({}));
|
|
44
92
|
if (!response.ok) throw new Error(data.error || `HTTP ${response.status}`);
|
|
45
93
|
return data;
|
|
46
94
|
};
|
|
95
|
+
|
|
47
96
|
const load = async (force = false) => {
|
|
48
|
-
if (role() !== 'admin' || !
|
|
97
|
+
if (role() !== 'admin' || !systemSettingsActive()) {
|
|
98
|
+
ensureRoot();
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
49
101
|
if (!force && Date.now() - lastLoad < 5000) return;
|
|
102
|
+
|
|
50
103
|
lastLoad = Date.now();
|
|
51
|
-
try {
|
|
52
|
-
|
|
104
|
+
try {
|
|
105
|
+
render(await request('status'));
|
|
106
|
+
} catch (error) {
|
|
107
|
+
render({ enabled: latestStatus?.enabled !== false, error: error?.message || error });
|
|
108
|
+
}
|
|
53
109
|
};
|
|
110
|
+
|
|
54
111
|
const save = async enabled => {
|
|
55
112
|
if (busy) return;
|
|
56
113
|
busy = true;
|
|
114
|
+
render({ enabled, error: '' });
|
|
115
|
+
|
|
57
116
|
try {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
117
|
+
latestStatus = await request('settings', {
|
|
118
|
+
method: 'POST',
|
|
119
|
+
headers: {
|
|
120
|
+
'Content-Type': 'application/json',
|
|
121
|
+
'X-NexoWatt-EOS-Auto-Update': '1',
|
|
122
|
+
},
|
|
123
|
+
body: JSON.stringify({ enabled }),
|
|
124
|
+
});
|
|
61
125
|
} catch (error) {
|
|
62
|
-
|
|
63
|
-
} finally {
|
|
126
|
+
latestStatus = { ...(latestStatus || {}), enabled: !enabled, error: error?.message || error };
|
|
127
|
+
} finally {
|
|
128
|
+
busy = false;
|
|
129
|
+
render(latestStatus || { enabled });
|
|
130
|
+
}
|
|
64
131
|
};
|
|
65
132
|
|
|
66
133
|
let scheduled = false;
|
|
67
|
-
const schedule = () => {
|
|
134
|
+
const schedule = () => {
|
|
135
|
+
if (scheduled) return;
|
|
136
|
+
scheduled = true;
|
|
137
|
+
requestAnimationFrame(() => {
|
|
138
|
+
scheduled = false;
|
|
139
|
+
void load();
|
|
140
|
+
});
|
|
141
|
+
};
|
|
142
|
+
|
|
68
143
|
const start = () => {
|
|
69
144
|
void load();
|
|
70
|
-
window.addEventListener('hashchange', () => {
|
|
145
|
+
window.addEventListener('hashchange', () => {
|
|
146
|
+
lastLoad = 0;
|
|
147
|
+
schedule();
|
|
148
|
+
});
|
|
71
149
|
window.addEventListener('nexowatt-eos-admin-socket-ready', schedule);
|
|
72
|
-
document.addEventListener('visibilitychange', () => {
|
|
73
|
-
|
|
150
|
+
document.addEventListener('visibilitychange', () => {
|
|
151
|
+
if (document.visibilityState === 'visible') schedule();
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
new MutationObserver(() => {
|
|
155
|
+
const root = document.getElementById(ROOT_ID);
|
|
156
|
+
const settingsOpen = systemSettingsActive();
|
|
157
|
+
if ((settingsOpen && !root) || (!settingsOpen && root)) schedule();
|
|
158
|
+
}).observe(document.documentElement, { childList: true, subtree: true });
|
|
159
|
+
|
|
74
160
|
pollTimer = window.setInterval(() => void load(true), 30000);
|
|
75
161
|
};
|
|
76
|
-
|
|
77
|
-
|
|
162
|
+
|
|
163
|
+
document.readyState === 'loading'
|
|
164
|
+
? document.addEventListener('DOMContentLoaded', start, { once: true })
|
|
165
|
+
: start();
|
|
166
|
+
|
|
167
|
+
window.NEXOWATT_EOS_AUTO_UPDATE_UI = Object.freeze({
|
|
168
|
+
version: VERSION,
|
|
169
|
+
refresh: load,
|
|
170
|
+
location: 'system-settings',
|
|
171
|
+
});
|
|
78
172
|
})();
|
package/io-package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "eos-admin",
|
|
4
|
-
"version": "7.10.
|
|
4
|
+
"version": "7.10.3",
|
|
5
5
|
"titleLang": {
|
|
6
6
|
"en": "NexoWatt EOS Admin",
|
|
7
7
|
"de": "NexoWatt EOS Admin",
|
|
@@ -18,6 +18,11 @@
|
|
|
18
18
|
"connectionType": "local",
|
|
19
19
|
"dataSource": "push",
|
|
20
20
|
"news": {
|
|
21
|
+
"7.10.3": {
|
|
22
|
+
"de": "Stable 7.10.3 verschiebt die Einstellung für automatische NexoWatt-Adapter-Updates vollständig in die Systemeinstellungen hinter dem Schraubenschlüssel. Auf Übersicht, Module und allen anderen Hauptseiten wird die Update-Karte nicht mehr eingeblendet. Die stabile Update-Logik und die Absturzkorrekturen aus 7.10.2 bleiben unverändert.",
|
|
23
|
+
"en": "Stable 7.10.3 moves the automatic NexoWatt adapter update control entirely into System Settings behind the wrench button. The update card is no longer shown on Overview, Modules or any other main page. Stable update behavior and the 7.10.2 crash fixes remain unchanged.",
|
|
24
|
+
"nl": "Stable 7.10.3 verplaatst de instelling voor automatische NexoWatt-adapterupdates volledig naar de systeeminstellingen achter de moersleutelknop. De updatekaart wordt niet meer weergegeven op Overzicht, Modules of andere hoofdpagina’s. De stabiele updatelogica en crashfixes uit 7.10.2 blijven ongewijzigd."
|
|
25
|
+
},
|
|
21
26
|
"7.10.2": {
|
|
22
27
|
"de": "Stable-Hotfix 7.10.2 beseitigt die EOS-Admin-Startschleife: Stable-Update-Status wird nicht mehr in die laufende Instanzkonfiguration geschrieben, der erste Abgleich startet verzögert und das Release prüft die vollständige Backend-Modulkette einschließlich eosRequestSecurity.",
|
|
23
28
|
"en": "Stable hotfix 7.10.2 removes the EOS Admin restart loop: stable-update status is no longer written to the running instance configuration, first reconciliation is delayed, and the release validates the complete backend module chain including eosRequestSecurity.",
|
|
@@ -344,7 +349,7 @@
|
|
|
344
349
|
"icon": "admin.svg",
|
|
345
350
|
"messagebox": true,
|
|
346
351
|
"enabled": true,
|
|
347
|
-
"extIcon": "https://unpkg.com/iobroker.eos-admin@7.10.
|
|
352
|
+
"extIcon": "https://unpkg.com/iobroker.eos-admin@7.10.3/admin/admin.svg",
|
|
348
353
|
"keywords": [
|
|
349
354
|
"NexoWatt",
|
|
350
355
|
"EOS",
|
|
@@ -355,7 +360,7 @@
|
|
|
355
360
|
"licensed"
|
|
356
361
|
],
|
|
357
362
|
"compact": true,
|
|
358
|
-
"readme": "https://unpkg.com/iobroker.eos-admin@7.10.
|
|
363
|
+
"readme": "https://unpkg.com/iobroker.eos-admin@7.10.3/README.md",
|
|
359
364
|
"authors": [
|
|
360
365
|
"NexoWatt"
|
|
361
366
|
],
|
|
@@ -423,7 +428,7 @@
|
|
|
423
428
|
"nondeletable": false,
|
|
424
429
|
"allowAdapterUpdate": true,
|
|
425
430
|
"allowAdapterDelete": false,
|
|
426
|
-
"meta": "https://unpkg.com/iobroker.eos-admin@7.10.
|
|
431
|
+
"meta": "https://unpkg.com/iobroker.eos-admin@7.10.3/io-package.json",
|
|
427
432
|
"npmPackage": "iobroker.eos-admin",
|
|
428
433
|
"packetName": "iobroker.eos-admin",
|
|
429
434
|
"publisher": "NexoWatt"
|
|
@@ -1183,5 +1188,5 @@
|
|
|
1183
1188
|
}
|
|
1184
1189
|
}
|
|
1185
1190
|
},
|
|
1186
|
-
"version": "7.10.
|
|
1191
|
+
"version": "7.10.3"
|
|
1187
1192
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.eos-admin",
|
|
3
3
|
"description": "NexoWatt EOS Admin – repaired stable baseline with restart-safe automatic updates, native account passwords and persistent cockpit scrolling.",
|
|
4
|
-
"version": "7.10.
|
|
4
|
+
"version": "7.10.3",
|
|
5
5
|
"contributors": [
|
|
6
6
|
"bluefox <dogafox@gmail.com>",
|
|
7
7
|
"apollon77",
|
|
@@ -132,13 +132,14 @@
|
|
|
132
132
|
"tools/nexowatt-backend-runtime-selftest.cjs",
|
|
133
133
|
"NEXOWATT_EOS_PREBUILT_MANIFEST.json",
|
|
134
134
|
"tools/nexowatt-prebuilt-release-selftest.cjs",
|
|
135
|
-
"tools/nexowatt-stable-
|
|
136
|
-
"README_STABILITY_V7.10.
|
|
137
|
-
"RELEASE_NOTES_V7.10.
|
|
138
|
-
"PUBLISH_STABLE_V7.10.
|
|
139
|
-
"INSTALL_TEST_V7.10.
|
|
140
|
-
"RELEASE_ACCEPTANCE_V7.10.
|
|
141
|
-
"MERGE_UPDATE_README_V7.10.
|
|
135
|
+
"tools/nexowatt-stable-v7103-selftest.cjs",
|
|
136
|
+
"README_STABILITY_V7.10.3.md",
|
|
137
|
+
"RELEASE_NOTES_V7.10.3.md",
|
|
138
|
+
"PUBLISH_STABLE_V7.10.3.md",
|
|
139
|
+
"INSTALL_TEST_V7.10.3.md",
|
|
140
|
+
"RELEASE_ACCEPTANCE_V7.10.3.md",
|
|
141
|
+
"MERGE_UPDATE_README_V7.10.3.md",
|
|
142
|
+
"tools/nexowatt-auto-update-placement-selftest.cjs"
|
|
142
143
|
],
|
|
143
144
|
"scripts": {
|
|
144
145
|
"npm": "npm i -f && cd src-admin && npm i -f",
|
|
@@ -173,7 +174,7 @@
|
|
|
173
174
|
"nexowatt:repo-entry": "node tools/nexowatt-generate-repo-entry.cjs",
|
|
174
175
|
"nexowatt:patch-repo": "node tools/nexowatt-patch-repo.cjs",
|
|
175
176
|
"nexowatt:repair-update": "node tools/nexowatt-repair-eos-admin-update.cjs",
|
|
176
|
-
"check:eos-stability": "node tools/nexowatt-stability-check.cjs && node tools/nexowatt-esm-syntax-selftest.cjs && node tools/nexowatt-backend-runtime-selftest.cjs && node tools/nexowatt-prebuilt-release-selftest.cjs && node tools/nexowatt-import-integrity-selftest.cjs && node tools/nexowatt-entrypoint-smoke-selftest.cjs && node tools/nexowatt-frontend-graph-check.cjs && node tools/nexowatt-policy-selftest.cjs && node tools/nexowatt-publish-channel-selftest.cjs && node tools/nexowatt-release-defaults-selftest.cjs && node tools/nexowatt-role-access-selftest.cjs && node tools/nexowatt-internal-reserve-selftest.cjs && node tools/nexowatt-modern-ui-selftest.cjs && node tools/nexowatt-login-layout-selftest.cjs && node tools/nexowatt-branding-selftest.cjs && node tools/nexowatt-default-port-selftest.cjs && node tools/nexowatt-module-popup-selftest.cjs && node tools/nexowatt-datapoint-selftest.cjs && node tools/nexowatt-update-selftest.cjs && node tools/nexowatt-datapoint-interaction-selftest.cjs && node tools/nexowatt-manual-write-policy-selftest.cjs && node tools/nexowatt-value-column-selftest.cjs && node tools/nexowatt-native-shell-selftest.cjs && node tools/nexowatt-assistant-separation-selftest.cjs && node tools/nexowatt-runtime-cleanup-selftest.cjs && node tools/nexowatt-version-sync-selftest.cjs && node tools/nexowatt-merge-update-selftest.cjs && node tools/nexowatt-password-write-selftest.cjs && node tools/nexowatt-account-password-flow-selftest.cjs && npm run check:eos-stable-
|
|
177
|
+
"check:eos-stability": "node tools/nexowatt-stability-check.cjs && node tools/nexowatt-esm-syntax-selftest.cjs && node tools/nexowatt-backend-runtime-selftest.cjs && node tools/nexowatt-prebuilt-release-selftest.cjs && node tools/nexowatt-import-integrity-selftest.cjs && node tools/nexowatt-entrypoint-smoke-selftest.cjs && node tools/nexowatt-frontend-graph-check.cjs && node tools/nexowatt-policy-selftest.cjs && node tools/nexowatt-publish-channel-selftest.cjs && node tools/nexowatt-release-defaults-selftest.cjs && node tools/nexowatt-role-access-selftest.cjs && node tools/nexowatt-internal-reserve-selftest.cjs && node tools/nexowatt-modern-ui-selftest.cjs && node tools/nexowatt-login-layout-selftest.cjs && node tools/nexowatt-branding-selftest.cjs && node tools/nexowatt-default-port-selftest.cjs && node tools/nexowatt-module-popup-selftest.cjs && node tools/nexowatt-datapoint-selftest.cjs && node tools/nexowatt-update-selftest.cjs && node tools/nexowatt-datapoint-interaction-selftest.cjs && node tools/nexowatt-manual-write-policy-selftest.cjs && node tools/nexowatt-value-column-selftest.cjs && node tools/nexowatt-native-shell-selftest.cjs && node tools/nexowatt-assistant-separation-selftest.cjs && node tools/nexowatt-runtime-cleanup-selftest.cjs && node tools/nexowatt-version-sync-selftest.cjs && node tools/nexowatt-merge-update-selftest.cjs && node tools/nexowatt-password-write-selftest.cjs && node tools/nexowatt-account-password-flow-selftest.cjs && npm run check:eos-stable-v7103 && node tools/nexowatt-ems-overview-selftest.cjs && node tools/nexowatt-ui-overview-runtime-selftest.cjs && node tools/nexowatt-auto-update-selftest.cjs && node tools/nexowatt-auto-update-placement-selftest.cjs",
|
|
177
178
|
"nexowatt:patch-built-frontend": "node tools/nexowatt-patch-built-frontend.cjs",
|
|
178
179
|
"clean:eos-runtime": "node tools/nexowatt-clean-legacy-runtime.cjs",
|
|
179
180
|
"precheck:eos-package": "npm run sync:eos-version && npm run prepare:eos-release-defaults && npm run clean:eos-runtime",
|
|
@@ -198,9 +199,10 @@
|
|
|
198
199
|
"test:eos-version-sync": "node tools/nexowatt-version-sync-selftest.cjs",
|
|
199
200
|
"verify:eos-merge": "node tools/nexowatt-merge-update-selftest.cjs",
|
|
200
201
|
"check:eos-backend-runtime": "node tools/nexowatt-backend-runtime-selftest.cjs",
|
|
201
|
-
"check:eos-stable-v7102": "node tools/nexowatt-stable-v7102-selftest.cjs",
|
|
202
202
|
"check:eos-prebuilt-release": "node tools/nexowatt-prebuilt-release-selftest.cjs",
|
|
203
|
-
"seal:eos-prebuilt-release": "node tools/nexowatt-prebuilt-release-selftest.cjs --write"
|
|
203
|
+
"seal:eos-prebuilt-release": "node tools/nexowatt-prebuilt-release-selftest.cjs --write",
|
|
204
|
+
"check:eos-stable-v7103": "node tools/nexowatt-stable-v7103-selftest.cjs",
|
|
205
|
+
"test:eos-auto-update-placement": "node tools/nexowatt-auto-update-placement-selftest.cjs"
|
|
204
206
|
},
|
|
205
207
|
"author": "NexoWatt",
|
|
206
208
|
"private": false,
|
|
@@ -211,7 +213,7 @@
|
|
|
211
213
|
},
|
|
212
214
|
"nexowattReleasePolicy": {
|
|
213
215
|
"distTag": "latest",
|
|
214
|
-
"purpose": "accepted stable NexoWatt EOS sales-product candidate 7.10.
|
|
216
|
+
"purpose": "accepted stable NexoWatt EOS sales-product candidate 7.10.3"
|
|
215
217
|
},
|
|
216
218
|
"publisher": "NexoWatt"
|
|
217
219
|
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const fs = require('node:fs');
|
|
5
|
+
const path = require('node:path');
|
|
6
|
+
const root = path.resolve(__dirname, '..');
|
|
7
|
+
const read = relative => fs.readFileSync(path.join(root, relative), 'utf8');
|
|
8
|
+
const json = relative => JSON.parse(read(relative));
|
|
9
|
+
const fail = message => {
|
|
10
|
+
console.error(`[NexoWatt EOS auto-update placement] ${message}`);
|
|
11
|
+
process.exit(1);
|
|
12
|
+
};
|
|
13
|
+
const must = (value, message) => value || fail(message);
|
|
14
|
+
|
|
15
|
+
const sourceJs = read('src-admin/public/js/eos-auto-update.js');
|
|
16
|
+
const builtJs = read('adminWww/js/eos-auto-update.js');
|
|
17
|
+
const sourceCss = read('src-admin/public/css/eos-auto-update.css');
|
|
18
|
+
const builtCss = read('adminWww/css/eos-auto-update.css');
|
|
19
|
+
const index = read('adminWww/index.html');
|
|
20
|
+
const info = json('NEXOWATT_EOS_BUILD_INFO.json');
|
|
21
|
+
const cacheTag = String(info.autoUpdateCacheTag || info.autoUpdateCacheVersion || info.shellCacheTag || info.shellCacheVersion);
|
|
22
|
+
|
|
23
|
+
must(sourceJs === builtJs, 'JavaScript source/build drift');
|
|
24
|
+
must(sourceCss === builtCss, 'CSS source/build drift');
|
|
25
|
+
must(sourceJs.includes("const VERSION = 'v7103-system-settings-only'"), 'v7103 placement marker missing');
|
|
26
|
+
must(sourceJs.includes('[role="dialog"][aria-labelledby="system-settings-dialog-title"]'), 'System Settings dialog selector missing');
|
|
27
|
+
must(sourceJs.includes("root.dataset.context = 'system-settings'"), 'System Settings context marker missing');
|
|
28
|
+
must(sourceJs.includes("root.setAttribute('data-eos-system-settings-only', 'true')"), 'system-settings-only marker missing');
|
|
29
|
+
must(sourceJs.includes('mount.content.insertBefore(root, mount.appBar.nextSibling)'), 'card is not inserted below the System Settings app bar');
|
|
30
|
+
must(sourceJs.includes("location: 'system-settings'"), 'public UI location contract missing');
|
|
31
|
+
|
|
32
|
+
for (const forbidden of [
|
|
33
|
+
'introActive',
|
|
34
|
+
'eos-native-overview-hero',
|
|
35
|
+
'eos-ems-overview-runtime',
|
|
36
|
+
"document.getElementById('app-paper')",
|
|
37
|
+
]) {
|
|
38
|
+
must(!sourceJs.includes(forbidden), `global page placement remains active: ${forbidden}`);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
must(index.includes(`eos-auto-update.js?v=${cacheTag}`), `auto-update JavaScript cache key ${cacheTag} missing`);
|
|
42
|
+
must(index.includes(`eos-auto-update.css?v=${cacheTag}`), `auto-update CSS cache key ${cacheTag} missing`);
|
|
43
|
+
must(sourceCss.includes('visible only inside the System Settings dialog'), 'CSS ownership comment missing');
|
|
44
|
+
must(sourceCss.includes('[data-context="system-settings"]'), 'System Settings CSS scope marker missing');
|
|
45
|
+
|
|
46
|
+
console.log('[NexoWatt EOS auto-update placement] OK (System Settings only; no Overview/Modules injection)');
|
|
@@ -16,7 +16,7 @@ for (const file of [
|
|
|
16
16
|
'MERGE_UPDATE.ps1',
|
|
17
17
|
'MERGE_UPDATE.cmd',
|
|
18
18
|
'MERGE_UPDATE.sh',
|
|
19
|
-
'MERGE_UPDATE_README_V7.10.
|
|
19
|
+
'MERGE_UPDATE_README_V7.10.3.md',
|
|
20
20
|
'tools/nexowatt-apply-ems-overview.cjs',
|
|
21
21
|
'tools/nexowatt-sync-release-version.cjs',
|
|
22
22
|
'tools/nexowatt-version-sync-selftest.cjs',
|
|
@@ -8,7 +8,7 @@ const read = relative => fs.readFileSync(path.join(root, relative), 'utf8');
|
|
|
8
8
|
const json = relative => JSON.parse(read(relative));
|
|
9
9
|
const must = (value, message) => {
|
|
10
10
|
if (!value) {
|
|
11
|
-
console.error(`[NexoWatt EOS stable
|
|
11
|
+
console.error(`[NexoWatt EOS stable v7103] ${message}`);
|
|
12
12
|
process.exit(1);
|
|
13
13
|
}
|
|
14
14
|
};
|
|
@@ -26,9 +26,12 @@ const ems = read('adminWww/js/eos-ems-overview.js');
|
|
|
26
26
|
const intro = read('src-admin/src/tabs/Intro.tsx');
|
|
27
27
|
const bundle = read('adminWww/assets/Intro-DkwRiz1n-v84.js');
|
|
28
28
|
const stable = read('adminWww/static/js/nexowatt-stable-v7101.js');
|
|
29
|
-
const
|
|
29
|
+
const autoBackend = read('src/lib/eosAutoUpdate.ts');
|
|
30
|
+
const autoUi = read('adminWww/js/eos-auto-update.js');
|
|
31
|
+
const autoCss = read('adminWww/css/eos-auto-update.css');
|
|
32
|
+
const autoTag = String(info.autoUpdateCacheTag || info.autoUpdateCacheVersion || info.shellCacheTag || info.shellCacheVersion);
|
|
30
33
|
|
|
31
|
-
must(pkg.version === '7.10.
|
|
34
|
+
must(pkg.version === '7.10.3' && io.version === '7.10.3' && io.common.version === '7.10.3' && info.version === '7.10.3', 'version drift');
|
|
32
35
|
must(io.native.eosRequireFirstLoginPassword === false && io.native.eosRequireFirstLoginPasswordChange === false, 'forced first password still enabled');
|
|
33
36
|
must(!index.includes('eos-account-management.js'), 'custom reset UI still loaded');
|
|
34
37
|
must(!boot.includes('installIntegratedFirstLogin(base);') && !boot.includes('showFirstLoginPassword(resolved, base);'), 'forced first-login UI still active');
|
|
@@ -37,15 +40,22 @@ must(role.includes("route === 'tab-users'") && main.includes("command === 'chang
|
|
|
37
40
|
must(css.includes('persistent native overview scrolling') && stable.includes("overflow-y','scroll"), 'persistent scroll missing');
|
|
38
41
|
must(intro.includes('eos-overview-edit-controls') && bundle.includes('eos-overview-edit-controls'), 'edit control not in bottom grid');
|
|
39
42
|
must(!ems.includes('Vollständige EMS-Diagnose öffnen'), 'unsupported EMS link remains');
|
|
40
|
-
must(index.includes('eos-auto-update.js?v=7101') && auto.includes("const POLICY: NexoWattAutoUpdatePolicy = 'major'"), 'auto update missing');
|
|
41
43
|
|
|
42
|
-
// 7.10.2
|
|
43
|
-
|
|
44
|
-
must(
|
|
45
|
-
must(
|
|
46
|
-
must(
|
|
47
|
-
must(!auto.includes('extendForeignObjectAsync(this.instanceId'), 'runtime still writes the running instance native configuration');
|
|
44
|
+
// 7.10.2 runtime and package hotfix baseline remains mandatory.
|
|
45
|
+
must(autoBackend.includes("const ENABLED_STATE_ID = 'info.nexowattStableUpdatesEnabled'"), 'restart-safe enabled state missing');
|
|
46
|
+
must(autoBackend.includes("const STATUS_STATE_ID = 'info.nexowattStableUpdatesState'"), 'restart-safe status state missing');
|
|
47
|
+
must(autoBackend.includes('const STARTUP_RECONCILE_DELAY_MS = 30_000'), 'startup grace period missing');
|
|
48
|
+
must(!autoBackend.includes('extendForeignObjectAsync(this.instanceId'), 'runtime still writes the running instance native configuration');
|
|
48
49
|
must(web.includes('this.nexowattStableUpdateManager?.stop();'), 'auto-update manager is not stopped with the web server');
|
|
49
50
|
must(fs.existsSync(path.join(root, 'build/lib/eosRequestSecurity.js')), 'eosRequestSecurity runtime module missing');
|
|
50
51
|
|
|
51
|
-
|
|
52
|
+
// 7.10.3 placement acceptance: System Settings only.
|
|
53
|
+
must(index.includes(`eos-auto-update.js?v=${autoTag}`), 'auto-update JavaScript cache key missing');
|
|
54
|
+
must(index.includes(`eos-auto-update.css?v=${autoTag}`), 'auto-update CSS cache key missing');
|
|
55
|
+
must(autoUi.includes('[role="dialog"][aria-labelledby="system-settings-dialog-title"]'), 'System Settings selector missing');
|
|
56
|
+
must(autoUi.includes("root.dataset.context = 'system-settings'"), 'System Settings context missing');
|
|
57
|
+
must(autoUi.includes('mount.content.insertBefore(root, mount.appBar.nextSibling)'), 'card is not placed below System Settings header');
|
|
58
|
+
must(!autoUi.includes('introActive') && !autoUi.includes('eos-native-overview-hero') && !autoUi.includes('eos-ems-overview-runtime'), 'global overview/module placement remains');
|
|
59
|
+
must(autoCss.includes('visible only inside the System Settings dialog'), 'System Settings CSS ownership missing');
|
|
60
|
+
|
|
61
|
+
console.log('[NexoWatt EOS stable v7103] OK (v7102 crash/package baseline plus System Settings-only update control)');
|
|
@@ -43,7 +43,9 @@ if (pkg.scripts['test:eos-version-sync'] !== 'node tools/nexowatt-version-sync-s
|
|
|
43
43
|
if (pkg.scripts['verify:eos-merge'] !== 'node tools/nexowatt-merge-update-selftest.cjs') fail('merge update selftest script is missing or incorrect');
|
|
44
44
|
if (!pkg.scripts['check:eos-stability']?.includes('nexowatt-version-sync-selftest.cjs')) fail('version sync selftest is not part of check:eos-stability');
|
|
45
45
|
if (!pkg.scripts['check:eos-stability']?.includes('nexowatt-merge-update-selftest.cjs')) fail('merge update selftest is not part of check:eos-stability');
|
|
46
|
-
if (pkg.scripts['check:eos-stable-
|
|
46
|
+
if (pkg.scripts['check:eos-stable-v7103'] !== 'node tools/nexowatt-stable-v7103-selftest.cjs') fail('stable v7103 selftest script is missing or incorrect');
|
|
47
|
+
if (pkg.scripts['test:eos-auto-update-placement'] !== 'node tools/nexowatt-auto-update-placement-selftest.cjs') fail('auto-update placement selftest script is missing or incorrect');
|
|
48
|
+
if (!pkg.scripts['check:eos-stability']?.includes('nexowatt-auto-update-placement-selftest.cjs')) fail('auto-update placement selftest is not part of check:eos-stability');
|
|
47
49
|
if (pkg.scripts.prepublishOnly !== canonicalPrepublishOnly) fail('prepublishOnly must use the dependency-free direct-publish workflow');
|
|
48
50
|
if (/\b(?:tsc|tsx)\b|build:(?:backend|frontend)|\bnpx\b|npm\s+(?:i|install|ci)\b/i.test(pkg.scripts.prepublishOnly || '')) fail('prepublishOnly must not require local development dependencies');
|
|
49
51
|
if (pkg.scripts['check:eos-prebuilt-release'] !== 'node tools/nexowatt-prebuilt-release-selftest.cjs') fail('prebuilt release selftest script is missing or incorrect');
|
|
@@ -131,14 +133,14 @@ for (const file of [
|
|
|
131
133
|
'LICENSE',
|
|
132
134
|
'NEXOWATT_PROPRIETARY_LICENSE.md',
|
|
133
135
|
'THIRD_PARTY_NOTICES.md',
|
|
134
|
-
'README_STABILITY_V7.10.
|
|
135
|
-
'RELEASE_NOTES_V7.10.
|
|
136
|
-
'PUBLISH_STABLE_V7.10.
|
|
137
|
-
'INSTALL_TEST_V7.10.
|
|
138
|
-
'RELEASE_ACCEPTANCE_V7.10.
|
|
136
|
+
'README_STABILITY_V7.10.3.md',
|
|
137
|
+
'RELEASE_NOTES_V7.10.3.md',
|
|
138
|
+
'PUBLISH_STABLE_V7.10.3.md',
|
|
139
|
+
'INSTALL_TEST_V7.10.3.md',
|
|
140
|
+
'RELEASE_ACCEPTANCE_V7.10.3.md',
|
|
139
141
|
'MERGE_UPDATE.ps1',
|
|
140
142
|
'MERGE_UPDATE.cmd',
|
|
141
|
-
'MERGE_UPDATE_README_V7.10.
|
|
143
|
+
'MERGE_UPDATE_README_V7.10.3.md',
|
|
142
144
|
'tools/nexowatt-patch-built-frontend.cjs',
|
|
143
145
|
'tools/nexowatt-native-shell-selftest.cjs',
|
|
144
146
|
'tools/nexowatt-clean-legacy-runtime.cjs',
|
|
@@ -159,9 +161,14 @@ for (const file of [
|
|
|
159
161
|
'tools/nexowatt-sync-release-version.cjs',
|
|
160
162
|
'tools/nexowatt-version-sync-selftest.cjs',
|
|
161
163
|
'tools/nexowatt-merge-update-selftest.cjs',
|
|
162
|
-
'tools/nexowatt-stable-
|
|
164
|
+
'tools/nexowatt-stable-v7103-selftest.cjs',
|
|
163
165
|
'tools/nexowatt-password-write-selftest.cjs',
|
|
164
166
|
'tools/nexowatt-account-password-flow-selftest.cjs',
|
|
167
|
+
'tools/nexowatt-auto-update-placement-selftest.cjs',
|
|
168
|
+
'adminWww/js/eos-auto-update.js',
|
|
169
|
+
'adminWww/css/eos-auto-update.css',
|
|
170
|
+
'src-admin/public/js/eos-auto-update.js',
|
|
171
|
+
'src-admin/public/css/eos-auto-update.css',
|
|
165
172
|
'tools/nexowatt-ems-overview-selftest.cjs',
|
|
166
173
|
'tools/nexowatt-ui-overview-runtime-selftest.cjs',
|
|
167
174
|
'adminWww/js/eos-ems-overview.js',
|
|
@@ -191,6 +198,7 @@ const runtime = buildInfo.runtimeEntry;
|
|
|
191
198
|
const runtimeNumber = Number(String(runtime).replace(/^v/, ''));
|
|
192
199
|
const shellCache = Number(buildInfo.shellCacheVersion ?? buildInfo.nativeShellVersion ?? runtimeNumber);
|
|
193
200
|
const shellTag = String(buildInfo.shellCacheTag || shellCache);
|
|
201
|
+
const autoUpdateTag = String(buildInfo.autoUpdateCacheTag || buildInfo.autoUpdateCacheVersion || shellTag);
|
|
194
202
|
if (!runtime || !Number.isFinite(runtimeNumber)) fail(`invalid runtimeEntry ${runtime}`);
|
|
195
203
|
if (!Number.isFinite(shellCache)) fail(`invalid shellCacheVersion ${buildInfo.shellCacheVersion}`);
|
|
196
204
|
for (const marker of [
|
|
@@ -206,7 +214,8 @@ if (!index.includes(`eos-role-bootstrap.js?v=${shellTag}`)) fail('role bootstrap
|
|
|
206
214
|
if (!index.includes(`eos-branding-sanitizer.js?v=${shellTag}`)) fail('branding sanitizer cache key mismatch');
|
|
207
215
|
if (!index.includes(`eos-role-ui.js?v=${shellTag}`)) fail('role UI cache key mismatch');
|
|
208
216
|
if (index.includes('eos-account-management.js')) fail('custom account-management runtime must not be loaded in standard password mode');
|
|
209
|
-
if (!index.includes(`eos-auto-update.js?v=${
|
|
217
|
+
if (!index.includes(`eos-auto-update.js?v=${autoUpdateTag}`)) fail('auto-update JavaScript cache key mismatch');
|
|
218
|
+
if (!index.includes(`eos-auto-update.css?v=${autoUpdateTag}`)) fail('auto-update CSS cache key mismatch');
|
|
210
219
|
if (!index.includes(`eos-assistant.js?v=${shellTag}`)) fail('EOS Assist cache key mismatch');
|
|
211
220
|
if (!index.includes(`eos-ems-overview.js?v=${shellTag}`)) fail('EMS overview cache key mismatch');
|
|
212
221
|
if (!index.includes(`eos-ems-overview.css?v=${shellTag}`)) fail('EMS overview CSS cache key mismatch');
|
package/INSTALL_TEST_V7.10.2.md
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# Installationstest – NexoWatt EOS Admin 7.10.2
|
|
2
|
-
|
|
3
|
-
## Voraussetzungen
|
|
4
|
-
|
|
5
|
-
- ioBroker JS-Controller 7.x
|
|
6
|
-
- Node.js 22.x oder eine laut `package.json` unterstützte Node.js-Version
|
|
7
|
-
- EOS Admin auf Port 8081
|
|
8
|
-
|
|
9
|
-
## Prüfschritte
|
|
10
|
-
|
|
11
|
-
1. Installierbares Paket `iobroker.eos-admin-7.10.2.tgz` hochladen oder die Repository-ZIP als Arbeitsstand verwenden.
|
|
12
|
-
2. Prüfen, dass `system.adapter.eos-admin.0` Version 7.10.2 meldet.
|
|
13
|
-
3. Die Instanz mindestens 60 Sekunden beobachten. Es darf keine wiederkehrende Folge aus `stopInstance`, `TERMINATE_YOURSELF` und erneutem Start geben.
|
|
14
|
-
4. EOS Admin im Browser neu öffnen. Das Haupt-Bundle sowie die EOS-CSS-Dateien müssen mit HTTP 200 vollständig geladen werden.
|
|
15
|
-
5. Browserkonsole prüfen: keine Meldungen `ERR_INCOMPLETE_CHUNKED_ENCODING`, `Failed to fetch dynamically imported module` oder `ERR_CONNECTION_REFUSED` für Port 8081.
|
|
16
|
-
6. Unter den Update-Einstellungen den NexoWatt-Stable-Schalter aus- und wieder einschalten. Dabei darf die EOS-Admin-Instanz nicht neu starten.
|
|
17
|
-
7. Im Objektbaum prüfen, dass `eos-admin.0.info.nexowattStableUpdatesEnabled` und `eos-admin.0.info.nexowattStableUpdatesState` vorhanden sind.
|
|
18
|
-
8. Adapterlog prüfen: `MODULE_NOT_FOUND: ./eosRequestSecurity` darf nicht auftreten.
|
|
19
|
-
|
|
20
|
-
## Erwartetes Ergebnis
|
|
21
|
-
|
|
22
|
-
EOS Admin bleibt dauerhaft aktiv, der Browser lädt die Oberfläche vollständig und die Stable-Updateverwaltung arbeitet ohne Änderung der laufenden Instanzkonfiguration.
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# Merge-Update – NexoWatt EOS Admin 7.10.2
|
|
2
|
-
|
|
3
|
-
Die 7.10.2-Repository-ZIP kann über den bisherigen Arbeitsordner entpackt werden. Danach muss der geschützte Merge-Workflow ausgeführt werden:
|
|
4
|
-
|
|
5
|
-
- Windows: `MERGE_UPDATE.cmd`
|
|
6
|
-
- PowerShell: `MERGE_UPDATE.ps1`
|
|
7
|
-
- Linux/macOS: `./MERGE_UPDATE.sh`
|
|
8
|
-
|
|
9
|
-
Der Workflow synchronisiert alle Versionsdateien, kompiliert das Backend neu, entfernt veraltete Runtime-Dateien, prüft die Frontend- und Backend-Abhängigkeitsgraphen und führt einen trockenen npm-Paketlauf aus. Er veröffentlicht nicht automatisch.
|
|
10
|
-
|
|
11
|
-
Wichtig: 7.10.2 ersetzt den fehlerhaften 7.10.1-Stand. Die Updateverwaltung darf ihren Status ausschließlich in `info.nexowattStableUpdatesEnabled` und `info.nexowattStableUpdatesState` speichern.
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# Veröffentlichung – NexoWatt EOS Admin 7.10.2
|
|
2
|
-
|
|
3
|
-
Diese Repository-ZIP enthält bereits das vollständig kompilierte und geprüfte Release-Artefakt. Für die Veröffentlichung sind **weder `npm install` noch `npm ci` erforderlich**.
|
|
4
|
-
|
|
5
|
-
Im entpackten Repository zuerst den npm-Trockenlauf ausführen:
|
|
6
|
-
|
|
7
|
-
```powershell
|
|
8
|
-
npm publish --dry-run
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
Wenn der Trockenlauf ohne Fehler endet, direkt veröffentlichen:
|
|
12
|
-
|
|
13
|
-
```powershell
|
|
14
|
-
npm publish
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
`prepublishOnly` und `prepack` verwenden ausschließlich mitgelieferte Node.js-Prüfskripte. Sie starten weder `tsc` noch `tsx` und laden keine Entwicklungsabhängigkeiten nach. Das versiegelte SHA-256-Manifest kontrolliert, dass Quellstand, Frontend und vorkompiliertes Backend seit der Freigabe nicht verändert wurden. Zusätzlich werden die vollständige lokale Backend-Modulkette, die JavaScript-Syntax und der tatsächliche npm-Paketinhalt geprüft.
|
|
18
|
-
|
|
19
|
-
Nur nach eigenen Änderungen an TypeScript- oder Frontend-Quellen ist ein Entwicklungs-Build erforderlich. Der hier bereitgestellte Release-Stand darf unverändert direkt mit `npm publish` veröffentlicht werden.
|
|
20
|
-
|
|
21
|
-
Die bereits veröffentlichte Version 7.10.1 darf nicht überschrieben werden. Da der Veröffentlichungsversuch von 7.10.2 vor dem Upload im Lifecycle abgebrochen wurde, bleibt dieser reparierte Stand auf Version 7.10.2.
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# NexoWatt EOS Admin 7.10.2 – reparierter Stable-Kandidat
|
|
2
|
-
|
|
3
|
-
Version 7.10.2 ist ein gezieltes Stabilitäts-Hotfix für den fehlerhaften Stand 7.10.1. Die Oberfläche und die bereits freigegebenen Funktionen aus 7.10.1 bleiben erhalten.
|
|
4
|
-
|
|
5
|
-
## Behobene Fehler
|
|
6
|
-
|
|
7
|
-
- Die automatische NexoWatt-Stable-Updateverwaltung schreibt ihren Laufzeitstatus nicht mehr in `system.adapter.eos-admin.0.native`. Dadurch wird die laufende EOS-Admin-Instanz beim Start nicht mehr fortlaufend neu gestartet.
|
|
8
|
-
- Die erste Synchronisierung der Stable-Update-Richtlinien erfolgt erst nach einer Startschutzzeit. Der HTTP-Server kann JavaScript- und CSS-Dateien vollständig ausliefern, bevor Repository-Richtlinien geprüft werden.
|
|
9
|
-
- Der Update-Manager beendet alle Zeitgeber beim Herunterfahren des Webservers.
|
|
10
|
-
- Das geprüfte Backend ist vollständig vorkompiliert und über ein SHA-256-Manifest versiegelt. `npm publish` und `npm pack` benötigen deshalb keine lokalen TypeScript-/TSX-Entwicklungswerkzeuge und starten weder `tsc` noch `tsx`.
|
|
11
|
-
- Ein Backend-Runtime-Test prüft alle lokalen `require`-/Import-Abhängigkeiten, ihre Syntax und ihre Abdeckung durch die explizite npm-Dateiliste. Er startet dabei keinen verschachtelten `npm pack`-Prozess mehr, damit `npm publish` unter Windows nicht beim Aufruf von `npm.cmd` abbricht.
|
|
12
|
-
- `build/lib/eosRequestSecurity.js` ist fest Bestandteil des geprüften Runtime-Artefakts.
|
|
13
|
-
|
|
14
|
-
## Unverändert übernommen
|
|
15
|
-
|
|
16
|
-
- Native ioBroker-Passwortverwaltung ohne erzwungene EOS-Erstpasswortseite.
|
|
17
|
-
- Dauerhafter vertikaler Cockpit-Scrollbereich.
|
|
18
|
-
- Bearbeiten-Stift innerhalb des unteren Kartenrasters.
|
|
19
|
-
- Rollen- und Sicherheitssystem des 7.10.1-UI-Baselines.
|
|
20
|
-
- Automatische Stable-Updates ausschließlich für installierte NexoWatt-Adapter; durch Admin/Service abschaltbar.
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# Release Acceptance – NexoWatt EOS Admin 7.10.2
|
|
2
|
-
|
|
3
|
-
Der Stable-Kandidat ist freigabefähig, wenn alle folgenden Bedingungen erfüllt sind:
|
|
4
|
-
|
|
5
|
-
- Backend-Kompilierung erfolgreich.
|
|
6
|
-
- Paket- und Stabilitätsprüfung vollständig erfolgreich.
|
|
7
|
-
- Backend-Runtime-Abhängigkeitskette vollständig und im npm-Artefakt enthalten.
|
|
8
|
-
- `build/lib/eosRequestSecurity.js` im gepackten Artefakt vorhanden.
|
|
9
|
-
- Auto-Update-Selbsttest bestätigt: kein Schreiben auf `system.adapter.eos-admin.0`.
|
|
10
|
-
- Wiederholter Auto-Update-Abgleich schreibt unveränderte Objektkonfigurationen nicht erneut.
|
|
11
|
-
- Startschutz verhindert Repository-Änderungen während des ersten Browser-Ladevorgangs.
|
|
12
|
-
- Installiertes System zeigt über mindestens 60 Sekunden keine Start-/Stop-Schleife.
|
|
13
|
-
- Browserkonsole bleibt frei von abgebrochenen Chunk-Transfers und Verbindungsverweigerungen auf Port 8081.
|
package/RELEASE_NOTES_V7.10.2.md
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# Release Notes – NexoWatt EOS Admin 7.10.2
|
|
2
|
-
|
|
3
|
-
## Kritischer Stabilitätsfix
|
|
4
|
-
|
|
5
|
-
Der in 7.10.1 neu eingeführte Stable-Update-Manager speicherte bei jedem Start einen neuen Zeitstempel in der Native-Konfiguration der laufenden `eos-admin.0`-Instanz. ioBroker behandelt eine Änderung dieser Instanzkonfiguration als Neustartgrund. Dadurch entstand eine permanente Start-/Stop-Schleife. Während dieser Schleife wurden Browser-Bundles nur teilweise übertragen; daraus entstanden `ERR_INCOMPLETE_CHUNKED_ENCODING`, fehlgeschlagene dynamische Imports und `ERR_CONNECTION_REFUSED` für CSS-Dateien.
|
|
6
|
-
|
|
7
|
-
7.10.2 speichert Einstellung und Laufzeitstatus ausschließlich in quittierten Adapter-States. Der Update-Abgleich startet verzögert und schreibt unveränderte Adapter-/Repository-Richtlinien nicht erneut.
|
|
8
|
-
|
|
9
|
-
## Paketvollständigkeit
|
|
10
|
-
|
|
11
|
-
Das Backend und das Frontend sind in der Repository-ZIP bereits vollständig kompiliert. Die Release-Lifecycle-Skripte führen vor `npm pack` und `npm publish` ausschließlich dependency-freie Node.js-Prüfungen aus; `tsc`, `tsx`, `npm install` und `npm ci` werden nicht benötigt. Ein SHA-256-Manifest versiegelt den geprüften Quell- und Buildstand. Zusätzlich verfolgt der Backend-Runtime-Test die lokale Modulabhängigkeitskette ab `build/main.js`, führt einen Syntaxcheck aus und verifiziert die Abdeckung jeder Runtime-Datei durch die explizite npm-Dateiliste. Der Test startet innerhalb von `prepublishOnly` keinen verschachtelten `npm pack`-/`npm.cmd`-Prozess mehr; der endgültige Paketinhalt wird separat durch `npm publish --dry-run` geprüft. Damit wird insbesondere ein fehlendes `build/lib/eosRequestSecurity.js` vor einer Veröffentlichung erkannt.
|