Chris72622:
In meinem Fall wäre es eine Alarmanlage, welche mir eine E-Mail schicken soll, sobald ein Einbrecher im Haus zu sein scheint.
Für eine "stabile" Dauer-Internetverbindung über Deinen Router wäre es sehr vorteilhaft, im Heimnetz eine statische IP-Adresse für den Arduino zu verwenden. Also eine IP-Adresse aus der Routerkonfiguration heraussuchen, die NICHT zu dem IP-Adressbereich gehört, aus dem der Router dynamische IP-Adressen vergibt, und diese IP-Adresse im Arduino als statische IP-Adresse zuordnen.
Bei Verwendung einer dynamischen IP-Adresse für den Arduino wird es mit "stabile" Verbindung ein wenig schwieriger, und zwar schaltungstechnisch wie auch programmtechnisch.
Der Knackpunkt sind dabei kurzfristige Stromausfälle und wie Dein System nach einem kurzfristigen Stromausfall wieder automatisch funktionsfähig wird. Stromausfälle können dabei sowohl vom Stromversorger verursacht werden, als auch im Haus selbst, z.B.:
- jemand zieht den Stecker des Routers, um die Steckdose zum kurzfristigen Staubsaugen zu nutzen
- dito für die Steckdose mit der Stromversorgung des Arduino
Knackpunkte sind dabei:
- gleichzeitiger Stromausfall überall im Haus mit gleichzeitiger Stromrückkehr nach einiger Zeit
- Stromausfall nur am Router, mit Rückkehr des Stroms am Router, während der Arduino dauernd unter Strom war
Bei 1) passiert das: Der Arduino bootet wesentlich schneller (ca. 2 Sekunden) als der Router bootet und betriebsbereit wird (ca. 60 Sekunden). Dabei kann der Arduino beim Programmstart möglicherweise keine IP-Adresse im ersten Versuch erhalten. Du mußt im Setup also eine Timeout-Schleife für die Initialisierung des Netzwerks einbauen: Der Arduino muß bei einem Neustart so lange versuchen eine IP-Adresse vom Router zu erhalten, bis er tatsächlich eine erhalten hat. Erst danach kann er durchstarten.
Abhilfe wäre: Geänderte/optimierte Setup-Routine.
Bei 2) schließlich greift nur noch "Prinzip Hoffnung": Namlich die Hoffnung, dass der durchgelaufene Arduino seine IP-Adresse weiter verwenden kann, ohne dass er diese nach dem Neustart des Routers vom Router zugeteilt bekommen hätte. Es geht schief, wenn nach dem Router-Neustart ein Gerät eine IP-Adresse anfordert und zugeteilt bekommt, die der Arduino aber bereits verwendet (der sie vor dem Reboot des Routers erhalten hatte). Dann hängt das Netzwerk, weil dann zwei Geräte dieselbe IP-Adresse haben.
Abhilfe wäre: Entweder Glück haben. Oder es schaltungstechnisch sicherstellen, dass auch der Arduino immer gleichzeitig stromlos wird, wenn auch der Router stromlos wird. Also es durch bauliche Maßnahmen verhindern, dass etwa zum Staubsaugen nur das Steckernetzteil des Routers gezogen wird, während das Netzteil des Arduino weiter Strom behält.
Des weiteren wäre die Lease-Time bei Verwendung einer dynamischen IP-Adresse zu beachten. Jede dynamisch zugeteilte IP-Adresse wird vom Router immer nur "auf Zeit" zugeteilt, nämlich für die Lease-Time. Durch einen Lease-Refresh muß die Gültigkeit der IP-Adresse nach ca. der halben Lease-Time (aber vor Ablauf der gesamten Lease-Time) erneut angefordert werden. Dazu baust Du im einfachsten Fall zusätzlich irgendwo einen Aufruf der Art in die loop() Funktion ein:
Ethernet.maintain();
https://www.arduino.cc/en/pmwiki.php?n=Reference/EthernetMaintain
Du brauchst übrigens keine große Angst vor einer Verlangsamung der loop() Funktion haben, wenn Du den Aufruf ständig machst: Die Funktion verwaltet einen eigenen Zeitzähler und führt die Lease-Time Verlängerung der IP-Adresse beim Router tatsächlich nur in größeren Zeitabständen durch.