Forum: Mikrocontroller und Digitale Elektronik ESP32 IP-Addresse auflösen.


von Manfred H. (protolus)


Lesenswert?

Ich habe mehrere ESP32-Staionen in meinem privaten Netz.
Habe jeder ESP-Station einen eigenen Node-Namen zugewiesen.
Möchte nun von einem der ESP-Stationen aus die IP-Addressen der anderen 
eingeloggten ESP-Stationen anhand des Node-Namens auflösen.
Habe das Internet rauf und runter gesucht aber nichts vernünftiges 
gefunden.
Weiss Jemand Rat??

von c-hater (Gast)


Lesenswert?

Manfred H. schrieb:

> Ich habe mehrere ESP32-Staionen in meinem privaten Netz.
> Habe jeder ESP-Station einen eigenen Node-Namen zugewiesen.

Wo genau hast du ihnen einen Namen zugewiesen?

> Möchte nun von einem der ESP-Stationen aus die IP-Addressen der anderen
> eingeloggten ESP-Stationen anhand des Node-Namens auflösen.
> Habe das Internet rauf und runter gesucht aber nichts vernünftiges
> gefunden.

DNS oder MDNS hast du nicht gefunden? Kann ich kaum glauben angesichts 
der Tatsache, dass das seit Jahrzehnten die üblichen Methoden zur 
Namensauflösung in IP-Netzen sind. Wer dazu nichts gefunden haben will, 
kann nur ein Traffic-Troll sein.

von Stefan F. (Gast)


Lesenswert?

Vermutlich is sein Problem, dass er weder die Namen noch die IP Adressen 
kennt, sondern eher eine Liste aller lokal erreichbaren Geräte braucht.

von Andras H. (kyrk)


Lesenswert?

Bei Microchip heißt das Announce.

UDP Broadcast schicken.
Warten auf Antworten.
Sich freuen über die Antworten wo eventuell auch eine Name/ID/Host drin 
steht.

von Manfred H. (protolus)


Lesenswert?

c-hater schrieb:
> Manfred H. schrieb:
>
>> Ich habe mehrere ESP32-Staionen in meinem privaten Netz.
>> Habe jeder ESP-Station einen eigenen Node-Namen zugewiesen.
>
> Wo genau hast du ihnen einen Namen zugewiesen?
>

Habe im set-up der hosts jedem einen eigenen Namen zugewiesen.
Beispiel:
1
String hostname = "Mischpult-Control";
2
3
WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE, INADDR_NONE);
4
WiFi.setHostname(hostname.c_str()); //define hostname
5
WiFi.begin(ssid, password);

>> Möchte nun von einem der ESP-Stationen aus die IP-Addressen der anderen
>> eingeloggten ESP-Stationen anhand des Node-Namens auflösen.
>> Habe das Internet rauf und runter gesucht aber nichts vernünftiges
>> gefunden.
>
> DNS oder MDNS hast du nicht gefunden? Kann ich kaum glauben angesichts
> der Tatsache, dass das seit Jahrzehnten die üblichen Methoden zur
> Namensauflösung in IP-Netzen sind. Wer dazu nichts gefunden haben will,
> kann nur ein Traffic-Troll sein.

DNS und multicast-DNS sind mir durchaus ein Begriff, wenngleich ich 
nicht täglich damit umgehe.

Meine ESP-hosts erscheinen in der Netzwerkliste meiner Fritz.box.
Auch habe ich mir ein kleines Programm für meinen PC geschrieben. Da 
benutze ich eine spezielle dll, um mir alle hosts in meinem Netz samt 
zugehöriger IP-Addresse aufzulisten.
Auch da erscheinen alle ESP32-hosts mit ihren Namen und ihrer 
IP-Addresse.

Ich habe auch die ESPmDNS.h-Library gefunden aber leider dazu kein 
"Programers reference manual" und auch kein für mein Problem brauchbares 
Code-Beispiel.
Jetzt bin ich von der stundenlangen, ergebnislosen Suche einfach nur 
genervt.

Weil mir der detailierte Hintergrund zu der ganzen DNS-Geschicht nicht 
geläufig ist, dachte ich, dass mir möglicherweise hier wer einen Tip 
geben könnte, wie ich an die IP-Addressen meiner hosts komme.

: Bearbeitet durch User
von Schlaumaier (Gast)


Lesenswert?

Manfred H. schrieb:
> Meine ESP-hosts erscheinen in der Netzwerkliste meiner Fritz.box.

Komisch. Bei jeden meiner Teile in der Fritzbox schreibt die Fritzbox 
mir die IP dahinter.

Also Ping den Namen an, und er sagt die die IP.

Aber ich muss zugeben das ich nicht weiß wie man ein Ping-Befehl auf ein 
ESP einsetzt, bez. auswertet. Und achte auf Groß+Kleinschreibung bzw. 
Anführungszeichen wegen den - . Einige Systeme sehen das ziemlich eng .

von Manfred H. (protolus)


Lesenswert?

Schlaumaier schrieb:
> Manfred H. schrieb:
>> Meine ESP-hosts erscheinen in der Netzwerkliste meiner Fritz.box.
>
> Komisch. Bei jeden meiner Teile in der Fritzbox schreibt die Fritzbox
> mir die IP dahinter.
>
Das macht meine Fritz.box auch.
Aber, die Geschichte der Foren ist eine Geschichte voller 
Missverständnisse.

Background:

Ein Kumpel von mir hat ein paar tolle Ideen für sein Lokal.
Er will da alles mögliche an Geräten (Licht, Musik, Quiz-Anlage usw) in 
einer indiviuellen Art steuern.
Natürlich gibt es alles mögliche an "smart-home-solutions" aber leider 
nicht das, was er sich einbildet.
Also habe ich zu ihm gesagt: "Ich entwickle dir das."
Habe ich auch getan. Die einzelnen Geräte werden über ESP32 gesteuert 
und müssen sich untereinander unterhalten. Auch kein Problem. Die Geräte 
sind fertig und das machen sie schon perfekt.
Das Problem ist: Bei mir hier im Labor funktioniert das mit den fest 
einprogrammierten IP-Addressen. Wenn sich aber die Geräte in das 
WiFi-Netz des Lokals meines Kumpels einwählen werden, bekommen sie 
andere IP-Addressen zugewiesen. Ich will aber nicht bei ihm im Lokal das 
einprogrammieren von IP-Addressen beginnen. Das bedeutet, die Geräte 
müssen sich die IP-Addressen dynamisch selbst irgendwie organsieren.
Ich habe mir das so gedacht: Eines der ESP32-Geräte ist der "master" und 
bekommt per bluetooth und Blynk-App die SSIP und das Passwort des neuen 
WiFi-Netzes. Die Blynk-App ist kein Problem und "funzt" schon.
Der "master-ESP32" ermittelt, welches der anderen ESP-Geräte eingewählt 
ist, erstellt anhand der node-names eine Liste der IP-Addressen und 
übergibt die IP-Liste an alle ESP32-nodes. Die richten jeder UDP ein und 
können sich fortan unterhalten.
Ich brauche also den Code, um von einem ESP32 aus die IP-Addressen aller 
anderen ESP-nodes zu ermitteln.
Mit der library ESPmDNS.h scheint das auflösen der IP relativ einfach zu 
klappen. Habe aber bisher weder eine "Programmers reference" dieser 
Library noch ein brauchbares Code-Beispiel gefunden.

> Also Ping den Namen an, und er sagt die die IP.
>
> Aber ich muss zugeben das ich nicht weiß wie man ein Ping-Befehl auf ein
> ESP einsetzt, bez. auswertet. Und achte auf Groß+Kleinschreibung bzw.
> Anführungszeichen wegen den - . Einige Systeme sehen das ziemlich eng .

Ich habe das mal untersucht. Der WiFi.ping gibt nur die ping-Zeit 
zurück.
Genauso ist es bei diversen ping-Libraries, die ich gefunden habe. Ich 
habe keine gefunden, die die IP mit zurück gibt.

von Sebastian (Gast)


Lesenswert?

Die ESP bekommen ihre IP via DHCP vom Router? Und du kommst von extern 
nicht an die DHCP-Lease-Tabelle des Routers?

Dann mach das doch selbst. Lass deine Knoten regelmässig einen 
UDP-Heartbeat broadcasten. Da kannst du dann auch noch den Namen mit 
übertragen.

LG, Sebastian

von Stefan F. (Gast)


Lesenswert?

Manfred H. schrieb:
> Meine ESP-hosts erscheinen in der Netzwerkliste meiner Fritz.box.

Schlaumaier schrieb:
> Also Ping den Namen an, und er sagt die die IP.

Verlasse dich nicht darauf. Ich glaube dir das deine Fritz Box die 
Hostnamen anzeigen kann, aber einige andere WLAN Router können es nicht. 
Selbst die Namensauflösung via DNS ist ein nice-to-have Feature das noch 
lange nicht alle WLAN Router unterstützen.

Du machst dich da von einer Funktion abhängig, deren Existenz du 
langfristig nicht gewährleisten kannst. Ich würde es anders lösen 
wollen.

Sebastian schrieb:
> Dann mach das doch selbst. Lass deine Knoten regelmässig einen
> UDP-Heartbeat broadcasten. Da kannst du dann auch noch den Namen mit
> übertragen.

Eventuell so. Oder erst nach Aufforderung, anstatt regelmäßig.

Bedenke allerdings, dass Broadcasts normalerweise nur im eigenen Subnetz 
funktionieren. Wenn du z.B. für den Garten einen zweiten WLAN Router hin 
stellst, dann sind die Geräte in der Gartenlaube aus dem Haus heraus 
nicht über Broadcast erreichbar.

Das ist nicht immer und zwingend so, aber oft. Die Consumer-Produkte 
sind diesbezüglich oft nicht so flexibel konfigurierbar, wie hierzu 
nötig wäre.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Manfred H. schrieb:
> Das bedeutet, die Geräte
> müssen sich die IP-Addressen dynamisch selbst irgendwie organsieren.

Müssen sie nicht, aber wenn du willst: Alles was unter dem Begriff 
Zeroconf läuft. mDNS wurde schon genannt. Dann RFC 3927 alias Microsoft 
APiPA.

Aber:

> Der "master-ESP32" ermittelt, welches der anderen ESP-Geräte eingewählt
> ist,

Was soll dieses "einwählen" sein? Wir sind nicht mehr in den 90ern wo 
man Telefonmodems verwendet hat.

Ich vermute mal, du meinst damit, dass sie über WLAN nicht nur mit einem 
AP, sondern darüber mit einem SOHO-Router verbunden sind. Es wurde eine 
FritzBox erwähnt. Nur, wie sollen die ESPs das machen, wenn nicht jeder 
einzelne ESP mit den WLAN-Zugangsdaten konfiguriert ist?

> erstellt anhand der node-names eine Liste der IP-Addressen und
> übergibt die IP-Liste an alle ESP32-nodes. Die richten jeder UDP ein und
> können sich fortan unterhalten.

Henne-Ei-Problem. Damit dein Master mit den anderen ESPs kommunizieren 
kann um deren IP-Networking zu konfigurieren muss er bereits 
funktionierendes IP-Networking zu den anderen ESPs haben. D.h. die 
müssen alle bereits WLAN können, im LAN eine IP-Adresse (erhalten) haben 
usw.

Jeder der ESPs braucht eine initiale WLAN Konfiguration. Wenn sie dann 
damit mit dem SOHO-Router verbunden sind, dann können sie auch das DHCP 
(und das damit synchronisierte DNS) des Routers verwenden.

Client-seitig DHCP-Option 12 setzen und zusehen/hoffen dass der Server 
die Option richtig abarbeitet. Eigentlich können dass praktische alles 
SOHO-Router, aber man hat natürlich immer mal wieder Pferde vor der 
Apotheke kotzen sehen.

Wenn der Server Option 12 abarbeitet (und natürlich der Name nicht 
doppelt ist, der Router das Format mag, ...), wird der Name bei 
praktisch allen Routern automatisch in den DNS-Server des Routers 
eingetragen. Ab dem Punkt können alle anderen Hosts im LAN den ESP per 
Namen ansprechen (natürlich mit zwischengeschalteter DNS-Resolution um 
an die IP-Adresse zukommen).

Wie immer lohnt es sich mit Wireshark nachzusehen was wirklich hin und 
her geht.

> Ich brauche also den Code, um von einem ESP32 aus die IP-Addressen aller
> anderen ESP-nodes zu ermitteln.

Hör auf zu versuchen das Rad neu zu erfinden und am Networking 
rumzubiegen. Nimm was da ist.

>> Also Ping den Namen an, und er sagt die die IP.
>>
>> Aber ich muss zugeben das ich nicht weiß wie man ein Ping-Befehl auf ein
>> ESP einsetzt, bez. auswertet. Und achte auf Groß+Kleinschreibung bzw.
>> Anführungszeichen wegen den - . Einige Systeme sehen das ziemlich eng .
>
> Ich habe das mal untersucht. Der WiFi.ping gibt nur die ping-Zeit
> zurück.

Schlaummaier erzählt ja auch mal wieder Scheiße. ping-Programme 
verwenden einen Resolver um einen Hostnamen in eine IP-Adresse 
aufzulösen. Der Resolver verwendet normalerweise DNS. Den ganzen 
ping-Quatsch kannst du dir daher in die Haare schmieren. ping weiß nicht 
mehr als DNS, weil es einfach DNS befragt.

Das gilt auch für ping-Programme die als Service für den User zu einer 
IP-Adresse den Hostnamen anzeigen. Die machen eine 
Reverse-DNS-Resolution.

von Stefan F. (Gast)


Lesenswert?

Hannes J. schrieb:
> Wenn der Server Option 12 abarbeitet (und natürlich der Name nicht
> doppelt ist, der Router das Format mag, ...), wird der Name bei
> praktisch allen Routern automatisch in den DNS-Server des Routers
> eingetragen.

Leider nicht. Ich hatte gleich drei WLAN Router hintereinander, wo das 
nicht klappte. Einer davon konnte die Hostnamen immerhin in seiner Web 
GUI auflisten, aber DNS Auflösung der lokalen Hosts ging bei allen 3 
nicht.

Jetzt bei meinem 4. Router geht es endlich, doch inzwischen habe ich 
aufgegeben, mich darauf zu verlassen. Das ist so ein ähnliches Ding wie 
WPS - funktionierte bei mir nur mit den Geräten, wo es nicht nötig war. 
Der Teufel steckt im Design.

von Schlaumaier (Gast)


Lesenswert?

Hannes J. schrieb:
> . ping weiß nicht
> mehr als DNS, weil es einfach DNS befragt.

Hab ich auch nix andere gesagt.

Und wo ist der DNS. ???

Das Gerät meldet sich beim DNS an. Bekommt dort seine IP zugewiesen. Und 
wieso soll der DNS diese IP nicht raus rücken.

Beim PC sieht das so aus.

Ping drucker

Ping wird ausgeführt für drucker.fritz.box [192.168.5.30] mit 32 Bytes 
Daten:

Also bekomme ich die IP. Aber wie schon erwähnt wie und ob das mit den 
ESP geht, weiß ich nicht.


Wenn man nun Manfreds Beispiel nimmt, spielt der Master-esp die 
Zentrale.  Ich bin davon überzeugt das alle Home-Systeme genau das 
machen. Einen Zentrale mit DNS-Server zur Verfügung stellen. Ich weiß 
zwar auch nicht ob man auf einen ESP ein DNS-Server installieren kann, 
aber ansonsten würde ich einfach als Zentrale auf eine Beere ausweichen. 
Die bekommt dann noch ein Webinterface und was der Kunde sonst noch will 
und alles ist gut.

Einfach über die Beere ein eigenes Netz aufbauen.

Normal macht man das so.  Ein ESP o.w.a.i. hat eine Anmelderoutine. Die 
wird ausgelöst und die Zentrale wird auf "abhören" gestellt. Sobald die 
das Signal empfängt vergibt sie den ESP die Infos die er braucht.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Stefan ⛄ F. schrieb:
> Leider nicht. Ich hatte gleich drei WLAN Router hintereinander, wo das
> nicht klappte. Einer davon konnte die Hostnamen immerhin in seiner Web
> GUI auflisten, aber DNS Auflösung der lokalen Hosts ging bei allen 3
> nicht.

Hersteller? Alter der Router?

> Jetzt bei meinem 4. Router geht es endlich, doch inzwischen habe ich
> aufgegeben,

Es wurde die FritzBox erwähnt. Für diese ist das dokumentiert (Option 12 
wird nicht erwähnt):
https://avm.de/service/wissensdatenbank/dok/FRITZ-Box-7490/3453_Unbekannte-Gerate-in-der-Mesh-Ubersicht/
>>> Geräte, die ihre IP-Einstellungen per DHCP von der FRITZ!Box beziehen
>>> und der FRITZ!Box dabei ihren Namen mitteilen, werden mit ihrem
>>> Hostnamen angezeigt.

Wenn sein Router das nicht kann, na ja. Er könnte einen anderen 
integrierten DHCP/DNS Server installieren. Irgendwo wird er für die 
ganzes ESPs sowieso einen Server haben, der könnte das mit erledigen.

Fakt ist, ohne Namensauflösung wird er nicht mit ESP-Hosts per Namen 
kommunizieren können. Fast alle Lösungen wie DNS, mDNS, Zeroconf, oder 
eben einem integrierten DHCP/DNS Server wurden schon genannt.

Mir fällt noch die Apple-Version von Zeroconf, Bonjour ein, WINS (ha, 
ha),  oder Option 81. Aber letzteres ist eine ganz spezielle Sache für 
Dyn-DNS.

> Das ist so ein ähnliches Ding wie
> WPS - funktionierte bei mir nur mit den Geräten, wo es nicht nötig war.

WPS ist ein Sicherheitsproblem und sollte daher sowieso ausgeschaltet 
werden.

von Schlaumaier (Gast)


Lesenswert?

Hannes J. schrieb:
> WPS ist ein Sicherheitsproblem und sollte daher sowieso ausgeschaltet
> werden.

Man sollte seinen Besucher eh trauen, ansonsten sehe ich da noch mehr 
Probleme. ;)

Aber WPS klappt eh nur in 40% aller Fälle meiner Erfahrung nach. Also 
mache ich es auf die altmodische Weise. = Netz suchen, pw eingeben, 
guckguck da bin ich ;) Weshalb ich es eh WPS AUS und Tastensperre EIN 
habe.

von Peter tr. (Gast)


Lesenswert?

@c-hater
"Wer dazu nichts gefunden haben will,
kann nur ein Traffic-Troll sein."

Was genau bezweckt man mit so einem Post?
Weiteren Traffic??
Somit bist du Teil des Systems..oder solltest dir solche Kommentare 
einfach verkneifen

von Stefan F. (Gast)


Lesenswert?

Hannes J. schrieb:
> Hersteller? Alter der Router?

Die Marken weiß ich nicht mehr. Einer war von Vodafone, einer von 
Unitymedia und einer von Saturn. Der von Saturn war mit "Trendnet" oder 
irgendwas mit "Link" im Namen beschriftet, soweit ich mich erinnere.

Wenn für dich 4 Jahre alt ist, dann waren sie alle alt.

Zwischendurch hatte ich eine Fritz-Box geliehen mit der ging es (nicht 
überraschend). Und mit meinem aktuellen Router von Vodafone geht es 
auch.

von c-hater (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:

> Selbst die Namensauflösung via DNS ist ein nice-to-have Feature das noch
> lange nicht alle WLAN Router unterstützen.

Vollkommener Bullshit. DNS unterstützen natürlich alle WLAN-Router seit 
Anbeginn der Zeit.

Was daran stimmt ist: Update des DNS aus dem DHCP könnten sie eventuell 
nicht unterstützen. Und das ist nur ein Teil des Problems. Denn selbst 
die, die das sicher unterstützen, sind darauf angewiesen, dass der 
DHCP-Client seinen Hostnamen überhaupt übermittelt. Das muß er nicht!

> Du machst dich da von einer Funktion abhängig, deren Existenz du
> langfristig nicht gewährleisten kannst. Ich würde es anders lösen
> wollen.

Naja. Die letzte Routerbox, die DHCP->DNS nicht unterstützt hat, habe 
ich vor ca. 10 Jahren in der Hand gehabt. Ich weiß nicht, mit was für 
Technik du hantierst, aber du solltest deine Beschaffungspolitik 
überdenken...

>> Dann mach das doch selbst. Lass deine Knoten regelmässig einen
>> UDP-Heartbeat broadcasten. Da kannst du dann auch noch den Namen mit
>> übertragen.
>
> Eventuell so. Oder erst nach Aufforderung, anstatt regelmäßig.

Alles vollkommener Bullshit, selbst nach ESP-Arduino-Maßstäben. Das 
Zeugs bringt doch vollständige MDNS-Unterstützung mit, inclusive 
Announces. Man muss es einfach nur benutzen.

Es gibt für die üblichen Vollidioten sogar YT-Videos dazu, wie man das 
tut...

von Stefan F. (Gast)


Lesenswert?

c-hater schrieb:
> Vollkommener Bullshit. DNS unterstützen natürlich alle WLAN-Router seit
> Anbeginn der Zeit.

Vollkommener Bullshit, ich kann dir einen zeigen, der es nicht kann. 
Komm vorbei, schau ihn dir an!

> Was daran stimmt ist: Update des DNS aus dem DHCP
> könnten sie eventuell nicht unterstützen.

Ach was, genau darum geht es hier doch!

> selbst die, die das sicher unterstützen, sind darauf
> angewiesen, dass der DHCP-Client seinen Hostnamen überhaupt
> übermittelt. Das muß er nicht!

Ja und, wo ist das problem? Die Clients programmiert der TO selbst und 
sie können es. Das hat er bereits verifiziert.

von c-hater (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:

> Vollkommener Bullshit, ich kann dir einen zeigen, der es nicht kann.
> Komm vorbei, schau ihn dir an!

Typ, Modell?

Vermutlich meinst du in einer geballten Inkompetenz keinen WLAN-Router, 
sondern einen AP. Das ist was anderes...

von Stefan F. (Gast)


Lesenswert?

c-hater schrieb:
>> Vollkommener Bullshit, ich kann dir einen zeigen, der es nicht kann.
>> Komm vorbei, schau ihn dir an!

> Typ, Modell?

Da gehe ich jetzt nicht nachgucken, mein Sohn schläft schon und das Ding 
steht in seinem Zimmer.

> Vermutlich meinst du in einer geballten Inkompetenz
> keinen WLAN-Router, sondern einen AP

Im Gegensatz zu dir kann ich lesen. Ich sage nur: ADC Register.

Außerdem ist dir die Antwort doch Scheißegal, es sei du kannst ihr 
widersprechen. Warum sollte ich ausgerechnet dir diesen Gefallen tun?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.