NEWS
Alexa Shopping List mit Bring synchronisieren
-
@dicken Ok. Das stimmt, in der Alexa-App ist es dann ja egal. Hauptsache, sie werden nicht immer wieder neu hinzugefügt. Ich werde das mal ausprobieren. Vielen Dank.
@Dicken Bei dem json muss vermutlich in Zeile 26 der API-Token von todoist hinterlegt werden, oder? Was muss sonst noch angepasst werden?
Kann man da nicht einbauen, dass der Eintrag auf der Alexa-Liste gelöscht wird, sobald er nach todoist übertragen wurde?
Edit:
OK, habe alles hinbekommen. Der API-Token muss in Zeile 27 hinter Bearer. In Zeile 20 muss noch die Projekt-ID eingetragen werden. -
Hallo zusammen,
ich habe mein Script nochmal aktualisiert. Es werden in Alexa nun automatisch alle Duplikate sofort wieder gelöscht. Außerdem wird nun erzwungen, dass Artikel mit einem Großbuchstaben beginnen.
Viel Spaß damit und gerne wieder testen :-)
Kleiner Nachtrag: wenn ich über Alexa Dinge hinzufüge und dann in Bring als erledigt markiere, dann werden diese bei mir in Alexa nicht mehr gelöscht. Das muss ich mir nochmal ansehen - könnte an den Zeitstempeln liegen.
Nachtrag 2: ging doch - mein Adapter war nur offline 😎
const bringBaseId = 'bring.0.0f0c420c-3298-4911-91f5-7ed0fbbfd36e'; const alexa2BaseId = 'alexa2.0.Lists.SHOPPING_LIST'; const bringListId = bringBaseId + '.content'; const bringListCompletedId = bringBaseId + '.recentContent'; const bringAddToList = bringBaseId + '.saveItem'; const bringCompleteItem = bringBaseId + '.moveToRecentContent'; const alexaAddToList = alexa2BaseId + '.#New'; const alexaListId = alexa2BaseId + '.json'; //switch off to silence: const printDebug = true; function debug(msg) { if (printDebug) { log(msg) } } const TodoItemStatus = { NeedsAction: 'needs_action', Completed: 'completed', }; /** * @typedef bringItem * @type {object} * @property {string} specification * @property {string} name * @property {string} status * @property {boolean} [found] - keep track if found or not. */ /** * @typedef alexaItem * @type {object} * @property {string} value * @property {string} id * @property {boolean} completed * @property {number} updatedDateTime * @property {boolean} [found] - keep track if found or not. */ /** * Compare alexaItem complete and bringItem status -> returns true if same status. * @param {Array<alexaItem>} alexaList * @param {Array<bringItem>} list * @returns {boolean} true if same status. */ function compareCompleted(alexaItem, bringItem) { if (alexaItem.completed && bringItem.status !== TodoItemStatus.Completed) { return false; } if (!alexaItem.completed && bringItem.status !== TodoItemStatus.NeedsAction) { return false; } return true; } function ListCleaner(Eintrag='') { const arr = Eintrag.split(' '); for (let i = 0; i < arr.length; i++) { arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1); } return arr.join(' '); } /** * sync lists * @param {Array<alexaItem>} alexaList * @param {Array<bringItem>} list * @param {number} timestampBring * @param {string} msource * @param {Array<bringItem>} recentList * @returns {Array<bringItem>} new bring List */ function syncLists(alexaList, list, timestampBring, msource, recentList) { const newBringList = []; var empty = true; for (const alexaItem of alexaList) { for (const bringItem of list) { empty = false; if (bringItem.name === alexaItem.value) { alexaItem.found = true; bringItem.found = true; //found item. Update completed state from 'newer' list: bringItem.status = TodoItemStatus.NeedsAction; if (alexaItem.updatedDateTime > timestampBring) { if (alexaItem.value !== bringItem.name || !compareCompleted(alexaItem, bringItem)) { if (msource === 'Alexa') { debug('Updating Bring item: ' + bringItem.name + ' from Alexa'); setState(bringCompleteItem, ListCleaner(bringItem.name)); } } } else { //keep bring: //update alexa: if (!compareCompleted(alexaItem, bringItem)) { if (msource === 'Bring') { bringItem.status = TodoItemStatus.Completed; debug('Update Alexa item: ' + alexaItem.value + ' to ' + (bringItem.status === TodoItemStatus.Completed ? 'done' : 'undone') + ' from Bring.'); setState(`${alexa2BaseId}.items.${alexaItem.id}.completed`, bringItem.status === TodoItemStatus.Completed); } } } } } for (const bringItemCompleted of recentList) { if (bringItemCompleted.name === alexaItem.value) { alexaItem.found = true; bringItemCompleted.found = true; //found item. Update completed state from 'newer' list: bringItemCompleted.status = TodoItemStatus.Completed; if (alexaItem.updatedDateTime > timestampBring) { if (alexaItem.value !== bringItemCompleted.name || !compareCompleted(alexaItem, bringItemCompleted)) { if (msource === 'Alexa') { debug('Adding Bring item: ' + bringItemCompleted.name + ' from Alexa'); setState(bringAddToList, ListCleaner(bringItemCompleted.name)); } } } else { //keep bring: //update alexa: if (!compareCompleted(alexaItem, bringItemCompleted)) { bringItemCompleted.status = TodoItemStatus.Completed; if (msource === 'Bring') { debug('Delete Alexa item: ' + alexaItem.value + ' from Bring.'); //setState(`${alexa2BaseId}.items.${alexaItem.id}.completed`, bringItemCompleted.status === TodoItemStatus.Completed); setState(`${alexa2BaseId}.items.${alexaItem.id}.#delete`, true); } } } } } if (!alexaItem.found) { //alexa item not found: if (alexaItem.completed) { debug('Delete ' + alexaItem.value + ' because done and not in Bring list.'); setState(`${alexa2BaseId}.items.${alexaItem.id}.#delete`, true); } else { if (msource === 'Alexa') { debug('Adding ' + alexaItem.value + ' to Bring list'); setState(bringAddToList, ListCleaner(alexaItem.value)); } } } if (empty === true) { if (alexaItem.updatedDateTime < timestampBring) { debug('Delete ' + alexaItem.value + ' from Alexa list because Bring list is all done.'); setState(`${alexa2BaseId}.items.${alexaItem.id}.#delete`, true); } } } for (const bringItem of list) { if (!bringItem.found) { if (bringItem.status === TodoItemStatus.Completed) { //debug('Remove from bring item: ' + bringItem.name + ' because done and not on alexa list'); //Not executed since I want to keep the recent items inside bring app } else { if (msource === 'Bring') { debug('Adding ' + bringItem.name + ' to Alexa list.'); setState(alexaAddToList, ListCleaner(bringItem.name)); } } } } return newBringList; } function doSync(source) { eliminateDuplicated(); const alexaList = JSON.parse(getState(alexaListId).val); const state = getState(bringListId); const bringList = JSON.parse(state.val); const state2 = getState(bringListCompletedId); const bringListCompleted = JSON.parse(state2.val); syncLists(alexaList, bringList, state.ts, source, bringListCompleted); } function eliminateDuplicated() { var myAlexaList = JSON.parse(getState(alexaListId).val); var arrayWithDuplicates = []; for(var alexaItem of myAlexaList) { var obj = {}; obj["value"] = ListCleaner(alexaItem.value); obj["id"] = alexaItem.id; arrayWithDuplicates.push(obj); } const lookup = arrayWithDuplicates.reduce((a, e) => { a[e.value] = ++a[e.value] || 0; return a; }, {}); const getKey = o => keys.map(k => o[k]).join('|'), keys = ['value'], myarray = arrayWithDuplicates.filter(e => lookup[e.value]), hash = Object.create(null), duplicates = myarray.filter(o => (k => (hash[k] = (hash[k] || 0) + 1) > 1) (getKey(o)) ); for(var item of duplicates) { debug('Delete Alexa item: ' + item.value + ' because duplicated.'); setState(`${alexa2BaseId}.items.${item.id}.#delete`, true); } } on({id: bringListId, change: 'any'}, e => { debug('Update triggered from Bring'); doSync('Bring'); }); on({id: alexaListId, change: 'any'}, e => { debug('Update triggered from Alexa'); doSync('Alexa'); }); doSync();@icastillo15 cooles Skript!
Das Skript synchronisiert bei mir einwandfrei zwischen Alexa und Bring. Aber immer nur eine zeitlang - danach schreiben weder Alexa2 noch Bring Instanz das Skript zu triggern.
Wenn ich die Instanzen oder den ioBroker neu starte, gehts wieder ne Weile, teilweise aber schon nach ner Stunde nicht mehr.
Im Log steht nichts, die Instanzen werden alle grün angezeigt, hat jemand eine Idee, wo ich nach der Ursache suchen muss? Hat sonst noch jemand ähnliche Probleme?
-
Ich habe immer wieder das Problem, dass die Eikaufsliste in dem Alexa2 Adapter nicht mehr vorhanden ist. dann laufen durch das script fehler auf.
z.B. jetzt aktuell, die Listen im Alexa2 sind alle weg. -
Bei mir sind seit kurzem auch alle Listen aus dem Alexa 2 Adapter weg...
Gibts noch jemanden bei dem dieser "Umweg" über das skript funktioniert oder ist das jetzt leider auch Geschichte...?
Schönen Gruß
Tom -
@Dicken Bei dem json muss vermutlich in Zeile 26 der API-Token von todoist hinterlegt werden, oder? Was muss sonst noch angepasst werden?
Kann man da nicht einbauen, dass der Eintrag auf der Alexa-Liste gelöscht wird, sobald er nach todoist übertragen wurde?
Edit:
OK, habe alles hinbekommen. Der API-Token muss in Zeile 27 hinter Bearer. In Zeile 20 muss noch die Projekt-ID eingetragen werden.Hallo @mriceg,
kannst du deine Anpassungen nochmal genauer beschreiben? Ich bekomme immer die Fehlermeldung "script.js.common.ToDoist.Einkaufsliste_via_Alexa: Error creating task:" und habe sicher einen Fehler bei der Eintragung der diversen Parameter für die Übertragung nach Todoist. Oder benötige ich noch einen Adapter?
Sorry für die vielen Fragen ;-)
Danke!Edit: Ich habe meinen Fehler gefunden - unsere Einkaufsliste ist eine geteilte Liste und ich habe nicht die project-id der Liste genommen, mit dessen Konto die erstellt wurde. Jetzt läuft das wunderbar.
-
Bei mir sind seit kurzem auch alle Listen aus dem Alexa 2 Adapter weg...
Gibts noch jemanden bei dem dieser "Umweg" über das skript funktioniert oder ist das jetzt leider auch Geschichte...?
Schönen Gruß
Tom -
@freakahhh bitte mal zeigen.
Ro75.
-
@freakahhh bitte mal zeigen.
Ro75.
@ro75 sagte in Alexa Shopping List mit Bring synchronisieren:
@freakahhh bitte mal zeigen.
Ro75.
Ich hab im Adapter die Listen Synchronisation an. Aber wie gesagt, es hat einwandfrei funktioniert und auf einmal leider nicht mehr...

Der Alexa Adapter mit leerer Liste:

Und hier natürlich der fehlerhafte Log:

-
@ro75 sagte in Alexa Shopping List mit Bring synchronisieren:
@freakahhh bitte mal zeigen.
Ro75.
Ich hab im Adapter die Listen Synchronisation an. Aber wie gesagt, es hat einwandfrei funktioniert und auf einmal leider nicht mehr...

Der Alexa Adapter mit leerer Liste:

Und hier natürlich der fehlerhafte Log:

@freakahhh also bei mir sind noch immer alle Listen da, ABER ich setze das Skript nicht ein. Eventuell gibt es da noch ein kleines Problem.
Mache mal folgenden Test:
- Deaktiviere das Skript
- Stoppe den Alexa2 Adapter
- Starte den Alexa2 Adapter
- Schaue nach ca. 60 Sekunden nach, ob die Datenpunkte wieder da sind
- Wenn ja, aktiviere das Skript
- Wenn die Datenpunkte wieder verschwinden = Problem im Skript
Ro75.
-
@freakahhh also bei mir sind noch immer alle Listen da, ABER ich setze das Skript nicht ein. Eventuell gibt es da noch ein kleines Problem.
Mache mal folgenden Test:
- Deaktiviere das Skript
- Stoppe den Alexa2 Adapter
- Starte den Alexa2 Adapter
- Schaue nach ca. 60 Sekunden nach, ob die Datenpunkte wieder da sind
- Wenn ja, aktiviere das Skript
- Wenn die Datenpunkte wieder verschwinden = Problem im Skript
Ro75.
@ro75 sagte in Alexa Shopping List mit Bring synchronisieren:
@freakahhh also bei mir sind noch immer alle Listen da, ABER ich setze das Skript nicht ein. Eventuell gibt es da noch ein kleines Problem.
Mache mal folgenden Test:
- Deaktiviere das Skript
- Stoppe den Alexa2 Adapter
- Starte den Alexa2 Adapter
- Schaue nach ca. 60 Sekunden nach, ob die Datenpunkte wieder da sind
- Wenn ja, aktiviere das Skript
- Wenn die Datenpunkte wieder verschwinden = Problem im Skript
Ro75.
Danke schonmal für Deine Unterstützung!
Habe alles, wie beschrieben gemacht, aber nach Punkt 4) und den 60 Sekunden Wartezeit tauchen die Datenpunkte leider nicht auf... :(
-
@ro75 sagte in Alexa Shopping List mit Bring synchronisieren:
@freakahhh also bei mir sind noch immer alle Listen da, ABER ich setze das Skript nicht ein. Eventuell gibt es da noch ein kleines Problem.
Mache mal folgenden Test:
- Deaktiviere das Skript
- Stoppe den Alexa2 Adapter
- Starte den Alexa2 Adapter
- Schaue nach ca. 60 Sekunden nach, ob die Datenpunkte wieder da sind
- Wenn ja, aktiviere das Skript
- Wenn die Datenpunkte wieder verschwinden = Problem im Skript
Ro75.
Danke schonmal für Deine Unterstützung!
Habe alles, wie beschrieben gemacht, aber nach Punkt 4) und den 60 Sekunden Wartezeit tauchen die Datenpunkte leider nicht auf... :(
@freakahhh wirft denn der Alexa2 Adapter Fehler? Welche Version ist installiert? Wie sieht dein System aus?
iob diagLangfassung in </> posten.
Ro75.
-
@freakahhh wirft denn der Alexa2 Adapter Fehler? Welche Version ist installiert? Wie sieht dein System aus?
iob diagLangfassung in </> posten.
Ro75.
@ro75 sagte in Alexa Shopping List mit Bring synchronisieren:
@freakahhh wirft denn der Alexa2 Adapter Fehler? Welche Version ist installiert? Wie sieht dein System aus?
iob diagLangfassung in </> posten.
Ro75.
Ok, muss schauen, wie das funktioniert, da Iobroker auf meiner Synology im Docker läuft...
Also nach dem Neustart des Adapters kommen keine Fehlermeldungen. zumindest nicht im Log.
admin.0 2024-08-14 17:27:56.341 info <== Disconnect system.user.admin from ::ffff:192.168.1.4 admin.0 2024-08-14 17:27:52.977 info ==> Connected system.user.admin from ::ffff:192.168.1.4 admin.0 2024-08-14 17:27:48.019 info <== Disconnect system.user.admin from ::ffff:192.168.1.4 javascript admin.0 2024-08-14 17:27:46.853 info ==> Connected system.user.admin from ::ffff:192.168.1.4 alexa2.0 2024-08-14 17:24:22.220 info Initialization Done ... alexa2.0 2024-08-14 17:24:15.360 info Alexa-Push-Connection (macDms = true) established. Disable Polling alexa2.0 2024-08-14 17:24:14.051 info Subscribing to states... alexa2.0 2024-08-14 17:23:49.347 info Initialize all Device states ... alexa2.0 2024-08-14 17:23:46.447 info Starting Alexa2 adapter ... it can take several minutes to initialize all data. Please be patient! A done message is logged. alexa2.0 2024-08-14 17:23:46.330 info starting. Version 3.26.5 in /opt/iobroker/node_modules/iobroker.alexa2, node: v20.16.0, js-controller: 6.0.9 host.iobroker 2024-08-14 17:23:43.368 info instance system.adapter.alexa2.0 in version "3.26.5" started with pid 4195 host.iobroker 2024-08-14 17:23:42.664 info "system.adapter.alexa2.0" enabled admin.0 2024-08-14 17:23:40.770 info <== Disconnect system.user.admin from ::ffff:192.168.1.4 javascript admin.0 2024-08-14 17:23:36.791 info ==> Connected system.user.admin from ::ffff:192.168.1.4 host.iobroker 2024-08-14 17:23:13.953 info instance system.adapter.alexa2.0 terminated with code 11 (ADAPTER_REQUESTED_TERMINATION) alexa2.0 2024-08-14 17:23:13.836 info terminating host.iobroker 2024-08-14 17:23:13.404 info stopInstance system.adapter.alexa2.0 send kill signal alexa2.0 2024-08-14 17:23:13.334 info Terminated (ADAPTER_REQUESTED_TERMINATION): Without reason alexa2.0 2024-08-14 17:23:13.332 info terminating alexa2.0 2024-08-14 17:23:13.328 info Got terminate signal TERMINATE_YOURSELF host.iobroker 2024-08-14 17:23:13.313 info stopInstance system.adapter.alexa2.0 (force=false, process=true) host.iobroker 2024-08-14 17:23:13.311 info "system.adapter.alexa2.0" disabled admin.0 2024-08-14 17:23:03.589 info <== Disconnect system.user.admin from ::ffff:192.168.1.4 javascript javascript.0 2024-08-14 17:22:56.078 info Stopping script script.js.Eigene_Scripte.Alexa_Bring_Sync admin.0 2024-08-14 17:22:53.312 info ==> Connected system.user.admin from ::ffff:192.168.1.4 -
@ro75 sagte in Alexa Shopping List mit Bring synchronisieren:
@freakahhh wirft denn der Alexa2 Adapter Fehler? Welche Version ist installiert? Wie sieht dein System aus?
iob diagLangfassung in </> posten.
Ro75.
Ok, muss schauen, wie das funktioniert, da Iobroker auf meiner Synology im Docker läuft...
Also nach dem Neustart des Adapters kommen keine Fehlermeldungen. zumindest nicht im Log.
admin.0 2024-08-14 17:27:56.341 info <== Disconnect system.user.admin from ::ffff:192.168.1.4 admin.0 2024-08-14 17:27:52.977 info ==> Connected system.user.admin from ::ffff:192.168.1.4 admin.0 2024-08-14 17:27:48.019 info <== Disconnect system.user.admin from ::ffff:192.168.1.4 javascript admin.0 2024-08-14 17:27:46.853 info ==> Connected system.user.admin from ::ffff:192.168.1.4 alexa2.0 2024-08-14 17:24:22.220 info Initialization Done ... alexa2.0 2024-08-14 17:24:15.360 info Alexa-Push-Connection (macDms = true) established. Disable Polling alexa2.0 2024-08-14 17:24:14.051 info Subscribing to states... alexa2.0 2024-08-14 17:23:49.347 info Initialize all Device states ... alexa2.0 2024-08-14 17:23:46.447 info Starting Alexa2 adapter ... it can take several minutes to initialize all data. Please be patient! A done message is logged. alexa2.0 2024-08-14 17:23:46.330 info starting. Version 3.26.5 in /opt/iobroker/node_modules/iobroker.alexa2, node: v20.16.0, js-controller: 6.0.9 host.iobroker 2024-08-14 17:23:43.368 info instance system.adapter.alexa2.0 in version "3.26.5" started with pid 4195 host.iobroker 2024-08-14 17:23:42.664 info "system.adapter.alexa2.0" enabled admin.0 2024-08-14 17:23:40.770 info <== Disconnect system.user.admin from ::ffff:192.168.1.4 javascript admin.0 2024-08-14 17:23:36.791 info ==> Connected system.user.admin from ::ffff:192.168.1.4 host.iobroker 2024-08-14 17:23:13.953 info instance system.adapter.alexa2.0 terminated with code 11 (ADAPTER_REQUESTED_TERMINATION) alexa2.0 2024-08-14 17:23:13.836 info terminating host.iobroker 2024-08-14 17:23:13.404 info stopInstance system.adapter.alexa2.0 send kill signal alexa2.0 2024-08-14 17:23:13.334 info Terminated (ADAPTER_REQUESTED_TERMINATION): Without reason alexa2.0 2024-08-14 17:23:13.332 info terminating alexa2.0 2024-08-14 17:23:13.328 info Got terminate signal TERMINATE_YOURSELF host.iobroker 2024-08-14 17:23:13.313 info stopInstance system.adapter.alexa2.0 (force=false, process=true) host.iobroker 2024-08-14 17:23:13.311 info "system.adapter.alexa2.0" disabled admin.0 2024-08-14 17:23:03.589 info <== Disconnect system.user.admin from ::ffff:192.168.1.4 javascript javascript.0 2024-08-14 17:22:56.078 info Stopping script script.js.Eigene_Scripte.Alexa_Bring_Sync admin.0 2024-08-14 17:22:53.312 info ==> Connected system.user.admin from ::ffff:192.168.1.4@freakahhh hast du in der Alexa-APP dort in der Einkaufsliste Einträge drin? Oder leer? Wenn leer, dann wirf mal was auf die Einkaufsliste. Danach nochmal die Punkte 1 bis ...
Hattest du ind Bring was gelöscht?
Ro75.
-
@freakahhh hast du in der Alexa-APP dort in der Einkaufsliste Einträge drin? Oder leer? Wenn leer, dann wirf mal was auf die Einkaufsliste. Danach nochmal die Punkte 1 bis ...
Hattest du ind Bring was gelöscht?
Ro75.
@ro75 Nene, die Liste in der Alexa App ist ziemlich voll. Bin auch nur drauf gekommen, dass da was nicht stimmt, weil die Chefin gemault hat, dass keine Sachen in der Bring Liste stehen... Sie hat wild in Bring gelöscht und dann dort manuell hinzugefügt...
-
@ro75 Nene, die Liste in der Alexa App ist ziemlich voll. Bin auch nur drauf gekommen, dass da was nicht stimmt, weil die Chefin gemault hat, dass keine Sachen in der Bring Liste stehen... Sie hat wild in Bring gelöscht und dann dort manuell hinzugefügt...
@freakahhh

aktiviert?Ro75.
-
@ro75 Ja, das ist an.
So sehen die Einstellungen aus. Habe auch nichts verändert und damit hat's super funktioniert.
Hab ja fast das Gefühl, dass Amazon so nach und nach die Funktion bei den Usern komplett abschaltet...


Möglicherweise wurdest du auch geblockt. Lasse den Adapter doch mal 24 Stunden aus und schaue dann wieder nach. Also wenn es Probleme gäbe, wäre hier im Forum viel mehr los und auch auf GIT - dort ist nix aufgeführt.
Ro75.
