Raspberry PI Flask-404 Not Found?
Hallo!
Ich habe das programmiert. Es wird jede Sekunde die Temperatur von der CPU ausgelesen. Jetzt möchte ich Flask einbauen, damit ich mit mehreren PC's darauf zugreifen kann. Aber es funktioniert nicht. Warum?
from flask import Flask, jsonify
import subprocess
import time
import os
from colorama import Fore, Style
app = Flask(__name__)
@app.route("/temp")
def get_cpu_temperature():
try:
result = subprocess.run(['vcgencmd', 'measure_temp'], capture_output=True, text=True, check=True)
temperature_str = result.stdout.strip()
temperature = float(temperature_str[5:-2]) # Extrahiere die Temperatur aus dem String
return temperature
except subprocess.CalledProcessError as e:
print(f"Fehler beim Ausführen des Befehls: {e}")
return None
def print_colored_temperature(temperature):
if temperature is not None:
if temperature > 49.9:
print(f"{Fore.RED}Temperatur: {temperature}°C{Style.RESET_ALL}")
else:
print(f"Temperatur: {temperature}°C")
else:
print("Fehler beim Lesen der CPU-Temperatur.")
def main():
try:
while True:
temperature = get_cpu_temperature()
print_colored_temperature(temperature)
time.sleep(1)
os.system('clear')
except KeyboardInterrupt:
print("Programm wurde durch den Benutzer unterbrochen.")
except Exception as e:
print(f"Ein Fehler ist aufgetreten: {e}")
if __name__ == '__main__':
app.run(host="0.0.0.0")
if __name__ == '__main__':
main()
import sys
sys.exit(main(sys.argv))
1 Antwort
Dein main ist eine Endlosschleife. Wie sollte dann jemals auf einen HTTP- Request reagiert werden? Außerdem gehst du ja zuvor in app.run()...also was soll hier nun laufen? Das Ganze wirkt ein bisschen planlos zusammenkopiert.
Wenn du gleichzeitig zwei Dinge tun willst - als Webserver auf Requests antworten und ständig Messwerte ausgeben, ist es am einfachsten, das auch in zwei separaten Programmen zu tun. Offenbar interagieren die beiden Teile ja gar nicht miteinander, also wozu beide in einem Prozess betreiben?
Ansonsten kannst du mit multiprocessing bzw. Multithreading arbeiten, was aber für Anfänger doch recht fehleranfällig ist.
Klar. Löst aber dieses Problem nicht. Ist nur ein anderes Protokoll.
MQTT bringt's eigentlich nur, wenn du bereits mit MQTT-fähigen Komponenten arbeitest, also einen MQTT-Broker betreibst. Das kann eine bestehende Heimautomatisierungs-Infrastruktur sein.
Ansonsten ist ein simples HTTP-Interface immer noch die simpelste und interoperabelste Lösung. Mit HTTP kann jeder umgehen, du kannst es einfach im Browser testen oder per curl oder sonstwas.
Oh, stimmt. Wie kann ich das beheben?