NEWS
Script "DeleteAlexaActivities"
-
Hallo zusammen,
ich habe hier schon zwei Scripte veröffentlicht, mit denen Ihr Euch in den Alexa-Account einloggen könnt (http://forum.iobroker.net/viewtopic.php?f=37&t=9237) bzw. das Licht ein/ausschalten ohne den Raumnamen angeben zu müssen (http://forum.iobroker.net/viewtopic.php?f=37&t=9115).
Das Script in diesem Post löscht jeden Tag alle aufgenommenen Sprachbefehle aus dem Account. Die Idee zu diesem Script kam mir, als ich merkte, dass die Abfrage der History (auf dem das Licht-Script basiert), mit der Zeit langsamer wurde. Wahrscheinlich braucht hier die Abfage des letzten Sprachbefehls um so länger, je mehr Sprachbefehle in der History gespeichert sind. Jetzt, wo ich sie jeden Tag lösche, läuft alles wieder so schnell wie am Anfang. Nach meinen Tests geht es hier nicht um viel Zeitverzug (ca. 1/4 Sekunde), aber wenn man Licht schalten möchte, ist das schon merklich.
Zudem speichert Amazon für jeden Sprachbefehl eine Audio-Datei ab, was man gesagt hat. Durch das Löschen sollte, wenn man der Anzeige auf der Webseite glauben schenkt, auch diese Audio-Datei gelöscht werden. Es gibt noch weitere Metadaten, die für jeden Sprachbefehl gespeichert werden. Das Löschen dieser Daten kann vielleicht für den ein oder anderen interessant sein.
//------------------------------------------------------------------------------ // DeleteAlexaActivities //------------------------------------------------------------------------------ // Dieses Script löscht jeden Tag 4 Uhr Nachts die gesamte History der // Sprachbefehle, die man Alexa gegeben hat. // // Skript arbeitet unabhängig vom Cloud Adapter. // // Version: v0.1 // Feedback: http://forum.iobroker.net/viewtopic.php?f=37&t=9770 //------------------------------------------------------------------------------ // Changelog: // v0.1: initialer Release //------------------------------------------------------------------------------ // Einrichtung: // 1\. Starte AlexaLogOn-Script, um LogOn-Cookie und csrf zu erhalten. // // http://forum.iobroker.net/viewtopic.php?f=37&t=9237 // var cookie = getState('productive.alexalogon.cookie').val; cookie = cookie.replace(/\\/g, ""); var csrf = getState('productive.alexalogon.csrf').val; csrf = csrf.replace(/\\/g, ""); // 2\. Bisherige Sprachbefehle pro Gerät zurücksetzen // // ACHTUNG: Bevor Ihr das Script täglich einsetzt, solltet Ihr ersteinmal die bisher angesammelten Sprachbefehle manuell löschen. // Dies ist nur vor dem ersten Start notwendig, wenn Ihr Alexa schon lange und ausgiebig im Einsatz habt. // Dann haben sich tausende Sprachbefehle angesammelt. Für eine solche Ansammlung braucht das Script sehr lange. // Es ist dann sinnvoller einmalig manuell diese große Menge an Befehlen wie folgt zu löschen (leider habe ich bisher // keinen Weg gefunden, dies per Script aufzurufen): // // Hier der Link zu Anleitung: https://www.amazon.de/gp/help/customer/display.html?nodeId=201602040 // // So löschen Sie all Ihre Interaktionen (NICHT auf der Webseite von Alexa, sondern auf www.amazon.de unter "Mein Konto"): // 1\. Rufen Sie Meine Inhalte und Geräte auf und wechseln Sie auf die Registerkarte Meine Geräte. // 2\. Wählen Sie aus der Liste an Geräten, die auf Ihr Amazon-Konto angemeldet sind, Ihr Alexa-Gerät aus. // 3\. Wählen Sie Sprachaufnahmen verwalten aus. // 4\. Klicken Sie auf Löschen. // // Das solltet Ihr für jedes Gerät machen. Es kann durchaus >30 Minuten pro Gerät dauern. // 3\. Logging konfigurieren (optional) // // true schreibt in den Log, was das Script macht. var logOn = false; // Ende der Einrichtung. // Nachfolgend der eigentliche Source Code des Scripts. //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ // Global Variables var request = require('request'); var cronStr = "0 4 * * *"; // Cron Schedule schedule(cronStr, main); // Sofortstart setTimeout(main, 1000); function main() { var options = { url : "https://layla.amazon.de/api/activities?startTime=&size=50&offset=1", method : "GET", headers : { 'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36', 'Content-Type': 'text/plain', 'Accept-Language': 'de,en', 'DNT' : '1', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests' : '1', 'Referer' : 'https://layla.amazon.de/spa/index.html/', 'Cookie' : cookie } }; request.get(options, function(err, res, body){ var activities = JSON.parse(body).activities; for (var i = 0; i < activities.length; i++ ) { if (logOn) log("Activity ID: " + activities[i].id); deleteActivity(activities[i].id); } if (activities.length < 50) { log("Activities Deleted."); return; } else { main(); } }); } function deleteActivity(activityID) { var options = { url : "https://layla.amazon.de/api/activities/" + encodeURIComponent(activityID), method : "DELETE", headers : { 'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36', 'Connection': 'keep-alive', 'Referer' : 'https://alexa.amazon.de/spa/index.html?', 'Cookie' : cookie, 'csrf' : csrf, 'X-Requested-With' : 'XMLHttpRequest', 'Accept' : 'application/json, text/javascript, */*; q=0.01', 'Accept-Encoding' : 'gzip, deflate, br', 'Accept-Language' : 'en-US,en;q=0.9', 'Origin' : 'https://alexa.amazon.de', 'Host' : 'alexa.amazon.de' } }; request.delete(options, function(err, res, body){ if (logOn) log("Status Code: " + JSON.stringify(res.statusCode)); }); }
Ihr benötigt natürlich das AlexaLogOn-Script, das ich Eingangs schon erwähnt hatte.
~~[b]~~Achtung: Bevor Ihr das Script täglich einsetzt, solltet Ihr ersteinmal die bisher angesammelten Sprachbefehle manuell löschen. [/b]
Dies ist nur vor dem ersten Start notwendig, wenn Ihr Alexa schon lange und ausgiebig im Einsatz habt. Dann haben sich tausende Sprachbefehle angesammelt. Für eine solche Ansammlung braucht das Script sehr lange. Es ist dann sinnvoller einmalig manuell diese große Menge an Befehlen wie folgt zu löschen (leider habe ich bisher keinen Weg gefunden, dies per Script aufzurufen):
Hier der Link zu Anleitung: https://www.amazon.de/gp/help/customer/ ... =201602040
So löschen Sie all Ihre Interaktionen (NICHT auf der Webseite von Alexa, sondern auf http://www.amazon.de unter "Mein Konto"):
1. Rufen Sie Meine Inhalte und Geräte auf und wechseln Sie auf die Registerkarte Meine Geräte.
2. Wählen Sie aus der Liste an Geräten, die auf Ihr Amazon-Konto angemeldet sind, Ihr Alexa-Gerät aus.
3. Wählen Sie Sprachaufnahmen verwalten aus.
4. Klicken Sie auf Löschen.
Das solltet Ihr für jedes Gerät machen. Es kann durchaus >30 Minuten dauern.
Nachdem das erledigt ist, könnt Ihr das Script starten. Es läuft dann jede Nacht um 4 Uhr. -
Hallo,
danke für das Script.
Ich bekomme eine Endlosloop, die ich nur durch Stoppen des JavaScript Adapter beenden konnte.
Das Cookie konnte ich wohl erfolgreich erzeugen.
Auszug des Logs ca. 40-60 Zeilen
javascript.0 2017-12-17 06:02:27.781 info script.js.common.Alexa: Activity ID: A3IYJUW95Q5RBG#1490293153604 javascript.0 2017-12-17 06:02:27.780 info script.js.common.Alexa: Activity ID: A3IYJUW95Q5RBG#1494346742254#AB72C64C86AW2#90F00718646206ER javascript.0 2017-12-17 06:02:27.780 info script.js.common.Alexa: Activity ID: A3IYJUW95Q5RBG#1495904820622#AB72C64C86AW2#90F00718646206ER
gefolgt von ca. 40-60 Zeilen
javascript.0 2017-12-17 06:02:28.433 info script.js.common.Alexa: Status Code: 404 javascript.0 2017-12-17 06:02:28.431 info script.js.common.Alexa: Status Code: 404 javascript.0 2017-12-17 06:02:28.430 info script.js.common.Alexa: Status Code: 404 javascript.0 2017-12-17 06:02:28.428 info script.js.common.Alexa: Status Code: 404 javascript.0 2017-12-17 06:02:28.427 info script.js.common.Alexa: Status Code: 200
-
Hallo,
danke für das Script.
Ich bekomme eine Endlosloop, die ich nur durch Stoppen des JavaScript Adapter beenden konnte.
Das Cookie konnte ich wohl erfolgreich erzeugen.
Auszug des Logs ca. 40-60 Zeilen
javascript.0 2017-12-17 06:02:27.781 info script.js.common.Alexa: Activity ID: A3IYJUW95Q5RBG#1490293153604 javascript.0 2017-12-17 06:02:27.780 info script.js.common.Alexa: Activity ID: A3IYJUW95Q5RBG#1494346742254#AB72C64C86AW2#90F00718646206ER javascript.0 2017-12-17 06:02:27.780 info script.js.common.Alexa: Activity ID: A3IYJUW95Q5RBG#1495904820622#AB72C64C86AW2#90F00718646206ER
gefolgt von ca. 40-60 Zeilen
javascript.0 2017-12-17 06:02:28.433 info script.js.common.Alexa: Status Code: 404 javascript.0 2017-12-17 06:02:28.431 info script.js.common.Alexa: Status Code: 404 javascript.0 2017-12-17 06:02:28.430 info script.js.common.Alexa: Status Code: 404 javascript.0 2017-12-17 06:02:28.428 info script.js.common.Alexa: Status Code: 404 javascript.0 2017-12-17 06:02:28.427 info script.js.common.Alexa: Status Code: 200 ```` `
Danke für das Feedback!
Das ist keine Endlosschleife. Es dauert beim ersten Mal durchaus 10-20 Minuten, alle bis dahin aufgenommenen Sprachbefehle zu löschen. Natürlich kommt es auch darauf an, wie lange Alexa schon im Einsatz ist, und wieviel sie benutzt wurde. Die Ausgabe ist das erwartete Resultat, wenn Logging angeschaltet ist.
-
Ok. Dann lasse ich es mal 30 Minuten laufen.
-
Hallo,
scheint zu funktionieren. Ich habe jetzt nur noch einen Eintrag übrig, der aber in der Alexa App eine Fehlermeldung erzeugt, wenn ich draufklicke. Damit kann ich leben.
Danke!
-
Hallo,
scheint zu funktionieren. Ich habe jetzt nur noch einen Eintrag übrig, der aber in der Alexa App eine Fehlermeldung erzeugt, wenn ich draufklicke. Damit kann ich leben.
Danke! `
Super, freut mich!
Ja, dass ist mir auch schon aufgefallen, dass da die API für die Activities Einträge zurückliefert, die es dann doch nicht gibt. Das ist aber ein Fehler bei Amazon, kann ich wenig dran ändern.
-
Da wird doch einer zum neuen ScriptGott
Sehr geil!!!
-
Hallo,
tolles Skript, genial.
Habe einen Fehler. Wenn logOn eingeschaltet ist, wird in der drittletzten Zeile das zu löschende Element ausgegeben. Angemeckert wird "statusCode", weil vorher nicht definiert
javascript.2 TypeError: Cannot read property 'statusCode' of undefined at Request._callback (script.js.common.Alexa.ALEXA_deleteActivities:794:60) at self.callback (/Users/pix/Documents/iobroker/node_modules/request/request.js:188:22) at emitOne (events.js:96:13) at Request.emit
request.delete(options, function(err, res, body){ //if (logOn) log("Status Code: " + JSON.stringify(res.statusCode)); });
Wenn auskommentiert, dann läufts.
Gruß
Pix
-
Hallo zusammen,
ich habe das Script jetzt 3 Stunden laufen lassen und es hat so um die 100 MB Log erzeugt.
Ist das so richtig? Ich habe es abgebrochen, da mir das doch etwas lang vorgekommen ist.
Dirk
-
Ja, bei mir erzeugt es auch sehr viele Logzeilen. Und wenn es länger als eine Stune läuft, dann wird die main-Funktion durch den schedule neu gestartet (gerade um 4nach neun wieder passiert). Ein clearSchedule wär vielleicht noch gut.
Gruß
Pix
EDIT: :oops: siehe http://forum.iobroker.net/viewtopic.php … 70#p104543
-
Ich habe jetzt mal das löschen über die amzon-Seite gemacht.
Hier der Link zu Anleitung: https://www.amazon.de/gp/help/customer/ … =201602040
So löschen Sie all Ihre Interaktionen:
1. Rufen Sie Meine Inhalte und Geräte auf und wechseln Sie auf die Registerkarte Meine Geräte.
2. Wählen Sie aus der Liste an Geräten, die auf Ihr Amazon-Konto angemeldet sind, Ihr Alexa-Gerät aus.
3. Wählen Sie Sprachaufnahmen verwalten aus.
4. Klicken Sie auf Löschen.
Das für jedes Gerät dann hat das Script nicht so viele Einträge zu bearbeiten. Das löschen über die Amazon-Seite kann aber auch etwas dauern (bei knapp 30 Minuten).
Gruß
Dirk
-
Ich habe jetzt mal das löschen über die amzon-Seite gemacht.
Hier der Link zu Anleitung: https://www.amazon.de/gp/help/customer/ … =201602040
So löschen Sie all Ihre Interaktionen:
1. Rufen Sie Meine Inhalte und Geräte auf und wechseln Sie auf die Registerkarte Meine Geräte.
2. Wählen Sie aus der Liste an Geräten, die auf Ihr Amazon-Konto angemeldet sind, Ihr Alexa-Gerät aus.
3. Wählen Sie Sprachaufnahmen verwalten aus.
4. Klicken Sie auf Löschen.
Das für jedes Gerät dann hat das Script nicht so viele Einträge zu bearbeiten. Das löschen über die Amazon-Seite kann aber auch etwas dauern (bei knapp 30 Minuten).
Gruß
Dirk `
Das ist natürlich besser. Da müssten wesentlich weniger API-Calls gemacht werden.
Danke für den Hinweis. Kommt in der nächsten Version.
-
@pix:Ja, bei mir erzeugt es auch sehr viele Logzeilen. Und wenn es länger als eine Stune läuft, dann wird die main-Funktion durch den schedule neu gestartet (gerade um 4nach neun wieder passiert). Ein clearSchedule wär vielleicht noch gut.
Gruß
Pix `
Das ist merkwürdig, bei mir läuft das Script seit gut einer Woche und startet ausnahmslos nur 4 Uhr in der Nacht. Grad noch mal im Log gecheckt. Bin mir nicht sicher, warum das bei Dir anders ist.
-
@pix:Hallo,
tolles Skript, genial.
Habe einen Fehler. Wenn logOn eingeschaltet ist, wird in der drittletzten Zeile das zu löschende Element ausgegeben. Angemeckert wird "statusCode", weil vorher nicht definiert
javascript.2 TypeError: Cannot read property 'statusCode' of undefined at Request._callback (script.js.common.Alexa.ALEXA_deleteActivities:794:60) at self.callback (/Users/pix/Documents/iobroker/node_modules/request/request.js:188:22) at emitOne (events.js:96:13) at Request.emit
request.delete(options, function(err, res, body){ //if (logOn) log("Status Code: " + JSON.stringify(res.statusCode)); });
Wenn auskommentiert, dann läufts.
Gruß
Pix `
Ok, den Fehler hab ich bei mir nicht, da der https-request immer ein response code hat. Bau ich noch eine Abrage ein.
-
@pix:Ja, bei mir erzeugt es auch sehr viele Logzeilen. Und wenn es länger als eine Stune läuft, dann wird die main-Funktion durch den schedule neu gestartet (gerade um 4nach neun wieder passiert). Ein clearSchedule wär vielleicht noch gut.
Gruß
Pix `
Das ist merkwürdig, bei mir läuft das Script seit gut einer Woche und startet ausnahmslos nur 4 Uhr in der Nacht. Grad noch mal im Log gecheckt. Bin mir nicht sicher, warum das bei Dir anders ist. `
ist auch richtig so, hatte die Instanz neu gestartet und den cron-code falsch gelesen (statt 4 Uhr, jede Stunde um 4 nach). Mein Fehler.:oops: Pix
-
Ich habe jetzt mal das löschen über die amzon-Seite gemacht.
Hier der Link zu Anleitung: https://www.amazon.de/gp/help/customer/ … =201602040
So löschen Sie all Ihre Interaktionen:
1. Rufen Sie Meine Inhalte und Geräte auf und wechseln Sie auf die Registerkarte Meine Geräte.
2. Wählen Sie aus der Liste an Geräten, die auf Ihr Amazon-Konto angemeldet sind, Ihr Alexa-Gerät aus.
3. Wählen Sie Sprachaufnahmen verwalten aus.
4. Klicken Sie auf Löschen.
Das für jedes Gerät dann hat das Script nicht so viele Einträge zu bearbeiten. Das löschen über die Amazon-Seite kann aber auch etwas dauern (bei knapp 30 Minuten).
Gruß
Dirk `
Ich habe mir das genauer angeschaut. Leider kann ich auf diese Seite mit dem LogOn-Cookie und csrf nicht zugreifen.
Es sieht für mich so aus, als ob Amazon einige Account-Interne-Seiten nochmal zusätzlich sichert.
Bei manchen (unkritischen) Account-Seiten bekomme ich wie erwartet die Ergebnisse, die ich auch im Browser bekomme.
Während andere Seiten (wie diese), einfach einen Redirect zum LogOn zurückgeben.
Parameter sind identlisch zum Browser. Vielleicht fehlt auch nur irgendein API-Call davor, ich konnte aber leider keinen finden.
Insofern werde ich die Beschreibung abändern, dass User zuerst den von Dir gefundenen Weg manuell durchführen, um die große Menge an angesammelten Kommandos zu löschen.
Die tägliche Löschung kann danach über das Script passieren, dafür ist es allemal schnell genug.
-
` > Ich habe mir das genauer angeschaut. Leider kann ich auf diese Seite mit dem LogOn-Cookie und csrf nicht zugreifen.
Es sieht für mich so aus, als ob Amazon einige Account-Interne-Seiten nochmal zusätzlich sichert.
Bei manchen (unkritischen) Account-Seiten bekomme ich wie erwartet die Ergebnisse, die ich auch im Browser bekomme.
Während andere Seiten (wie diese), einfach einen Redirect zum LogOn zurückgeben.
Parameter sind identlisch zum Browser. Vielleicht fehlt auch nur irgendein API-Call davor, ich konnte aber leider keinen finden.
Insofern werde ich die Beschreibung abändern, dass User zuerst den von Dir gefundenen Weg manuell durchführen, um die große Menge an angesammelten Kommandos zu löschen.
Die tägliche Löschung kann danach über das Script passieren, dafür ist es allemal schnell genug. `
Das in die Beschreibung zu bringen finde ich eine super Idee - muss ja auch nur ein mal gemacht werden.
Ggf. könntes Du dann noch ergänzen, dass das beschriebene Vorgehen:
__So löschen Sie all Ihre Interaktionen:
1. Rufen Sie Meine Inhalte und Geräte auf und wechseln Sie auf die Registerkarte Meine Geräte.
2. Wählen Sie aus der Liste an Geräten, die auf Ihr Amazon-Konto angemeldet sind, Ihr Alexa-Gerät aus.
3. Wählen Sie Sprachaufnahmen verwalten aus.
4. Klicken Sie auf Löschen.__
NICHT auf der Webseite von Alexa https://alexa.amazon.de zu finden ist sondern auf
https://www.amazon.de unter "Mein Konto".
Da habe ich auch erst auf der "falschen" Webseite gesucht.
Gruß
Dirk
-
` > NICHT auf der Webseite von Alexa https://alexa.amazon.de zu finden ist sondern auf
https://www.amazon.de unter "Mein Konto".
Stimmt, das kann wirklich verwirrend sein. Habe ich hinzugefügt.
-
Hey,
ich habe mir Gestern zum Testen von Alexa und iobroker auf dem Smartphone Reverb installiert.
Soweit funktioniert es ganz gut, das Problem was ich allerdings habe ist, dass ich die aufgenommenen Sprachbefehle über die Amazon Homepage nicht löschen kann. Ich habe es jetzt seit Gestern schon ein paar Mal versucht, immer mit der selben Fehlermeldung.
Wenn ich /meine Geräte/die Reverb App/Sprachaufzeichnungen verwalten/löschen auswähle, kommt folgende Meldung:
421_unbenannt.jpg -
Hey,
ich habe mir Gestern zum Testen von Alexa und iobroker auf dem Smartphone Reverb installiert.
Soweit funktioniert es ganz gut, das Problem was ich allerdings habe ist, dass ich die aufgenommenen Sprachbefehle über die Amazon Homepage nicht löschen kann. Ich habe es jetzt seit Gestern schon ein paar Mal versucht, immer mit der selben Fehlermeldung.
Wenn ich /meine Geräte/die Reverb App/Sprachaufzeichnungen verwalten/löschen auswähle, kommt folgende Meldung: `
Kann ich bestätigen. Für die Reverb-App geht das Löschen über die Amazon Homepage nicht.
Dafür geht nur der Weg über die Alexa-Seite (den das obenstehende Script verwendet).
Ich würde Dir also empfehlen das Script laufen zu lassen. Wahrscheinlich hast Du in einem Tag nicht tausende Sprachkommandos an die App gegeben. Sollte also kein Problem für das Script sein.