mmueller-87 Das ist ganz schön unübersichtlich.
Die Importe könnte man mal aufräumen das aus `machine` nicht mehrere ``import``-Anweisungen gemacht werden, und unbenutztes rauswerfen. Es wird sowohl `time` als auch `utime` benutzt.
Auf Modulebene sollten kein Code und keine Variablen stehen. Schon gar nicht zwischen Funktionsdefinitionen verteilt. Da verliert man schnell den Überblick. Zum Beispiel was davon *überhaupt* benutzt wird. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
`timestamp` `device_mac`, `rtcmachine`, `machinetime`, `rtc`, `requestRemaining` werden definiert aber nirgends verwendet. `sendCounter` wird nicht wirklich verwendet. Das wird zwar hochgezählt, aber das war es auch schon.
Kommentare sollen dem Leser einen Mehrwert über den Code geben. Faustregel: Kommentare beschreiben nicht *was* der Code macht, denn das steht da bereits als Code, sondern warum er das macht. Sofern das nicht offensichtlich ist. Offensichtlich ist in aller Regel auch was in der Dokumentation von Python und den verwendeten Bibliotheken steht.
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).
`requestTimer` ist irreführend was den Namen und den Kommentar angeht. Das ist ein Zähler und kein Timer und ob dieser Wert tatsächlich Sekunden entspricht hängt ganz stark davon ab was in der Hauptschleife passiert.
`requestCounter` ist falsch benannt, weil das gar nicht die Anzahl der Anfragen zählt.
Man macht keine Vergleiche mit literalen Wahrheitswerten. Bei dem Vergleich kommt doch nur wieder ein Wahrheitswert bei heraus. Entweder der, den man sowieso schon hatte; dann kann man den auch gleich nehmen. Oder das Gegenteil davon; dafür gibt es ``not``. Also ``if not wlan.isconnected():``.
Namen sollten keine kryptischen Abkürzungen enthalten oder gar nur daraus bestehen. Der Name soll dem Leser vermitteln was der Wert dahinter im Programm bedeutet, nicht zum rätseln zwingen. `w_steam()`?
f-Zeichenkettenliterale machen nur Sinn wenn man dann auch wirklich etwas da rein formatiert.
`rebootalarm()` ist nirgends definiert. Und die Funktion verwendet `red_led`, `green_led` und `oled` was auch nirgends definiert ist und als Argumente in die Funktion kommen muss. Ich sehe auch nicht so ganz was `oled` hier überhaupt soll, denn ausser dem `show()`-Aufruf wird damit nichts gemacht. Dafür sind die ganze `wifi_*` in der Funktion definiert aber unbenutzt. Und werden auch sehr ineffizient definiert. Man ruft nicht vier mal eine Funktion auf die ein Tupel liefert um da jedes mal nur *einen* Wert von zu verwenden.
`timemachine` ist ja ein lustiger Name, aber solange man da keinen Fluxkompensator einbaut ist der falsch. 😉
An der Stelle breche ich mal ab, denn da werden noch einige Sachen gemacht die so nicht funktionieren. Das ist nicht der Code der tatsächlich auf dem Gerät läuft.