Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Cloud Dienste
  4. [SKRIPT] Alexa über ioBroker Steuern -> Kommandos an Alexa

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

[SKRIPT] Alexa über ioBroker Steuern -> Kommandos an Alexa

Scheduled Pinned Locked Moved Cloud Dienste
261 Posts 82 Posters 93.7k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ruhr70R Offline
    ruhr70R Offline
    ruhr70
    wrote on last edited by
    #1

    .

    [-> EDIT 24.02.2018]Erweiterte Skript-Version von Hauke:

    Version 0.1.6: http://forum.iobroker.net/viewtopic.php … c7#p127659

    [EDIT <-]

    Folgende Steuermöglichkeiten werden je Alexa Lautsprecher als Datenpunkte und als Funktion bereitgestellt:

    //    alexaCommand("arbeitszimmer","volume",70);        // Alle Anwendungen
    //    alexaCommand("arbeitszimmer","pause");            // Radio, Spotify, Hörbücher
    //    alexaCommand("arbeitszimmer","play");             // Radio, Spotify, Hörbücher
    //    alexaCommand("arbeitszimmer","next");             // z.B. Spotify: nächstes Lied
    //    alexaCommand("arbeitszimmer","previous");         // z.B. Spotify: vorheriges Lied
    //    alexaCommand("arbeitszimmer","forward");          // z.B. Hörbücher: 30 Sekunden vor
    //    alexaCommand("arbeitszimmer","rewind");           // z.B. Hörbücher: 30 Sekunden zurück
    //    alexaCommand("arbeitszimmer","shuffle",true);     // z.B Amazon Music, Shuffle ein in der aktuellen Playlist
    //    alexaCommand("arbeitszimmer","shuffle",false);    // z.B Amazon Music, Shuffle aus in der aktuellen Playlist
    //    alexaCommand("arbeitszimmer","radio",true);       // schaltet den Default tunein Radiosender an
    //    alexaCommand("arbeitszimmer","radio",false);      // setzt Radio auf Pause
    //    alexaCommand("arbeitszimmer","tunein","s100198"); // setzt tunein Radio auf "s100198" (Einslive)
    
    

    Es handelt sich dabei um Befehle an den jeweiligen Alexa Lautsprecher.

    Die aktuellen Zustände von Alexa werden (noch) nicht abgefragt.

    Skript zur Steuerung der Alexa-Lautsprecher (unabhängig vom Cloud-Adapter):

    Version: 0.3.3 (2017-12-13)

    Version: 0.3.2 (2017-12-06)

    Version: 0.3.1 (2017-04-23)

    Version: 0.3.0 (2017-04-23)

    Changelog:

    • 0.3.3
    - Echo Plus angelegt (danke an Lobomau)
    
    - FireTV Gen. 2 angelegt (danke an Lobomau)
    
    • 0.3.2 Cookie und csrf aus den Datenpunkten vom Skript von Stefan.Franke

      http://forum.iobroker.net/viewtopic.php?p=101553#p98493

      • Echo 2. Generation angelegt

      • Sonos angelegt

    • 0.3.1 Fehlerkorrekturen

    • 0.3.0 alle createState() mit Callback

    • 0.2.0 Redesigne. Alle bekannten Alexa-Geräte werden nun ausgelesen. Keine manuelle Pflege nötig. (nur noch der Cookie und csrf müssen ausgelesen werden)

    • 0.1.2 mediaOwnerCustomerId vom Skriptbereich in den individuellen Konfigurationsbereich verlegt

    Achtung: Bis 0.1.2 hat man eigenen Namen für die Geräte (Datenpunkte) angegeben. Ab 0.3.0 werden die Namen automatisch generiert, so wie sie in der Alexa App eingetragen sind.

    Skript:

    ! ```
    `// Alexa mit Javaskript in ioBroker steuern
    // Skript arbeitet unabhängig vom Cloud Adapter
    //
    // Version: v0.3.3
    // Author: ruhr70
    //
    // Skript im ioBroker Forum: http://forum.iobroker.net/viewtopic.php?f=37&t=6035&hilit=alexaCommand#p62006
    //
    // -----------------------------------------------------------------------------
    // alexaCommand("arbeitszimmer","volume",70); // Alle Anwendungen
    // alexaCommand("arbeitszimmer","pause"); // Radio, Spotify, Hörbücher
    // alexaCommand("arbeitszimmer","play"); // Radio, Spotify, Hörbücher
    // alexaCommand("arbeitszimmer","next"); // z.B. Spotify: nächstes Lied
    // alexaCommand("arbeitszimmer","previous"); // z.B. Spotify: vorheriges Lied
    // alexaCommand("arbeitszimmer","forward"); // z.B. Hörbücher: 30 Sekunden vor
    // alexaCommand("arbeitszimmer","rewind"); // z.B. Hörbücher: 30 Sekunden zurück
    // alexaCommand("arbeitszimmer","shuffle",true); // z.B Amazon Music, Shuffle ein in der aktuellen Playlist
    // alexaCommand("arbeitszimmer","shuffle",false); // z.B Amazon Music, Shuffle aus in der aktuellen Playlist
    // alexaCommand("arbeitszimmer","radio",true); // schaltet den Default tunein Radiosender an
    // alexaCommand("arbeitszimmer","radio",false); // setzt Radio auf Pause
    // alexaCommand("arbeitszimmer","tunein","s100198"); // setzt tunein Radio auf "s100198" (Einslive)
    ! // Die Steuerung kann über die für jedes Gerät angelegten Datenpunkte erfolgen, z.B. über VIS
    ! // erster Test des Skripts:
    // Datenpunkt: javascript.0.alexa_device_command.devices.RAUMNAME.radio in den ioBroker Objekten auf true setzen: Radio sollte abgespielt werden
    ! // Das Skript benötigt zwei individuelle Infomationen: Cookie und csrf
    // diese können über das Skript von STefan.Franke automatisiert ausgelesen werden
    // http://forum.iobroker.net/viewtopic.php?p=101553#p98493
    ! // ----------------------------------------
    // Infos und Resourcen zum Skript:
    // Webseiten/URLs Request mit Fehlerbehandlung, siehe:
    // http://forum.iobroker.net/viewtopic.php?f=21&t=4259&p=40890&hilit=request#p40880
    // Alexa Steuerskripte:
    // https://github.com/thorsten-gehrig/alexa-remote-control
    ! // ---------------------------------------
    // Tunein Radiosender:
    // http://tunein.com/radio/Antenne-Düsseldorf-1042-s25772/
    // s25772 -> Antenne Düsseldorf
    ! // Liste einiger Sender:
    // s25772 -> Antenne Düsseldorf
    // s100198 -> Einslive
    // s100183 -> WDR2 Rheinland
    // s8007 -> Hitradio Ö3
    ! // ---------------------------------------
    // Changelog:
    ! // 0.3.3 - Echo Plus ergänzt (danke an Lobomau)
    // - FireTV Gen. 2 ergänzt
    // 0.3.2 Cookie und csrf aus den Datenpunkten vom Skript von Stefan.Franke
    // http://forum.iobroker.net/viewtopic.php?p=101553#p98493
    // - Echo 2. Generation angelegt
    // - Sonos angelegt
    // 0.3.1 Fehlerkorrekturen
    // 0.3.0 alle createState() mit Callback
    // 0.2.0 Redesigne. Ale bekannten Alexa-Geräte werden nun ausgelesen. Keine manuelle Pflege nötig.
    // (nur noch der Cookie und csrf müssen ausgelesen werden)
    // 0.1.2 mediaOwnerCustomerId vom Skriptbereich in den individuellen Konfigurationsbereich verlegt
    ! // ---------------------------------------
    // TODOs:
    ! // GET: fragt aktuellen Titel ab:
    // path: '/api/np/queue?deviceSerialNumber=xxxxxxxx&deviceType=xxxxxxxxx',
    ! // GET: fragt viele Statusinfo ab (Titel, Status, Volume, Muted, ...):
    // path: '/api/media/state?deviceSerialNumber=xxxxxxxxxxxxx&deviceType=xxxxxxxxxx',
    ! // prüfen: Statusänderungen abonieren?
    ! // Alexa Objekt als Sicherung in DP ablegen
    ! // deviceSerialNumber aus dem Array Echos auch als Datenpunkt anlegen
    ! // erledigt:
    //----------
    // Authentifizierung mit User/PW möglich? Erhaltenen Cookie dann für die weitere Verwendung speichern
    // -> mit dem Skript von Stefan.Franke
    ! // ---------------------------------------
    // bekannte Probleme:
    ! // ein ungültiger Cookie lässt das Skript unter Umständen abstürzen
    ! // Skriptverhalten:
    var logOn = true; // Skript Logausgabe ein- (true) / ausschalten (false). Fehler werden unabhängig von dieser Einstellung ausgegeben.
    var forecreation = false; // true: Datenpunkte werden überschrieben (wenn z.B. Bezeichnungen geändert wurden)
    ! var pfad = "Alexa.Devices" +"."; // Pfad im Javascript-Adapter unter dem die Geräte angelegt werden sollen
    ! var idCookie = "javascript.0.Alexa.cookie";
    var idCsrf = "javascript.0.Alexa.csrf";
    ! var defaultRadiostation = "s100198"; // Einslive - Default Radiostation für den Radio an Button.
    ! // bis 0.3.1: Individuelle Daten, per Chrome Debug ermitteln, siehe Link in der Beschreibung oben:
    // ab 0.3.2: Skript von Stefan.Franke, Cookie und csfr werdne aus dem Datenpunkten gelesen
    ! //var csrf = 'xxxxxxxxxx';
    var csrf = getState(idCsrf).val; // SKript von Stefan.Franke nötig, welches csrf ausliest
    ! // cookie gilt für alle Devices
    // var cookie = 'xxxxxxxxx gaaaanz langer String xxxxxxxxx';
    ! var cookie = getState(idCookie).val; // SKript von Stefan.Franke nötig, welches den cookie ausliest
    cookie = cookie.replace(/\/g, "");
    ! // Liste der bekannten Devicetypen, Geräte mit bekannten DeviceType und "anlegen":true werden mit Steuermöglichkeit mit steuerbaren Datenpunkten angelegt
    // hier muss nur was angepasst werden, wenn für andere Geräte auch Steuerdatenpunkte angelegt werden sollen
    // oder wenn es ein Geräte gibt, welches hier nicht gepflegt ist
    //
    // Nicht gefundene Gerätetypen werden im Log ausgegeben "Gerätetyp (xxxxxxxxx) unbekannt. Keine Steuerungsmöglichkeit angelegt." -> XXXXXXXXXX hier im Array ergänzen
    // wer es lieber manuell mag: Unbekannte Devicetypen können über STRG+Shift+I im Chrome (Entwicklermodus) abgefragt werden. Network auswählen und den Filter auf "Device" setzen. Auf Einstellunegn in der Alexawebseite klicken und den deviceTYpe raussuchen.
    // siehe auch: https://beebom.com/how-to-set-up-and-use-amazon-echo-outside-us/ (/nur für die Chrome Einstellungen)
    ! var knownDeviceType = {
    "A3S5BH2HU6VAYF": {"device":"Echo Dot 2.Gen", "anlegen": true},
    "AB72C64C86AW2": {"device":"Echo ", "anlegen": true},
    "A7WXQPH584YP": {"device":"Echo 2.Gen", "anlegen": true},
    "A15ERDAKK5HQQG": {"device":"Sonos", "anlegen": true},
    "A2E0SNTXJVT7WK": {"device":"Fire TV V1", "anlegen": false},
    "ADVBD696BHNV5": {"device":"Fire TV Stick V1", "anlegen": false},
    "A2T0P32DY3F7VB": {"device":"echosim.io", "anlegen": false},
    "AILBSA2LNTOYL": {"device":"reverb App", "anlegen": false},
    "A2M35JJZWCQOMZ": {"device":"Echo Plus", "anlegen": false},
    "A2LWARUGJLBYEW": {"device":"Fire TV Stick V2", "anlegen": false}
    };
    ! // -----------------------------------------------------------------------------
    // ------------ Skript, ab hier nichts ändern --------------
    // -----------------------------------------------------------------------------
    ! var devicePfad = pfad + "devices" + "."; // Pfad unter dem die zu steuernden Geräte angelegt werden
    var otherDevicePfad = pfad + "other_devices" + "."; // Pfad unter dem die
    ! var mediaOwnerCustomerId; // CUSTOMERID wird aus der Geräteliste ausgelesen
    var alexaDeviceObj = {}; // globales Objekt mit den Devices von Alexa abgefragt
    var echos = {}; // globales Objekt echos mit allen zu steuernden Echos (echos = {"arbeitszimmer":{"deviceSerialNumber": "XXXXXXX", "deviceType":"A3S5BH2HU6VAYF"},...)
    ! var https = require('https'); // Node Module https verwenden
    ! var ok = true;
    ! function setOptions(path,method) { // setzt die Options für den http/https Request
    var options = {
    "host": 'layla.amazon.de',
    "path": path,
    "method": method,
    "timeout":10000,
    "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',
    'csrf' : csrf,
    'Cookie' : cookie
    }
    };
    return options;
    }
    ! function httpsReqGet(path,callback) {
    if(logOn) log("Abfrage " + path + " an Alexa gesendet");
    var options = setOptions(path,"GET");
    var req = https.get(options, function getDevices(res) {
    if(logOn) log('STATUS: ' + res.statusCode) + ": " + statusCode(res.statusCode); // Statuscode
    if(logOn) log('HEADERS: ' + JSON.stringify(res.headers)); // Header (Rückmeldung vom Webserver)
    // Buffer the body entirely for processing as a whole.
    var bodyChunks = [];
    var chunkLine = 0;
    ! res.on('data', function(chunk) {
    chunkLine = chunkLine + 1;
    // Hier können die einzelnen Zeilen verarbeitet werden...
    //if(logOn) log("Zeilennummer: " + chunkLine+ " ,Inhalt: " + chunk);
    bodyChunks.push(chunk);
    ! }).on('end', function() {
    //if(logOn) log("ARRAY mit den einzelnen Zeilen: " + bodyChunks);
    //if(logOn) log("ARRAY Länge: " + bodyChunks.length);
    var body = Buffer.concat(bodyChunks);
    // ...und/oder das Gesamtergebnis (body).
    if(!body) log("keine Daten erhalten","warn");
    if(logOn) log('BODY: ' + body);
    ! if(callback !== undefined && typeof callback === 'function') return callback(null, body, dpAnlegen);
    ok = false;
    log("kein gültiger Callback angegeben","warn");
    return log(body,"warn");
    });
    ! });
    ! req.on('error', function(e) { // Fehler abfangen
    log('ERROR: ' + e.message,"warn");
    if(callback !== undefined && typeof callback === 'function') return callback(e.message, null);
    log("keinen gültigen Callback gefunden","warn");
    ok = false;
    return log("error: " + e.message,"warn");
    });
    req.end();
    }
    ! function dpAbfrageAlexaAnlegen (err,result,callback) {
    if (err) {
    log("Abfrage der bekannten Devices bei Alexa mit Fehler","warn");
    log("Error: " + err);
    ok = false;
    return log("Automatisches Anlegen/Aktualisieren von Datenpunkten mit Fehler abgebrochen","warn");
    }
    //TODO: Test (im if darüber: wenn error, dann prüfen, ob alte Daten vorhanden sind und diese laden: alexaDeviceObj & mediaOwnerCustomerId)
    //log("###############: "+ getState(pfad+"_alexaDeviceObj").val);

    if(!result) return log("Es konnten keine Daten ermittelt werden! Cookie richtig?","warn");
    if(logOn) log(result);
    alexaDeviceObj      = JSON.parse(result);
    createState(pfad + "_alexaDeviceObj",     JSON.stringify(alexaDeviceObj),  true,  {name:"Object mit allen Devices",   type:"string",  role:"value"});
    var numberOfDevices     = alexaDeviceObj.devices.length;
    if(logOn) log("Anzahl vorhandener Geräte mit Alexa Unterstützung: " + numberOfDevices);
    

    ! if (numberOfDevices < 1) {
    ok = false;
    return log("Error: Skript konnte keine Geräte abfragen","warn");
    }
    ! mediaOwnerCustomerId = alexaDeviceObj.devices[0].deviceOwnerCustomerId; // Kundenindiviuelle Customer ID aus dem ersten Gerät entnehmen -> in vorbereitete globale Variable schreiben
    createState(pfad + "_mediaOwnerCustomerId", mediaOwnerCustomerId, forecreation, {name:"Individuelle Kunden ID", type:"string", role:"value"});
    ! var device;
    var dpName;
    for(var i = 0; i < numberOfDevices; i++) {
    device = alexaDeviceObj.devices[i].accountName;
    dpName = clearName(alexaDeviceObj.devices[i].accountName);
    log("Gerät " + i + ": " + device+" - Datenpunktname: " + dpName);
    alexaDeviceObj.devices[i].dpName = dpName;

        if(typeof(knownDeviceType[alexaDeviceObj.devices[i].deviceType]) != "undefined") {
            alexaDeviceObj.devices[i].anlegen = knownDeviceType[alexaDeviceObj.devices[i].deviceType].anlegen;
        } else {
            alexaDeviceObj.devices[i].anlegen = false;
            log(device + " : Gerätetyp ("+alexaDeviceObj.devices[i].deviceType+") unbekannt. Keine Steuerungsmöglichkeiten angelegt","warn");
        }
        //log(alexaDeviceObj.devices[i].anlegen);
    }
    

    ! if(logOn) log("deviceOwnerCustomerId: " + mediaOwnerCustomerId);

    if(callback !== undefined && typeof callback === 'function') {
        return null, callback(); // !!! weiter zu dpAnlegen
    }
    log("kein Callback");
    return log("Skriptfehler: error: kein Callback","warn");
    

    }

    ! function createStates(arr, func, cb) {
    var doneCounter = 0;
    arr.forEach(function alleDpBearbeiten(obj) {
    func(obj.name, obj.initialValue, obj.forceCreation, obj.common, function () {
    doneCounter += 1;
    //if(logOn) log(doneCounter+": " + obj.name+" mit Wert: " + obj.initialValue + " ("+obj.common.type+") angelegt");
    if (doneCounter === arr.length) {
    cb(); // mit der Funktion (callback) geht es weiter, wenn alles erledigt ist
    }
    });
    });
    }
    ! function createStateObj(arr,name,initialValue,forceCreation,common){
    var obj = {
    "name":name,
    "initialValue":initialValue,
    "forceCreation":forceCreation,
    "common":common
    };
    return arr.push(obj);
    }
    ! function createStatesReady() {
    log("--- Alexa Kommandos - Datenpunkte angelegt ---");
    //setOn();
    setTimeout(setOn, 3000);
    }
    ! function dpAnlegen() {
    var dfSt = defaultRadiostation;
    var fc = forecreation; //forecreation;
    var deviceType,essid,macAddress,swVersion,deviceTypeTxt,capabilities;
    var echo;
    var dpArr = [];
    // for (var echo in echos) {
    for(var i = 0; i < alexaDeviceObj.devices.length; i++) {
    var pfad = otherDevicePfad;
    echo = alexaDeviceObj.devices[i].dpName;
    if(alexaDeviceObj.devices[i].anlegen) {
    pfad = devicePfad;
    echos[echo] = {"deviceType":alexaDeviceObj.devices[i].deviceType,"deviceSerialNumber":alexaDeviceObj.devices[i].serialNumber};
    createStateObj(dpArr,pfad + echo +".volume", 40, false, {name:"Volume (0-100)", type:"number", role:"control.value"});
    createStateObj(dpArr,pfad + echo +".pause", false, fc, {name:"Pause", type:"boolean", role:"button"});
    createStateObj(dpArr,pfad + echo +".play", false, fc, {name:"Play", type:"boolean", role:"button"});
    createStateObj(dpArr,pfad + echo +".next", false, fc, {name:"Next (nächster Titel)", type:"boolean", role:"button"});
    createStateObj(dpArr,pfad + echo +".previous", false, fc, {name:"Previous (vorheriger Titel)", type:"boolean", role:"button"});
    createStateObj(dpArr,pfad + echo +".forward", false, fc, {name:"Forward (Hörbuch 30 Sekunden vor)", type:"boolean", role:"button"});
    createStateObj(dpArr,pfad + echo +".rewind", false, fc, {name:"Rewind (Hörbuch 30 Sekunden zurück)",type:"boolean", role:"button"});
    createStateObj(dpArr,pfad + echo +".shuffle", false, fc, {name:"Shuffel an/aus (true/false)", type:"boolean", role:"switch"});
    createStateObj(dpArr,pfad + echo +".Last_Status","init", fc, {name:"Letzter Status", type:"string", role:"value"});
    createStateObj(dpArr,pfad + echo +".radio", false, fc, {name:"Default Radiostation an/aus", type:"boolean", role:"switch"});
    createStateObj(dpArr,pfad + echo +".tunein", dfSt, fc, {name:"tunein Radiosenderkennung", type:"string", role:"control.value"});
    }
    essid = alexaDeviceObj.devices[i].essid;
    macAddress = alexaDeviceObj.devices[i].macAddress;
    swVersion = alexaDeviceObj.devices[i].softwareVersion;
    deviceTypeTxt = deviceTypeStr(alexaDeviceObj.devices[i].deviceType);
    deviceType = alexaDeviceObj.devices[i].deviceType;
    capabilities = JSON.stringify(alexaDeviceObj.devices[i].capabilities);

            createStateObj(dpArr,pfad + echo +"._info.device_type_str",  deviceTypeTxt,  true,   {name:"Amazon Echo Typ",            type:"string",      role:"value"});
            createStateObj(dpArr,pfad + echo +"._info.device_type",      deviceType,     fc,     {name:"Amazon Echo deviceType",     type:"string",      role:"value"});
            createStateObj(dpArr,pfad + echo +"._info.essid",            essid,          true,   {name:"SSID des WLANs",             type:"string",      role:"value"});
            createStateObj(dpArr,pfad + echo +"._info.macAddress",       macAddress,     fc,     {name:"MAC-Adresse des Echos",      type:"string",      role:"value"});
            createStateObj(dpArr,pfad + echo +"._info.softwareVersion",  swVersion,      true,   {name:"Softwareversion des Echos",  type:"string",      role:"value"});
            createStateObj(dpArr,pfad + echo +"._info.capabilities",     capabilities,   true,   {name:"Fähigkeiten des Echos",      type:"string",      role:"value"});
    }
    

    ! if(logOn) log("Anzahl der anzulegenden Datenpunkte: " + dpArr.length);
    createStates(dpArr, createState, createStatesReady);
    }
    ! function clearName(name){ // Sonderzeichen gegen Unterstrich ersetzen
    name = umlaut(name);
    name = name.replace(/\W/g,"_");
    return name;
    }
    ! function httpsReqCmd(device,data) { // schickt an ein Alexa-Gerät (device) ein Kommando (data) per https-Request / Daten im Body
    if(logOn) log("Kommando: " + data);
    // Seriennummer und Gerätetyp anhand der Device-Bezeichnung ermitteln
    var deviceSerialNumber = echos[device].deviceSerialNumber;
    var deviceType = echos[device].deviceType;
    var path = '/api/np/command?deviceSerialNumber='+deviceSerialNumber+'&deviceType='+deviceType;
    if(JSON.parse(data).type == "tunein") {
    var guideId = JSON.parse(data).station;
    // path setzt eine Radiostation
    path = '/api/tunein/queue-and-play?deviceSerialNumber='+deviceSerialNumber+'&deviceType='+deviceType+'&guideId='+guideId+'&contentType=station&callSign=&mediaOwnerCustomerId='+mediaOwnerCustomerId;
    }
    var options = setOptions(path,"POST");

    // https Request für Alexa Kommandos:
    var req = https.request(options, function(res) {
    

    ! if(logOn) log("Geräteyp: " + deviceTypeStr(deviceType)); // Name des Alexa/Amazon Gerätetyps als String ausgeben
    setState(devicePfad + device +".Last_Status",res.statusCode.toString()+" " + statusCode(res.statusCode));
    if(res.statusCode != 200) {
    log("Negative Rückmeldung von Alexa: " + res.statusCode + ": " + statusCode(res.statusCode),"warn");
    log("Gesendetes Kommando: " + data,"warn");
    } else {
    log('STATUS: ' + res.statusCode + ": " + statusCode(res.statusCode)); // Statuscode
    }
    if(logOn || res.statusCode != 200) log('HEADERS: ' + JSON.stringify(res.headers), (res.statusCode != 200 ? "warn" : "info")); // Header (Rückmeldung vom Webserver)
    });

    req.on('error', function(e) { // Fehler abfangen
        log('ERROR: ' + e.message,"warn");
    });
    

    ! if(logOn) log("Data to request body: " + data);
    // write data to request body
    if(data) req.write(data);
    req.end();
    }
    ! function umlaut(str) {
    return str
    .replace(/Â|À|Å|Ã/g, "A")
    .replace(/â|à|å|ã/g, "a")
    .replace(/Ä/g, "AE")
    .replace(/ä/g, "ae")
    .replace(/Ç/g, "C")
    .replace(/ç/g, "c")
    .replace(/É|Ê|È|Ë/g, "E")
    .replace(/é|ê|è|ë/g, "e")
    .replace(/Ó|Ô|Ò|Õ|Ø/g, "O")
    .replace(/ó|ô|ò|õ/g, "o")
    .replace(/Ö/g, "OE")
    .replace(/ö/g, "oe")
    .replace(/Š/g, "S")
    .replace(/š/g, "s")
    .replace(/ß/g, "ss")
    .replace(/Ú|Û|Ù/g, "U")
    .replace(/ú|û|ù/g, "u")
    .replace(/Ü/g, "UE")
    .replace(/ü/g, "ue")
    .replace(/Ý|Ÿ/g, "Y")
    .replace(/ý|ÿ/g, "y")
    .replace(/Ž/g, "Z")
    .replace(/ž/, "z");
    }
    ! function statusCode(status) { // gibt zum http-Status eine Rückmeldung als String
    if(status === 0) return "** Daten unvollständig **   (csrf fehlt/falsch? Cookie falsch?)";
    if(status == 200) return "** OK ";
    if(status == 302) return "
    Found (Moved Temporarily) **   (Cookie abgelaufen?)";
    if(status == 401) return "** Unauthorized **   (Cookie nicht richtig gesetzt?)";
    if(status == 403) return "** Forbidden **   (Kombination Cookie, deviceType, Seriennummer richtig?)";
    if(status == 404) return "** Not Found **   (Kommando im Kontext des Geräts sinnvoll?)";
    if(status == 500) return "** Internal Server Error**   (ggf. Kommando im falschen Kontext verwendet?)";
    return "Fehler";
    }
    ! function deviceTypeStr(deviceType){ // Anhand der Amazon Device Kennung wird ein String mit dem Typ als Namen zurückgeliefert
    if(!knownDeviceType[deviceType] || knownDeviceType[deviceType] === undefined) return "Gerät unbekannt";
    return knownDeviceType[deviceType].device;
    }
    ! function alexaCommand(device,cmd,parameter) { // Führt ein Kommando (cmd) an ein Alexa-Gerät (device) mit optionalen Parameter (parameter) aus
    var data;
    if(!echos[device] || echos[device] === undefined) return log("Kein gültiger Raum","warn");
    if(logOn) log("Kommando für: " + device);
    switch (cmd) {
    ! case "volume":
    if(!parameter ||parameter === null){
    log("Alexa Volume: keine Lautstärke angegeben. Parameter fehlt.","warn");
    break;
    }
    parameter = parseInt(parameter);
    if(parameter < 0) {
    parameter = 0;
    log("Alexa Volume: ungültige Lautsträke angegeben (<0). Auf 0 gesetzt.","warn");
    }
    if(parameter > 100) {
    parameter = 100;
    log("Alexa Volume: ungültige Lautsträke angegeben (>100). Auf 100 gesetzt.","warn");
    }

        httpsReqCmd(device,'{"type":"VolumeLevelCommand","volumeLevel":'+parameter+'}');
        break;
    

    ! case "pause":
    httpsReqCmd(device,'{"type":"PauseCommand"}');
    break;
    ! case "play":
    httpsReqCmd(device,'{"type":"PlayCommand"}');
    break;
    ! case "next":
    httpsReqCmd(device,'{"type":"NextCommand"}');
    break;
    ! case "previous":
    httpsReqCmd(device,'{"type":"PreviousCommand"}');
    break;
    ! case "forward":
    httpsReqCmd('{"type":"ForwardCommand"}');
    break;
    ! case "rewind":
    httpsReqCmd(device,'{"type":"RewindCommand"}');
    break;
    ! case "shuffle":
    if(parameter === null){
    log("Alexa Shuffle: kein true/false angegeben. Auf true gesetzt.","warn");
    parameter = true;
    }

        httpsReqCmd(device,'{"type":"ShuffleCommand","shuffle":'+parameter+'}');
        break;
    

    ! case "tunein":
    httpsReqCmd(device,'{"type":"tunein","station":"'+parameter+'"}');
    break;
    ! default:
    log("Kein bekanntes Kommando angegeben: "+cmd,"warn");
    break;
    }
    }
    ! // Subscriptions
    // -----------------------------------------------------------------------------
    ! function setOn() {
    var reg = new RegExp("^javascript\."+instance+"\." + devicePfad.replace('.', '\.') + ".\.(volume|pause|play|next|forward|rewind|shuffle|tunein|radio|previous)");
    on({"id":reg , "change": "any"}, function (obj) {
    var objArr = obj.id.match(/(^.+).(.+).(.+)$/, ""); //Aufteilung in Pfad + Device + CMD
    var device = objArr[2];
    var cmd = objArr[3];
    if(logOn) log("Device: " + device+", Kommando: " + cmd);
    ! switch (cmd) {
    case "radio":
    if(obj.state.val) {
    // default Radiostation einschalten
    setState(devicePfad + device +".tunein",defaultRadiostation);
    return;
    } else {
    // Musik auf Pause.
    setState(devicePfad + device +".pause",true);
    return;
    }
    break;
    ! // Buttons, true zum auslösen. Werden danach wieder auf flase gesetzt
    case "pause":
    case "play":
    case "next":
    case "forward":
    case "rewind":
    case "previous":
    if(getState(obj.id).val) setState(obj.id,false); // Button wieder auf false zurücksetzen, wenn er true war
    if(obj.state.val) alexaCommand(device,cmd,true); // Kommando war ein true -> Kommando ausführen
    break;
    ! // Switches oder Wert
    case "shuffle":
    case "volume":
    case "tunein":
    alexaCommand(device,cmd,obj.state.val);
    break;
    ! default:
    log("Kommando << "+cmd+" >> im Skript nicht behandelt","warn");
    break;
    }
    ! });
    log("--- Subscriptions angelegt ---");
    }
    ! onStop(function skriptStop () {
    log("
    *** Skript wurde gestoppt ****");
    }, 2000 /ms/);
    ! // main
    // -----------------------------------------------------------------------------
    function main() {
    //alexaCommand("arbeitszimmer","pause");
    if (ok) {
    log("--- Alexa Kommandos - Skript initalisiert und bereit ---");
    } else {
    log("--- Skript konnte nicht sauber initalisiert werden ---","warn");
    }
    }
    ! // Start Skript:
    // -----------------------------------------------------------------------------
    ! log("--- Alexa Kommandos - Skript gestartet ---");
    if(forecreation) log("Forcecreation ist eingeschaltet. Wenn nicht mehr benötigt, bitte im Skript auf false setzen","warn");
    httpsReqGet('/api/devices/device',dpAbfrageAlexaAnlegen); // fragt bei Alexa die Devices ab und legt die Datenpunkte und dann die Subscriptions an
    setTimeout(main, 7000); // startet main()
    ! // alte Doku (manuelle Einrichtung)
    ! // EINRICHTUNG:
    ! // 1. cURL extrahieren, siehe
    // https://www.gehrig.info/alexa/Alexa.html
    //
    // benötigt wird:
    // je Gerät: deviceType, deviceSerialNumber // wird vom Skript automatisch ausgelesen)
    // einmalig: csrf, cookie
    //
    // Der Cookie muss aus dem Trace mit tunein entnommen werden, damit er sowohl mit den Kommandos,
    // als auch mit der Radiostation funktioniert. Es ist ein sehr langer String
    // alles von: x-amzn-dat-gui-client
    // bis alles vor dem nächsten -H`
    ! ~~[b]~~Datenpunkte zur Steuerung der Alexalautsprecher (Screenshot der Version 0.3.0):[/b]
    ! 327_alexa_cmd_skript_0.3.0.jpg
    ! Inspiriert von folgenden Thread:
    ! http://forum.iobroker.net/viewtopic.php?f=37&t=5454
    ! Dort findet man auch einiges zum Thema Cookie.
    ! [color]~~[b]~~Cookie[/b][/color]
    ! ~~[b]~~1.) Auslesen des Cookies per Skript in ioBroker[/b]
    ! http://forum.iobroker.net/viewtopic.php ... gOn#p98493
    ! ~~[b]~~2.) Alternativ: Cookie manuell auslesen[/b]
    ! Manuelles mitschneiden der Daten für den Cookie und csrf per Chrome Debbuging-Modus:
    ! - ~~[b]~~Cookie[/b]
    ! - ~~[b]~~csrf[/b]
    ! Wie man an diese Parameter kommt, wird auf dieser Seite gut beschrieben:
    ! https://www.gehrig.info/alexa/Alexa.html
    ! Für das Skript wird der Cookie (entgegen der Beschreibung auf der oben verlinkten Seite) ohne das "Cookie: " am Anfang benötigt.
    ! Im Debbug alles ab danach markieren, bis vor dem nächsten " -H".
    ! Die notwendigen Geräteparameter (Kennung und Seriennummer) werden vom Skript selbstständig ausgelesen.
    ! [b]"Vollautomatik"[/b]
    ! Mit einem Skript vom User ~~[b]~~Stefan.Franke[/b] kann das Auslesen des Cookies über ein Skript in ioBroker automatisiert werden.
    ! http://forum.iobroker.net/viewtopic.php ... gOn#p98493
    ! ~~[b]~~Bekannte Probleme:[/b]
    ! Ein ungültiger Cookie kann das Skript zum Absturz bringen.[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]

    Adapter: Fritzbox, Unify Circuit
    Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

    1 Reply Last reply
    0
    • ruhr70R Offline
      ruhr70R Offline
      ruhr70
      wrote on last edited by
      #2

      Changelog

      • 1.0.1 (09.04.2017) mediaOwnerCustomerId vom Skriptbereich in den individuellen Konfigurationsbereich verlegt

      Adapter: Fritzbox, Unify Circuit
      Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

      1 Reply Last reply
      0
      • C Offline
        C Offline
        csamaggi
        wrote on last edited by
        #3

        Das ist schon einmal eine Feine Sache. Danke Ruhr70.

        Was super wäre wenn mann die ToDo Liste von Alexa auslesen könnte und diese Daten dann weiter auf einem Wandtab anzeigen oder sogar noch weiter benutzen könnte.

        MFG Maggi

        1 Reply Last reply
        0
        • G Offline
          G Offline
          galferiz
          wrote on last edited by
          #4

          Sehr cool,

          Danke schön für die Zusammenfassung 😉

          Nach Weihnachten ist vor Weihnachten

          1 Reply Last reply
          0
          • M Offline
            M Offline
            mayer
            wrote on last edited by
            #5

            Super Script.

            Noch zur Info: So wie es aussieht, ist die Session (ID) für Alexa nur für ein paar Wochen oder auch bis zum nächsten FW-Upgrade gültig. Ich musste meine schon mehrmals erneuern.

            Gruss, mayer

            1 Reply Last reply
            0
            • lobomauL Offline
              lobomauL Offline
              lobomau
              wrote on last edited by
              #6

              Tolle Arbeit! Funktioniert super, wenn man eine kleine Sache anpasst.

              In Zeile 131````
              var mediaOwnerCustomerId

              
              Kannst also so ändern, dass es oben erscheint im Bereich, wo man eigene Einträge hat.

              Host: NUC8i3 mit Proxmox:

              • ioBroker CT Debian 13, npm 10.9.3, nodejs 22.20.0
              • Slave: Pi4
              1 Reply Last reply
              0
              • ruhr70R Offline
                ruhr70R Offline
                ruhr70
                wrote on last edited by
                #7

                super!

                danke für die Info 🙂

                ändere ich nachher

                [EDIT]
                @lobomau:

                Tolle Arbeit! Funktioniert super, wenn man eine kleine Sache anpasst.

                In Zeile 131````
                var mediaOwnerCustomerId

                
                Kannst also so ändern, dass es oben erscheint im Bereich, wo man eigene Einträge hat. `  
                

                Ist geändert (V1.0.1)

                Adapter: Fritzbox, Unify Circuit
                Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                1 Reply Last reply
                0
                • H Offline
                  H Offline
                  hater
                  wrote on last edited by
                  #8

                  Super, top, danke die für die Mühe.

                  Mal eine Frage am Rande aber: Vom Radio auf Spotify zurück wechseln geht ja sorum (Alexa-seitig) nicht. Ist irgendwem hier ein Work-Around bekannt?

                  Viele Grüße,

                  P

                  –---

                  CCU2 mit Wärme, Licht und div. anderem.

                  Synology DS916+ mit ioBroker Docker

                  Alexa Echo Dot

                  1 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    Marcolotti
                    wrote on last edited by
                    #9

                    Ganz große Klasse. Super Arbeit Ruhr. 8-) :mrgreen: 😄

                    Falls jemand Probleme mit den Cookies und diversen Sonderzeichen hat, der kopiert aus den Entwicklertools alles was in diesem Feld unter Cookie ist.

                    721_cookie.jpg

                    Das ist der fertige Cookie ohne Sonderzeichen.

                    Gruß Marco

                    CCU2-CuxD&Cul868MHz, 44xHM Geräte, 20xMAX Fenstersensoren.Acer Revo mit IoBroker, Tablet Captiva 9,7 SFHD. SMA SB2.5,STP7000TL20,SMA Energy Meter, Echo, Harmony, JeeLink868, Arduino 433MHz, MaxtoxCUL868,MilightEasyLED,Hue

                    1 Reply Last reply
                    0
                    • lobomauL Offline
                      lobomauL Offline
                      lobomau
                      wrote on last edited by
                      #10

                      @ruhr70:

                      Die aktuellen Zustände von Alexa werden nicht abgefragt. `
                      wäre das denn technisch möglich?

                      Host: NUC8i3 mit Proxmox:

                      • ioBroker CT Debian 13, npm 10.9.3, nodejs 22.20.0
                      • Slave: Pi4
                      1 Reply Last reply
                      0
                      • ruhr70R Offline
                        ruhr70R Offline
                        ruhr70
                        wrote on last edited by
                        #11

                        @lobomau:

                        @ruhr70:

                        Die aktuellen Zustände von Alexa werden nicht abgefragt. wäre das denn technisch möglich?

                        Nicht mit den (mir) bisher bekannten Mitteln.

                        Die Kommandos sind die Kommandos, die die Alexa-Webseite schickt.

                        Die Alexa-Webseite bekommt allerdings eine Rückmeldung, wenn der Zustand sich, z.B. auf Grund eines Sprachbefehls, ändert.

                        Ein Pause Icon wird dann z.B. zum Play Icon.

                        Was auch unschön ist, dass der Cookie von der Gültigkeit abläuft, siehe weiter oben.

                        Hier überlege ich, ob es möglich ist, im POST mit Authentifizierung zu arbeiten und den Cookie dann aus dem Skript zu aktualisieren. Keine Ahnung, ob das gehen wird.

                        Also ideal wäre, dass man die Grundfunktionen der Webseite "nachstellen" könnte. Anmelden, Kommandos schicke, Rückmeldungen erhalten, …

                        Ob es geht oder nicht... überschreitet meinen Horizont.

                        Ich werde aber etwas spielen.

                        Adapter: Fritzbox, Unify Circuit
                        Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                        1 Reply Last reply
                        0
                        • ruhr70R Offline
                          ruhr70R Offline
                          ruhr70
                          wrote on last edited by
                          #12

                          Die Abfrage, welcher Titel aktuell gespielt wird (tunein, Amazon Music oder Spotify) funktioniert schon einmal.

                          Muss allerdings proaktiv angestossen werden.

                          [EDIT]

                          aktuelle Lautstärke, Mute j/n, URL zum Coverbild, Shuffle j/n, usw.

                          Kann man auch abfragen. Jetzt muss man es nur noch hinbekommen, sich die Meldung schicken zu lassen, wenn sich was ändert 🙂

                          [EDIT]

                          Auch die Liste aller Amazon Geräte ist recht einfach abzufragen.

                          Hierüber könnte man das Skript dahingehend vereinfachen, dass alle Geräte automatisch ausgelesen werden und man die Seriennummern nicht mehr manuell abfragen muss.

                          Adapter: Fritzbox, Unify Circuit
                          Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                          1 Reply Last reply
                          0
                          • M Offline
                            M Offline
                            Mathias-Niehues
                            wrote on last edited by
                            #13

                            Hallo,

                            könnte ich auf diese Weise Alexa auch einen speziellen Titel abspielen lassen?

                            Mein Gedanke ist folgender, wenn ich einen Radiosender an Alexa übergeben kann, müsste ich doch auch angeben können, das sie einen Titel aus der Bibliothek abspielen soll.

                            Diese Titel ( für Hinweise) würde ich vorher in meine Musik hochladen.

                            Wäre das über dein Script denkbar?

                            Gruß Mathias

                            1 Reply Last reply
                            0
                            • ruhr70R Offline
                              ruhr70R Offline
                              ruhr70
                              wrote on last edited by
                              #14

                              @Mathias-Niehues:

                              könnte ich auf diese Weise Alexa auch einen speziellen Titel abspielen lassen?

                              Mein Gedanke ist folgender, wenn ich einen Radiosender an Alexa übergeben kann, müsste ich doch auch angeben können, das sie einen Titel aus der Bibliothek abspielen soll.

                              Diese Titel ( für Hinweise) würde ich vorher in meine Musik hochladen.

                              Wäre das über dein Script denkbar? `

                              Sorry… den Post hatte ich nicht gesehen.

                              Zu Deiner Frage: Bisher wüsste ich nicht, wie. Ich schau mir das aber noch einmal näher an.

                              Adapter: Fritzbox, Unify Circuit
                              Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                              1 Reply Last reply
                              0
                              • ruhr70R Offline
                                ruhr70R Offline
                                ruhr70
                                wrote on last edited by
                                #15

                                Neue Version des Skripts: 0.3.0

                                Alle Geräte werden nun automatisch erkannt und ausgelesen (auch FireTV).

                                Nur noch Cookie und csrf müssen manuell ausgelesen und ins Skript kopiert werden.

                                Adapter: Fritzbox, Unify Circuit
                                Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                                1 Reply Last reply
                                0
                                • lobomauL Offline
                                  lobomauL Offline
                                  lobomau
                                  wrote on last edited by
                                  #16

                                  Muss ich nur csrf und cookie eintragen? Hab nix anderes gemacht.

                                  Was mit Raumbezeichnungen, wo trage ich die ein?

                                  Hab auch mit forecreation true/false rumgespielt. Aber der javascript adapter fliegt jetzt immer raus:

                                  host.brix-3150	2017-04-23 17:45:35.695	info	Restart adapter system.adapter.javascript.0 because enabled
                                  host.brix-3150	2017-04-23 17:45:35.695	error	instance system.adapter.javascript.0 terminated with code 0 (OK)
                                  javascript.0	2017-04-23 17:45:35.575	info	script.js.common.BT-scanner2: Kommando Bluetooth Scanner an: true
                                  javascript.0	2017-04-23 17:45:35.574	info	script.js.common.Systeminfos.hue-updates: 200
                                  javascript.0	2017-04-23 17:45:35.574	error	SyntaxError: Unexpected end of input at Object.parse (native) at dpAbfrageAlexaAnlegen (script.js.common.Alexa.Alexa:316:32) at IncomingMessage. (script.js.common.Alexa.Alexa:29
                                  javascript.0	2017-04-23 17:45:35.574	error	uncaught exception: Unexpected end of input
                                  javascript.0	2017-04-23 17:45:35.574	info	script.js.common.Alexa.Alexa: ###############: null
                                  javascript.0	2017-04-23 17:45:35.574	warn	State "alexa_device_command.._alexaDeviceObj" not found
                                  javascript.0	2017-04-23 17:45:35.574	info	script.js.common.Alexa.Alexa: BODY:
                                  javascript.0	2017-04-23 17:45:35.574	info	script.js.common.Alexa.Alexa: HEADERS: {"x-amzn-requestid":"XXYYZZ","location":"https://www.amazon.de/ap/signin?showRmrMe=1&openid.return_to=https%3A%2F%2Flayla.amazon.de
                                  javascript.0	2017-04-23 17:45:35.574	info	script.js.common.Alexa.Alexa: STATUS: 302
                                  

                                  XXYYZZ habe ich ausgetauscht gegen die richtige Nummer.

                                  EDIT: Script läuft! Cookie hatte sich bei mir geändert! 🙂

                                  Host: NUC8i3 mit Proxmox:

                                  • ioBroker CT Debian 13, npm 10.9.3, nodejs 22.20.0
                                  • Slave: Pi4
                                  1 Reply Last reply
                                  0
                                  • lobomauL Offline
                                    lobomauL Offline
                                    lobomau
                                    wrote on last edited by
                                    #17

                                    Habe nun nochmal die vorherige Version getestet und da kommen auch fehler. Eventuell habe ich ein anderes Problem.

                                    Ich schaue mal ob sich vielleicht der cookie geändert hat.

                                    EDIT: Script läuft! Cookie hatte sich bei mir geändert! 🙂

                                    Sensationell. Man braucht nur die beiden Angaben machen. Saubere Arbeit. Ich teste mal die Details…

                                    Host: NUC8i3 mit Proxmox:

                                    • ioBroker CT Debian 13, npm 10.9.3, nodejs 22.20.0
                                    • Slave: Pi4
                                    1 Reply Last reply
                                    0
                                    • ruhr70R Offline
                                      ruhr70R Offline
                                      ruhr70
                                      wrote on last edited by
                                      #18

                                      @lobomau:

                                      Muss ich nur csrf und cookie eintragen? Hab nix anderes gemacht.

                                      …

                                      EDIT: Script läuft! Cookie hatte sich bei mir geändert! 🙂 `

                                      Ja, nur csrf und der Cookie werden gebraucht.

                                      Deine Rückmeldung hat dazu geführt, dass es nun eine 0.3.1 gibt. Es waren noch ein paar Fehler im Skript.

                                      Interessant wäre, warum Dein Cookie abgelaufen ist. Meiner funktioniert, seitdem es die erste Version vom Skript gibt.

                                      Eventuell am Browser abgemeldet?

                                      Leider konnte ich gerade ein Problem nicht fixen. Wenn der Cookie falsch ist (ich hatte den kurzen Dummen zum Test drin gelassen), kann es sein, dass das Skript abstürzt. 😞

                                      Jetzt muss es "nur noch" funktionieren, dass man sich den Cookie sparen kann, sondern über das Skript oder einen Adapter bei Amazon Alexa anmelden kann.

                                      Adapter: Fritzbox, Unify Circuit
                                      Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                                      1 Reply Last reply
                                      0
                                      • lobomauL Offline
                                        lobomauL Offline
                                        lobomau
                                        wrote on last edited by
                                        #19

                                        @ruhr70:

                                        @lobomau:

                                        Muss ich nur csrf und cookie eintragen? Hab nix anderes gemacht.

                                        …

                                        EDIT: Script läuft! Cookie hatte sich bei mir geändert! 🙂 `

                                        Ja, nur csrf und der Cookie werden gebraucht.

                                        Deine Rückmeldung hat dazu geführt, dass es nun eine 0.3.1 gibt. Es waren noch ein paar Fehler im Skript.

                                        Interessant wäre, warum Dein Cookie abgelaufen ist. Meiner funktioniert, seitdem es die erste Version vom Skript gibt.

                                        Eventuell am Browser abgemeldet?

                                        Leider konnte ich gerade ein Problem nicht fixen. Wenn der Cookie falsch ist (ich hatte den kurzen Dummen zum Test drin gelassen), kann es sein, dass das Skript abstürzt. 😞

                                        Jetzt muss es "nur noch" funktionieren, dass man sich den Cookie sparen kann, sondern über das Skript oder einen Adapter bei Amazon Alexa anmelden kann. `
                                        Schön, dann war meine Panikmache ja nicht ganz umsonst. 🙂

                                        Ich meine auch, dass es heute Morgen noch funktioniert hat. Dann habe ich später in einem Tablet die Alexa App installiert, was nicht sofort funktionierte. Keine Ahnung ob das den cookie ändern kann.

                                        Host: NUC8i3 mit Proxmox:

                                        • ioBroker CT Debian 13, npm 10.9.3, nodejs 22.20.0
                                        • Slave: Pi4
                                        1 Reply Last reply
                                        0
                                        • lobomauL Offline
                                          lobomauL Offline
                                          lobomau
                                          wrote on last edited by
                                          #20

                                          @Marcolotti:

                                          Ganz große Klasse. Super Arbeit Ruhr. 8-) :mrgreen: 😄

                                          Falls jemand Probleme mit den Cookies und diversen Sonderzeichen hat, der kopiert aus den Entwicklertools alles was in diesem Feld unter Cookie ist.

                                          cookie.JPG

                                          Das ist der fertige Cookie ohne Sonderzeichen.

                                          Gruß Marco `
                                          Irgendwie finde ich das so nicht. Bei mir ist es wieder soweit. Ich muss den neuen Cookie extrahieren. Erster Versuch war nix.

                                          Host: NUC8i3 mit Proxmox:

                                          • ioBroker CT Debian 13, npm 10.9.3, nodejs 22.20.0
                                          • Slave: Pi4
                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          478

                                          Online

                                          32.4k

                                          Users

                                          81.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe