ESP32/8266 --> Statische IP-Adresse vs. dynamische

Hi zusammen,

sorry, hab zwar grad schon ein Thema am Laufen aber muss noch parallel ein zweites aufmachen :wink:

Es geht um das Thema IP-Adressen (statisch oder nicht statisch) und mDNS.

Bei allen nachfolgenden Betrachtungen soll angenommen werden, dass ein Consumer-Produkt entwickelt wird, das evtl. sogar mehrfach im gleichen Netzwerk betrieben wird.

Angenommen der Ablauf wÀre der folgende.

  1. Der User schaltet das GerÀt ein (ESP32 oder ESP8266 sei mal dahingestellt) .
  2. Der ESP baut einen Accesspoint auf (also WIFI_AP - Modus)
  3. Der User verbindet sich im ersten Schritt mit diesem Accesspoint und gibt seine WLAN-Zugangsdaten in ein Formular ein (Vorab: den Login-Manager von FIPS hab ich mir schon angeschaut :wink: hat mich in der Sache aber nicht wirklich weiter gebracht)
  4. Der User klickt auf "Verbinden"
  5. Der ESP wechselt in den Station-Modus (WIFI_STA) und verbindet sich mit dem Router.

Bis hierhier ist alles klar, krieg ich hin!
Nur: Wie gelangt der User nun am smartesten zu der IP-Adresse, ĂŒber die er den ESP im Netzwerk erreicht?

Möglichkeit 1:
Ich vergebe KEINE statische IP-Adresse. Die IP-Adresse wird dynamisch generiert und mir per WiFi.localIP() angezeigt. Problem hier ist aus "Anwendersicht": Diese dynamisch generierte IP-Adresse muss dem Anwender ja irgendwie mitgeteilt werden.

Mein aktueller Ansatz hier ist, dass der ESP nach Schritt 4 (siehe oben) nicht in den Station Mode geht sondern in den Mixed Mode (WIFI_AP_STA). Der Anwender kann sich dann mit dem Accesspoint des ESP verbinden und per 192.168.4.1 mit dem Frontend (also dem Webserver).
Dort wird im dann die dynamisch generierte IP-Adresse angezeigt.

NatĂŒrlich kann man mit mDNS einen Alias (Host) definieren. Aber soweit ich weiß, funktioniert mDNS Beispielsweise mit Android nicht.

Somit rĂŒckfolgere ich: Bei dynamisch generierter Adresse ist WIFI_AP_STA quasi erforderlich, damit der User eine Möglichkeit hat, an die IP-Adresse zu kommen, korrekt (außer man hat ein Display am GerĂ€t auf dem diese angezeigt wird).

Weitere Probleme, die ich hier bzgl. mDNS sehe: Wenn zwei GerĂ€te im gleichen Netzwerk betrieben werden, wĂŒrden diese beide den gleichen mDNS-Alias verwenden und es gĂ€be einen Namenskonflikt, richtig?

Möglichkeit 2:
Ich vergebe eine statische IP-Adresse. Diese kann ich dem Anwender dann gleich zu Beginn (z.B. auch schon in der Bedienungsanleitung des Produktes) mitteilen. Aber: Woher weiß ich denn, welche IP-Adressen ĂŒberhaupt noch frei sind.

Klar, ich kann einfach mal annehmen, dass folgendes funktioniert (völlig ins Blaue geschossen):

IPAddress staticIP(192, 168, 1, 150);
IPAddress gateway(192, 168, 1, 254);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(192, 168, 1, 254);

Aber weiß ich SICHER, dass diese IP-Adresse noch frei ist?
Und auch dann hab ich das Problem, dass - wenn ein weiteres GerÀt mit der gleichen IP-Adresse im gleichen Netzwerk betrieben wird - ein IP-Adressen-Konflikt entsteht.

Ich weiß, das klingt alles recht abenteuerlich und wie an den Haaren herbeigezogen :wink:
Aber mich interessiert einfach, wie man sowas am elegantesten löst, zukunftssicher und "Idiotensicher".

Ich hoffe, hier eine rege Diskussion auszulösen und bin gespannt auf eure hoffentlich produktiven und wie immer "lieben" VorschlÀge :wink:

LG

Die Wahrscheinlichkeit dafĂŒr, dass das lokale Netz ein 192.168.1.xxx ist ist nicht sehr hoch. Damit fĂ€llt die fest im Programm verankerte IP fĂŒr Fremdnetze weg, zusĂ€tzlich wegen möglicher Doppelung.

Gruß Tommy

vergib Namen mit einem Zufallsanteil - speichere den Zufall in den preferences und bringe individuelle Daten beim Verkauf auf:

ESPirgendwas_4711

gib dem Anwender die Möglichkeit diesen Display-Namen zu Àndern.

Triff keine Annahmen zur IP Konfiguration deines Anwenders.

Dann bleibt aber das Problem, dass spÀtestens wenn der User ein zweites GerÀt mit der statischen IP 192.168.1.150 im Netzwerk betreibt ein IP-Adressen Konflikt besteht

Das wÀre in der Tat eine Möglichkeit
Man hÀtte dann aber einen höheren Aufwand, da bei der Produktion z.b. ein Aufkleber erzeugt werden muss, auf dem der Zufallsname drauf steht.

Cool wĂ€re eben eine Lösung, die ohne zusĂ€tzlichen Aufwand beinder Produktion funktionieren wĂŒrde

Das hatte ich doch bereits geschrieben.

Gruß Tommy

Ok sorry, hatte ich anders verstanden.
Also hab ich mit der statischen IP-Adresse keine Lösung wegen der Gefahr der Doppelung.

nö wieso? Der User meldet sich eh zunÀchst mittels AP um seine Wifi Credentials bekannt zu geben.
Da lÀsst du ihm die anderen Daten auch auswÀhlen.
dein ESPirgendwas_4711 ist nur der Defaultwert
Wenn er das bestÀtigt ist das halt so.
Wenn er es Àndert - auch schön

DrĂŒckt einer nur weiter weiter weiter hat er im Netz halt mehrere ESPirgendwas_ mit unterschiedlichen Nummern und IPs aus seinem DHCP Range.
Einer der liest, hats halt schöner.

oder was ich auch mal gesehen habe, dass der Name mit den letzten Stellen der MAC Adresse endet. Das mĂŒsstest auslesen können und könntest auch als Vorschlagswert verwenden.

Yep, so mach ichs. Danke!
Manchmal muss einen jemand vom Schlauch runterschupsen

@noiasca
Ich war doch etwas vorschnell mit meiner Aussage /Freude:
Das Problem bei mDNS ist ja, dass Android z.B. kein mDNS unterstĂŒtzt.

Von daher wĂ€re ich wieder bei meiner oben beschriebenen Möglichkeit zwei: Ich mĂŒsste statische IP-Adressen vergeben. Aber hier ist das Problem, dass ich ja das Standard-Gateway des Anwenders nicht kenne.

D.h. das hier:

IPAddress local_IP(192, 168, 1, 184);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 0, 0);

Funktioniert mit meiner Fritzbox nicht, das hier aber schon:

IPAddress local_IP(192, 168, 178, 184);
IPAddress gateway(192, 168, 178, 1);
IPAddress subnet(255, 255, 0, 0);

Somit mĂŒsste ich - um Statische IP-Adressen vergeben zu können, doch wissen, was das Gateway des Routers ist - oder steh ich hier schon wieder auf dem Schlauch?

Nachdem der ESP Internetzugriff hat, verbindet der sich zu einem Cloudserver. Der Benutzer loggt sich auch auf diesem ein und kann danach durch diesen Cloudserver den ESP fernsteuern.

Das kennt der Benutzer, weil er es bereits 10 mal gemacht hat um sein ganzes Smarthome zu konfigurieren und es erfordert nicht, das der Benutzer sich mit IP-Adressen oder DNS-Namen auseinander setzt. Eventuell willst du noch eine App erstellen, die dem Benutzer bei der Einrichtung hilft.

Du brauchst eh einen Aufkleber auf dem die Seriennummer und die MAC steht. Der kann dann ruhig ein wenig grĂ¶ĂŸer ausfallen.

Dann musst Du diese Werte durch den User im AP-Modus eingeben lassen.
Zur Sicherheit solltest Du im Fehlerfall (wenn Du Dich mit den eingegebenen Werten nicht connecten kannst, wieder zurĂŒck in den AP-Modus fallen.

Gruß Tommy

Wobei wir dann wieder nicht bei Idiotensicher wĂ€ren. Lieschen MĂŒller z.B. wĂŒsste bestimmt nicht ihre Gateway-Adresse.

Yep, da hast du auf jeden Fall Recht.

Mag sein, aber wie gesagt: mDNS wird nicht von Android-Smartphones unterstĂŒtzt. Von daher fĂ€llt diese Lösung ja dann eigentlich zumindest als alleinige Lösung weg.

Ich lande am Ende immer wieder da:

Und optional wird ein mDNS-Host definiert (der Name kann ggf. vom User angepasst werden).

Idiotensicher gibt es nicht. Die Idioten sind zu erfinderisch :wink:

Gruß Tommy

1 Like

:laughing:

Ich lande wo anders... Der Endkunde interessiert sich nicht fĂŒr technische Details. Der installiert eine App und klickt sich einmal durch den Einrichtungsassistenten. Der ESP bekommt von der APP die Zugangsdaten zum WLAN und die APP die Seriennummer vom ESP. Die APP kann dann den ESP zu deinem Cloud-Account hinzufĂŒgen.

Der ESP bekommt per DHCP eine IP. Der ESP verbindet sich dann mit einem Server und wird dann darĂŒber ferngesteuert. Wenn du auch einen Internetausfall kompensieren willst, kann die APP per Multicast im lokalen (W)LAN suchen und dann direkt steuern.

den ich nicht habe.... :wink:
Aber ich werd mir das Thema mal ansehen.

Hab schon einen evtl. passenden Link gefunden:

Falls du da ein konkretes Beispiel hast, wĂ€re das natĂŒrlich auch super.
Vor allem wie so ein Cloud -Account aussehen mĂŒsste und das mit der Fernsteuerung funktioniert.
Klingt fĂŒr mich im ersten Moment aber trotzdem nach einer aufwendigen Geschichte.
Da ist die lokale WLAN-Geschichte dann doch etwas einfacher und vor allem in vielen FĂ€llen auch ausreichend. Vor allem, wenn man nicht will, dass ein Zugriff nach Außen stattfindet.

Aber kann auch sein, dass ich dass ich das noch nicht wirklich begriffen habe mit dem DHCP.
Das Thema kam aber schon in einem anderen Post von mir auf, von daher lohnt es sich glaube ich, sich da mal reinzulesen.

Was ich auch nicht schnalle:
Warum funktioniert esp32.local nicht am Android Phone, aber fritz.box schon?
Das ist gemein!

solltest du vieleicht mDNS (fĂŒr Windows) und Bonjour nehmen?

wegen statischen IP / Subnet / Gateway
Ich habe schon ewig nichts mit dem Wifi Manager gemacht - aber das mĂŒsste doch alles fix und fertig geben oder?