PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie GPIO aus dem Internet ansteuern (öffentlicher Webserver)



stepbystep
15.03.2018, 15:32
Hallo zusammen,
derzeit kann ich die GPIO's des ESP8266 über mein lokales Wlan ansteuern. Das ist eine feine Sache.
Jetzt möchte ich dies über das Internet realisieren. Vorhanden ist Webspace auf dem ein PHP-Server läuft. PHP-Grundkenntnisse sind vorhanden.
Würde gerne die Funktionalität der Alexa grob nachbilden und im Haushalt Geräte schalten.

Kann mir da jemand über ein paar Stichpunkte die Vorgehensweise andeuten? Geht das überhaupt da die IP-Adresse meines Routers sich ja öfters ändert, wobei die Alexa ja die selben Voraussetzungen hat.
Bin auf Eure Antworten gespannt. Vielleicht haben auch mehrere von Euch Teilinformationen die dann ein Ganzes ergeben?

Vielen Dank

Ceos
16.03.2018, 06:27
okay ... du mischst hier 3 sachen ... ESP aus dem Internet erreichbar machen ... wozu den PHP server? ... was hat Alexa damit zu tun?

der ESP kann ja selber als quasi webserver funktionieren, den aber public ins netz zu legen (port forwarding und dyndns ... oder alternativen, dyndns ist nicht mehr kostenlos glaube ... als stichworte) ist mutig, da du nicht unbedingt vorhersagen kannst was du dir damit für ein einfallstor in dein lokales netz eröffnest

einen externen PHP als befehls-server zu nehmen wäre jetzt nicht unbedingt eine schlechte idee ... dein ESP baut von sich aus eine verbindung mit deinem PHP server auf ("websockets", "sever sent events" oder vergleichbar) und du kannst dich auf dem PHP einloggen, befehle geben und die befehle werden dann über die Verbindung von deinem ESP zum PHP an den ESP weiterlgeleitet
Bonus: du umgehst die dynamische IP, denn dein ESP verbindet sich aktiv mit dem kontroll-server

Alexa macht das auch so ... eine verbindung zu amazon, sprache aufnehmen, zu amazon senden, auswerten lassen und antwort empfangen und ausgeben

HaWe
16.03.2018, 09:34
Hallo zusammen,
derzeit kann ich die GPIO's des ESP8266 über mein lokales Wlan ansteuern. Das ist eine feine Sache.
Jetzt möchte ich dies über das Internet realisieren. Vorhanden ist Webspace auf dem ein PHP-Server läuft. PHP-Grundkenntnisse sind vorhanden.
Würde gerne die Funktionalität der Alexa grob nachbilden und im Haushalt Geräte schalten.

Kann mir da jemand über ein paar Stichpunkte die Vorgehensweise andeuten? Geht das überhaupt da die IP-Adresse meines Routers sich ja öfters ändert, wobei die Alexa ja die selben Voraussetzungen hat.
Bin auf Eure Antworten gespannt. Vielleicht haben auch mehrere von Euch Teilinformationen die dann ein Ganzes ergeben?

Vielen Dank

über no-IP https://my.noip.com erhältst du kostenlose dynamische IPs, und nach meiner Beobachtung funktioniert die Verbindung zum esp8266, auch wenn die öffentliche IP seitens des Providers zeitweise zwischendurch wechselt, vorrausgesetzt, der ESP ist dauerhaft in Betrieb - ansonsten musst du bei no-IP in deinem pers. Account die öffentliche IP manuell updaten.
no-IP bietet auch Tools, um die dyn-IP noch etwas einfacher updaten zu können.

Für Zugriffe von außen musst du einen Port in deinem Internetrouter (meist Port 80) auf deinen esp weiterleiten, man kann den meist per drop-down-Menü erkennen, sobald er mit dem Router lokal verbunden ist.
Diesen Port gibst du dann auch bei der Einichtung deiner url bei no-IP an.

die Verbindung des ESP über das WLAN zum web (ohne php-Server, ggf. zusätzlich zu ESP8266WebServer) wird über die Lib
#include <ESP8266WiFi.h>
eingebunden, per

#define http_port 80
WiFiServer wifiserver(http_port);

wifiserver.begin();

Lit.: https://tttapa.github.io/ESP8266/Chap10%20-%20Simple%20Web%20Server.html


Zu Sicherheitsfragen hat sich ja Ceos bereits geäußert.

stepbystep
18.03.2018, 09:49
Hallo,
vielen Dank für die Antworten. Respekt vor diesen Netzwerkkenntnissen!

Den mutigen ESP-Webserver der GPIO's schaltet habe ich bereits. Interessieren würden mich jetzt Details zu:



einen externen PHP als befehls-server zu nehmen wäre jetzt nicht unbedingt eine schlechte idee ... dein ESP baut von sich aus eine verbindung mit deinem PHP server auf ("websockets", "sever sent events" oder vergleichbar) und du kannst dich auf dem PHP einloggen, befehle geben und die befehle werden dann über die Verbindung von deinem ESP zum PHP an den ESP weiterlgeleitet
Bonus: du umgehst die dynamische IP, denn dein ESP verbindet sich aktiv mit dem kontroll-server

Wie würde der PHP Code aussehen und was muss dann auf dem ESP laufen?

Danke

Ceos
18.03.2018, 13:02
in PHP bin ich leider selber nicht so firm, aber man kann wohl netzwerk sockets aufmachen .... dein ESP baut jetzt eine simple socketverbindung mit dem server über diesen websocket auf und warte auf nachrichten. (alternativ kjannst du auch eine webseite machen die befehle in irgend einem leicht scanbaren format darstellt mit deinem PHP code)

auf einer der webseiten ist dann ein knopf der z.B. das licht einschalten soll, dieser knopf sendet ein POST an den webserver, der dann eine PHP aufruft, welche dann üebr eben deisen offenen socket zu deinem ESP einen befehl sendet (oder er fügt auf der befehlswebseite einfach einen befehl hinzu und dein ESP führt den befehl dann aus und liefert ggf. auch eine erfolgs- oder fehlermeldung zurück)

dieses vorgehen ist aber recht kompliziert zu coden aber sehr viel sicherer


EDIT: ---------------
ich selber experimentiere gerade mit etwas spannenderem, ich habe vor auf einem raspi mit python einen "bottle"-server laufen zu lassen, welcher PHP ähnliche templates verwendet um sowas zu machen

der server selbst ist grundsätzlich abgesichert aber je nachdem wie restriktiv (oder eben nicht) man seine templates baut kann man die sicherheitn erhöhen ... (oder eben vernichten)

die HTML wird vor dem senden geparst, darin befindlicher python code ausgeführt, welcher die fehlkende teile im HTML code ergänzen udn dann an den browser gesenet ... vorteil daran, amn kann auf der seite z.B. buttons anlegen die eine POST anfrage machen udn im python code den request abfangen ohne eine PHP/template seite dafür schreiben zu müssen.