Ankündigung

Einklappen
Keine Ankündigung bisher.

Alexa4p3 für Dummies

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

    Glückwunsch!
    Erstmal ein Backup machen

    Kommentar


      Alexa wird bei mir nie ins Haus kommen, aber es gäbe bestimmt ein paar, die sich über das Gießen der Erkenntnisse in eine schöne Doku mit Screenshots etc. freuen würden. Direkt als user_doc ins Pluginverzeichnis, dann landet es auf www.smarthomeng.de
      Zuletzt geändert von bmx; 22.10.2020, 12:32.

      Kommentar


        Onkelandy - das mache ich natürlich gerne - ich guck mal, was ich da zusammenstellen kann - sollte nur alles Hand und Fuß haben - und ich dachte, dass kann ich beim besten mit einem zweiten - und richtigerem - Durchgang bewerkstelligen - aber das ist weit gefehlt.

        (Aber ich befürchte - wenn ich es nachher verstanden habe, verstehen es wirklich alle )

        Da bin ich also wieder hier mit meinem Problemchen und muss den Kids erklären, warum die Mutti schon wieder vor der Kiste hockt und nichts geht, wobei doch neulich schon "alles" funktioniert hat...

        Und jaaa - ich hab natürlich zuerst ein Image gezogen! Und - ich hab die SD-Card zur Seite gelegt und mir 2 neue gekauft.

        Aufgrund der Tatsache, dass ein abgesetzter Proxy immer noch besser ist, als alles auf einer Maschine zu lagern habe ich mir auch noch eine zweite Raspi besorgt.

        ... und dann bin ich lustig ans Werk gegangen - hab den SHNG auf der 192.168.222.4 installiert - schalten der Lampen über Visu klappte.
        Auf der 192.168.222.2 hab ich das Image nochmal hergenommen, diesmal aber nur den NGINX konfiguriert.

        Von Außen erreiche ich den NGINX - auch die Smartvisu wird noch geladen - allerdings kommt nach kurzer Zeit der berühmte EckenError mit der Fehlermeldung: Could not connect to smarthome.py server! Websocket error undefined.

        Es hat nichts wie in anderen Beiträgen schon behandelt mit meinem Browser zu tun. Es ist völlig egal, mit welchem Broswer oder welchem Endgerät ich auf die Seite zugreife - der Fehler bleibt der gleiche (und kommt nicht erst nach etwa 60 Sekunden, sondern schon nach 2).

        Ich habe jetzt alle möglichen verschiedenen Einträge gemäß Forenvorschlägen in der https.conf ausprobiert, komme aber nicht weiter. Ich vermute - ich hab einfach nicht verstanden, wie ich die Weiterleitung mit dem Proxy auf den SHNG richtig bewerkstellige. Die Beiträge im Forum und die ergoogelten Informationen haben mich hier einfach nicht zu einem passenden Ergebnis bringen können. Deswegen frag ich jetzt wieder die Fachmänner (Fachfrauen - falls denn welche anwesend sind natürlich auch!)

        Stand aktuell ist jetzt also wie folgt:

        Raspi 1 mit NGNIX auf 192.168.222.2 hat die Anleitung von schuma in allen Teilen auf dem Gerät durchlaufen, also alles, was den NGINX betrifft (mehrfach unterdessen).

        Auf Raspi 2 läuft der SHNG mit der Visu und dem Zugriff auf den Bus (wobei die Visu nicht funktioniert - ich kann aber via Console schalten - also knxd funktioniert..!)

        Kurz also folgendes Szenario:

        - mit www.meine-domain.de erreiche den NGINX ("Welcome to nginx")
        - mit www.meine-domain.de/smartvisu erreiche ich zwar problemlos die Oberfläche allerdings mitsamt dem Error (Stati von Lampen werden nicht dargestellt, Änderungen natürlich nicht angenommen)
        - mit 192.168.222.4:8383 erreiche ich lokal die AdminOberfläche NICHT (Verbindung verweigert)
        - mit 192.168.222.2:8383 erreiche ich problemlos die AdminOberfläche
        - ich erreiche sowohl mit 192.168.222.2/smartvisu - wie auch mit der 192.168.222.4/smartvisu die SmartvisuOberfläche, allerdings jeweils mit dem bekannten error

        An einigen Ecken und Enden hatte ich schon bekannte Schwierigkeiten, die ich - dank der Rückmeldungen in den Beiträgen zu meinen vorhergehenden Problemen - selbständig lösen konnte. Viele Befehle, die Ihr mir mit an die Hand gegeben habt, machen auf Dauer das Leben leichter (oder einfach das System/Linux durchsichtiger).

        Onkelandy - ich mach gerne zum Schluss auch mal die "Zusammenfassung für Dummies" - (falls das nicht rechtlich geschützt ist - sonst eben unter anderem Namen") - aber dann sollte das auch wuppen
        Zuletzt geändert von 2malmama; 24.10.2020, 18:01.

        Kommentar


          Hallo @2malmama,

          gehe mal in smartVISU auf die Config-Seite und wähle dort im linken Menü die smarthomeNG-Seite. Unter den beiden Plots kommt dann u.a. eine Zeile io connection. Ich vermute, dass dort "wss://192.168.222.4:2424 steht. (?)

          Wenn das der Fall ist, kommuniziert der Browser verschlüsselt über https mit smartvisu. Er verweigert dann aber ein Downgrade bei der Kommunikation auf dem Websocket und verlangt ebenfalls verschlüsseltes wss. Das erfordert aber separate Schlüssel und Zertifikate für den Websocket von shNG und das Einschalten der Option TLS im shNG Websocket Plugin. Bisher hat das noch niemand zum Laufen gebracht und wir wissen nicht einmal, ob die aktuelle Version vom Websocket-Plugin wss überhaupt richtig unterstützt.

          Die Maßnahme ist daher, dass der nginx auf 192.168.222.2 nur nach außen ins Internet https verwenden darf, aber nach innen (zu 192.168.222.4) unverschlüsselt über http und ws kommunizieren muss.

          Gruß
          Wolfram

          Kommentar


            Zitat von wvhn Beitrag anzeigen
            smarthomeNG-Seite. Unter den beiden Plots kommt dann u.a. eine Zeile io connection. Ich vermute, dass dort "wss://192.168.222.4:2424 steht. (?)
            Ich bin vermutlich wieder mal blind - aber ich finde da keine Zeile "io connection"

            Du meinst sicher die Zeile mit dem Systemstart etc, aber da kommt bei mir gar nix (bin auf der 222.4 (dem SHNG)):

            smarthome io.PNG


            Kommentar


              Zitat von wvhn Beitrag anzeigen
              Die Maßnahme ist daher, dass der nginx auf 192.168.222.2 nur nach außen ins Internet https verwenden darf, aber nach innen (zu 192.168.222.4) unverschlüsselt über http und ws kommunizieren muss.
              ich hab das jetzt bestimmt hundert mal gelesen und überlegt, was das für mich bedeutet....

              Das Problem an sich ist mir ja - glaube ich zumindest - jetzt klar. Aber wie erklär ich denn meinem NGINX (222.2), dass er intern "nur noch unverschlüsselt darf"


              Ich hab schon mal versucht in der https.conf vom NGINX meinen 222.4 dazuzuschreiben - das brachte mich aber nicht weiter. Ich hab sämtliche Versuche unterdessen wieder eingestampft. Da gab's ja auch schon den ein oder anderen Hinweis im Forum (bezogen auf das Problem bzgl. dem Fehler mit der smarthome.py server connection), dem ich da gefolgt war.

              [mir fehlt grad mal wieder der Smiley mit der am Kinn kratzenden Hand - geht Euch das eigentlich manchmal genauso] - tschuldigung - war offTopic

              Kommentar


                Oh nein. Ich bin blind. Die Funktion habe ich erst für die nächste Version entwickelt. Bitte entschuldige

                Es reicht aber auch ein Blick in die Adresszeile des Browsers. Wenn da https steht, trifft der geschilderte Sachverhalt zu.

                Gruß
                Wolfram

                Kommentar


                  Zitat von wvhn Beitrag anzeigen
                  Oh nein. Ich bin blind. Die Funktion habe ich erst für die nächste Version entwickelt. Bitte entschuldige
                  Überhaupt nicht schlimm!!

                  Zitat von wvhn Beitrag anzeigen
                  Adresszeile des Browsers. Wenn da https steht

                  nee - steht da nich - wenn ich das extra dazu eingebe (also extra https vorgebe) - krieg ich die Info, dass die Seite überhaupt nicht erreichbar ist (browserunabhängig -> ERR_CONNECTION_CLOSED)

                  noch ne Idee?

                  Kommentar


                    Zitat von wvhn Beitrag anzeigen
                    Die Funktion habe ich erst für die nächste Version entwickelt
                    btw. welche nächste Version?? (ich kann keinen "nettfragendguckenden" Smiley finden - nehme daher mal den hier: )

                    Kommentar



                      Update:

                      ich hab den Port 80 jetzt mal auf meinem Router gesperrt -> folgendes passiert:

                      - mit www.meine-domain.de erreiche den NGINX ("Welcome to nginx") <- ist jetzt nicht mehr erreichbar
                      - mit www.meine-domain.de/smartvisu erreiche ich zwar problemlos die Oberfläche allerdings mitsamt dem Error (Stati von Lampen werden nicht dargestellt, Änderungen natürlich nicht angenommen)<- ist jetzt nicht mehr erreichbar

                      (sonst wie erwartet keine Veränderung)
                      - mit 192.168.222.4:8383 erreiche ich lokal die AdminOberfläche NICHT (Verbindung verweigert)
                      - mit 192.168.222.2:8383 erreiche ich problemlos die AdminOberfläche
                      - ich erreiche sowohl mit 192.168.222.2/smartvisu - wie auch mit der 192.168.222.4/smartvisu die SmartvisuOberfläche, allerdings jeweils mit dem bekannten error

                      Kommentar


                        hilft es, wenn ich Euch die https.conf vom 192.168.222.2 (NGINX) hier poste?

                        Kommentar


                          da ich im error.log und im access.log keine aktuellen Einträge finde (der letzte eintrag im error.log ist von 16:02 . ich aber noch immer sitze und ständig irgendwas rumprobiere, kommt da wohl nichts mehr...

                          irgendwie wird da nichts mehr geplottet Ich hab vorsichtshalber mal die Systemzeit auf dem NGINX gecheckt - die ist aber ok..
                          date
                          Sa 24. Okt 21:44:59 CEST 2020

                          Kommentar


                            Zitat von 2malmama Beitrag anzeigen
                            btw. welche nächste Version?? (
                            die smartVISU im develop-Zweig

                            Zitat von 2malmama Beitrag anzeigen
                            ich hab den Port 80 jetzt mal auf meinem Router gesperrt
                            Das Verhalten legt nahe, dass die Verbindung intern unverschlüsselt läuft. Das wäre in Ordnung.

                            Der Websocket benötigt den Port 2424. Der sollte dann auch an 192.168.222.4 weiter geleitet werden. In Smartvisu muss auf der config-Seite die Verbindung zu shNG eigestellt werden. Normalerweise sollte hier die IP-Adresse 192.168.222.4 stehen und der Port 2424. Wenn der nginx als Reverseproxy auf dem selben System läuft, bleiben beide Angaben leer.

                            Gruß
                            Wolfram

                            Kommentar


                              Guten Morgen

                              den Port 80 lass ich dann jetzt mal zu. So wie es ja auch sein soll.

                              Die Angaben in der SmartVisuConfig hatte ich schon drin.

                              Die access.log zeigt heute überhaupt keinen Eintrag. Die error.log verzeichnet heute Nacht Zugriffe (ich war es nicht - ich hab geschlafen...). Könnte sein, dass das aufschlussreich ist:

                              sudo tail -f /var/log/nginx/error.log
                              2020/10/25 02:58:07 [error] 1834#1834: *10 access forbidden by rule, client: 87.166.58.35, server: meindns.de, request: "GET / HTTP/1.0", host: "meindns.de"
                              2020/10/25 04:19:44 [error] 1834#1834: *21 open() "/var/www/html/login_sid.lua" failed (2: No such file or directory), client: 148.72.133.152, server: meindns.de, request: "GET //login_sid.lua HTTP/1.1", host: "185.53.XXX.XX"
                              2020/10/25 06:46:28 [error] 1834#1834: *23 access forbidden by rule, client: 34.246.218.75, server: meindns.de, request: "POST /alexa/ HTTP/1.1", host: "meindns.de"
                              2020/10/25 08:35:22 [error] 1834#1834: *25 access forbidden by rule, client: 213.32.122.82, server: meindns.de, request: "GET / HTTP/1.1", host: "185.53.XXX.XX"

                              Kommentar


                                Hallo 2malmama ,

                                Deine angestrebte Konfiguration (1 x Raspi mit Nginx, 1 x Rapsi mit shNG + smarVisu) deckt sich mit meiner Konfig. (nur verwende ich beides mal kein Image).
                                Noch mal kurz zu den Vorrausetzungen :
                                - Der Raspi mit shNG + smarVisu erfährt keine weitere Konfig des Nginx, dieser bleibt wie er mit dem Image kommt
                                - Der Raspi mit dem Nginx wird mittels Zertifikaten und Anpassen der "https.conf" entsprechend eingerichtet.
                                - Da nun die shNG und die Visu nicht mehr auf dem gleichen Host laufen muss dem Nginx erklärt werden wohin er weiterleiten soll. Alle Einträge in der https.confg
                                müssen umgeleitet werden. Dies erfolgt in den jeweiligen "locations". Hier müssen folgende Einträge ergänzt werden :
                                Code:
                                 # Zugriff auf die SmartVISU mit Basic Auth
                                    location /smartVISU {
                                        auth_basic "Restricted Area: smartVISU";
                                        auth_basic_user_file /etc/nginx/.smartvisu;
                                
                                        # Zugreifendes Land erlaubt?
                                        if ($allowed_country = no)  {
                                                return 403;
                                        }
                                
                                        proxy_pass http://<SmartVISU Server LAN IP>/smartVISU;
                                        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;
                                    }
                                
                                    # Alexa Plugin Weiterleitung
                                    location /alexa {
                                        auth_basic "Restricted Area: Alexa";
                                        auth_basic_user_file /etc/nginx/.alexa;
                                
                                        # Zugreifendes Land erlaubt?
                                        if ($allowed_country = no) {
                                                return 403;
                                        }
                                
                                        proxy_pass http://<SmartHomeNG LAN IP>:<Alexa Plugin Port>/;
                                        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;
                                    }
                                Wichtig ist hier das korrekte Weiterleiten der Websocketverbindung :

                                Code:
                                # Weiterleitung zu SmartHomeNG (Websocket Schnittstelle) mit Basic Auth
                                    location / {
                                        auth_basic "Restricted Area: smartVISU";
                                        auth_basic_user_file /etc/nginx/.smartvisu;
                                
                                        # Zugreifendes Land erlaubt?
                                        if ($allowed_country = no) {
                                                return 403;
                                        }
                                
                                        # Nur Websocket Verbindungen gegen "/" durchlassen!
                                        if ($http_upgrade = websocket) {
                                                proxy_pass http://<SmartHomeNG LAN IP>:[MARKIEREN]<Websocket Port>[/MARKIEREN];
                                        }
                                        if ($http_upgrade != websocket) {
                                                return 403;
                                        }
                                Der Websocket Port ist standardmäßig 2424

                                Vergleich hierzu auch die Doku auf smarthomeng.de/user

                                Nun zum eigentlichen Problem - wieso kann gibt es den Fehler mit dem Websocket in der Visu?

                                Im Moment is es so geregelt, dass wenn die Felder "Host/IP" und "Port" in der smartVisu-Config leer sind wird über "wss" also Socket via "https" die Verbindung aufgebaut wird. Es wird Port 443 verwendet. Die Weiterleitung auf Port 2424 macht dann der Nginx. Das funktioniert auch.

                                Wenn "Host/IP" und "Port" leer sind wird Stand heute, die Verbindung über Port "80" hergestellt - Das ist der Fehler !!!

                                Die Funktion "open" im Driver "io_smarthome.py.js" (zu finden in ./smartvisu/driver) setzt den Port auf "80" wenn nicht "https".

                                Es gibt auch die Möglichkeit "Host/IP" + Port je Gerät in der smartVisu-Config zu setzen. Ich glaube aber nicht, das das zielführend ist da je nachdem die Geräte
                                einmal intern via http und einmal extern via https zugreifen.

                                Ich habe mir so beholfen in dem ich die "io_smarthome.py.js" wie folgt angepasst habe.

                                original :
                                =============
                                Code:
                                if (!io.port) {
                                  // use port of current page if not defined and needed
                                  if (location.port != '') {
                                    io.port = location.port;
                                    } else {
                                      if (location.protocol == 'http:') io.port = '80';
                                      if (location.protocol == 'https:') io.port = '443';
                                    }
                                }
                                meine Variante :
                                =============
                                Code:
                                if (!io.port) {
                                  // use port of current page if not defined and needed
                                  if (location.port != '') {
                                    io.port = location.port;
                                    } else {
                                      if (location.protocol == 'http:') io.port = '[MARKIEREN]2424[/MARKIEREN]';
                                      if (location.protocol == 'https:') io.port = '443';
                                    }
                                Ich hatte das nie irgendwo disktutiert / kommentiert da ich mir selbst zu helfen wusste.

                                Hallo wvhn, das wäre eventuell auch noch eine grundsätzliche Anpassung wert. Man könnte nur das Feld "Host/IP" leer lassen und dann den Port wie folgt
                                festlegen :

                                Code:
                                if (location.port != '') {
                                  io.port = location.port;
                                  } else {
                                  if (location.protocol == 'https:') io.port = '443';
                                }
                                also ohne Überprüfung ob if (!io.port). Konnte ich bisher nicht testen - solle aber genauso tun. Die Frage ist was für die User der einfachere / bessere Weg ist
                                - To be discussed -

                                Buh, das wurde aber ein langer Betrag -

                                2malmama - Ich hoffe das bringt dich weiter

                                Einen schönen Sonntag noch

                                Viele Grüsse

                                Andre

                                Kommentar

                                Lädt...
                                X