Ankündigung

Einklappen
Keine Ankündigung bisher.

Amazon Alexa Plugin

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

  • Roho0303
    antwortet
    Code:
     
       "errorMessage": "RequestId: a744feea-12fa-11e7-94db-71bf9c646eac Process exited before completing request"

    Einen Kommentar schreiben:


  • Roho0303
    antwortet
    Danke für die Hilfe. So langsam komme ich der Sache näher. Mein Fehler lag bis hier hin darin das ich das Portforwarding nicht richtig eingestellt hatte. Nun passt es aber.

    Fritzbox nimmt Port 9001 und übergibt ihn an Smarthome Server 9001 -> Der dann über nxing an die 9000.

    Nun habe ich folgenden Fehler: Authentifizierung? Jemand eine Idee?
    Code:
     START RequestId: a744feea-12fa-11e7-94db-71bf9c646eac Version: $LATEST 2017-03-27T14:35:41.796Z a744feea-12fa-11e7-94db-71bf9c646eac requesting {"key3":"value3","key2":"value2","key1":"value1"} 2017-03-27T14:35:42.096Z a744feea-12fa-11e7-94db-71bf9c646eac HTTP 401 2017-03-27T14:35:42.098Z a744feea-12fa-11e7-94db-71bf9c646eac raw response: <html>  <head><title>401 Authorization Required</title></head>  <body bgcolor="white">  <center><h1>401 Authorization Required</h1></center>  <hr><center>nginx</center>  </body>  </html>   2017-03-27T14:35:42.100Z a744feea-12fa-11e7-94db-71bf9c646eac SyntaxError: Unexpected token <     at Object.parse (native)     at IncomingMessage.<anonymous> (/var/task/index.js:39:24)     at emitNone (events.js:72:20)     at IncomingMessage.emit (events.js:166:7)     at endReadableNT (_stream_readable.js:905:12)     at nextTickCallbackWith2Args (node.js:437:9)     at process._tickDomainCallback (node.js:392:17) END RequestId: a744feea-12fa-11e7-94db-71bf9c646eac REPORT RequestId: a744feea-12fa-11e7-94db-71bf9c646eac Duration: 433.88 ms Billed Duration: 500 ms Memory Size: 512 MB Max Memory Used: 13 MB RequestId: a744feea-12fa-11e7-94db-71bf9c646eac Process exited before completing request

    Einen Kommentar schreiben:


  • psilo
    antwortet
    Roho0303
    Was genau für ein Pfad kommt den eigentlich in die AWS? SMARTHOME_PATH -> Was genau muß da rein?
    bspw. "/alexa/" -> der Pfad auf dem man im NGINX die ReverseProxy Regel gemapped hat

    Wenn ich etwas an der Config datei von nxing ändere, muss ich das Zertifikat neu erstellen? Oder spielt das keine Rolle?
    m.E. nein, weil das Zertifikat auf den dyndns Namen hört

    Allgemein gibt es viele super Tutorials zum Thema NGINX, wenn man versteht was man konfiguriert, macht das einiges einfacher. Ich habe auch noch zusätzliche Sicherheiten wie Prüfung des Anfragenden Landes, http_referrer und user_agent drin.

    Anbei meine Weiterleitungsregel und ein bischen mehr drumherum, viell. hilfts - Man sieht, dass Port 443 mit Kontextpfad /alexa/ auf meine http SmartHomeNG Instanz mit dem im Alexa Plugin definierten Port 9000 weiterleitet:
    Code:
    [...]
    
    server {
    server_tokens off;
    
    listen 443 ssl default_server;
    server_name myname.myds.me;
    
    
    ##
    # SSL
    ##
    
    ssl on;
    ssl_certificate /etc/letsencrypt/live/myname.myds.me/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/myname.myds.me/privkey.pem;
    ssl_session_cache builtin:1000 shared:SSL:10m;
    ssl_ciphers     HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!RC4;
    
    ##
    # HSTS
    ##
    
    add_header Strict-Transport-Security "max-age 31536000; includeSubDomains";
    
    ##
    # global
    ##
    
    root /var/www/myname.myds.me;
    index index.php index.htm index.html;
    
    location / {
                    #try_files $uri $uri/ =404;
                    return 403;
    }
    
    [...]
    # weitere Location Angaben
    [...]
    
    location /alexa {
                    auth_basic "Restricted Area: Alexa";
                    auth_basic_user_file /etc/nginx/.alexa;
    
                    if ($allowed_country = no) {
                            return 403;
                    }
                    proxy_pass http://192.168.178.100:9000/;
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header X-Forwarded-Proto $scheme;
            }
    }
    Zuletzt geändert von psilo; 27.03.2017, 14:48.

    Einen Kommentar schreiben:


  • Roho0303
    antwortet
    Der nginx test sagt auich das alles i.o. ist mit der Config. Ich bekomme auch keine Fehler im Error Log.... Gibt es sonst eine möglichkeit die erfolgreiche einstellung/installation zu testen? ALso anders gesagt, wie kann ich prüfen ob xing so arbeitet das es für das Alexa Plugin funktioniert?
    Zuletzt geändert von Roho0303; 27.03.2017, 10:46.

    Einen Kommentar schreiben:


  • Roho0303
    antwortet
    Ich bin mir noch nicht sicher ob es wirklich an nginx liegt.

    Was genau für ein Pfad kommt den eigentlich in die AWS? SMARTHOME_PATH -> Was genau muß da rein?

    Auf welches Verzeichnis ich das Zertifikat habe erstellen lassen also var/www/html ist davon unabhängig oder?

    Wenn ich etwas an der Config datei von nxing ändere, muss ich das Zertifikat neu erstellen? Oder spielt das keine Rolle?


    Noch etwas ist mir aufgefallen. Das Alexa Plugin mekdet dann das der Port belegt ist wenn die Weiterleitung von Extern nach intern auf den gleichen Port erfolgt, seltsam oder? Also xxxx.ddns.net:0815 wird auf 192.168.178.22:0815 weitergeleitet -> Dann kommt der Fehler.



    Danke und Gruß
    Zuletzt geändert von Roho0303; 27.03.2017, 10:45.

    Einen Kommentar schreiben:


  • hotzen
    antwortet
    Weiß nicht genau ob es was bei ssl Bzgl CN eintrag, letsencrypt und certbot mit einem non Standard Port zu beachten gibt. Würde ich mal googlen.

    aber seh es so, du musst nur nginx zum laufen bekommen. Das kann man alles prima googlen & stackoverflown

    Einen Kommentar schreiben:


  • Roho0303
    antwortet
    Ok, ich hab zwar keine Ahnung von wem aber ich habe nun den Port intern zurück auf den Standard gestellt. Ich forwarde jetzt also den Port 8089 an die 9000. in der config von nginx geändert und zertifikate neu erzeugt:

    Code:
    # SSL-Redirect & LetsEncrypt Endpoint
    server {
            listen 80 default_server;
    
            # redirect every requested $host (any, even invalid ones) to its SSL URL
            location / {
                    return 301 https://$host$request_uri:8089;
            }
    
            # LetsEncrypt Endpoint
            location /.well-known {
              allow all;
              alias /var/www/.well-known;
            }
    }
    
    # Sitemap
    server {
            listen 8089 ssl default_server;
    
            access_log /var/log/nginx/sitemap.log combined;
            auth_basic "alexa";
            auth_basic_user_file /etc/nginx/htpasswd;
            include /etc/nginx/include.d/common;
    
            #add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    
            location / {
                    root /var/www/sitemap;
                    index index.html;
            }
    }
    
    # Alexa
    server {
            listen 8089  ssl;
            server_name xxxx.ddns.net;
            access_log /var/log/nginx/alexa.log combined;
            auth_basic "alexa";
            auth_basic_user_file /etc/nginx/htpasswd.alexa;
            include /etc/nginx/include.d/common;
    
            location / {
                    proxy_pass http://192.168.178.168:9000/;
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
    }
    
    # ANOTHER-SERVICE.YOUR-HOME.DYNDNS.TLD

    Es gibt keine Fehlermeldung mehr und smarthome sagt mir das das Alexa Plugin gestartet wurde. Leider bringt der Test auf der AWS Lambda immer noch keinen Erfolg und folgenden Fehler:

    Code:
     
     {   "errorMessage": "write EPROTO",   "errorType": "Error",   "stackTrace": [     "Object.exports._errnoException (util.js:870:11)",     "exports._exceptionWithHostPort (util.js:893:20)",     "WriteWrap.afterWrite (net.js:763:14)"   ] }

    Wenn ich im Browser direkt versuche auf den Link Https:\\xxxx.ddns.net:8089 zuzugreifen dann kommt diese Fehlermeldung.


    Code:
    Fehler: Gesicherte Verbindung fehlgeschlagen
    
    Ein Fehler ist während einer Verbindung mit xxxx.ddns.net:8089 aufgetreten. SSL hat einen Eintrag erhalten, der die maximal erlaubte Länge überschritten hat. Fehlercode: SSL_ERROR_RX_RECORD_TOO_LONG
    
        Die Website kann nicht angezeigt werden, da die Authentizität der erhaltenen Daten nicht verifiziert werden konnte.
        Kontaktieren Sie bitte den Inhaber der Website, um ihn über dieses Problem zu informieren.
    Oh man....

    Einen Kommentar schreiben:


  • henfri
    antwortet

    2017-03-26 13:54:40 INFO Main Alexa: service setup at 192.168.178.168:8089 2017-03-26 13:54:40 ERROR Main Plugin alexa exception: [Errno 98] Die Adresse wird bereits verwendet


    Port wird schon benutzt

    Einen Kommentar schreiben:


  • Roho0303
    antwortet
    Ok, jetzt hat das mit dem certifikat schon mal funktioniert. Nachdem ich den 80 und den 443 Port aufgeschaltet hatte und den Pfad für den certificatstest nochmal geändert habe.

    Der Pfad war bei mir /var/www/html/....

    Wie auch immer, soweit so gut. -> Es wird langsam...

    Nächstes Problem:

    Nun started das Alexa Plugin nicht mehr korrekt da ich die folgende Meldung bekomme.

    Jemand eine Idee?

    Code:
    017-03-26  13:54:37 WARNING  Main         --------------------   Init smarthomeNG 1.2.451   --------------------
    2017-03-26  13:54:37 INFO     Main         Init Scheduler
    2017-03-26  13:54:37 INFO     Main         Init Plugins
    2017-03-26  13:54:39 INFO     Main         Init UZSU
    2017-03-26  13:54:39 INFO     Main         OperationLog MeldelisteConfigPuffer: logging to file /usr/local/smarthome/var/log/operationlog/{name}-{year:04}.log, keeping 100 entries in memory, caching active
    2017-03-26  13:54:39 INFO     Main         OperationLog Meldeliste_IPCAM: logging to file /usr/local/smarthome/var/log/operationlog/{name}-{year:04}.log, keeping 100 entries in memory, caching active
    2017-03-26  13:54:39 INFO     Main         OperationLog Meldeliste: logging to file /usr/local/smarthome/var/log/operationlog/{name}-{year:04}.log, keeping 100 entries in memory, caching active
    2017-03-26  13:54:40 INFO     Main         Init AVM Plugin
    2017-03-26  13:54:40 INFO     Main         Alexa: service setup at 192.168.178.168:8089
    2017-03-26  13:54:40 ERROR    Main         Plugin alexa exception: [Errno 98] Die Adresse wird bereits verwendet
    Traceback (most recent call last):
      File "/usr/local/smarthome/lib/plugin.py", line 63, in __init__
        plugin_thread = PluginWrapper(smarthome, plugin, classname, classpath, args, instance)
      File "/usr/local/smarthome/lib/plugin.py", line 108, in __init__
        exec("self.plugin.__init__(smarthome{0})".format(args))
      File "<string>", line 1, in <module>
      File "/usr/local/smarthome/plugins/alexa/__init__.py", line 43, in __init__
        service_host, int(service_port), service_https_certfile, service_https_keyfile)
      File "/usr/local/smarthome/plugins/alexa/service.py", line 19, in __init__
        self.server = HTTPServer((host, port), handler_factory)
      File "/usr/lib/python3.4/socketserver.py", line 429, in __init__
        self.server_bind()
      File "/usr/lib/python3.4/http/server.py", line 133, in server_bind
        socketserver.TCPServer.server_bind(self)
      File "/usr/lib/python3.4/socketserver.py", line 440, in server_bind
        self.socket.bind(self.server_address)
    OSError: [Errno 98] Die Adresse wird bereits verwendet
    2017-03-26  13:54:40 INFO     Main         Init Items

    Einen Kommentar schreiben:


  • hotzen
    antwortet
    Du musst dem certbot das Verzeichnis als Pfad mitgeben, in den er die responses speichern soll. Bei mir z. b. /var/www
    dann versucht letsencrypt per http/80 die responses zu verifizieren.

    Einen Kommentar schreiben:


  • Roho0303
    antwortet
    Habe jetzt beide Ports freigegeben als die 80 auf dei 8085 und die 443 auf die 443. Leider kommt der gleiche Fehler:

    Code:
    - The following errors were reported by the server:
    
       Domain: xxxx.ddns.net
       Type:   unauthorized
       Detail: Invalid response from
       http://xxxx.ddns.net/.well-known/acme-challenge/0mw_Hd04mUcOuo8n2dij-TuwbWb1cj5Yypba0-P1OQw:
       "<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
       <html><head>
       <title>404 Not Found</title>
       </head><body>
       <h1>Not Found</h1>
       <p"
    
       To fix these errors, please make sure that your domain name was
       entered correctly and the DNS A record(s) for that domain
       contain(s) the right IP address.

    Ich frage mich wie genau diese ACME-Challenge funktioniert. Weil es gibt das Verzeichnis nicht wirklich bei mir auf dem Server. Hier ist nach http://xxxx.ddns.net/.well-known/... Schluß.

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Für letsencrypt musst du zumindest temporär auf den Port des Webserver weiterleiten.
    Und zwar wahrscheinlich die Standard Ports. Also z.B. von Port 80 auf 8085 und Port 443 auf den ssl Port deines Webserver

    Einen Kommentar schreiben:


  • Roho0303
    antwortet
    So ist es. xxxx ist ein Platzhalter. Generell ist es aber so das meine ddns Adresse erstmal nicht genutzt wird um mein Smarthome fernzusteuern. Ich habe also keine weiterleitung von Port 80 auf meinen internen smartvisu webserver port (8085). Ich habe nun lediglich eine Weiterleitung des Ports 8089 an der fritz box auf den Port 8089 in meinem Smarthome Server (diesen habe ich dann in der Alexa Plugin config angepasst.) -> Aber soweit komme ich ja gar nicht...


    Code:
       
    [alexa]
        class_name = Alexa
        class_path = plugins.alexa
    #   service_host = "0.0.0.0"
        service_port = 8089

    Einen Kommentar schreiben:


  • hotzen
    antwortet
    Nur im sicherzugehen, du kennst ddns.net und andere dynamische dns Dienste und schreibst hier nur xxx.ddns.net weil du den vollen hostname hier im Forum nicht nennen willst - ODER?

    Einen Kommentar schreiben:


  • Roho0303
    antwortet
    Code:
    fehlt da die Freigabe des well-known dirs für das letsencrypt Challenge response Verfahrens?
    Das kann sein, die frage ist nur wo setze ich hier welche freigabe?

    Code:
    Could not connect to xxx.ddns.net" doch sehr deutlich?
    Sorry, aber für mich leider nicht, das sagt mir nur das es nicht funktioniert.

    Also ich versuche mich dem Problem mal Schrittweise zu nähern:

    1) Was genau für Portfreigaben sind erforderlich um ein Zertifikat zu erstellen? Ich habe ein bisschen rumgesucht und bin immer wieder darauf gestoßen das der Port 80 oder 443 auf der Fritzbox freigegeben sein muß? Und dann muß dieser auf den Webserver Port der Smartvisu zeigen? So das ich die Smartvisu aus dem Inetz ereichen kann?

    Wenn ich also meine Visu aus dem Inet erreicbar mache, was ich grundsätzlich erstmal nicht möchte bekomme ich folgende Meldung:


    Code:
    Failed authorization procedure. xxx.ddns.net (http-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Could not connect to xxx.ddns.net
    
    IMPORTANT NOTES:
     - The following errors were reported by the server:
    
       Domain: xxx.ddns.net
       Type:   connection
       Detail: Could not connect to xxxx.ddns.net
    
       To fix these errors, please make sure that your domain name was
       entered correctly and the DNS A record(s) for that domain
       contain(s) the right IP address. Additionally, please check that
       your computer has a publicly routable IP address and that no
       firewalls are preventing the server from communicating with the
       client. If you're using the webroot plugin, you should also verify
       that you are serving files from the webroot path you provided.

    2) Hier nochmal meine Configs, vielleicht ist auch hier ein Fehler drin:


    Code:
     
     user www-data; worker_processes 2; pid /run/nginx.pid;  events {         worker_connections 768;         # multi_accept on; }  http {         sendfile on;         tcp_nopush on;         tcp_nodelay on;         keepalive_timeout 65;         types_hash_max_size 2048;         server_tokens off;          # server_names_hash_bucket_size 64;         # server_name_in_redirect off;          include /etc/nginx/mime.types;         default_type application/octet-stream;          ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE         ssl_prefer_server_ciphers on;          access_log /var/log/nginx/access.log;         error_log /var/log/nginx/error.log;          gzip on;         gzip_disable "msie6";          # gzip_vary on;         # gzip_proxied any;         # gzip_comp_level 6;         # gzip_buffers 16 8k;         # gzip_http_version 1.1;         # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;          # include /etc/nginx/conf.d/*.conf;         include /etc/nginx/sites-enabled/*; }
    Code:
    # letsencrypt shizzle
    ssl_certificate /etc/letsencrypt/live/xxx.ddns.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/xxx.ddns.net/privkey.pem;
    
    ssl_stapling on;
    ssl_stapling_verify on;
    
    # maintain the .well-known directory alias for letsencrypt & renewals
    location /.well-known {
      auth_basic off;
      alias /var/www/.well-known;
    }


    Code:
     SSL-Redirect & LetsEncrypt Endpoint
    server {
            listen 8089 default_server;
    
            # redirect every requested $host (any, even invalid ones) to its SSL URL
            location / {
                    return 301 https://$host$request_uri;
            }
    
            # LetsEncrypt Endpoint
            location /.well-known {
              allow all;
              alias /var/www/.well-known;
            }
    }
    
    # Sitemap
    server {
            listen 8089 ssl default_server;
    
            access_log /var/log/nginx/sitemap.log combined;
            auth_basic "Alexa";
            auth_basic_user_file /etc/nginx/htpasswd;
            include /etc/nginx/include.d/common;
    
            #add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    
            location / {
                    root /var/www/sitemap;
                    index index.html;
            }
    }
    
    # Alexa
    server {
            listen 8089  ssl;
            server_name xxx.ddns.net;
            access_log /var/log/nginx/alexa.log combined;
            auth_basic "Alexa";
            auth_basic_user_file /etc/nginx/htpasswd.alexa;
            include /etc/nginx/include.d/common;
    
            location / {
                    proxy_pass http://192.168.178.168:8089/;
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
    }
    
    # ANOTHER-SERVICE.YOUR-HOME.DYNDNS.TLD

    Sie Sitemap habe ich nicht erstellt....

    Einen Kommentar schreiben:

Lädt...
X