Ankündigung

Einklappen
Keine Ankündigung bisher.

Amazon Alexa Plugin

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

    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.

    Kommentar


      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

      Kommentar



        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

        Kommentar


          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....

          Kommentar


            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

            Kommentar


              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.

              Kommentar


                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.

                Kommentar


                  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.

                  Kommentar


                    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

                    Kommentar


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

                      Kommentar


                        Hä? Im idealen Setting leitet die Fritzbox gar nichts an den SmartHome Server. Bei mir geht alles über 443 gegen NGINX und von dort dann gegen SmartHome... das ist ja auch der Sinn der Sache eines Basic Auth geschützten ReverseProxies

                        Kommentar


                          Aber meine Fritze (Router) hängt doch vor meinem Smarthome Server und auf dem läuft NGINX. So gesehen geht das doch nicht anders... Nun kapier ich gar nix mehr..... Meine DNNS geht doch an meine Fritzbox und von dort aus je nach Portforward an die unterliegenden Geräte.
                          Zuletzt geändert von Roho0303; 27.03.2017, 15:46.

                          Kommentar


                            roho ja aber du solltest gegen NGINX routen, dort wird ja nur das durchgelassen, was durchgelassen werden soll.. nginx ist quasi dein filter für eingehende requests. ich habe das ding sogar auf einem eigenen raspi, um auch die hardware getrennt zu halten

                            smarthome hängt dann am ende der kette und wird nur noch auf dem dedizierten alexa port getriggert.

                            PS: ich glaube du meinst mit "SmartHome Server" nur die Maschine auf der NGINX läuft... NGINX sollte dann annehmen und auf den port von smarthome routen... für mich war "SmartHome Server" die Software SmartHomeNG, was sich ja wie ein server verhält.

                            Kommentar


                              Ok, das verstehe ich. Macht so auch Sinn. Nun ist es aber für den Moment so, das ich nxing nur für Alexa benötige und aus diesem Grund der Weg über den Forward.

                              Kommentar


                                Roho0303 ja korrekt... das nginx ist zudem der https endpunkt, sh kann ja nur http... ich nutze nginx bspw noch um für geofancy das network plugin zu erreichen.

                                Kommentar

                                Lädt...
                                X