Wie oft Ethernet.maintain() bei DHCP aufrufen und warum?

Hallo,

habe hier gelesen, dass man Ethernet.maintain() regelmäßig aufrufen sollte, wenn man DHCP nutzt.

Wie oft und warum ruft Ihr bei Euren Projekten Ethernet.maintain() auf?

Gruß Chris

Steht doch alles dort. Eine DHCP Adresse hat nur eine begrenzte Lease Zeit. Wie lange die ist hängt von der Konfiguration ab. In Routern z.B. kann man das einstellen.

Hab mal eben im Router geguckt. Die Leasetime steht auf 3600 Sekunden.

Reicht es somit alle 3599 Sekunden Ethernet.maintain() aufzurufen?

Gruß Chris

You can call this function as often as you want, it will only re-request a DHCP lease when needed

translate

Sie können diese Funktion so oft wie Sie wollen aufrufen, wird es nur erneut eine DHCP-Leasing, wenn nötig

Reicht es somit alle 3599 Sekunden Ethernet.maintain() aufzurufen?

Nicht immer.

Hä? :relaxed:

Merkwürdige Übersetzung.

Wo ist dein Problem? Was ist dein Ziel?

Mein Problem besteht darin, dass ich nicht weiss, wie oft ich Ethernet.maintain() aufrufen sollte, um einen reibungslosen Betrieb eines Arduinos im Netzwerk zu gewährleisten.

Mein Ziel ist, einen reibungslosen Betrieb eines Arduinos im Netzwerk zu gewährleisten.

Gruß Chris

Verstehe auch nicht die Frage. Es steht doch alles da. Du musst die Funktion spätestens jede Stunde einmal aufrufen. (wenn LeaseTime 3600sek). Was du machst ist doch vollkommen egal, hauptsache weniger. Da würde sich doch jede 15 oder 30minuten anbieten.

Dann befolge den Vorschlag in dem von dir verlinkten Artikel!

The easiest way is to just call it on every loop() invocation, but less often is also fine.

Was gefällt dir daran nicht?

Da würde sich doch jede 15 oder 30minuten anbieten.

Je, nachdem, wie viel Geräte im Netz sind, kann das zu wenig sein. Die meisten Router haben nur 32 Einträge. Wenn die voll sind, werden Einträge auch spontan entsorgt.

Dann wäe es doch sicherer gleich eine feste IP außerhalb des DHCP-Bereichs zu nutzen.

Gruß Tommy

Tommy56: Dann wäe es doch sicherer gleich eine feste IP außerhalb des DHCP-Bereichs zu nutzen.

Nicht wirklich nötig... Denn maintain() hat ja einen Rückgabewert, auf den man angemessen reagieren kann. Und dann ist doch alles wieder schön.

combie: Dann befolge den Vorschlag in dem von dir verlinkten Artikel! Was gefällt dir daran nicht? Je, nachdem, wie viel Geräte im Netz sind, kann das zu wenig sein. Die meisten Router haben nur 32 Einträge. Wenn die voll sind, werden Einträge auch spontan entsorgt.

Solange das Gerät aktiv eine Verbindung nutzt, sollte er auch seine IP-Einstellung von DHCP beibeihalten. Problem ist doch nur, wenn sich das Gerät in Ruhezustand schaltet und der Router erkennt, dass die Verbindung unterbrochen ist. Bei 32 Geräten sollten man sich sowieso bereits Gedanken machen, ob ein Consumer Router noch das richtige ist. FritzBox o.ä. sehen preislich immer gut aus, sind aber nicht für größere Netzwerke geeignet. Da muss schon was ganz anderes her -> Lancom o.ä. Bei bis zu 32 Geräten sollte es aber noch keine Probleme geben.

Ich stell es jetzt auf eine Sekunde ein und ferdisch. Danke.

Gruß Chris

combie: maintain() hat ja einen Rückgabewert, auf den man angemessen reagieren kann.

Was meinst Du mit "angemessen"? Z.B. ein erneutes Ethernet.begin, wenn Rückgabewert == 0?

Gruß Chris

"Angemessen" bedeutet: Dass dein Arduino weiterhin den von dir gewünschten Job erledigen kann.

Welche Sorgen plagen dich?

Es kann ja nicht angehen, dass ich dir hier und jetzt ein Referat über Netzwerktechnik halte. Tage würden ins Land ziehen.

Z.B. ein erneutes Ethernet.begin, wenn Rückgabewert == 0

Das wäre das falscheste. So holst du ganz sicher das Maximum aus deinem Problem raus.

Chris72622: Ich stell es jetzt auf eine Sekunde ein und ferdisch.

Das halte ich für völlig übertrieben (mindestens um den Faktor 1000).

Eigentlich würde ich auch erwarten, dass das von DHCP automatisch erledigt wird, habe aber keine praktischen Erfahrungen mit Ethernet auf Arduino.

Eigentlich würde ich auch erwarten, dass das von DHCP automatisch erledigt wird, habe aber keine praktischen Erfahrungen mit Ethernet auf Arduino.

Doof, sie sind, die Arduinos....

Das erste Lease bekommen sie doch immerhin gut hin. ;)

ich habe zwar keine Ahnung von, würde aber das so interpretieren, dass der Router die Leasetime zurück gibt und maintain() das automatisch händelt. Deswegen kann es, muss aber nicht in jedem loop aufgerufen werden. Scheint eine "Nachtwächterfunktion" eingebaut zu haben.

"Nachtwächterfunktion"

Eher so eine Art Wartungstechniker.

Es trägt dafür Sorge, dass die eigene IP (DNS Eintrag, usw.) nicht ungültig wird. Beschafft sich im Zweifel eine Neue.

Wenn Ethernet.maintain() auf die Nase fällt, ist der Router down, das Kabel kaputt, irgend sowas... Ab dem Augenblick macht es keinen Sinn mehr, irgendeine Netzwerkaktion durchzuführen. Außer: Weitere Ethernet.maintain() Aufrufe.

Erst wenn Ethernet.maintain() wieder "Glückseligkeit" meldet, kanns weiter gehen. Bei Notwendigkeit muss man dann auch prüfen ob sich die eigene IP geändert hat.