Anfänger :-) wie gehe ich weiter mit .py Datei weiter

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
Robert-Poelzl
User
Beiträge: 3
Registriert: Dienstag 3. November 2020, 21:07

Grüße Euch,

Ich bin totaler Anfänger, was Raspberry betrifft und erst recht habe ich keine Erfahrung mit Python.
Warum dann das Ganze ?
Ich betreibe eine kleine Sternwarte, die einige km von mir zuhause entfernt ist und remote über TeamViewer bedient wird.

Um mir vor Ort vom Himmel "ein Bild" machen zu können, habe ich einen Raspberry 3B mit der HQ Camera in einer kleinen Acrylkuppel verbaut.
Diese macht regelmäßig Bilder.
Warum Raspberry ? Er braucht halt viel weniger Strom als der Rechner in der Sternwarte. (Solar Insellösung)

Hier ein link sodass man sich was vorstellen kann:
https://github.com/thomasjacquin/allsky ... /README.md


Ein Bekannter hat mir eine .Py Datei gesendet, diese Datei soll der Raspberry dann automatisch ausführen, sobald er eingeschaltet ist und soll je nach Helligkeit eines Helligkeitssensors per kleinem Servos ein kleines Blättchen vor die Linse schieben, sodass die Sonne auch nach Monaten (Jahren) keine Schäden am Chip hinterlässt.
Diese PY Datei habe ich.

Aber wie gehe ich nun weiter vor?

Mein Betriebssystem zuhause ist Windows7


Vielen herzlichen Dank für die Hilfe
Robert
Rckstr
User
Beiträge: 19
Registriert: Freitag 15. Mai 2020, 10:04

Das hört sich für mich nach einem optimalen Anwendungsfall für einen Cronjob an. Du kannst damit quasi einstellen, wann etwas bestimmtes ablaufen soll. Also in deinem Fall zum Beispiel.
- Start die py Datei immer wenn der Pi hochfährt
- lasse die py Datei jede 15 Minuten durchlaufen

Cronjob ist dahingegen sehr mächtig.

Anbei eine kurze Erklärung zur Übersicht:

Code: Alles auswählen

crontab

  Schedule cron jobs to run on a time interval for the current user.
  Job definition format: "(min) (hour) (day_of_month) (month) (day_of_week) command_to_execute".

  - Edit the crontab file for the current user:
    crontab -e

  - Edit the crontab file for a specific user:
    sudo crontab -e -u user

  - View a list of existing cron jobs for current user:
    crontab -l

  - Remove all cron jobs for the current user:
    crontab -r

  - Sample job which runs at 10:00 every day (* means any value):
    0 10 * * * command_to_execute

  - Sample job which runs every minute on the 3rd of April:
    * * 3 Apr * command_to_execute

  - Sample job which runs a certain script at 02:30 every Friday:
    30 2 * * Fri /absolute/path/to/script.sh
Und zum herumprobieren hier: https://crontab.guru/

Hoffe das ist in etwa das was dir helfen würde.

/Rckstr
Robert-Poelzl
User
Beiträge: 3
Registriert: Dienstag 3. November 2020, 21:07

Servus Rckstr

Vielen Dank für deine Hilfe.
Ich muss mich da von Anfang an einarbeiten.
Habe mir das einfacher vorgestellt.

Danke nochmals
Robert
Robert-Poelzl
User
Beiträge: 3
Registriert: Dienstag 3. November 2020, 21:07

Servus Rckstr,

Ich habe nun erste Tests gemacht.

Dieses Script klappt oft nicht. Meistens gehts einige Minuten (schalte das Licht im Raum ein und aus) aber nach längerer Zeit reagiert nix mehr.
Das ist blöd, denn am Abend sollte das Servo (bei der Sternwarte) das Abdeckplättchen vom Objektiv wegbewegen, aber es bleibt geschlossen.

Ich habe keine Ahnung, wie oft dieses Script am Raspberry ausgeführt wird. Für den Fall dass es zb JEDE SEKUNDE ausgeführt würde, wäre das ein Blödsinn. Es würde voll reichen wenn es jede Minute checkt.
Oder super wäre eine fixe Uhrzeit (zb 8-17 Uhr geschlossen)

Wärst du so nett und könntest das Script kurz checken?
Das wäre eine Riesenhilfe.
Vielen Dank Robert


#!/usr/bin/env python
import RPi.GPIO as GPIO
# using module keyboard
# import keyboard
from time import sleep
from datetime import datetime

# Servo for save camera for sun
# HJG 14.09.2020
#
# Parts:
# Servo TowerPro, Micro Servo 99
# connect: red +3V, brown GND, orange GPIO03
# driving between angleOff, angleOn
# Foto DollaTek
# connect: GND, VCC +3V, D0 GPIO24


servoPIN = 3
lightPIN = 24
angleOff = 90
angleOn = 0
# default is On
defaultMode = 1

GPIO.setmode(GPIO.BCM)
GPIO.setup(servoPIN, GPIO.OUT)
GPIO.setup(lightPIN, GPIO.IN)

print("Start")
pwm = GPIO.PWM(servoPIN, 50)
pwm.start(0)

def SetAngle(angle):
duty = angle / 18 + 2
GPIO.output(servoPIN, True)
pwm.ChangeDutyCycle(duty)
# print("set angle", angle)
# print GPIO.input(lightPIN)
sleep(5)
GPIO.output(servoPIN, False)
pwm.ChangeDutyCycle(0)

def SetOnOff(onoff):
now = datetime.now()
dt_string = now.strftime("%d.%m.%Y %H:%M:%S")
if onoff==1:
print(dt_string, "light to camera")
SetAngle(angleOn)
else:
print(dt_string, "there is sun")
SetAngle(angleOff)

# SetAngle(0)
# SetAngle(90)
# SetAngle(180)
# SetOnOff(0)
# SetOnOff(1)
# sleep(1)

ModeOld = GPIO.input(lightPIN)
SetOnOff(ModeOld)

while 1:
sleep(1)
# with light -> Mode=0
Mode=GPIO.input(lightPIN)
if Mode != ModeOld:
SetOnOff(Mode)
ModeOld = Mode

# if keyboard.is_pressed('q'):
# break


pwm.stop()
GPIO.cleanup()
print("Fertig")
#!/usr/bin/env python
import RPi.GPIO as GPIO
# using module keyboard
# import keyboard
from time import sleep
from datetime import datetime

# Servo for save camera for sun
# HJG 14.09.2020
#
# Parts:
# Servo TowerPro, Micro Servo 99
# connect: red +3V, brown GND, orange GPIO03
# driving between angleOff, angleOn
# Foto DollaTek
# connect: GND, VCC +3V, D0 GPIO24


servoPIN = 3
lightPIN = 24
angleOff = 90
angleOn = 0
# default is On
defaultMode = 1

GPIO.setmode(GPIO.BCM)
GPIO.setup(servoPIN, GPIO.OUT)
GPIO.setup(lightPIN, GPIO.IN)

print("Start")
pwm = GPIO.PWM(servoPIN, 50)
pwm.start(0)

def SetAngle(angle):
duty = angle / 18 + 2
GPIO.output(servoPIN, True)
pwm.ChangeDutyCycle(duty)
# print("set angle", angle)
# print GPIO.input(lightPIN)
sleep(5)
GPIO.output(servoPIN, False)
pwm.ChangeDutyCycle(0)

def SetOnOff(onoff):
now = datetime.now()
dt_string = now.strftime("%d.%m.%Y %H:%M:%S")
if onoff==1:
print(dt_string, "light to camera")
SetAngle(angleOn)
else:
print(dt_string, "there is sun")
SetAngle(angleOff)

# SetAngle(0)
# SetAngle(90)
# SetAngle(180)
# SetOnOff(0)
# SetOnOff(1)
# sleep(1)

ModeOld = GPIO.input(lightPIN)
SetOnOff(ModeOld)

while 1:
sleep(1)
# with light -> Mode=0
Mode=GPIO.input(lightPIN)
if Mode != ModeOld:
SetOnOff(Mode)
ModeOld = Mode

# if keyboard.is_pressed('q'):
# break


pwm.stop()
GPIO.cleanup()
print("Fertig")
Antworten