Code soll API-Aufruf zyklisch durchführen, nur wie?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
TomKaiser_321
User
Beiträge: 1
Registriert: Mittwoch 8. Juni 2022, 15:58

Hallo zusammen,

ich bin absoluter Neuling in der Phyton Programmierung und habe mich an mein erstes Projekt gewagt, nun bin ich in meinem Code soweit, dass ich nicht mehr weiter weiß. Vielleicht könnt ihr mir ja weiterhelfen. Ich habe folgendes Problem: Ich bin derzeit an einem Code schreiben, der mir die aktuellen Energiedaten einer Solaranlage ausgibt. Das habe ich wie folgt gemacht: Mittels einem API Aufruf kann ich auf den Wechselrichter zugreifen, der mir dann die Energiedaten durch das JSON Format zurückgibt. Mit dem Request Modul mache ich also den API-Aufruf und kann dann entsprechend auf ausgewählte Werte in der JSON Datei zugreifen. Das klappt auch soweit. Die Werte aus der JSON Datei habe ich dann in Variabeln gespeichert und mit print() auf der Konsole ausgeben lassen . Nun ist es so, dass sich die Werte in der JSON Datei ständig ändern, nach jedem API-Aufruf. Jetzt möchte ich gerne, dass sich die Werte auch im Code selber ständig aktualisieren. Nur wie bekomme ich das hin, dass sozusagen alle paar Sekunden der Code den API Aufruf selber durchführt und mir immer den aktuellen Wert anzeigt und ich nicht immer den Code selber starten muss um den aktuellen Wert sehen zu können? Später sollen die abgerufenen Energiedaten mittels einem GUI angezeigt werden und dabei sollen sich die Energiedaten ständig selber aktualisieren. Ich bin für jede Hilfe sehr dankbar!
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@TomKaiser_321: Die Werte hinter Namen aktualisieren sich nicht auf magische Weise. Du musst halt Code schreiben der das macht. Und den wiederholt ausführen. Wiederholt etwas ausführen läuft auf eine Schleife hinaus. Also statt:

Code: Alles auswählen

    mach_was()
Dann:

Code: Alles auswählen

    while True:
        mach_was()
        warte_x_sekunden()
Für die Wartezeit gibt es im `time`-Modul eine Funktion.

Falls nicht nur ungefähr x Sekunden zwischen den Abfragen liegen sollen, darf man nicht immer genau x Sekunden warten, sondern muss auch die Zeit mit einbeziehen, die bei der Abfrage schon verbraucht wurde. Da muss man zu verschiedenen Zeitpunkten einen aktuellen Zeitstempel abfragen und ein bisschen Rechnen wie lange man dann tatsächlich am Ende der Schleife warten muss. Dabei kann man sich vom `sched`-Modul aus der Standardbibliothek helfen lassen. Oder man verwendet etwas externes wie `APSchedule` oder `schedule`.

Und bei GUIs muss man dann noch mal komplett umdenken, weil dort der Programmfluss über Ereignisse geregelt wird. Wie man das dann konkret löst, hängt vom verwendeten GUI-Rahmenwerk ab. Allen gemeinsam ist, dass man sich vorher mit objektorientierter Programmierung beschäftigen sollte, also auch eigene Klassen schreiben. Denn das braucht man für jede nicht-triviale GUI.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten