Ankündigung

Einklappen
Keine Ankündigung bisher.

Amazon Alexa Plugin

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • lexxmm
    antwortet
    Hallo

    ich habe seit heute ein Problem:

    Code:
    START RequestId: 3b84b2bc-7265-4ed1-8563-e6ab5efcef27 Version: $LATEST
    2021-10-01T05:29:13.346Z 3b84b2bc-7265-4ed1-8563-e6ab5efcef27 requesting {"header":{"payloadVersion":"2","namespace":"Alexa .ConnectedHome.Discovery","name":"DiscoverApplianc esRequest","messageId":"F8752B11-69BB-4246-B923-3BFB27C06C7D"},"payload":{"accessToken":"1"}}
    2021-10-01T05:29:13.502Z 3b84b2bc-7265-4ed1-8563-e6ab5efcef27 request failed { [Error: certificate has expired] code: 'CERT_HAS_EXPIRED' }
    2021-10-01T05:29:13.502Z 3b84b2bc-7265-4ed1-8563-e6ab5efcef27 {"errorMessage":"certificate has expired","errorType":"Error","stackTrace":["Error (native)","TLSSocket.<anonymous> (_tls_wrap.js:1016:38)","emitNone (events.js:67:13)","TLSSocket.emit (events.js:166:7)","TLSSocket._finishInit (_tls_wrap.js:585:8)"]}
    END RequestId: 3b84b2bc-7265-4ed1-8563-e6ab5efcef27
    Zert. ist aber nicht abgelaufen -> Valid until Thu, 30 Dec 2021 04:14:32 UTC (expires in 2 months and 28 days)

    Jemand eine Idee?

    Einen Kommentar schreiben:


  • Lacroix
    antwortet
    Ich habe mir eben lokal Node.JS installiert und die Lambda Request von meinem PC aus geschickt. Und siehe da, es funktioniert immer auf Anhieb. Es muss irgendwas mit Amazon zutun haben. Da alle Requests i.d.R. in weniger als 1000ms vonstatten gehen, habe ich den Timeout mal auf 2s gesetzt und die Lambda Funktion sehr oft hintereinander getestet. Dabei fiel mir auf, dass fast immer jede zweite Request in ein Timeout läuft?! Was ich absolut nicht verstehen kann. Testweise habe ich auch ohne Erfolg Node.JS 12 und 10 getestet. Als vorläufigen Workaround habe ich nun den Code so umgebaut, dass die Funktion einfach immer 2x ausgeführt wird. So funktioniert es nun in 95% der Fälle. Hier der Code falls jemand vor dem gleichen Problem steht:

    Hier folgt der aktuelle Code siehe Edit (unten)
    [ZENSUR]
    Code:
    /*
    You need to specify the following environmental variables in the lambda function:
    - SMARTHOME_HOST
    foobar.dyndns.tld
    - SMARTHOME_PORT
    443 - endpoint must be https enabled!
    - SMARTHOME_PATH
    '/'
    - SMARTHOME_AUTH
    'user:password'
    */
    exports.handler = function(event, context, callback) {
    context.callbackWaitsForEmptyEventLoop = false
    var data = JSON.stringify(event)
    var options = {
    hostname: process.env.SMARTHOME_HOST,
    port: process.env.SMARTHOME_PORT,
    path: process.env.SMARTHOME_PATH,
    method: 'POST',
    auth: process.env.SMARTHOME_AUTH,
    timeout: 1000,
    headers: {
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(data)
    }
    };
    var https = require('https');
    
    function sendData() {
    options.timeout = 10000;
    var req = https.request(options, (res) => {
    console.log(`HTTP ${res.statusCode}`);
    res.setEncoding('utf8');
    var responseData = '';
    res.on('data', (dataChunk) => {
    responseData += dataChunk
    });
    res.on('end', () => {
    console.log('raw response:', responseData)
    var response = JSON.parse(responseData);
    if (res.statusCode == 200) {
    console.info('OK', JSON.stringify(response))
    callback(null, response);
    console.info('Terminate Context 2');
    return callback(null);
    }
    else {
    console.error('Failed', JSON.stringify(response))
    callback('DependentServiceUnavailableError');
    }
    });
    });
    req.on('error', (e) => {
    console.error('request failed', e);
    callback(e);
    });
    req.on('timeout', () => {
    console.info('Terminate Timeout Request 2');
    return callback();
    });
    console.log('requesting', data)
    req.write(data);
    req.end();
    }
    
    var req = https.request(options, (res) => {
    console.log(`HTTP ${res.statusCode}`);
    res.setEncoding('utf8');
    var responseData = '';
    res.on('data', (dataChunk) => {
    responseData += dataChunk
    });
    res.on('end', () => {
    console.log('raw response:', responseData)
    var response = JSON.parse(responseData);
    if (res.statusCode == 200) {
    console.info('OK', JSON.stringify(response))
    callback(null, response);
    console.info('Terminate Context');
    req.end();
    return callback(null);
    }
    else {
    console.error('Failed', JSON.stringify(response))
    callback('DependentServiceUnavailableError');
    }
    });
    });
    req.on('error', (e) => {
    console.error('request failed', e);
    callback(e);
    });
    req.on('timeout', () => {
    console.info('Terminate Timeout Request');
    sendData();
    });
    console.log('requesting', data)
    req.write(data);
    req.end();
    }
    Kann sich da irgendjemand einen Reim darauf machen? Das Verhalten ist schon etwas seltsam.

    Meine ursprüngliche Idee war es, einen eigenen Timeout im Code auf beispielsweise 1500ms zu setzen und im Timeout-Fall eine neue Request zu schicken und das bis zu 3x. Lokal konnte ich das umsetzen. Bei Amazon wurde mein Timeout Callback allerdings immer ignoriert.

    Gruß

    -EDIT-
    Ich konnte meine ursprüngliche Idee mit dem Timeout doch umsetzen. So funktioniert es jetzt immer bei mir. Wenn die erste Request in ein Timeout läuft, funktioniert die zweite. Der Code wurde oben ausgetauscht.
    Zuletzt geändert von Lacroix; 25.09.2021, 21:21.

    Einen Kommentar schreiben:


  • Lacroix
    antwortet
    So, entschuldigt die späte Rückmeldung. Aktuell habe ich beruflich etwas Stress und das KNX Projekt ist für meine Schwester. Da kann ich an dem Alexa Thema nur weiterarbeiten wenn ich vor Ort bin.
    Ich habe heute die NGINX Logs überprüft und dabei ist mir aufgefallen, dass sich in den "Gerät reagiert nicht"-Fällen überhaupt nichts tut.
    Also bin ich zur CloudWatch Management Console und habe mir die Protokolle angeschaut. In den Problemfällen gibt es anscheinend ein Timeout nach 10s.

    Code:
    2021-09-04T11:59:27.775Z 10ff2090-1b7d-40a4-8366-28684a1ed262 Task timed out after 10.01 seconds
    Wenn es funktioniert, geht das Ganze in fast einer Sekunde recht zügig über die Bühne. Hat jemand eine Idee woran das liegen könnte? Hin und wieder brauche ich auch bei einem externen Smartvisu Zugriff sehr lange bis die Zertifikatsanfrage kommt (bis zu 30s). In der Regel funktioniert es aber direkt. Ich weiß nicht ob das evt. zusammenhängt. Kann es sein, dass der DynDNS manchmal träge reagiert?

    Einen Kommentar schreiben:


  • Lacroix
    antwortet
    Vielen Dank für eure Tipps und Ansätze! Ich werde der Sache die Tage nachgehen.
    Langsam bekomme ich das Gefühl, es liegt generell an der Verbindung zum Pi (von außen). Wenn ich von außen /Alexa oder /smartvisu aufrufen möchte, dauert es manchmal 10-20s bis das Zertifikat-Prompt erscheint. Manchmal kommt das PopUp aber auch direkt.

    Gruß

    Einen Kommentar schreiben:


  • AndreK
    antwortet
    Hi Lacroix ,

    zunächst würde ich den Versuch übers WEB-Interface, wie von Jürgen beschrieben, machen. Wenn das ohne Problem funktioniert solltest Du prüfen welche Anfragen
    im WEB-Interface im Protokoll bei Dir ankommen. Sollte hier schon nichts ankommen müsste die Suche in den NGINX-Logs und in den Cloudwatch Logs der Amazon-AWS-Konsole weitergehen. Am einfachsten findest Du die Probleme wahrscheinlich in den Cloudwatch Logs.

    Solltest Du nicht weiterkommen melde Dich nochmal.

    Viele Grüsse
    Andre

    Einen Kommentar schreiben:


  • Jürgen
    antwortet
    Hallo,

    zunächst eine Anmerkung: Du solltest einheitlich bleiben, also nicht Küchefenster und Küchenfesnter mischen..
    Funktioniert denn alles aus dem Webinterface des SHNG ohne Verzögerung?
    Bei mir habe ich ab und an Verzögerungen bei der Spracheingabe, dann hilft ein Reboot des Echos...

    Gruß Jürgen

    Einen Kommentar schreiben:


  • Lacroix
    antwortet
    Hallo zusammen, ich muss leider nochmals nachfragen, da ich nicht wirklich weiterkomme. Die Formulierung kann ich nun ausschließen, da es auch direkt über die Alexa App nur sporadisch funktioniert. Auch in der App steht öfter "Gerät reagiert nicht". Stellenweise funktionieren die Geräte trotzdem und die Meldung verschwindet kurz. Mittlerweise habe ich schon mehrere Lampen und auch Jalousien eingebunden. Grundsätzlich funktionieren alle Geräte, aber leider nur hin und wieder. So macht die Sprachsteuerung leider keinen Spaß. Hier ein Beispielcode einer Lampe:

    Code:
    lichtfenster:
    name: Licht Fenster
    type: bool
    knx_dpt: 1
    knx_send: 0/1/21
    knx_listen: 0/4/21
    knx_cache: 0/4/21
    alexa_name: Licht Küchenfenster
    alexa_description: Licht Küchenfenster
    alexa_device: Licht_kuechefenster
    alexa_actions: TurnOn TurnOff
    alexa_retrievable: true
    alexa_icon: LIGHT
    Hat jemand vielleicht eine Idee woran das liegen könnte oder einen Ansatz um die Sache zu untersuchen? Vielen Dank vorab!

    Gruß
    Angehängte Dateien

    Einen Kommentar schreiben:


  • Lacroix
    antwortet
    Mhm okay, danke für den Hinweis. Dann werde ich versuchen auf die Formulierung zu achten.
    Alexa hat damit Probleme auch wenn ich 10x genau den selben Wortlaut verwende? Dann geht es trotzdem manchmal und manchmal nicht?

    Einen Kommentar schreiben:


  • schuma
    antwortet
    Das liegt leider an Alexa und den benutzten Schlagwörtern.
    Bei mir ist es am schlimmsten mit dem Wort „Rolladen“ in Kombination mit anderen Worten. Das schnallt die Lady irgendwie nicht so richtig.

    Da hilft nur ausprobieren welche Worte am besten erkannt werden. Ich habe den Eindruck, wenn die Funktionen für Alexa eigene Sachen benutzt werden wird es schwieriger.

    Ich habe deshalb bei mir fast nur noch Szenen die ich ansteuere mit Alexa. Das funktioniert definitiv am besten und eigentlich immer problemlos. Beispiel im WZ „aktiviere Szene beschatten“

    Grüße, Marc

    Einen Kommentar schreiben:


  • Lacroix
    antwortet
    Guten Tag zusammen,

    nach mehreren Anläufen habe ich es nun geschafft, das Alexa Plugin zum laufen zu bringen. Meine Nginx Config war bisher wohl nicht ganz richtig.
    Ich kann nun Lampen über Alexa schalten, aber das leider nicht immer. Oft läd Alexa vor sich hin und sagt dann nach ca. 10s "Gerät nicht verfügbar". Manchmal geht es 3x hintereinander gut. Dann wieder nicht. Hatte jemand vielleicht schon das gleiche Problem oder hat eine Idee wie ich die Ursache ermitteln könnte? Danke vorab.

    Gruß

    Einen Kommentar schreiben:


  • jonsson
    antwortet
    Cannon grazie mille!
    Normal bekomme ich dafür ja einen e-Mail reminder, aber ja, das wars!

    Einen Kommentar schreiben:


  • Cannon
    antwortet
    Zitat von jonsson Beitrag anzeigen
    ich sags gleich, ich habe nicht verändert 😋 - trotztem ging die Alexa Integration von einem Tag auf den anderen nicht mehr, "Gerät reagiert nicht".
    Schau mal, ob das Zertifikat abgelaufen ist. Das Zertifikat muss mittels certbot immer wieder aktualisiert werden.

    Einen Kommentar schreiben:


  • jonsson
    antwortet
    Hallo zusammen,

    ich sags gleich, ich habe nicht verändert 😋 - trotztem ging die Alexa Integration von einem Tag auf den anderen nicht mehr, "Gerät reagiert nicht".
    Skill in der iOS app deaktiviert.
    -> aktivieren geht nicht mehr. "Verknüpfung mit smarthomeNG konnte diesmal nicht hergestellt werden"
    -> plugin backend geht nach wie vor, "test-functions" der Items mit TurnOff/TurnOn gehen nach wie vor um Items zu schalten.

    Habe jetzt ein wenig zugewartet, weil ich dachte, e.v. eine Änderung am AWS oauth, dann müssten vermutlich mehrere Beiträge hier kommen, aber nichts dergleichen.

    Habt ihr eine Idee wo ich ansetzen kann den Fehler zu suchen?

    Danke
    Johannes

    Einen Kommentar schreiben:


  • cypher2000
    antwortet
    Das Problem mit der Socketverbindung (nginx auf einem anderen Server) habe ich auch. smartVisu wird angezeigt aber websocket Fehler.

    Allerdings finde ich auch keine Geräte über die Alexa App. Denn Skill habe ich gefunden und hinzugefügt.
    Als Tests habe ich bisher folgendes gemacht:
    - Per Browser kommt er über https://meine.dynddns.me/alexa auf die gleiche Seite wie von intern über http://IP:9000. Somit würde ich sagen Nginx klappt?
    - Wenn ich in der Plugin Oberfläche schaue wird mir mein Alexa device gelistet. Und kann auch über Test Functions geschaltet werden.

    Wo kann ich jetzt weiter ansetzen? Wie kann ich das nun troubleshooten?
    In der Lampda Funktion? In einem Nginx log?

    Danke für eure Hilfe...
    Chris

    PS: Ich hab den Fehler gefunden. Im Nginx access.log kam nichts an. Daher hab ich die Lamdba Funktion nochmal neu gemacht. Nun klappt es. Das Socketverbindungsthema bleibt. Kann man hier auf einen baldigen Fix hoffen?
    Zuletzt geändert von cypher2000; 04.02.2021, 14:50.

    Einen Kommentar schreiben:


  • Cannon
    antwortet
    Zitat von Jürgen Beitrag anzeigen
    zu den Warnungen steht einiges in den Kopfbeiträgen 1.8 / 1.8.1 released.
    Ja aber leide rnicht genug. Das was da stand war, dass die irgendwo definiert werden sollen. Wenn wir hier aber über das Alex-plugin reden, dann sollten die doch im plugin definiert worden sein, damit es keine Warungen gibt, richtig?

    Zitat von Jürgen Beitrag anzeigen
    Das Sperren eines Items machst Du am besten über eine & Verknüpfung mit der Freigabe Adresse.
    Das habe ich nicht verstanden. Was meinst du damit?

    Einen Kommentar schreiben:

Lädt...
X