Solange es nicht in Kelvin sein soll, müsste das gehen, auch unter Nutzung von Kelvin sollte eine Umrechnung in z.B. °C gut möglich sein.
Posts by fred0815
-
-
Es gibt jetzt ein Tutorial dazu:
hd-idle am Raspberry Pi installieren und einrichten
Ich habe der einfachheithalber auch mal ein Script install_hd_idle.sh geschrieben:
Mit nano install_hd_idle.sh öffnen und das reinkopieren:
Bash#!/bin/bash cd /home/pi wget https://launchpad.net/~yavdr/+archive/ubuntu/main/+files/hd-idle_1.01.orig.tar.gz tar -x -v -f /home/pi/hd-idle_1.01.orig.tar.gz cd /home/pi/hd-idle-1.01/ make && make install cp /home/pi/hd-idle-1.01/scripts/debian/default/hd-idle /etc/default cp /home/pi/hd-idle-1.01/scripts/debian/init.d/hd-idle /etc/init.d update-rc.d hd-idle defaults exit 0
Speichern mit Strg+o und Enter.
Ausführbar machen mit chmod 755 /home/pi/install_hd_idle.sh
Durchlaufen lassen mit sudo /home/pi/install_hd_idle.sh und Enter, fertig.
Oder manuell oder mit mc:
Entpacken mit tar -x, aber am einfachsten ist, du installierst dir mc:
Im Terminal sudo su eingeben, apt install mc eintippen, Enter drücken und evtl. bestätigen.
mc aufrufen, dann kannst du mit Enter direkt in die hd-idle_1.01.orig.tar.gz reinsehen, die du dir zuvor mittels wget https://launchpad.net/~yavdr/+archive/ubuntu/main/+files/hd-idle_1.01.orig.tar.gz runtergeladen hast, mit der Pfeiltaste nach unten auf den Ordner hd-idle-1.01 und mit F5 und Enter den Ordner nach /home/pi kopieren.
Mit der Tabulatortaste kannst du auf die andere Seite wechseln und mit Enter in den entpackten Ordner gehen.
Mit Strg+o kommst du an den Hintergrund, dort tippst du make und drückst Enter, danach make install.
Dann holst du den mc mit Strg+o wieder in den Vordergrund und wechselst in den Ordner /scripts/debian/default, die darin enthaltene Datei muss nach /etc/default/, mit Tab kannst du auf die andere Seite und das tar.gz verlassen, indem du auf /.. gehst und Enter drückst. Dann navigierst du nach /etc/default/
und wechselst wieder mit Tab, gehst auf hd-idle und kopierst mit F5 die Datei rüber. Das gleiche mit der hd-idle im init.d Ordner, nur eben in den Ordner /etc/init.d kopieren.
Dann kannst du mit nano /etc/default/hd-idle nach deinen Wünschen bearbeiten.
Dann noch sudo update-rc.d hd-idle defaults und nach einem Neustart sollte hd-idle automatisch laufen.
Es ist halt etwas verwirrend, dass alle 3 Dateien hd-idle heissen, eine hd-idle für defaults, wo man Autostart und Optionen eintragen kann, eine hd-idle für den Start-Stop-Dienst und das eigentliche Programm hd-idle, aber du kannst ja mit nano reingucken, dann siehst du welche hd-idle welche ist.
Wenn du alles richtig gemacht hast, solltest du mit dem Befehl find /etc -name hd-idle 2 Dateien finden:
/etc/default/hd-idle und /etc/init.d/hd-idle, die dritte Datei mit dem Befehl which hd-idle sollte /usr/sbin/hd-idle als Ausgabe bringen, die wurde mit make install automatisch dorthin kopiert.
-
Der Beitrag ist wohl etwas veraltet, ich kann ja noch mal drüber gucken, um zu sehen, ob man das auf die aktuellen Betriebssysteme anpassen kann.
Zu den Kleinigkeiten: Suchmaschine
-
Stapelverarbeitung Hinzufügen Herausnehmen FIFO put() get(), pop() push() pull() LIFO put() pull() push() get(), pop() Klingt logisch.
-
Ok, geändert.
-
Hm, was für einen Unterschied macht das ?
-
Hier mal die vorläufig finale Version, falls noch jemand Fehler findet, oder Verbesserungsvorschläge hat, nur her damit.
Python
Display More#!/usr/bin/python3 ########################################################################################### # Achtung, das Programm geht falsch, # # wenn es nach Sonnenaufgang gestartet wird # # und erst am nächsten Tag richtig # # nachdem es sich kalibriert hat # ########################################################################################### # ToDo-Liste: # # Code vernünftig schreiben und Zenit implementieren # # Nach dem kalibrieren direkt den Azimut anfahren und von dort aus weiter # ########################################################################################### # Für bunte Schrift mit "pip3 install termcolor" termcolor installieren # # sonst gibts eine Fehlermeldung, also installieren, oder Code ändern (cprint) # ########################################################################################### from termcolor import colored, cprint import sunposition import datetime from datetime import date import time import os import sys from RPi import GPIO from subprocess import call # Pins für den Azimut-Schrittmotor StepPins = [18,23,24,25] # Azimutschalter links und rechts AzimutSchalter = [17,21] # Zenitschalter, noch nicht implementiert ZenitSchalter = [22,5] ########################################################################################### # Ortsbestimmung und Höhe über Meeresspiegel # # lat = positiv = nördliche Hemisphäre # # lon = positiv = östlich von Greenwich # # elevation = Höhe über NN (nicht Mittelmeer) # # Bsp.: Flugplatz Freiburg # # lat = 48.02 # # lon = 7.83 # # elevation = 237 # ########################################################################################### lat = 48.01 lon = 7.83 elevation = 249 ########################################################################################### # Prüfintervall in Sekunden. Prüft alle X Sekunden, ob die Sonne über dem Horizont ist, # # nach einem Tagesdurchgang wird sie erst nach dem Nachtschlafmodus wieder relevant. # ########################################################################################### Prüfintervall = 600 #Wartezeit für den Schrittmotor sollte mind. 10/float(1000) sein, sonst stottert der Motor# WaitTime = 10/float(1000) ########################################################################################### # Maximale Sonnenhöhe ab der die Sonne am Horizont auftaucht. In unbebauten Gegenden oder # # auf dem Ozean 90, kann in dicht bebauten Gegenden deutlich niedriger sein, z.B. 78 # # Das gleiche gilt für Mindest- und Maximalazimut, z.B. 90 (Osten) bis 270 (Westen) # # Höchste und niedrigste Sonnenstundenanzahl des Jahres: Polarregionen 24 und 0, sonst # # Ortsabhängig z.B. max. 16 im Sommer, min. 5 im Winter, also selbst anpassen. # ########################################################################################### Max_Sonnenhöhe = 80 Min_Azimut = 95 Max_Azimut = 240 Max_SonnenStd = 16 Min_SonnenStd = 8 ########################################################################################### # Wieviele Stunden soll nach einem Tagesdurchgang geschlafen werden, damit der # # Prüfintervall nach Sonnenuntergang und nachts nicht ständig abfragt ? # # Auch diese Werte sind an die geographische Lage anzupassen. # ########################################################################################### NachtStd_Jan = 14 NachtStd_Feb = 13 NachtStd_März = 11 NachtStd_April = 10 NachtStd_Mai = 9 NachtStd_Juni = 8 NachtStd_Juli = 7 NachtStd_Aug = 10 NachtStd_Sep = 13 NachtStd_Okt = 14 NachtStd_Nov = 15 NachtStd_Dez = 15 ########################################################################################### # Abhängig vom verwendeten Schrittmotor und Getriebeübersetzung. # # Der Schrittmotor macht in der Kalibierungsschleife bei WaitTime 10/float(1000) # # ca. 70000 Schritte pro Stunde, in der Schritteschleife ca 21000 Schritte pro Stunde # # Für genauere Ergebnisse 24 Stunden in der Kalibrierungschleife und 24 Stunden in der # # Schritteschleife laufen lassen. Die Kalibrierungsschleife läuft schneller durch, also # # von der Schritteschleife trennen. Maximale Kalibrierungsschritte: Wieviele Schritte # # dürfen gemacht werden, ohne dass ein defekter Kontaktschalter den Schrittmotor stoppt ? # ########################################################################################### KalibrierungsschritteproStd = 70000 Max_Kalibrierungsschritte = KalibrierungsschritteproStd*Max_SonnenStd SchritteproStd = 21000 ########################################################################################### # Maximale Schritte: Wieviele Schritte dürfen gemacht werden, ohne dass ein eventuell # # defekter, oder fehlender Kontaktschalter sicherheitshalber den Schrittmotor stoppt ? # ########################################################################################### Max_Linksschritte = SchritteproStd*Max_SonnenStd Max_Schritte_Jan = SchritteproStd*9 Max_Schritte_Feb = SchritteproStd*10 Max_Schritte_März = SchritteproStd*11 Max_Schritte_April = SchritteproStd*14 Max_Schritte_Mai = SchritteproStd*Max_SonnenStd Max_Schritte_Juni = SchritteproStd*Max_SonnenStd Max_Schritte_Juli = SchritteproStd*Max_SonnenStd Max_Schritte_Aug = SchritteproStd*15 Max_Schritte_Sep = SchritteproStd*13 Max_Schritte_Okt = SchritteproStd*11 Max_Schritte_Nov = SchritteproStd*10 Max_Schritte_Dez = SchritteproStd*Min_SonnenStd ########################################################################################### # Nachtschlafmodus in Stunden, im Winter länger als im Sommer # # Die Werte sind an die geographische Lage anzupassen # ########################################################################################### Jan_Nacht = int(NachtStd_Jan*3600) Feb_Nacht = int(NachtStd_Feb*3600) März_Nacht = int(NachtStd_März*3600) April_Nacht = int(NachtStd_April*3600) Mai_Nacht = int(NachtStd_Mai*3600) Juni_Nacht = int(NachtStd_Juni*3600) Juli_Nacht = int(NachtStd_Juli*3600) Aug_Nacht = int(NachtStd_Aug*3600) Sep_Nacht = int(NachtStd_Sep*3600) Okt_Nacht = int(NachtStd_Okt*3600) Nov_Nacht = int(NachtStd_Nov*3600) Dez_Nacht = int(NachtStd_Dez*3600) ########################################################################################### # GPIO.BCM GPIOs für den östlichen und westlichen Kontaktschalter. # ########################################################################################### Östlicher_Kontaktschalter = 17 Westlicher_Kontaktschalter = 21 ########################################################################################### # Ab hier sollten keine Änderungen mehr nötig sein. @fred0815 # # Vielen Dank an alle, die im forum-raspberrypi.de unermüdlich geholfen haben ! 6.1.2021 # ########################################################################################### for pin in StepPins: cprint("Setze GPIOs für Azimut-Schrittmotor", "green") GPIO.setmode(GPIO.BCM) GPIO.setup(pin,GPIO.OUT) GPIO.output(pin, False) for pin in AzimutSchalter: cprint("Setze GPIOs für Azimut-Schalter", "green") GPIO.setmode(GPIO.BCM) GPIO.setup(pin,GPIO.IN) GPIO.input(pin) for pin in ZenitSchalter: cprint("Setze GPIOs für Zenit-Schalter", "green") GPIO.setmode(GPIO.BCM) GPIO.setup(pin,GPIO.IN) GPIO.input(pin) def Pinsaus(): for pin in StepPins: GPIO.setmode(GPIO.BCM) GPIO.setup(pin,GPIO.OUT) GPIO.output(pin, False) def Kalibrierung(): Seq = [[1,0,0,1], [1,0,0,0], [1,1,0,0], [0,1,0,0], [0,1,1,0], [0,0,1,0], [0,0,1,1], [0,0,0,1]] StepCount = len(Seq) StepDir = -1 StepCounter = 0 linksschritte = 0 azimut,sonnenhoehe = sunposition.sunpos(datetime.datetime.utcnow(),lat,lon,elevation)[0:2] print("Sonnenhöhe {:.0f} \nAzimut {:.0f}".format(sonnenhoehe,azimut)) while GPIO.input(Östlicher_Kontaktschalter) == GPIO.LOW and linksschritte < Max_Kalibrierungsschritte: for pin in range(0,4): xpin=StepPins[pin] if Seq[StepCounter][pin]!=0: GPIO.output(xpin, True) else: GPIO.output(xpin, False) StepCounter += StepDir linksschritte = linksschritte + 1 if (StepCounter>=StepCount): StepCounter = 0 if (StepCounter<0): StepCounter = StepCount+StepDir time.sleep(WaitTime) if GPIO.input(Östlicher_Kontaktschalter) == GPIO.HIGH: print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) cprint("Kalibrierung abgeschlossen", "green") Globalcounter = int(linksschritte) print("{} Schritte benötigt".format(Globalcounter)) Pinsaus() break if linksschritte > Max_Kalibrierungsschritte-1 and GPIO.input(Östlicher_Kontaktschalter) == GPIO.LOW: cprint("Maximale Schritte erreicht, entweder Zahl (max_Kalibrierungsschritte) zu niedrig eingestellt,", "red") cprint("Verkabelung falsch oder defekt, oder Schalter nicht richtig angeschlossen oder defekt", "red") Pinsaus() break else: cprint("Fehler beim lesen des GPIO für linken Kontaktschalter.", "red") Pinsaus() def Schritte(): cprint("Starte das Programm", "green") print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) azimut,sonnenhoehe = sunposition.sunpos(datetime.datetime.utcnow(),lat,lon,elevation)[0:2] print("Sonnenhöhe {:.0f} \nAzimut {:.0f}".format(sonnenhoehe,azimut)) while True: azimut,sonnenhoehe = sunposition.sunpos(datetime.datetime.utcnow(),lat,lon,elevation)[0:2] if sonnenhoehe > Max_Sonnenhöhe or azimut > Max_Azimut and azimut < Min_Azimut: print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) print("Sonnenhöhe {:.0f} \nAzimut {:.0f}".format(sonnenhoehe,azimut)) cprint("Sonne unterm Horizont, oder zu weit im Westen oder Osten.", "green") print("Prüfe in {} Minuten nochmal.".format(int(Prüfintervall/60))) time.sleep(Prüfintervall) break Seq = [[1,0,0,1], [1,0,0,0], [1,1,0,0], [0,1,0,0], [0,1,1,0], [0,0,1,0], [0,0,1,1], [0,0,0,1]] StepCount = len(Seq) StepDir = 1 StepCounter = 0 schritte = 0 while True: now = datetime.datetime.now() if now.month == 1: max_schritte = Max_Schritte_Jan if now.month == 2: max_schritte = Max_Schritte_Feb if now.month == 3: max_schritte = Max_Schritte_März if now.month == 4: max_schritte = Max_Schritte_April if now.month == 5: max_schritte = Max_Schritte_Mai if now.month == 6: max_schritte = Max_Schritte_Juni if now.month == 7: max_schritte = Max_Schritte_Juli if now.month == 8: max_schritte = Max_Schritte_Aug if now.month == 9: max_schritte = Max_Schritte_Sep if now.month == 10: max_schritte = Max_Schritte_Okt if now.month == 11: max_schritte = Max_Schritte_Nov if now.month == 12: max_schritte = Max_Schritte_Dez for pin in range(0,4): xpin=StepPins[pin] if Seq[StepCounter][pin]!=0: GPIO.output(xpin, True) else: GPIO.output(xpin, False) StepCounter += StepDir schritte = schritte + 1 if (StepCounter>=StepCount): StepCounter = 0 if (StepCounter<0): StepCounter = StepCount+StepDir time.sleep(WaitTime) azimut,sonnenhoehe = sunposition.sunpos(datetime.datetime.utcnow(),lat,lon,elevation)[0:2] if GPIO.input(Westlicher_Kontaktschalter) == GPIO.HIGH or schritte > max_schritte-1 or sonnenhoehe > Max_Sonnenhöhe or azimut > Max_Azimut and azimut < Min_Azimut: print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) print("Sonnenhöhe {:.0f} \nAzimut {:.0f}\nKontaktschalter rechts {}".format(sonnenhoehe,azimut, GPIO.input(21))) cprint("Sonne zu tief oder zu weit im Westen oder Osten, oder", "green") cprint("Kontaktschalter erreicht oder maximale Schritte für heute erreicht", "green") Globalcounter = int(schritte) print("{} Schritte gemacht, als Maximum waren {} Schritte vorgesehen.".format(Globalcounter, max_schritte)) print("Es wurden {} Umdrehungen gemacht, maximal vorgesehen waren {} Umdrehungen".format(Globalcounter/4096, max_schritte/4096)) Pinsaus() if now.month == 1: print("Gute Nacht am {}. Januar, mache jetzt {} Stunden Pause".format(now.day, int(Jan_Nacht/3600))) print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) time.sleep(int(Jan_Nacht)) break if now.month == 2: print("Gute Nacht am {}. Februar, mache jetzt {} Stunden Pause".format(now.day, int(Feb_Nacht/3600))) print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) time.sleep(int(Feb_Nacht)) break if now.month == 3: print("Gute Nacht am {}. März, mache jetzt {} Stunden Pause".format(now.day, int(März_Nacht/3600))) print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) time.sleep(int(März_Nacht)) break if now.month == 4: print("Gute Nacht am {}. April, mache jetzt {} Stunden Pause".format(now.day, int(April_Nacht/3600))) print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) time.sleep(int(April_Nacht)) break if now.month == 5: print("Gute Nacht am {}. Mai, mache jetzt {} Stunden Pause".format(now.day, int(Mai_Nacht/3600))) print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) time.sleep(int(Mai_Nacht)) break if now.month == 6: print("Gute Nacht am {}. Juni, mache jetzt {} Stunden Pause".format(now.day, int(Juni_Nacht/3600))) print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) time.sleep(int(Juni_Nacht)) break if now.month == 7: print("Gute Nacht am {}. Juli, mache jetzt {} Stunden Pause".format(now.day, int(Juli_Nacht/3600))) print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) time.sleep(int(Juli_Nacht)) break if now.month == 8: print("Gute Nacht am {}. August, mache jetzt {} Stunden Pause".format(now.day, int(Aug_Nacht/3600))) print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) time.sleep(int(Aug_Nacht)) break if now.month == 9: print("Gute Nacht am {}. September, mache jetzt {} Stunden Pause".format(now.day, int(Sep_Nacht/3600))) print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) time.sleep(int(Sep_Nacht)) break if now.month == 10: print("Gute Nacht am {}. Oktober, mache jetzt {} Stunden Pause".format(now.day, int(Okt_Nacht/3600))) print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) time.sleep(int(Okt_Nacht)) break if now.month == 11: print("Gute Nacht am {}. November, mache jetzt {} Stunden Pause".format(now.day, int(Nov_Nacht/3600))) print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) time.sleep(int(Nov_Nacht)) break if now.month == 12: print("Gute Nacht am {}. Dezember, mache jetzt {} Stunden Pause".format(now.day, int(Dez_Nacht/3600))) print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) time.sleep(int(Dez_Nacht)) break else: cprint("Fehler in Schritte !", "red") Pinsaus() def main(): while True: try: print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) azimut,sonnenhoehe = sunposition.sunpos(datetime.datetime.utcnow(),lat,lon,elevation)[0:2] print("Sonnenhöhe {:.0f} \nAzimut {:.0f}".format(sonnenhoehe,azimut)) if GPIO.input(Östlicher_Kontaktschalter) == GPIO.HIGH: cprint("Bin in Startposition", "green") else: cprint("Kalibrierung nötig", "green") Kalibrierung() if sonnenhoehe > Max_Sonnenhöhe or azimut > Max_Azimut and azimut < Min_Azimut: print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) print("Sonnenhöhe {:.0f} \nAzimut {:.0f}".format(sonnenhoehe,azimut)) cprint("Sonne unterm Horizont, oder zu weit im Westen oder Osten.", "green") print("Prüfe in {} Minuten nochmal.".format(int(Prüfintervall/60))) time.sleep(Prüfintervall) now = datetime.datetime.now() if now.month == 1: print("Es ist der {}. Januar".format(now.day)) if now.month == 2: print("Es ist der {}. Februar".format(now.day)) if now.month == 3: print("Es ist der {}. März".format(now.day)) if now.month == 4: print("Es ist der {}. April".format(now.day)) if now.month == 5: print("Es ist der {}. Mai".format(now.day)) if now.month == 6: print("Es ist der {}. Juni".format(now.day)) if now.month == 7: print("Es ist der {}. Juli".format(now.day)) if now.month == 8: print("Es ist der {}. August".format(now.day)) if now.month == 9: print("Es ist der {}. September".format(now.day)) if now.month == 10: print("Es ist der {}. Oktober".format(now.day)) if now.month == 11: print("Es ist der {}. November".format(now.day)) if now.month == 12: print("Es ist der {}. Dezember".format(now.day)) Schritte() azimut,sonnenhoehe = sunposition.sunpos(datetime.datetime.utcnow(),lat,lon,elevation)[0:2] print("Sonnenhöhe {:.0f} \nAzimut {:.0f}".format(sonnenhoehe,azimut)) except KeyboardInterrupt: GPIO.cleanup() else: cprint("Fehler in main !", "red") GPIO.cleanup() if __name__ == "__main__": main()
Und die erforderliche sunposition.py als Anhang:
-
Stimmt, klappt wunderbar.
-
Wie kann man ein numpy.float64 in ein int umwandeln ?
Ich habe es so probiert, jedoch mag er nicht:
print("Zahl1 ist {}".format(int(zahl1)))
Fehlermeldung:
TypeError: 'numpy.float64' object cannot be interpreted as an integer
-
Bevor das Thema noch Moos ansetzt, hier mal ein zwischenzeitliches Update, nicht, dass jemand auf die Idee kommt, der Thread sei erledigt.
Python
Display More#!/usr/bin/python3 ################################################################################### # Achtung, das Programm geht falsch, # # wenn es nach Sonnenaufgang gestartet wird # # und erst am nächsten Tag richtig # # nachdem es sich kalibriert hat # ################################################################################### # ToDo-Liste: # # Code vernünftig schreiben und Zenit implementieren # # Nach dem kalibrieren direkt den Azimut anfahren und von dort aus weiter # ################################################################################### # Für bunte Schrift mit "pip3 install termcolor" termcolor installieren # # sonst gibts eine Fehlermeldung, also installieren, oder Code ändern (cprint) # ################################################################################### from termcolor import colored, cprint import sunposition import datetime from datetime import date import time import os import sys import RPi.GPIO as GPIO from subprocess import call # Pins für den Azimut-Schrittmotor StepPins = [18,23,24,25] # Azimutschalter links und rechts AzimutSchalter = [17,21] # Zenitschalter, noch nicht implementiert ZenitSchalter = [22,5] ################################################################################### # Ortsbestimmung und Höhe über Meeresspiegel # # lat = positiv = nördliche Hemisphäre # # lon = positiv = östlich von London # # elevation = Höhe über NN (nicht Mittelmeer) # # Bsp.: Flugplatz Freiburg # # lat = 48.02 # # lon = 7.83 # # elevation = 237 # ################################################################################### lat = 48.01 lon = 7.83 elevation = 249 pruefintervall = 600 #Wartezeit für den Schrittmotor mind. 10/float(1000), sonst stottert der Motor WaitTime = 10/float(1000) #################################################################################### # Der Schrittmotor macht bei WaitTime 10/float(1000) ca. 70000 Schritte pro Stunde # # also 1680000 Schritte in 24 Stunden # # Kreiselfickermodus für Polarregionen 1680000 # #################################################################################### SchritteproStd = 70000 max_sonnenstd = 16 min_sonnenstd = 8 max_linksschritte = SchritteproStd*max_sonnenstd max_Kalibrierungsschritte = SchritteproStd*max_sonnenstd max_schritte_jan = SchritteproStd*9 max_schritte_feb = SchritteproStd*10 max_schritte_märz = SchritteproStd*11 max_schritte_april = SchritteproStd*14 max_schritte_mai = SchritteproStd*max_sonnenstd max_schritte_juni = SchritteproStd*max_sonnenstd max_schritte_juli = SchritteproStd*max_sonnenstd max_schritte_august = SchritteproStd*15 max_schritte_sep = SchritteproStd*13 max_schritte_okt = SchritteproStd*11 max_schritte_nov = SchritteproStd*10 max_schritte_dez = SchritteproStd*min_sonnenstd #################################################################################### # Nachtmodus je Monat in Sekunden # # Die Werte sind an die geographische Lage anzupassen # #################################################################################### jan_nacht = int(50400) feb_nacht = int(46800) märz_nacht = int(39600) april_nacht = int(36000) mai_nacht = int(32400) juni_nacht = int(28800) juli_nacht = int(32400) aug_nacht = int(36000) sep_nacht = int(46800) okt_nacht = int(50400) nov_nacht = int(54000) dez_nacht = int(54000) for pin in StepPins: cprint("Setze GPIOs für Azimut-Schrittmotor", "green") GPIO.setmode(GPIO.BCM) GPIO.setup(pin,GPIO.OUT) GPIO.output(pin, False) for pin in AzimutSchalter: cprint("Setze GPIOs für Azimut-Schalter", "green") GPIO.setmode(GPIO.BCM) GPIO.setup(pin,GPIO.IN) GPIO.input(pin) for pin in ZenitSchalter: cprint("Setze GPIOs für Zenit-Schalter", "green") GPIO.setmode(GPIO.BCM) GPIO.setup(pin,GPIO.IN) GPIO.input(pin) def Pinsaus(): for pin in StepPins: GPIO.setmode(GPIO.BCM) GPIO.setup(pin,GPIO.OUT) GPIO.output(pin, False) def Kalibrierung(): Seq = [[1,0,0,1], [1,0,0,0], [1,1,0,0], [0,1,0,0], [0,1,1,0], [0,0,1,0], [0,0,1,1], [0,0,0,1]] StepCount = len(Seq) StepDir = -1 StepCounter = 0 linksschritte = 0 azimut,sonnenhoehe = sunposition.sunpos(datetime.datetime.utcnow(),lat,lon,elevation)[0:2] print(sonnenhoehe,azimut) while GPIO.input(17) == GPIO.LOW and linksschritte < max_Kalibrierungsschritte: for pin in range(0,4): xpin=StepPins[pin] if Seq[StepCounter][pin]!=0: GPIO.output(xpin, True) else: GPIO.output(xpin, False) StepCounter += StepDir linksschritte = linksschritte + 1 if (StepCounter>=StepCount): StepCounter = 0 if (StepCounter<0): StepCounter = StepCount+StepDir time.sleep(WaitTime) if GPIO.input(17) == GPIO.HIGH: if GPIO.input(17) == GPIO.HIGH: print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) cprint("Kalibrierung abgeschlossen", "green") Globalcounter = int(linksschritte) print("{} Schritte benötigt".format(Globalcounter)) Pinsaus() break if linksschritte > max_Kalibrierungsschritte-1 and GPIO.input(17) == GPIO.LOW: cprint("Maximale Schritte erreicht, entweder Zahl (max_Kalibrierungsschritte) zu niedrig eingestellt,", "red") cprint("Verkabelung falsch oder defekt, oder Schalter nicht richtig angeschlossen oder defekt", "red") Pinsaus() break else: cprint("Fehler beim lesen des GPIO für linken Kontaktschalter.", "red") Pinsaus() def Schritte(): cprint("Starte das Programm", "green") azimut,sonnenhoehe = sunposition.sunpos(datetime.datetime.utcnow(),lat,lon,elevation)[0:2] while True: azimut,sonnenhoehe = sunposition.sunpos(datetime.datetime.utcnow(),lat,lon,elevation)[0:2] if sonnenhoehe > 80 and 65 < sonnenhoehe or azimut > 240 and azimut < 95: print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) print(sonnenhoehe,azimut) cprint("Sonne unterm Horizont, oder zu weit im Westen oder Osten.", "green") print("Prüfe in {} Minuten nochmal.".format(pruefintervall/60)) time.sleep(pruefintervall) break Seq = [[1,0,0,1], [1,0,0,0], [1,1,0,0], [0,1,0,0], [0,1,1,0], [0,0,1,0], [0,0,1,1], [0,0,0,1]] StepCount = len(Seq) StepDir = 1 StepCounter = 0 schritte = 0 while True: now = datetime.datetime.now() if now.month == 1: max_schritte = max_schritte_jan if now.month == 2: max_schritte = max_schritte_feb if now.month == 3: max_schritte = max_schritte_märz if now.month == 4: max_schritte = max_schritte_april if now.month == 5: max_schritte = max_schritte_mai if now.month == 6: max_schritte = max_schritte_juni if now.month == 7: max_schritte = max_schritte_juli if now.month == 8: max_schritte = max_schritte_aug if now.month == 9: max_schritte = max_schritte_sep if now.month == 10: max_schritte = max_schritte_okt if now.month == 11: max_schritte = max_schritte_nov if now.month == 12: max_schritte = max_schritte_dez for pin in range(0,4): xpin=StepPins[pin] if Seq[StepCounter][pin]!=0: GPIO.output(xpin, True) else: GPIO.output(xpin, False) StepCounter += StepDir schritte = schritte + 1 if (StepCounter>=StepCount): StepCounter = 0 if (StepCounter<0): StepCounter = StepCount+StepDir time.sleep(WaitTime) azimut,sonnenhoehe = sunposition.sunpos(datetime.datetime.utcnow(),lat,lon,elevation)[0:2] if GPIO.input(21) == GPIO.HIGH or schritte > max_schritte-1 or sonnenhoehe > 80 and 65 < sonnenhoehe or azimut > 240 and azimut < 95: print(sonnenhoehe, azimut, GPIO.input(21)) cprint("Sonne zu tief oder zu weit im Westen oder Osten, oder", "green") cprint("Kontaktschalter erreicht oder maximale Schritte für heute erreicht", "green") Globalcounter = int(schritte) print("{} Schritte gemacht, als Maximum waren {} Schritte vorgesehen.".format(Globalcounter, max_schritte)) Pinsaus() if now.month == 1: print("Gute Nacht am {}. Januar, mache jetzt {} Stunden Pause".format(now.day, int(jan_nacht/3600))) time.sleep(int(jan_nacht)) break if now.month == 2: print("Gute Nacht am {}. Februar, mache jetzt {} Stunden Pause".format(now.day, int(feb_nacht/3600))) time.sleep(int(feb_nacht)) break if now.month == 3: print("Gute Nacht am {}. März, mache jetzt {} Stunden Pause".format(now.day, int(märz_nacht/3600))) time.sleep(int(märz_nacht)) break if now.month == 4: print("Gute Nacht am {}. April, mache jetzt {} Stunden Pause".format(now.day, int(april_nacht/3600))) time.sleep(int(april_nacht)) break if now.month == 5: print("Gute Nacht am {}. Mai, mache jetzt {} Stunden Pause".format(now.day, int(mai_nacht/3600))) time.sleep(int(mai_nacht)) break if now.month == 6: print("Gute Nacht am {}. Juni, mache jetzt {} Stunden Pause".format(now.day, int(juni_nacht/3600))) time.sleep(int(juni_nacht)) break if now.month == 7: print("Gute Nacht am {}. Juli, mache jetzt {} Stunden Pause".format(now.day, int(juli_nacht/3600))) time.sleep(int(juli_nacht)) break if now.month == 8: print("Gute Nacht am {}. August, mache jetzt {} Stunden Pause".format(now.day, int(aug_nacht/3600))) time.sleep(int(aug_nacht)) break if now.month == 9: print("Gute Nacht am {}. September, mache jetzt {} Stunden Pause".format(now.day, int(sep_nacht/3600))) time.sleep(int(sep_nacht)) break if now.month == 10: print("Gute Nacht am {}. Oktober, mache jetzt {} Stunden Pause".format(now.day, int(okt_nacht/3600))) time.sleep(int(okt_nacht)) break if now.month == 11: print("Gute Nacht am {}. November, mache jetzt {} Stunden Pause".format(now.day, int(nov_nacht/3600))) time.sleep(int(nov_nacht)) break if now.month == 12: print("Gute Nacht am {}. Dezember, mache jetzt {} Stunden Pause".format(now.day, int(dez_nacht/3600))) time.sleep(int(dez_nacht)) break else: cprint("Fehler in Schritte !", "red") Pinsaus() def main(): while True: try: print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) azimut,sonnenhoehe = sunposition.sunpos(datetime.datetime.utcnow(),lat,lon,elevation)[0:2] print(sonnenhoehe,azimut) if GPIO.input(17) == GPIO.HIGH: cprint("Ist schon kalibriert", "green") else: cprint("Kalibrierung nötig", "green") Kalibrierung() if sonnenhoehe > 80 and 65 < sonnenhoehe or azimut > 240 and azimut < 95: print(time.strftime('%Y-%m-%d %H:%M', time.localtime())) print("Sonnenhöhe {} \nAzimut {}".format(sonnenhoehe,azimut)) cprint("Sonne unterm Horizont, oder zu weit im Westen oder Osten.", "green") print("Prüfe in {} Minuten nochmal.".format(pruefintervall/60)) time.sleep(pruefintervall) now = datetime.datetime.now() if now.month == 1: print("Es ist der {}. Januar".format(now.day)) if now.month == 2: print("Es ist der {}. Februar".format(now.day)) if now.month == 3: print("Es ist der {}. März".format(now.day)) if now.month == 4: print("Es ist der {}. April".format(now.day)) if now.month == 5: print("Es ist der {}. Mai".format(now.day)) if now.month == 6: print("Es ist der {}. Juni".format(now.day)) if now.month == 7: print("Es ist der {}. Juli".format(now.day)) if now.month == 8: print("Es ist der {}. August".format(now.day)) if now.month == 9: print("Es ist der {}. September".format(now.day)) if now.month == 10: print("Es ist der {}. Oktober".format(now.day)) if now.month == 11: print("Es ist der {}. November".format(now.day)) if now.month == 12: print("Es ist der {}. Dezember".format(now.day)) Schritte() azimut,sonnenhoehe = sunposition.sunpos(datetime.datetime.utcnow(),lat,lon,elevation)[0:2] print(sonnenhoehe,azimut) except KeyboardInterrupt: GPIO.cleanup() else: cprint("Fehler in main !", "red") GPIO.cleanup() if __name__ == "__main__": main()
-
Leider nicht, soweit war ich auch schon.AttributeError: module 'datetime' has no attribute 'now'
EDIT: Mein Fehler, man muss datetime 2x schreiben.
Klappt natürlich.
-
Wie kann man sich in Python3 den Monat anzeigen lassen bzw. vergleichen, ob wir jetzt diesen Monat haben ?
Ich werde noch wahnsinnig mit Python und time und date und datetime
-
Ach so, mein BananaPi hat noch Python 3.4.2
-
Weihnachtsbraten schlecht geworden ?
-
Ich wollte Peppy auf dem BananaPi installieren, beim ausführen kommt aber diese Meldung:
Python
Display MoreTraceback (most recent call last): File "/home/pi/Peppy/peppy.py", line 30, in <module> from event.dispatcher import EventDispatcher File "/home/pi/Peppy/event/dispatcher.py", line 22, in <module> from ui.menu.stationmenu import StationMenu File "/home/pi/Peppy/ui/menu/stationmenu.py", line 22, in <module> from util.util import IMAGE_SHADOW, IMAGE_SELECTION, FOLDER_ICONS, EXT_PNG, IMAGE_STAR, V_ALIGN_BOTTOM File "/home/pi/Peppy/util/util.py", line 32, in <module> from util.config import Config, USAGE, USE_VOICE_ASSISTANT, COLORS, COLOR_DARK, FONT_KEY, CURRENT, FILE_LABELS, \ File "/home/pi/Peppy/util/config.py", line 27, in <module> from util.collector import GENRE, ARTIST, ALBUM, TITLE, DATE, TYPE, COMPOSER, FOLDER, FILENAME File "/home/pi/Peppy/util/collector.py", line 100 self.CREATE_METADATA_TABLE = f"""CREATE TABLE IF NOT EXISTS {self.table_name} (id integer PRIMARY KEY,{csv});""" ^ SyntaxError: invalid syntax
Was stimmt hier nicht ?
-
Zu spät, ich habe nochmal alles neu gemacht, das ging schneller und jetzt läuft es auch.
Code
Display Moresudo usermod -a -G tty pi sudo apt-get -y install libts0 vlc python3-pygame eject bluealsa libasound2-plugin-equal sudo pip3 install tornado RPi.GPIO discogs_client pynanosvg oauth2 feedparser mutagen pexpect Pillow rpi-backlight python-vlc wget https://www.dropbox.com/s/0tkdym8ojhcmbu2/libsdl1.2debian_1.2.15+veloci1-1_armhf.deb sudo dpkg -i libsdl1.2debian_1.2.15+veloci1-1_armhf.deb sudo apt-get -f install cd /home/pi git clone https://github.com/project-owner/peppyalsa.git cd peppyalsa sudo apt-get -y install build-essential autoconf automake libtool libasound2-dev libfftw3-dev aclocal && libtoolize autoconf && automake --add-missing ./configure && make sudo make install wget https://raw.githubusercontent.com/project-owner/Peppy.doc/master/files/alsa-config/.asoundrc-equal-peppyalsa mv .asoundrc-equal-peppyalsa /home/pi/.asoundrc
-
Doch, habe ich installiert:
Codepip3 install pynanosvg Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Requirement already satisfied: pynanosvg in /usr/local/lib/python3.7/dist-packages (0.3.1)
Und trotzdem:
Python
Display Morepygame 1.9.4.post1 Hello from the pygame community. https://www.pygame.org/contribute.html Traceback (most recent call last): File "./peppy.py", line 31, in <module> from event.dispatcher import EventDispatcher File "/home/pi/Peppy/event/dispatcher.py", line 22, in <module> from ui.menu.stationmenu import StationMenu File "/home/pi/Peppy/ui/menu/stationmenu.py", line 22, in <module> from util.util import IMAGE_SHADOW, IMAGE_SELECTION, FOLDER_ICONS, EXT_PNG, IMAGE_STAR, V_ALIGN_BOTTOM File "/home/pi/Peppy/util/util.py", line 46, in <module> from util.imageutil import ImageUtil, EXT_MP4, EXT_M4A File "/home/pi/Peppy/util/imageutil.py", line 32, in <module> from svg import Parser, Rasterizer ImportError: cannot import name 'Parser' from 'svg' (unknown location)
Es scheint ein Problem mit svg zu sein, ich habe mir mit pip3 list alle anzeigen lassen und alle mit *svg* entfernen wollen, bei svg.path und svgwrite weigert er sich:
Python
Display Morepip3 uninstall svg.path svgwrite Not uninstalling svg.path at /usr/lib/python3/dist-packages, outside environment /usr Can't uninstall 'svg.path'. No files were found to uninstall. Not uninstalling svgwrite at /usr/lib/python3/dist-packages, outside environment /usr Can't uninstall 'svgwrite'. No files were found to uninstall. pip3 install svg.path svgwrite Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Requirement already satisfied: svg.path in /usr/lib/python3/dist-packages (3.0) Requirement already satisfied: svgwrite in /usr/lib/python3/dist-packages (1.2.1) pip3 uninstall svg.path svgwrite Not uninstalling svg.path at /usr/lib/python3/dist-packages, outside environment /usr Can't uninstall 'svg.path'. No files were found to uninstall. Not uninstalling svgwrite at /usr/lib/python3/dist-packages, outside environment /usr Can't uninstall 'svgwrite'. No files were found to uninstall. pip3 show svg.path Name: svg.path Version: 3.0 Summary: SVG path objects and parser Home-page: https://github.com/regebro/svg.path Author: Lennart Regebro Author-email: regebro@gmail.com License: MIT Location: /usr/lib/python3/dist-packages Requires: Required-by: pip3 show svgwrite Name: svgwrite Version: 1.2.1 Summary: A Python library to create SVG drawings. Home-page: http://github.com/mozman/svgwrite.git Author: Manfred Moitzi Author-email: me@mozman.at License: MIT License Location: /usr/lib/python3/dist-packages Requires: Required-by: pip3 install pynanosvg Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Collecting pynanosvg Using cached https://www.piwheels.org/simple/pynanosvg/pynanosvg-0.3.1-cp37-cp37m-linux_armv6l.whl Installing collected packages: pynanosvg Successfully installed pynanosvg-0.3.1 /home/pi/Peppy/peppy.py pygame 1.9.4.post1 Hello from the pygame community. https://www.pygame.org/contribute.html Traceback (most recent call last): File "/home/pi/Peppy/peppy.py", line 31, in <module> from event.dispatcher import EventDispatcher File "/home/pi/Peppy/event/dispatcher.py", line 22, in <module> from ui.menu.stationmenu import StationMenu File "/home/pi/Peppy/ui/menu/stationmenu.py", line 22, in <module> from util.util import IMAGE_SHADOW, IMAGE_SELECTION, FOLDER_ICONS, EXT_PNG, IMAGE_STAR, V_ALIGN_BOTTOM File "/home/pi/Peppy/util/util.py", line 46, in <module> from util.imageutil import ImageUtil, EXT_MP4, EXT_M4A File "/home/pi/Peppy/util/imageutil.py", line 32, in <module> from svg import Parser, Rasterizer ImportError: cannot import name 'Parser' from 'svg' (unknown location)
Ich installiere am besten alles neu, geht wohl schneller..
-
Ich bekomme beim ausführen von python3 peppy.py die Fehlermeldung:
Python
Display MoreTraceback (most recent call last): File "./peppy.py", line 31, in <module> from event.dispatcher import EventDispatcher File "/home/pi/Peppy/event/dispatcher.py", line 22, in <module> from ui.menu.stationmenu import StationMenu File "/home/pi/Peppy/ui/menu/stationmenu.py", line 22, in <module> from util.util import IMAGE_SHADOW, IMAGE_SELECTION, FOLDER_ICONS, EXT_PNG, IMAGE_STAR, V_ALIGN_BOTTOM File "/home/pi/Peppy/util/util.py", line 46, in <module> from util.imageutil import ImageUtil, EXT_MP4, EXT_M4A File "/home/pi/Peppy/util/imageutil.py", line 32, in <module> from svg import Parser, Rasterizer ImportError: cannot import name 'Parser' from 'svg' (unknown location)
Ich habe peppy nach dieser Anleitung installiert:
https://github.com/project-owner/Peppy.doc/wiki/Expert
Eigentlich sollte ich alles notwendige für den Player installiert haben.
-
Ist zwar schon ein bisschen her, aber hier noch ein Update für eins dieser Boards:
Code
Display More#!/usr/bin/env python3 import time import smbus import math addr = 0x48 addr0x41 = 0x41 addr0x42 = 0x42 addr0x43 = 0x43 addr0x44 = 0x44 addr0x45 = 0x45 addr0x46 = 0x46 addr0x47 = 0x47 addr0x48 = 0x48 addr0x49 = 0x49 bus = smbus.SMBus(1) while True: data = bus.read_byte_data(addr,addr0x41) time.sleep(0.5) data = bus.read_byte_data(addr,addr0x41) print(data, "0x41 ohne rechtem Jumper 0, mit 255") time.sleep(0.5) data = bus.read_byte_data(addr,addr0x42) time.sleep(0.5) data = bus.read_byte_data(addr,addr0x42) print(data, "0x42 mit Jumper auch AIN2 3,3 Volt = 255, ohne Spannung 115, wenn LED-Helligkeit nicht gesetzt, sonst LED-Wert") #ohne rechtem Jumper + 3,3 Volt auf AIN1 115, ohne rechtem Jumper + 0 Volt auf AIN1 0, LED spielt auch eine Rolle time.sleep(0.5) data = bus.read_byte_data(addr,addr0x43) time.sleep(0.5) data = bus.read_byte_data(addr,addr0x43) print(data, "0x43 Poti mit linkem Jumper + AIN3") time.sleep(0.5) data = bus.read_byte_data(addr,addr0x44) time.sleep(0.5) data = bus.read_byte_data(addr,addr0x44) print(data, "0x44 Lichtsensor mit mittlerem Jumper + AIN0") time.sleep(0.5) data = bus.read_byte_data(addr,addr0x45) time.sleep(0.5) data = bus.read_byte_data(addr,addr0x45) print(data, "0x45 mit rechtem Jumper 255, ohne rechtem Jumper 0, wenn LED-Helligkeit nicht gesetzt, sonst LED-Wert") time.sleep(0.5) data = bus.read_byte_data(addr,addr0x46) time.sleep(0.5) data = bus.read_byte_data(addr,addr0x46) print(data, "0x46 mit mittlerem Jumper AIN2, wenn LED-Helligkeit nicht gesetzt, sonst LED-Wert") time.sleep(0.5) data = bus.read_byte_data(addr,addr0x47) time.sleep(0.5) data = bus.read_byte_data(addr,addr0x47) print(data, "0x47 Poti mit linkem Jumper + AIN3 ohne linkem Jumper") data = bus.read_byte_data(addr,addr0x48) time.sleep(0.5) data = bus.read_byte_data(addr,addr0x48) print(data, "0x48 Lichtsensor mit mittlerem Jumper, ohne mittlerem Jumper AIN0") time.sleep(0.5) data = bus.read_byte_data(addr,addr0x49) time.sleep(0.5) data = bus.read_byte_data(addr,addr0x49) print(data, "0x49 Lichtsensor mit mittlerem Jumper, ohne mittlerem Jumper AIN0, wenn LED-Helligkeit nicht gesetzt, sonst LED-Wert") time.sleep(0.5)
-
SPAM halt, warum ?