Bei "besseren" Programmiersprachen geht sogar
if -70 < sonnenhoehe < 0 ...
oder gleichwertig
if 0 > sonnenhoehe > -70 ...
Zumindest in diesem Sinne zählt Python durchaus zu den "besseren" Programmiersprachen.
Bei "besseren" Programmiersprachen geht sogar
if -70 < sonnenhoehe < 0 ...
oder gleichwertig
if 0 > sonnenhoehe > -70 ...
Zumindest in diesem Sinne zählt Python durchaus zu den "besseren" Programmiersprachen.
Sonnenposition? Schau mal ob du hier fündig wirst!
Ich bin schon überfordert, eine Schleife zu basteln, ich vermisse Basic-Sachen in Python.
Z.B. möchte ich, dass er mit
prüft, ob die Datei vorhanden ist.
Wenn nicht, soll er x Sek. schlafen und neu prüfen. Peinlich, aber ich kriegs nicht hin.
Tippe ich folgendes springt er mir (logischerweise) nicht zurück, sondern prüft nur 1x , schläft x Sek. und macht dann weiter, obwohl die Datei immer noch nicht da ist. In Basic hätte ich geschrieben
.
Wie mache ich das in Python ?
#!/usr/bin/python3
import time
import os
if os.path.isfile("/dev/shm/sonnenhoehe.txt"):
print("Die Datei sonnenhoehe.txt ist vorhanden, versuche Datei zu öffnen.")
time.sleep(1)
else:
print("Die Datei sonnenhoehe.txt nicht vorhanden, ich probiere es später nochmal. zzzZZZzzz")
time.sleep(10)
with open("/dev/shm/sonnenhoehe.txt", "r") as sonnenhoehe:
sonnenhoehe = int(sonnenhoehe.read())
print(sonnenhoehe)
if sonnenhoehe < 0 and sonnenhoehe > -70:
print("Bereich OK, Sonne sollte überm Horizont sein")
exit
Alles anzeigen
EDIT: Doch geht irgendwie mit
Heißt das, Du hast's jetzt, oder brauchst Du noch Hilfe?
Ok, ich bin ja nicht untätig nebenher.
Es sieht so aus:
Der Wert im Programm wird scheinbar nicht aus der Datei aktualisiert, also wenn der Wert von außerhalb des Bereichs in den wieder im akzeptablen Bereich kommt.
#!/usr/bin/python3
import time
import os
while not os.path.isfile("/dev/shm/sonnenhoehe.txt"):
print("Die Datei sonnenhoehe.txt ist nicht vorhanden, ich versuche es später. zzzZZZzzz")
time.sleep(5)
else:
print("Die Datei sonnenhoehe.txt ist vorhanden, versuche sie zu lesen.")
time.sleep(1)
with open("/dev/shm/sonnenhoehe.txt", "r") as sonnenhoehe:
sonnenhoehe = int(sonnenhoehe.read())
print(sonnenhoehe)
while not -70 < sonnenhoehe < -1:
print("Datei sonnenhoehe.txt gelesen, aber keine Sonne...zzzZZZzzz...")
time.sleep(5)
else:
print ("Sonne sollte überm Horizont sein.")
while not os.path.isfile("/dev/shm/azimut.txt"):
print("Die Datei azimut.txt ist nicht vorhanden, versuche es später...zzzZZZzzz...")
time.sleep(5)
else:
print("Die Datei azimut.txt ist vorhanden, ich versuche sie zu lesen.")
time.sleep(1)
with open("/dev/shm/azimut.txt", "r") as azimut:
azimut = int(azimut.read())
print(azimut)
while azimut > 60 and azimut > 300:
print("Datei azimut.txt gelesen, sieht dunkel aus, gute Nacht...zzzZZZzzz...")
time.sleep(5)
else:
print("Sonne zw. Ost und West ;)")
time.sleep(1)
exit
Alles anzeigen
Wenn Du uns Deinen Code zeigen würdest, könnten wir Dir sicher besser helfen.
Der ist über dem Bild
Und wenn du jetzt noch die Einrückungen wieder hinzufügst und jede zweite Zeile (leer) entfernst, kann man die noch besser helfen
Ups, glatt übersehen. Allerdings stimmen die Einrückungen nicht, der Code ist so nicht lauffähig.
Ich glaube, den Denkfehler sehe ich trotzdem: Du wartest in der while-Schleife, bis bspw. sonnenhoehe einen gültigen Wert hat, list aber sonnenhoehe nicht erneut ein, d.h. der anfangs eingelesene Wert ändert sich nie mehr.
Ups, ganz übersehen, das es mir beim einfügen den ganzen Code zerrissen hat.
Korrigiert.
In Zeile 27 scheint mir ein Logikfehler zu sein, Zeile 33 ist komplett unnötig. Eine Variable erst mit einem Fileobjekt und dann mit dessen Inhalt zu belegen ist nicht wirklich sinnvoll.Du solltest Deinen Code mal in Funktionen aufteilen:
#!/usr/bin/python3
import time
import os
def wait_for_file(path):
while not os.path.isfile(path):
print("Die Datei {0} ist nicht vorhanden, ich versuche es später. zzzZZZzzz".format(os.path.basename(path)))
time.sleep(5)
print("Die Datei {0} ist vorhanden, versuche sie zu lesen.".format(os.path.basename(path)))
with open(path, "r") as f:
value = int(f.read())
return value
def main():
while True:
sonnenhoehe = wait_for_file("/dev/shm/sonnenhoehe.txt")
print(sonnenhoehe)
if -70 < sonnenhoehe < -1:
break
print("Datei sonnenhoehe.txt gelesen, aber keine Sonne...zzzZZZzzz...")
time.sleep(5)
print("Sonne sollte überm Horizont sein.")
while True:
azimut = wait_for_file("/dev/shm/azimut.txt")
print(azimut)
if azimut > 60 and azimut > 300: # ???
break
print("Datei azimut.txt gelesen, sieht dunkel aus, gute Nacht...zzzZZZzzz...")
time.sleep(5)
print("Sonne zw. Ost und West ;)")
if __name__ == "__main__":
main()
Alles anzeigen
Ups. os.path.filename muss natürlich os.path.basename heißen. Korrigiert.
Aargh, der Parameter von wait_for_file hat auch gefehlt. Dass das ganze ungetestet ist, brauche ich jetzt nicht mehr erwähnen...
Ich denke, Du hast bei der Funktionsdefinition das Argument vergessen. Ansonsten sieht das gut aus, auch wenn mir eine Wiederholzeit von 5 Sekunden für den vorliegenden Fall etwas hektisch erscheint.
Wie sind denn die Aufrufe zum Berechnen von azimuth und sonnenhoehe?
Linus: Ja, aus dem von Dir genannten Grund.
fred0815: Ich weiß, aber wie rufst Du es genau auf?
Ich war mal so frei, @linusg's Skript etwas anzupassen:
#!/usr/bin/python3
import sunposition
import datetime
import time
import os
lat = 50
lon = 12
elevation = 500
def main():
while True:
azimut,sonnenhoehe = sunposition.sunpos(datetime.datetime.utcnow(),lat,lon,elevation)[0:2]
if -70 < sonnenhoehe < 0:
print("keine Sonne...zzzZZZzzz...")
else:
print("Sonne sollte ueberm Horizont sein.")
if 60 < azimut < 300:
print("azimut sieht dunkel aus, gute Nacht...zzzZZZzzz...")
else:
print("Sonne zw. Ost und West ;)")
time.sleep(60)
if __name__ == "__main__":
main()
Alles anzeigen
Bin nicht ganz sicher, ob ich die richtigen Elemente der Rückgabe von sunpos ausgewählt habe, ansonsten müsste es aber funktionieren.
Wenn du es eh als Modul vorliegen hast, solltest du auf jeden Fall den Weg über import und direkte Nutzung der Funktionen oder Methoden wählen. Nicht zuletzt ist es einfacher und schont die SD-Karte
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!