Wie genau ist da die Vorgehensweise?
Node-RED muss in HA installiert sein mit einem zusätzlichen npm-package in der Konfiguration
Dann stehen die notwendigen Elemente zur Verfügung.
Beispiele finden sich hier:
Die Node-Red Variante habe ich auch in Betracht gezogen, weil man kein zusätzliches Gerät bräuchte. Habe die Idee aber wieder verworfen, weil die Listenelemente hier nur übertragen und auf der Alexa-Liste gelöscht werden. (oder habe ich das falsch verstanden?)
Da ich aber “Alexa, lösch “xy” von meiner Liste” und “Alexa, was steht auf meiner Einkaufsliste?” auch regelmäßig nutze, war das für mich keine echte Lösung.
Mit der ioBroker-Methode kann ich die Liste über Alexa (Sprachbefehl), HA (Dashboard) und Bring (Handy) auslesen und wenn irgendwo was geändert wird, wird das auf die anderen zwei Listen synchronisiert.
Funktioniert seit August ohne Probleme.
Erwähnen sollte ich vielleicht noch, dass ich die CPU des ioBroker-Handys mit der App Macrodroid wach halte, indem diese das Bildschirmtimeout aushebelt und alle 29 Minuten eine Touchfeld-Bedienung vortäuscht.
Viele interessante Ansätze - Danke!
Ich bin mir aber gerade nicht sicher, ob ich mich anfangs verständlich ausgedrückt hatte. Mir geht es darum, die Inhalte aus der ALEXA Liste ohne das lästige “Alexa öffne Bring” in Bring zu übertragen. Die HA Liste war für mich nur ein Zwischenschritt, aber nicht das Endergebnis.
Warum das? Bring sortiert mir die Liste entsprechend der Reihenfolge der Kategorien (Obst, Fleisch, Kühltheke etc.), sodass ich im Laden dann nicht immer hin und her springen muss, sondern die Liste einfach von Oben nach Unten “abarbeite”, genau in der Reihenfolge wie die Artikel auf meinem normalen Weg durch den Laden in den Regalen liegen.
Ich habe dazu früher die Alexa Liste sortiert, was aber zu viel Zeit gebraucht hatte.
Nachdem ich aber mehrere unabhängige Listen habe (Metzger, Hofladen, Discounter), scheint mir der Umweg über “Alexa öffne Bring” im Moment unvermeidbar, da ich die Artikel gerne bereits beim Aufsprechen den Listen zuordne “Setze Kartoffeln auf Hofladen”, “Setze Aufschnitt auf Metzger” etc.
Mal sehen, was sich hier noch entwickelt
Sorry ist jetzt vermutlich etwas spät … aber genau das ist der Pluspunkt bei Bring.
Bring sortiert die Artikel entsprechend einer zuvor von mir festgelegten Reihenfolge. Bei mir im D** steht z.B. Gemüse und Obst gleich am Eingang. Dann kommen wir zum Knabberzeug, Brot, Gewürze etc. Egal wann ich etwas auf die Liste spreche, wenn ich die App öffne, steht es in der benötigten Reihenfolge.
Nun, ich habe mit meiner Variante (wie schon erwähnt) zwei verschiedene Bring-Listen in Betrieb, die mit Alexa und HA synchronisiert werden.
Ich kann also sagen “Alexa, setz xy auf die Einkaufsliste” oder “Alexa, füg xy zu Apotheke hinzu”.
Dazu einfach mehrere Listen in Alexa und Bring anlegen und mit ioBroker synchronisieren (eigenes TypeScript für jede Liste mit den jeweiligen Infos). Lässt sich eigentlich unbegrenzt erweitern, allerdings wird die Synchronisierung vermutlich bei vielen Listen entsprechend langsamer/buggy, wenn man wie ich ein altes Handy für ioBroker nutzt, das den Betrieb nur gerade so schafft…
Die Synchronisierung hat mit HA eigentlich nichts zu tun und müsste auch ohne Bring-Integration in HA laufen, da ioBroker direkt auf Bring und Alexa zugreift, HA synchronisiert sich dann nur mit Bring.
Das kannst Du recht einfach auch ohne “Alexa öffne Bring” realisieren, mit einer gemeinsamen Alexa-Liste:
Nimm eine (die Standard Alexa-) Liste, sage “Kartoffeln Hofladen auf die Einkaufsliste”, lege mehrere Bring! Listen an und erweitere das ioBroker Skript, dass es Hofladen rauslöscht und Kartoffeln auf die Hofladen Liste schreibt. Alles was dann nicht Metzger oder Hofladen ist, kommt auf die Discounter Liste.
Hallo,
ich versuche ebenfalls gerade, die Alexa Einkaufsliste mit Node-RED in Homeassistant zu synchronisieren.
Ich habe leider noch keine Erfahrung mit NodeRed und bin noch neu in Homeassistant, habe aber nach diversen Beschreibungen schon erfolgreich hinbekommen, die Listen aus Alexa abzurufen in NodeRed bzw. die Einträge zu löschen usw.
Ich würde jetzt nur gerne die Einträge in die Homeassistant Einkaufsliste bekommen und scheitere gerade noch daran.
Magst Du evtl. deine Konfiguration in Node-Red und Homeassistant teilen?
Viele Grüße
Christian
Mein Flow in Nodered sieht so aus:
Das ist der Flow:
[{"id":"22069a87d0a07c07","type":"tab","label":"Shopping list","disabled":false,"info":"","env":[]},{"id":"e247897a0c907800","type":"inject","z":"22069a87d0a07c07","name":"Sync Alexa to HA","props":[{"p":"payload"}],"repeat":"600","crontab":"","once":true,"onceDelay":"0.1","topic":"","payload":"","payloadType":"date","x":150,"y":100,"wires":[["afd8a286bdd569a8"]]},{"id":"afd8a286bdd569a8","type":"alexa-remote-list","z":"22069a87d0a07c07","name":"Get Alexa Shopping List","account":"bec8974580ef17ab","config":{"option":"getListItems","value":{"list":{"type":"str","value":"YW16bjEuYWNjb3VudC5BSDdaNVg1SVhITTZLVDJTWElXSkRMSEFRNEFBLVNIT1BQSU5HX0lURU0="}}},"x":150,"y":220,"wires":[["c80359a643c91552","e8e0ac0952384ea4"]]},{"id":"c80359a643c91552","type":"function","z":"22069a87d0a07c07","name":"Formatieren","func":"let items = msg.payload.map(item => {\n return {\n itemName: item.value,\n quantity: 1, // Default quantity\n listUUID: \"ShoppingList\",\n alexaItemId: item.id // Add Alexa item ID for later use\n };\n});\nmsg.payload = items;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":390,"y":220,"wires":[["808b0ef85db604b3"]]},{"id":"808b0ef85db604b3","type":"split","z":"22069a87d0a07c07","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":570,"y":220,"wires":[["3d16a287119efadc","ead5084a5ded60b7"]]},{"id":"3d16a287119efadc","type":"debug","z":"22069a87d0a07c07","name":"Display List","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":770,"y":160,"wires":[]},{"id":"e8e0ac0952384ea4","type":"delay","z":"22069a87d0a07c07","name":"","pauseType":"delay","timeout":"20","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":130,"y":320,"wires":[["5015455e20885b4b"]]},{"id":"855ed602e8189bd9","type":"alexa-remote-list","z":"22069a87d0a07c07","name":"Remove Alexa Item","account":"bec8974580ef17ab","config":{"option":"removeItem","value":{"list":{"type":"str","value":"YW16bjEuYWNjb3VudC5BSDdaNVg1SVhITTZLVDJTWElXSkRMSEFRNEFBLVNIT1BQSU5HX0lURU0="},"item":{"type":"msg","value":"payload.alexaItemId"}}},"x":830,"y":400,"wires":[[]]},{"id":"ead5084a5ded60b7","type":"api-call-service","z":"22069a87d0a07c07","name":"","server":"8e36db2e.363a68","version":5,"debugenabled":false,"areaId":[],"deviceId":[],"entityId":[],"data":"{\"name\":\"{{payload.itemName}}\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"all","domain":"shopping_list","service":"add_item","x":810,"y":220,"wires":[[]]},{"id":"5015455e20885b4b","type":"function","z":"22069a87d0a07c07","name":"Prepare Items for Deletion","func":"if (Array.isArray(msg.payload)) {\n let itemsToDelete = msg.payload.map(item => {\n return {\n listUUID: \"ShoppingList\",\n alexaItemId: item.id\n };\n }).filter(item => item !== null);\n\n msg.payload = itemsToDelete;\n return msg;\n} else {\n node.error(\"msg.payload is not an array\");\n return null;\n}","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":390,"y":320,"wires":[["4920bf218fcf986f","d9c48eb306c41ee5"]]},{"id":"4920bf218fcf986f","type":"split","z":"22069a87d0a07c07","name":"Split Items","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":610,"y":320,"wires":[["855ed602e8189bd9","558068a1b68fdd4f"]]},{"id":"558068a1b68fdd4f","type":"debug","z":"22069a87d0a07c07","name":"split","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":590,"y":400,"wires":[]},{"id":"d9c48eb306c41ee5","type":"debug","z":"22069a87d0a07c07","name":"prepare","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":400,"y":400,"wires":[]},{"id":"bec8974580ef17ab","type":"alexa-remote-account","name":"","authMethod":"proxy","proxyOwnIp":"192.168.178.30","proxyPort":"3456","cookieFile":"/homeassistant/www/nodered/alexaauth.txt","refreshInterval":"3","alexaServiceHost":"layla.amazon.de","amazonPage":"amazon.de","acceptLanguage":"de-DE","userAgent":"","autoInit":"on"},{"id":"8e36db2e.363a68","type":"server","name":"Home Assistant","addon":true}]
by HarryP: Code-/Logzeilen formatiert (bitte immer in </> einbinden)
Das ist aber nur unidirektional & Du kannst keine Einträge per Sprachbefehl löschen oder korrigieren.
Da finde ich die skriptbasierte, bidirektionale Synchronisation eleganter.
Stimmt, ich brauche Alexa aber nur zum setzen von Sachen auf die Einkaufsliste, löschen und bearbeiten kann ich die ja in HA.
Danke, mein Ansatz war schon so ähnlich, aber ich habe noch keine Daten in Homeassistant geschrieben bekommen.
Da werde ich mir dann mal Deinen Flow näher anschauen, wo mein Fehler liegt.
Leider hat das Forum durch die Formatierung ein paar Fehler in deinem Flowcode eingebaut, welche ich noch nicht alle gefunden habe. Könntest Du bitte den Flow evtl. nochmal als Code formatiert hier einfügen?
Wie hast Du dann in Homeassistant das Einfügen der Daten in die To-Do-Liste umgesetzt?
Die Elemente werden durch Nodered in die Einkaufsliste geschrieben, in HA muss man gar nichts machen.
Ich kann leider als Neuling keine Dateien anhängen, vielleicht so:
{"id":"22069a87d0a07c07","type":"tab","label":"Shopping list","disabled":false,"info":"","env":[]},{"id":"e247897a0c907800","type":"inject","z":"22069a87d0a07c07","name":"Sync Alexa to HA","props":[{"p":"payload"}],"repeat":"600","crontab":"","once":true,"onceDelay":"0.1","topic":"","payload":"","payloadType":"date","x":150,"y":100,"wires":[["afd8a286bdd569a8"]]},{"id":"afd8a286bdd569a8","type":"alexa-remote-list","z":"22069a87d0a07c07","name":"Get Alexa Shopping List","account":"bec8974580ef17ab","config":{"option":"getListItems","value":{"list":{"type":"str","value":"YW16bjEuYWNjb3VudC5BSDdaNVg1SVhITTZLVDJTWElXSkRMSEFRNEFBLVNIT1BQSU5HX0lURU0="}}},"x":150,"y":220,"wires":[["c80359a643c91552","e8e0ac0952384ea4"]]},{"id":"c80359a643c91552","type":"function","z":"22069a87d0a07c07","name":"Formatieren","func":"let items = msg.payload.map(item => {\n return {\n itemName: item.value,\n quantity: 1, // Default quantity\n listUUID: \"ShoppingList\",\n alexaItemId: item.id // Add Alexa item ID for later use\n };\n});\nmsg.payload = items;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":390,"y":220,"wires":[["808b0ef85db604b3"]]},{"id":"808b0ef85db604b3","type":"split","z":"22069a87d0a07c07","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":570,"y":220,"wires":[["3d16a287119efadc","ead5084a5ded60b7"]]},{"id":"3d16a287119efadc","type":"debug","z":"22069a87d0a07c07","name":"Display List","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":770,"y":160,"wires":[]},{"id":"e8e0ac0952384ea4","type":"delay","z":"22069a87d0a07c07","name":"","pauseType":"delay","timeout":"20","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":130,"y":320,"wires":[["5015455e20885b4b"]]},{"id":"855ed602e8189bd9","type":"alexa-remote-list","z":"22069a87d0a07c07","name":"Remove Alexa Item","account":"bec8974580ef17ab","config":{"option":"removeItem","value":{"list":{"type":"str","value":"YW16bjEuYWNjb3VudC5BSDdaNVg1SVhITTZLVDJTWElXSkRMSEFRNEFBLVNIT1BQSU5HX0lURU0="},"item":{"type":"msg","value":"payload.alexaItemId"}}},"x":830,"y":400,"wires":[[]]},{"id":"ead5084a5ded60b7","type":"api-call-service","z":"22069a87d0a07c07","name":"","server":"8e36db2e.363a68","version":5,"debugenabled":false,"areaId":[],"deviceId":[],"entityId":[],"data":"{\"name\":\"{{payload.itemName}}\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"all","domain":"shopping_list","service":"add_item","x":810,"y":220,"wires":[[]]},{"id":"5015455e20885b4b","type":"function","z":"22069a87d0a07c07","name":"Prepare Items for Deletion","func":"if (Array.isArray(msg.payload)) {\n let itemsToDelete = msg.payload.map(item => {\n return {\n listUUID: \"ShoppingList\",\n alexaItemId: item.id\n };\n }).filter(item => item !== null);\n\n msg.payload = itemsToDelete;\n return msg;\n} else {\n node.error(\"msg.payload is not an array\");\n return null;\n}","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":390,"y":320,"wires":[["4920bf218fcf986f","d9c48eb306c41ee5"]]},{"id":"4920bf218fcf986f","type":"split","z":"22069a87d0a07c07","name":"Split Items","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":610,"y":320,"wires":[["855ed602e8189bd9","558068a1b68fdd4f"]]},{"id":"558068a1b68fdd4f","type":"debug","z":"22069a87d0a07c07","name":"split","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":590,"y":400,"wires":[]},{"id":"d9c48eb306c41ee5","type":"debug","z":"22069a87d0a07c07","name":"prepare","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":400,"y":400,"wires":[]},{"id":"bec8974580ef17ab","type":"alexa-remote-account","name":"","authMethod":"proxy","proxyOwnIp":"192.168.178.30","proxyPort":"3456","cookieFile":"/homeassistant/www/nodered/alexaauth.txt","refreshInterval":"3","alexaServiceHost":"layla.amazon.de","amazonPage":"amazon.de","acceptLanguage":"de-DE","userAgent":"","autoInit":"on"},{"id":"8e36db2e.363a68","type":"server","name":"Home Assistant","addon":true}]
by HarryP: Code-/Logzeilen formatiert (bitte immer in </> einbinden)
Super, vielen Dank, mit Deinem Flow zum Nachschlagen habe ich es jetzt bei mir auch zum Laufen bekommen.
Die Info, dass man in NodeRed direkt einen Befehl in HA ausführen kann, hat mir noch gefehlt. Hätte vorhin den Weg über eine Variable versucht, aber das ist natürlich so noch einfacher.
Hallo,
ich habe den Node-Red flow zum Laufen bekommen.
Wie kann ich denn meine Alexa-Todo Liste an meine Todo-Liste in HA übergeben?
Also die Ausgabe in HA nicht an die Standard-Shoppinglist…
Lieben Dank!
Das sollte im Prinzip genauso laufen. Nur dass du statt der Shopping-List die ToDos von Alexa abrufst. Ich kann das in meiner Node auswählen:
Getestet habe ich es aber nicht, da ich die ToDo-Liste bei Alexa nicht nutze.
Hi,
und dann landen sie in der Shoppingliste von HA…
ich möchte sie aber in andere Liste in HA importieren.
So dass ich später mehrere Liste aus Alexa in die entsprechenden Listen in HA importieren kann.