iobroker.shoppingroute 0.1.0-beta.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.
@@ -0,0 +1,11 @@
1
+ # ShoppingRoute – Closed Beta Terms
2
+
3
+ Copyright © 2026 RaviniZib. All rights reserved.
4
+
5
+ This beta may only be installed and privately tested by persons expressly invited by the copyright holder. Testers may provide feedback, bug reports and diagnostics to the developer.
6
+
7
+ Without prior written permission, redistribution, publication, mirroring, commercial use, incorporation into another adapter/application/service, and distribution of derivative works are prohibited. Copyright, license and attribution notices must not be removed or altered.
8
+
9
+ Mandatory statutory rights remain unaffected. This beta is provided without warranty and is used at the tester's own risk.
10
+
11
+ Earlier ShoppingRoute versions that were separately distributed under another license remain governed by the license applicable to those versions.
@@ -0,0 +1,17 @@
1
+ # ShoppingRoute – Bedingungen für die geschlossene Beta
2
+
3
+ Copyright © 2026 RaviniZib. Alle Rechte vorbehalten.
4
+
5
+ Diese Beta-Version darf ausschließlich von Personen installiert und privat getestet werden, die vom Rechteinhaber ausdrücklich als Betatester eingeladen wurden. Feedback, Fehlerberichte und Diagnoseinformationen dürfen an den Entwickler übermittelt werden.
6
+
7
+ Ohne vorherige schriftliche Genehmigung ist insbesondere nicht gestattet:
8
+
9
+ - das Beta-Paket oder Teile davon weiterzugeben, öffentlich bereitzustellen, zu spiegeln, zu verkaufen oder anderweitig Dritten zugänglich zu machen;
10
+ - den Code oder wesentliche Teile der Implementierung in andere Adapter, Programme, Dienste oder kommerzielle Produkte zu übernehmen;
11
+ - abgeleitete Versionen zu veröffentlichen oder weiterzugeben;
12
+ - Copyright-, Lizenz- oder Herkunftshinweise zu entfernen oder zu verändern;
13
+ - die Beta kommerziell zu nutzen.
14
+
15
+ Gesetzlich zwingende Rechte bleiben unberührt. Die Beta wird ohne Gewährleistung bereitgestellt und auf eigenes Risiko verwendet.
16
+
17
+ Hinweis: Frühere ShoppingRoute-Versionen, die bereits unter einer anderen Lizenz veröffentlicht wurden, bleiben für diese jeweilige Version unter der damals geltenden Lizenz. Diese Bedingungen gelten für die unter dieser geschlossenen Beta-Lizenz verteilten Versionen.
@@ -0,0 +1,31 @@
1
+ # Beta testing ioBroker.shoppingroute 0.1.0-beta.3
2
+
3
+ This beta is intended for a small closed group of testers on different ioBroker/Alexa2 systems.
4
+
5
+ ## Safety
6
+
7
+ - Dry-Run is enabled by default on new installations.
8
+ - The adapter still never uses `#New`, `#delete` or `completed`.
9
+ - Real sorting writes are blocked when Alexa2/alexa-remote2 write compatibility cannot be confirmed safely.
10
+ - The Alexa app must sort the shopping list by **Oldest to newest**.
11
+
12
+ ## Recommended flow
13
+
14
+ 1. Install the adapter and create an instance.
15
+ 2. Verify the Alexa2 instance and list name.
16
+ 3. Keep Dry-Run enabled.
17
+ 4. Add a few test items through Alexa or the Alexa app.
18
+ 5. Inspect `shoppingroute.0.info.lastPlan`.
19
+ 6. Inspect `shoppingroute.0.info.compatibility`.
20
+ 7. If `info.writeCapability` is `unknown`, set `shoppingroute.0.control.compatibilityTest` to `true` once while at least one active list item exists.
21
+ 8. Only when `info.writeCapability` is `source-ok` or `live-ok`, disable Dry-Run for a small real sorting test.
22
+ 9. Verify that adding and normally checking off items in the Alexa app still works.
23
+
24
+ The live test writes the **same visible `value` text** of one existing active item once and waits up to 10 seconds for Alexa2 to acknowledge it. It does not create, delete, complete or visibly rename an item.
25
+
26
+ For feedback include `info.compatibility`, `info.lastError`, `info.lastPlan` when relevant, and the related ioBroker log lines. Never include tokens or passwords.
27
+
28
+
29
+ ## API/traffic diagnostics
30
+
31
+ During testing also monitor `shoppingroute.0.info.traffic`, especially `localChecks`, `sortRuns` and `alexaWrites`. This shows how many local checks and actual Alexa writes a typical household causes. Counters reset daily.
@@ -0,0 +1,53 @@
1
+ # Beta-Test ioBroker.shoppingroute 0.1.0-beta.3
2
+
3
+ Diese Beta ist für eine kleine geschlossene Testgruppe gedacht. Sie soll auf unterschiedlichen ioBroker-/Alexa2-Systemen prüfen, ob Einlesen, Erkennung, Sortierplanung und Alexa-`value`-Updates zuverlässig funktionieren.
4
+
5
+ ## Sicherheitsregeln
6
+
7
+ - **Dry-Run ist bei Neuinstallationen standardmäßig EIN.**
8
+ - Der Adapter verwendet weiterhin niemals `#New`, `#delete` oder `completed`.
9
+ - Echte Sortier-Schreibzugriffe werden in der Beta zusätzlich blockiert, wenn die Alexa2/alexa-remote2-Schreibkompatibilität nicht sicher bestätigt werden konnte.
10
+ - Die Alexa-App muss für die betreffende Einkaufsliste auf **Älteste bis neueste** gestellt sein.
11
+
12
+ ## Empfohlener Testablauf
13
+
14
+ 1. Adapter installieren und Instanz anlegen.
15
+ 2. Alexa2-Instanz und Listenname prüfen.
16
+ 3. Dry-Run eingeschaltet lassen.
17
+ 4. Einige Testartikel über Alexa oder die Alexa-App hinzufügen.
18
+ 5. `shoppingroute.0.info.lastPlan` kontrollieren.
19
+ 6. `shoppingroute.0.info.compatibility` kontrollieren.
20
+ 7. Wenn `info.writeCapability` den Wert `unknown` hat, bei mindestens einem aktiven Listeneintrag `shoppingroute.0.control.compatibilityTest` einmal auf `true` setzen.
21
+ 8. Erst wenn `info.writeCapability` `source-ok` oder `live-ok` zeigt, Dry-Run für einen kleinen echten Sortiertest ausschalten.
22
+ 9. Zunächst mit wenigen Einträgen testen und prüfen, ob Hinzufügen und normales Abhaken in der Alexa-App weiter funktionieren.
23
+
24
+ ## Kompatibilitätstest
25
+
26
+ Der Live-Test schreibt **denselben sichtbaren `value`-Text** eines vorhandenen aktiven Eintrags erneut. Er legt keinen Eintrag an, löscht keinen, hakt keinen ab und benennt sichtbar nichts um. Der Test wartet bis zu 10 Sekunden auf die Bestätigung von Alexa2.
27
+
28
+ Mögliche Werte von `info.writeCapability`:
29
+
30
+ - `source-ok` – die bekannte fehlerhafte `version`-Query wurde nicht gefunden und die korrigierte Schreibweise ist vorhanden; echte Sortier-Schreibzugriffe sind freigegeben.
31
+ - `live-ok` – der Live-Kompatibilitätstest wurde bestätigt; echte Sortier-Schreibzugriffe sind freigegeben.
32
+ - `known-bug` – die bekannte fehlerhafte `alexa-remote2`-Query wurde erkannt; echte Sortier-Schreibzugriffe sind blockiert.
33
+ - `live-failed` – der Live-Test wurde nicht bestätigt; echte Sortier-Schreibzugriffe sind blockiert.
34
+ - `unknown` – die installierte Implementierung konnte nicht eindeutig erkannt werden; echte Sortier-Schreibzugriffe bleiben blockiert, bis der Live-Test erfolgreich war.
35
+
36
+ ## Feedback
37
+
38
+ Für einen Fehlerbericht bitte mindestens mitsenden:
39
+
40
+ - Inhalt von `shoppingroute.0.info.compatibility`
41
+ - Inhalt von `shoppingroute.0.info.lastError`
42
+ - Inhalt von `shoppingroute.0.info.lastPlan`, wenn die Reihenfolge falsch ist
43
+ - relevante ioBroker-Logzeilen
44
+ - welche Alexa2-Instanz und welche Einkaufsliste verwendet wird
45
+ - ob die Alexa-App auf **Älteste bis neueste** steht
46
+ - kurze Beschreibung der erwarteten und tatsächlichen Reihenfolge
47
+
48
+ Tokens, Passwörter oder andere Zugangsdaten dürfen niemals in einem Fehlerbericht stehen.
49
+
50
+
51
+ ## API-/Traffic-Diagnose
52
+
53
+ Während des Tests bitte auch `shoppingroute.0.info.traffic` beobachten. Entscheidend sind insbesondere `localChecks`, `sortRuns` und `alexaWrites`. Damit lässt sich beurteilen, wie viele lokale Prüfungen und tatsächliche Alexa-Schreibzugriffe ein typischer Haushalt verursacht. Die Zähler werden täglich zurückgesetzt.
package/LICENSE ADDED
@@ -0,0 +1,17 @@
1
+ ShoppingRoute Closed Beta License 1.0
2
+ Copyright (c) 2026 RaviniZib. All rights reserved.
3
+
4
+ Permission is granted only to persons expressly invited by the copyright holder to install and use this beta version for private testing and to provide feedback.
5
+
6
+ Without prior written permission from the copyright holder, you may not:
7
+ - redistribute, publish, mirror, sell, sublicense or otherwise make the software or beta package available to third parties;
8
+ - use the software or any substantial part of it in another adapter, application, service or commercial product;
9
+ - create or distribute derivative works based on this beta version;
10
+ - remove or alter copyright, license or attribution notices;
11
+ - use the software for commercial purposes.
12
+
13
+ Reverse engineering solely for the purpose of reproducing, extracting or reusing the implementation in another product is not permitted to the extent allowed by applicable law. Mandatory statutory rights remain unaffected.
14
+
15
+ THE SOFTWARE IS A BETA VERSION AND IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. USE IS AT YOUR OWN RISK.
16
+
17
+ This license applies to ShoppingRoute versions distributed under this license. Earlier versions that were separately distributed under another license remain governed by the license applicable to those versions.
package/README.md ADDED
@@ -0,0 +1,86 @@
1
+ # ioBroker.shoppingroute
2
+
3
+ <p align="center">
4
+ <img src="admin/shoppingroute.png" width="190" alt="ShoppingRoute logo">
5
+ </p>
6
+
7
+ **Development status: 0.1.0-beta.3 – closed beta**
8
+
9
+ `ioBroker.shoppingroute` sorts existing Alexa shopping-list entries by **store** and by the **configured walking route inside each store**, while keeping the original Alexa app as the only shopping app.
10
+
11
+ ## Core concept
12
+
13
+ The Alexa app must be configured to sort the shopping list by **Oldest to newest**.
14
+
15
+ The adapter reads active Alexa list items, sorts the existing item IDs by `createdDateTime`, independently sorts the visible product texts by **market → category route → product**, and redistributes only the `value` texts across the existing IDs.
16
+
17
+ ### Safety invariant
18
+
19
+ This adapter never uses:
20
+
21
+ - `#New`
22
+ - `#delete`
23
+ - `completed`
24
+
25
+ It therefore does not create, delete or complete Alexa list entries.
26
+
27
+ ## Current beta features
28
+
29
+ - configurable Alexa2 instance and list name
30
+ - Dry-Run enabled by default
31
+ - unlimited market/main-category configuration
32
+ - market aliases, e.g. `Aldi,Aldi Nord`
33
+ - separate category walking route for every market
34
+ - central product-group catalogue; product and route assignments use dynamic drop-downs
35
+ - product catalogue with aliases, category and optional default market
36
+ - optional priority market for all products without an explicit or product-specific default market
37
+ - deterministic precedence: explicit market → product default → priority market → fallback market
38
+ - explicit phrases such as `Bananen von Aldi` / `Bananen bei Aldi`
39
+ - quantity-aware recognition while keeping the visible Alexa text unchanged
40
+ - heuristic category guess for unknown products
41
+ - automatic learning of unknown products into the product catalogue, also while Dry-Run is active
42
+ - priority market is not frozen into automatically learned product defaults
43
+ - ambiguous unknown `von/bei <name>` suffixes are intentionally left for manual review
44
+ - safe abort/recalculate when active IDs change while sorting
45
+ - diagnostic states and complete sorting plan as JSON
46
+
47
+ German documentation: [README_DE.md](README_DE.md)
48
+
49
+
50
+ ## Beta safety check in 0.1.0-beta.1
51
+
52
+ The beta inspects the installed Alexa2/alexa-remote2 update path for the known malformed `?version =...` query. Real sorting writes are allowed only when `info.writeCapability` is `source-ok` or `live-ok`. They are blocked for `known-bug`, `live-failed` and `unknown`; Dry-Run remains available.
53
+
54
+ If the status is `unknown`, run `shoppingroute.0.control.compatibilityTest` once while at least one active list item exists. The test writes the same visible `value` again and waits for Alexa2 to acknowledge it. It does not create, delete, complete or visibly rename an item. See [BETA_TESTING.md](BETA_TESTING.md).
55
+
56
+ ## Important Alexa2 compatibility note
57
+
58
+ During development in August 2026, the tested `alexa-remote2` version contained a malformed version query in `updateListItem` (`?version =...`). Public release of this adapter should require an upstream-fixed Alexa2/alexa-remote2 version. End users must not be required to patch `node_modules` manually.
59
+
60
+ ## Development
61
+
62
+ ```bash
63
+ npm install
64
+ npm run build
65
+ npm test
66
+ ```
67
+
68
+ Repository target: `https://github.com/RaviniZib/ioBroker.shoppingroute`
69
+
70
+ ## License
71
+
72
+ Closed Beta License 1.0 © 2026 RaviniZib – see LICENSE
73
+
74
+
75
+ ### Admin UI since 0.0.4
76
+
77
+ Fallback market and Priority market are dynamic drop-downs built from active markets. Product default market and route market use the same market drop-downs. Dynamic market and product-group options are alphabetically sorted. The Product, Product group and Default market columns in the product catalogue are sortable from their headers; equal groups retain alphabetical product order.
78
+
79
+
80
+ ## API/traffic diagnostics
81
+
82
+ ShoppingRoute is event-driven on the local ioBroker Alexa list state and does not add its own cloud polling. Closed-beta diagnostics count local list checks, planned changes, real sorting runs and actual Alexa `value` writes. Daily counters are exposed under `shoppingroute.0.info.*Today`, with the combined record in `shoppingroute.0.info.traffic`. These are operation counters, not byte-volume measurements.
83
+
84
+ ## Closed tester package
85
+
86
+ `npm run beta:package` creates a separate tester package without TypeScript sources, tests, GitHub workflow files or source maps. Runtime JavaScript is additionally obfuscated. Testers therefore do not need access to the private development repository.
package/README_DE.md ADDED
@@ -0,0 +1,243 @@
1
+ # ioBroker.shoppingroute
2
+
3
+ <p align="center">
4
+ <img src="admin/shoppingroute.png" width="190" alt="ShoppingRoute logo">
5
+ </p>
6
+
7
+ **Entwicklungsstand: 0.1.0-beta.3 – geschlossene Beta**
8
+
9
+ `ioBroker.shoppingroute` sortiert eine vorhandene Alexa-Einkaufsliste nach **Einkaufsmarkt** und dem **individuellen Laufweg durch den jeweiligen Markt**. Die originale Alexa-App bleibt die einzige App für den Einkauf und die Artikel werden dort weiterhin ganz normal abgehakt.
10
+
11
+ ## Grundidee
12
+
13
+ Alexa vergibt für jeden Listeneintrag eine ID und einen Erstellungszeitpunkt. Wenn die Alexa-App auf **„Älteste bis neueste“** eingestellt ist, können diese vorhandenen IDs als feste Listenplätze verwendet werden.
14
+
15
+ Der Adapter:
16
+
17
+ 1. liest ausschließlich die **aktiven** Einträge aus `alexa2.x.Lists.<LISTE>.json`,
18
+ 2. sortiert die vorhandenen IDs nach `createdDateTime` von alt nach neu,
19
+ 3. analysiert unabhängig davon die Artikelnamen,
20
+ 4. sortiert die Artikel nach **Markt → Laufweg/Kategorie → Artikelname**,
21
+ 5. schreibt ausschließlich die sichtbaren `value`-Texte auf die bereits vorhandenen IDs zurück.
22
+
23
+ ### Harte Sicherheitsregel
24
+
25
+ Der Adapter verwendet **niemals**:
26
+
27
+ - `#New`
28
+ - `#delete`
29
+ - `completed`
30
+
31
+ Er legt also selbst keine Alexa-Listeneinträge an, löscht keine und hakt keine ab.
32
+
33
+ ## Alexa-App vorbereiten
34
+
35
+ In der Alexa-App für die Einkaufsliste einstellen:
36
+
37
+ **Sortieren nach → Älteste bis neueste**
38
+
39
+ Ohne diese Einstellung kann die App ihre eigene A–Z-Sortierung über die vom Adapter erzeugte Reihenfolge legen.
40
+
41
+ ## Beispiele
42
+
43
+ ### Markt explizit nennen
44
+
45
+ Sprachbefehl sinngemäß:
46
+
47
+ `Alexa, setze Bananen von Aldi auf die Einkaufsliste.`
48
+
49
+ Der sichtbare Eintrag bleibt:
50
+
51
+ `Bananen von Aldi`
52
+
53
+ Intern erkennt der Adapter:
54
+
55
+ - Artikel: `Bananen`
56
+ - Markt: `ALDI`
57
+ - Kategorie: `Obst/Gemüse`
58
+
59
+ ### Mengenangaben
60
+
61
+ Auch folgende Einträge bleiben sichtbar unverändert:
62
+
63
+ - `3 Bananen von Aldi`
64
+ - `2 Packungen Eier von Penny`
65
+ - `500 Gramm Hackfleisch von Lidl`
66
+
67
+ Die Menge wird nur für die Artikelerkennung ausgeblendet, niemals aus dem Alexa-Text entfernt.
68
+
69
+ ### Prioritätsmarkt
70
+
71
+ Optional kann ein **Prioritätsmarkt** festgelegt werden. Damit muss der bevorzugte Markt nicht bei jedem Artikel mitgesprochen werden.
72
+
73
+ Beispiel mit `Prioritätsmarkt = LIDL`:
74
+
75
+ - `Milch` → LIDL
76
+ - `Bananen` → LIDL
77
+ - `Cola von Rewe` → REWE
78
+ - hat `Katzenfutter` im Artikelstamm den Standardmarkt ALDI → ALDI
79
+
80
+ Die Reihenfolge der Marktentscheidung ist verbindlich:
81
+
82
+ **ausdrücklich genannter Markt → Artikel-Standardmarkt → Prioritätsmarkt → Fallback-Markt**
83
+
84
+ Der Prioritätsmarkt wird beim automatischen Lernen eines Artikels **nicht** als fester Standardmarkt gespeichert. Ein späterer Wechsel des Prioritätsmarkts wirkt dadurch auch auf bereits gelernte Artikel ohne eigenen Standardmarkt.
85
+
86
+ ## Konfiguration
87
+
88
+ ### Allgemein
89
+
90
+ - Alexa2-Instanz, z. B. `alexa2.0`
91
+ - Listenname, normalerweise `SHOP`
92
+ - Dry-Run
93
+ - unbekannte Artikel automatisch lernen
94
+ - Wartezeit nach Listenänderungen
95
+ - Pause zwischen Alexa-`value`-Updates
96
+ - Fallback-Hauptkategorie/Markt
97
+ - Prioritätsmarkt, z. B. `LIDL` (optional)
98
+
99
+ ### Märkte / Hauptkategorien
100
+
101
+ Beliebig viele Märkte können angelegt und in eine Reihenfolge gebracht werden.
102
+
103
+ Beispiel:
104
+
105
+ 1. ALDI
106
+ 2. PENNY
107
+ 3. LIDL
108
+ 4. REWE
109
+ 5. Ohne Markt
110
+
111
+ Aliase ermöglichen z. B. `Aldi` und `Aldi Nord` für denselben Markt.
112
+
113
+ ### Produktgruppen
114
+
115
+ Produktgruppen wie `Obst/Gemüse`, `TK-Produkte`, `Milchprodukte` oder `Nonfood` werden zentral in einem eigenen Reiter gepflegt. In **Artikel** und **Laufwege** werden Produktgruppen nicht mehr frei eingetippt, sondern aus dieser Liste per Pulldown ausgewählt. Nach Änderungen an den Produktgruppen die Konfiguration speichern, damit die Auswahllisten neu geladen werden.
116
+
117
+ ### Laufwege
118
+
119
+ Jeder Markt bekommt eine eigene Kategorienreihenfolge.
120
+
121
+ Beispiel ALDI:
122
+
123
+ 1. Obst/Gemüse
124
+ 2. Brot/Gebäck
125
+ 3. Fleisch/Fisch
126
+ 4. Wurst/Salate/Teigwaren
127
+ 5. Milchprodukte
128
+ 6. Konserven
129
+ 7. Getränke
130
+ 8. TK-Produkte
131
+ 9. Nonfood
132
+
133
+ PENNY kann eine vollständig andere Reihenfolge besitzen.
134
+
135
+ ### Artikelstamm
136
+
137
+ Pro Artikel können gepflegt werden:
138
+
139
+ - Name
140
+ - Aliase
141
+ - Kategorie
142
+ - Standardmarkt
143
+
144
+ Ein ausdrücklich genannter Markt (`Bananen von Penny`) hat Vorrang vor dem Standardmarkt des Artikels.
145
+
146
+ ## Unbekannte Artikel und automatisches Lernen
147
+
148
+ Nicht im Artikelstamm vorhandene Artikel werden nicht blockiert. Ab 0.0.2 können sie automatisch in den Artikelstamm übernommen werden. Dabei wird eine Kategorie heuristisch vorgeschlagen; ein globaler Prioritätsmarkt wird **nicht** als fester Artikel-Standardmarkt gespeichert.
149
+
150
+ Dry-Run verhindert ausschließlich Alexa-Schreibzugriffe. Das Lernen neuer Artikel darf weiterhin stattfinden, damit sich der Artikelstamm gefahrlos aufbauen lässt.
151
+
152
+ Nicht automatisch gelernte unbekannte Artikel werden nach
153
+
154
+ `shoppingroute.0.info.unknownItems`
155
+
156
+ geschrieben. Neu gelernte Artikel stehen zusätzlich unter
157
+
158
+ `shoppingroute.0.info.lastLearnedItems`.
159
+
160
+ Ein unbekannter Text mit einem nicht erkannten Suffix wie `35 Sushi von Ukuhama` wird aus Sicherheitsgründen nicht automatisch als Produkt `Sushi von Ukuhama` gelernt. `Ukuhama` könnte ein noch nicht angelegter Markt oder auch eine Marke sein. Solche Einträge übernehmen deshalb auch **nicht** den Prioritätsmarkt, sondern bleiben im Fallback-Markt und zur manuellen Klärung in `info.unknownItems`.
161
+
162
+ ## Verhalten während des Einkaufs
163
+
164
+ Wenn während einer laufenden Umsortierung ein Artikel hinzugefügt oder abgehakt wird, erkennt der Adapter die geänderte Menge aktiver IDs, bricht den aktuellen Durchlauf ab und berechnet die Liste anschließend neu.
165
+
166
+ Es werden außerdem nur Plätze beschrieben, deren Text sich tatsächlich ändern muss.
167
+
168
+ ## Datenpunkte
169
+
170
+ - `info.connection`
171
+ - `info.activeItems`
172
+ - `info.lastSort`
173
+ - `info.lastError`
174
+ - `info.lastPlan`
175
+ - `info.unknownItems`
176
+ - `info.lastLearnedItems`
177
+ - `info.writeCapability`
178
+ - `info.compatibility`
179
+ - `info.lastCompatibilityTest`
180
+ - `control.enabled`
181
+ - `control.sortNow`
182
+ - `control.compatibilityTest`
183
+
184
+ `info.lastPlan` ist besonders für den Dry-Run gedacht und zeigt vor dem echten Schreiben exakt, welcher Text auf welche vorhandene Alexa-ID geschrieben würde.
185
+
186
+ ## Dry-Run
187
+
188
+ Neue Installationen starten standardmäßig mit **Dry-Run = EIN**.
189
+
190
+ Damit wird die Sortierung vollständig berechnet und protokolliert, aber Alexa wird nicht verändert. Erst wenn das Ergebnis plausibel ist, sollte Dry-Run in der Adapterkonfiguration deaktiviert werden.
191
+
192
+
193
+ ## Beta-Sicherheitsprüfung ab 0.1.0-beta.1
194
+
195
+ Vor echten Alexa-Schreibzugriffen prüft die Beta den installierten Alexa2/alexa-remote2-Pfad auf den bekannten `updateListItem`-Fehler. Das Ergebnis steht in `shoppingroute.0.info.writeCapability` und ausführlich in `shoppingroute.0.info.compatibility`.
196
+
197
+ Bei `source-ok` oder `live-ok` sind echte Sortier-Schreibzugriffe freigegeben. Bei `known-bug`, `live-failed` oder `unknown` werden sie blockiert; Dry-Run funktioniert weiterhin. Ist der Status `unknown`, kann mit mindestens einem aktiven Listeneintrag `shoppingroute.0.control.compatibilityTest` einmal auf `true` gesetzt werden. Der Test schreibt ausschließlich denselben sichtbaren `value` erneut und verändert den sichtbaren Artikelnamen nicht.
198
+
199
+ Eine Schritt-für-Schritt-Anleitung für Tester steht in [BETA_TESTING_DE.md](BETA_TESTING_DE.md).
200
+
201
+ ## Aktueller Alexa2-Hinweis
202
+
203
+ Während der Entwicklung im August 2026 wurde in einer verwendeten `alexa-remote2`-Version ein Fehler beim Aktualisieren von Listeneinträgen gefunden. In `updateListItem` war die Versions-Query als
204
+
205
+ `?version =${options.version}`
206
+
207
+ statt
208
+
209
+ `?version=${options.version}`
210
+
211
+ gebildet. In der Testinstallation musste dieser Fehler korrigiert werden, bevor `value`/`completed`-Updates von Amazon akzeptiert wurden.
212
+
213
+ **Für eine öffentliche Release-Version von shoppingroute ist ein upstream behobener Alexa2/alexa-remote2-Stand Voraussetzung.** Nutzer sollen später keine Dateien in `node_modules` manuell verändern müssen.
214
+
215
+ ## Entwicklungsinstallation
216
+
217
+ Das Repository ist zunächst für Tests über GitHub vorgesehen. Nach dem Push auf GitHub kann es in ioBroker im Expertenmodus über die benutzerdefinierte GitHub-/URL-Installation installiert werden.
218
+
219
+ Vor einem späteren offiziellen Release folgen mindestens:
220
+
221
+ - Test auf mehreren ioBroker-Systemen
222
+ - Prüfung der Admin-JSONConfig
223
+ - Kompatibilitätstest mit aktuellen Alexa2-Versionen
224
+ - npm-Veröffentlichung
225
+ - Antrag für das ioBroker-Latest-Repository
226
+
227
+ ## Lizenz
228
+
229
+ Closed Beta License 1.0 © 2026 RaviniZib – siehe LICENSE
230
+
231
+
232
+ ### Admin-Oberfläche ab 0.0.4
233
+
234
+ Fallback-Markt und Prioritätsmarkt werden als Pulldown aus den aktiven Märkten angeboten. Auch Standardmarkt im Artikelstamm und Markt im Laufweg sind Pulldowns. Dynamische Markt- und Produktgruppenlisten werden alphabetisch sortiert. Im Artikelstamm können die Spalten Artikel, Produktgruppe und Standardmarkt über den Spaltenkopf sortiert werden; innerhalb gleicher Gruppen bleibt die alphabetische Artikelreihenfolge erhalten.
235
+
236
+
237
+ ## API-/Traffic-Diagnose
238
+
239
+ ShoppingRoute arbeitet ereignisgesteuert auf dem lokalen ioBroker-Datenpunkt der Alexa-Liste und führt kein eigenes Cloud-Polling durch. Für die geschlossene Beta zählt der Adapter deshalb getrennt lokale Listenprüfungen, geplante Änderungen, echte Sortierläufe und tatsächliche Alexa-`value`-Schreibzugriffe. Die Tageswerte stehen unter `shoppingroute.0.info.*Today`, die Gesamtübersicht unter `shoppingroute.0.info.traffic`. Die Werte sind Vorgangszähler und keine Messung des übertragenen Byte-Volumens.
240
+
241
+ ## Geschlossenes Testerpaket
242
+
243
+ Für externe Betatester kann mit `npm run beta:package` ein separates Paket erzeugt werden. Das Entwicklungsprojekt selbst bleibt mit `private: true` gegen versehentliches Veröffentlichen geschützt; nur das erzeugte Tester-Tarball ist für eine bewusste Veröffentlichung mit dem npm `beta`-Tag freigegeben. Dieses enthält keine TypeScript-Quellen, keine Tests, keine GitHub-Workflow-Dateien und keine Source-Maps. Das zur Laufzeit benötigte JavaScript wird zusätzlich obfuskiert. Das private Entwicklungsrepository ist dafür nicht erforderlich.