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.
- package/BETA_LICENSE.md +11 -0
- package/BETA_LICENSE_DE.md +17 -0
- package/BETA_TESTING.md +31 -0
- package/BETA_TESTING_DE.md +53 -0
- package/LICENSE +17 -0
- package/README.md +86 -0
- package/README_DE.md +243 -0
- package/admin/jsonConfig.json +392 -0
- package/admin/shoppingroute.png +0 -0
- package/build/lib/compatibility.js +1 -0
- package/build/lib/metrics.js +1 -0
- package/build/lib/model.js +1 -0
- package/build/lib/parser.js +1 -0
- package/build/lib/sorter.js +1 -0
- package/build/main.js +1 -0
- package/io-package.json +767 -0
- package/package.json +43 -0
package/BETA_LICENSE.md
ADDED
|
@@ -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.
|
package/BETA_TESTING.md
ADDED
|
@@ -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.
|