[DIY] AllSky Kamera mit Raspberry Pi – Mein Bauprojekt & Anleitung (All Sky Camera)

Hallo GanymedRN,

dein Tipp war goldrichtig, danke. Es lag nur am falschen ftp-Settings Script. Jetzt lief endOfNight.sh durch.
 
Hallo zusammen,
ich habe nun alle Varianten ausprobiert und ich bekomme einfach kein Bild im Live View
Kann mir jemand helfen?

Ich habe einen Raspberry Pi4
und eine ZWO ASI 120MC-S

LG Chris
 
Hallo Chris,

Hast du im Verzeichnis allsky eine Datei mit Namen liveview.jgp oder liveview.png?
Die sollte das LiveView Bild enthalten.
 
Hallo zusammen, hab jetzt mein Projekt auch zum laufen bekommen , ftp Server zum raspberry NAS läuft auch , hab jetzt die Asi 120 MC-S statt der Asi 290 MC genommen,obwohl mir die Bilder mit der 290 er besser gefallen haben. Nun zu meiner Frage. Wie macht ihr das wenn es zwischen durch geregnet hat? Es bilden sich ja Tropfen auf dem Dom die dann auch bleiben. Habt ihr den Dom irgendwie mit einem abperlenden Mittel Behandelt?
Danke schon mal für eure Mühen und bleibt gesund.
 
Hallo zusammen, habe ein Problemchen. Bin ja jetzt in Deutschland und habe mein Projekt aufgebaut und eingerichtet. Dem Rasp und der Nas die ip Adressen zugeordnet, Auf dem Router die Nas als Ftp eingerichtet und im Programm die Koordinaten auf den jetzigen Standort geändert. Das Programm starte und endet so wie es eingestellt ist. Was es leider nicht macht, ist das Endergebnis auf die Nas zu schicken. In der Schweiz hat es problemlos funktioniert. Ich habe hier in Deutschland nur das übliche Update gemacht und sonnst nichts. Habe ich hier noch irgendetwas übersehen?. Danke schonmal
 
Hallo Ivo,
Die GPIOs des Raspi können nicht soviel Strom liefern deshalb über einen NFET bei mir. Ausserdem würden 5V am GPIO anliegen, das zerstört den GPIO.
Kannst du eine LED am GPIO ein- und auschalten?
Hier meine Schaltung. Der NFET ist der IRML6246.
Der hat eine niedrige Schaltspannung am Gate und kann genug Strom.
Den Anhang 137346 betrachten

Hallo Roger,

wollte dir einen kurzen Zwischenbericht zum Stand der Allskycam geben:
1. Rasspberry Pi 4B (4GB) läuft prima mit der ASI 174MC, erstellt nun auch die Timelapse,
2. deine Lüftersteuerung läuft auch super, Dankeschön nochmal dafür,
3. einen Temperatursensor AM2302 habe ich auch installiert. Er zeigt Temperatur und Luftfeuchte in der Kuppel an.
Leider komme ich hier nun nicht weiter. Ich wollte damit ein Relais für die Heizung schalten. Wie kann ich die Temperaturwerte in Python einbinden, damit ein Relais geschaltet wird? Hast du dazu eine Idee?

Liebe Grüße Henry
 
Hallo Henry,
Vielleicht hilft dir der Link weiter.
Ich würde dann nur auf Temperatur größer bzw. kleiner als Schaltschwelle abfragen und evtl noch Hysterese in die SW einbauen damit das Relais nicht die ganze Zeit hin und her schaltet.
Ich persönlich bin kein Freund von Relais da sie fehleranfällig sind (klebende Kontakte) und auch die Ganze Zeit Strom ziehen wenn sie geschalten werden. Ausserdem sind sie deutlich teurer als ein FET.
Was willst du denn schalten dass du ein Relais brauchst?
 
Hallo Roger,
vielen Dank fürs kümmern. Nach diesen Link hatte ich den Sensor auch installiert und er gibt mir die Temperatur und Luftfeuchte auch aus. Und genau da komme ich nicht weiter. Wie kann ich die Temperatur auslesen und dann einen PIN ansteuern um entweder ein Relais oder den von dir favorisierten MOSFET ansteuern? Habe dazu nichts brauchbares im Netz gefunden. Du hast natürlich recht, ein Transistor ist die bessere Wahl. Ich schalte nur 4 Widerstände zur Heizung der Kuppel.
Liebe Grüße
Henry.
 
Hallo Henry,
Was meinst du das der Sensor Temperatur und Feuchte ausgibt? Hast du da schon ein Programm (Python)?
Wenn du den Wert schon im Programm hast ist es eine Sache von if Bedingungen die die gemessene Temperatur mit einer Scshwelle vergleichen und dann entsprechend einen GPIO ein- bzw ausschalten.
Das Schalten des GPIO geht mittels WiringPi Bibliothek.
Vielleicht schickst du ja mal das Programm dann schaue ich mir das mal an.
 
Hallo Roger,

ich habe eben noch kein Programm um die gemessene Temperatur des Sensors zu verarbeiten.
Ich kann nur den Sensor testen:

Adafruit_DHT.py

#!/usr/bin/python
# Copyright (c) 2014 Adafruit Industries
# Author: Tony DiCola

# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:

# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
import sys

import Adafruit_DHT


# Parse command line parameters.
sensor_args = { '11': Adafruit_DHT.DHT11,
'22': Adafruit_DHT.DHT22,
'2302': Adafruit_DHT.AM2302 }
if len(sys.argv) == 3 and sys.argv[1] in sensor_args:
sensor = sensor_args[sys.argv[1]]
pin = sys.argv[2]
else:
print('Usage: sudo ./Adafruit_DHT.py [11|22|2302] <GPIO pin number>')
print('Example: sudo ./Adafruit_DHT.py 2302 2 - Read from an AM2302 connected to GPIO pin #4')
sys.exit(1)

# Try to grab a sensor reading. Use the read_retry method which will retry up
# to 15 times to get a sensor reading (waiting 2 seconds between each retry).
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

# Un-comment the line below to convert the temperature to Fahrenheit.
# temperature = temperature * 9/5.0 + 32

# Note that sometimes you won't get a reading and
# the results will be null (because Linux can't
# guarantee the timing of calls to read the sensor).
# If this happens try again!
if humidity is not None and temperature is not None:
print('Temp={0:0.1f}* Humidity={1:0.1f}%'.format(temperature, humidity))
else:
print('Failed to get reading. Try again!')
sys.exit(1)

Befehl:
cd examples

sudo ./AdafruitDHT.py 22 2

Ausgabe:
Temp=21.0* Humidity=59.8%

Mehr habe ich leider noch nicht.

Liebe Grüße
Henry
 
OK verstehe du benutzt das fertige Beispiel Programm.
Im Prinzip kannst du diese Datei kopieren und einen anderen Namen verwenden. Dann auch unter anderem Namen aufrufen.
Die Zeile: humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) liest die Werte vom Sensor.
folgendes vergleicht die gelesene Temperatur mit einem Schwellwert z.B. 0° und führt entsprechend Code aus.

Mit WiringPi kann man die GPIOs kontrollieren:
import RPi.GPIO as GPIO # muss eingefügt werden um die GPIOs zu nutzen
import time # Um die Funktion sleep zu nutzen
pin = 18 # Hier die Nummer des verwendeten GPIO verwenden

GPIO.setmode(GPIO.BCM) # setzt die Nummerierung der Pins auf BCM Nummern also z.B. GPIO18 statt der physikalischen Headerposition

GPIO.setup(pin, OUTPUT) # setzt den GPIO mit Nummer pin als Ausgang fest
GPIo_Output(pin, GPIO.LOW) # setzt den GPIO mit Nummer pin auf 0

if temperature < 0.0:
# Hier wird der GPIO eingeschalten wenn die Temperatur kleiner 0° ist
GPIo_Output(pin, GPIO.HIGH)
print("Temperatur ist kleiner als 0°")
else:
# Hier wird der GPIO ausgeschalten
GPIo_Output(pin, GPIO.LOW)
print("Temperatur ist größer als 0°")

Das Einrücken der zwei Zeilen nach if oder else darf man bei Python nicht vergessen.
Das Ganze ist Quick and Dirty ohne Hysterese.
Man könnte auch den Einschalt- und Ausschaltpunkt separat mit zwei if Abfragen machen

if temperature < 0.0:
# Hier wird der GPIO eingeschalten wenn die Temperatur kleiner 0° ist
GPIo_Output(pin, GPIO.HIGH)
print("Temperatur ist kleiner als 0°")

if temperature > 2.0:
# Hier wird der GPIO ausgeschalten wenn die Temperatur größer 2° ist
GPIo_Output(pin, GPIO.LOW)
print("Temperatur ist größer als 0°")

Den o_O mit O . o ohne Leerzeichen ersetzen. Die Forums SW mag die Kombination nicht und übersetzt das in einen Smiley.
Wenn man das Ganze in eine while 1: Schleife verpackt läuft das als eigener Thread im Hintergrund.
Vorsicht der DHT Sensor erlaubt das auslesen nur einmal pro Sekunde.
Also die Schleife entsprechend mit time.sleep(10) für z.B. 10 Sekunden schlafen schicken.

Ich habe leider keinen DHT22 hier sonst hätte ich das schnell programmiert aber ich hoffe es hilft dir weiter.
 
OK verstehe du benutzt das fertige Beispiel Programm.
Im Prinzip kannst du diese Datei kopieren und einen anderen Namen verwenden. Dann auch unter anderem Namen aufrufen.
Die Zeile: humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) liest die Werte vom Sensor.
folgendes vergleicht die gelesene Temperatur mit einem Schwellwert z.B. 0° und führt entsprechend Code aus.

Mit WiringPi kann man die GPIOs kontrollieren:
import RPi.GPIO as GPIO # muss eingefügt werden um die GPIOs zu nutzen
import time # Um die Funktion sleep zu nutzen
pin = 18 # Hier die Nummer des verwendeten GPIO verwenden

GPIO.setmode(GPIO.BCM) # setzt die Nummerierung der Pins auf BCM Nummern also z.B. GPIO18 statt der physikalischen Headerposition

GPIO.setup(pin, OUTPUT) # setzt den GPIO mit Nummer pin als Ausgang fest
GPIo_Output(pin, GPIO.LOW) # setzt den GPIO mit Nummer pin auf 0

if temperature < 0.0:
# Hier wird der GPIO eingeschalten wenn die Temperatur kleiner 0° ist
GPIo_Output(pin, GPIO.HIGH)
print("Temperatur ist kleiner als 0°")
else:
# Hier wird der GPIO ausgeschalten
GPIo_Output(pin, GPIO.LOW)
print("Temperatur ist größer als 0°")

Das Einrücken der zwei Zeilen nach if oder else darf man bei Python nicht vergessen.
Das Ganze ist Quick and Dirty ohne Hysterese.
Man könnte auch den Einschalt- und Ausschaltpunkt separat mit zwei if Abfragen machen

if temperature < 0.0:
# Hier wird der GPIO eingeschalten wenn die Temperatur kleiner 0° ist
GPIo_Output(pin, GPIO.HIGH)
print("Temperatur ist kleiner als 0°")

if temperature > 2.0:
# Hier wird der GPIO ausgeschalten wenn die Temperatur größer 2° ist
GPIo_Output(pin, GPIO.LOW)
print("Temperatur ist größer als 0°")

Den o_O mit O . o ohne Leerzeichen ersetzen. Die Forums SW mag die Kombination nicht und übersetzt das in einen Smiley.
Wenn man das Ganze in eine while 1: Schleife verpackt läuft das als eigener Thread im Hintergrund.
Vorsicht der DHT Sensor erlaubt das auslesen nur einmal pro Sekunde.
Also die Schleife entsprechend mit time.sleep(10) für z.B. 10 Sekunden schlafen schicken.

Ich habe leider keinen DHT22 hier sonst hätte ich das schnell programmiert aber ich hoffe es hilft dir weiter.

Dankeschön Roger!
Ich versuche heute Abend mal etwas daraus zu basteln. Hoffe ich bekomme das hin. Ich kann dir ja dann das Programm mal schicken.

Liebe Grüße
Henry
 
Hallo Roger,

vielen Dank für deine Mühe!! Habe die Datei getestet:
Hatte Fehlermeldung in der Zeile
GPIO.setup(Heizung, OUTPUT)
geändert in: GPIO.setup(Heizung, GPIO.OUT)

Läuft nun bis: GPIO.output(pin, GPIO.LOW)
Dann Fehlermeldung:

Temp=29.3* Humidity=33.8%
Traceback (most recent call last):
File "/home/pi/allsky/heizneu.py", line 27, in <module>
GPIO.output(pin, GPIO.LOW)
RuntimeError: The GPIO channel has not been set up as an OUTPUT

Hast du eine Ahnung was da schief läuft?

Liebe Grüße
Henry.

hier die ganze Datei:
import RPi.GPIO as GPIO # muss eingefügt werden um die GPIOs zu nutzen
import time # Um die Funktion sleep zu nutzen
import Adafruit_DHT # Der Treiber für den Sensor
Heizung = 25 # Hier die Nummer des verwendeten GPIO verwenden
GPIO.setmode(GPIO.BCM) # setzt die Nummerierung der Pins auf BCM Nummern also hier GPIO18
GPIO.setup(Heizung, GPIO.OUT) # setzt den GPIO mit Nummer pin als Ausgang fest
GPIO.output(Heizung, GPIO.LOW) # setzt den GPIO mit Nummer pin auf 0
# Example using a Raspberry Pi with DHT sensor connected to GPIO23.
pin = 2
# Sensor should be set to Adafruit_DHT.DHT11, Adafruit_DHT.DHT22, or Adafruit_DHT.AM2302.
sensor = Adafruit_DHT.AM2302
# Diese Schleife läuft koninuierlich nach Start des Programms
while 1:
# Try to grab a sensor reading. Use the read_retry method which will retry up
# to 15 times to get a sensor reading (waiting 2 seconds between each retry).
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
# Abfrage ob ein sinnvoller WErt gelesen wurde. Wenn nicht einfach den nächsten Zyklus abwarten
if humidity is not None and temperature is not None:
# Hier wird die Temperatur verglichen und entsprechend Code ausgeführt
print('Temp={0:0.1f}* Humidity={1:0.1f}%'.format(temperature, humidity))
if temperature < 0.0:
# Hier wird der GPIO eingeschalten wenn die Temperatur kleiner 0° ist
GPIO.output(pin, GPIO.HIGH)
print("Temperatur ist kleiner als 0.0°. Heizung ist an")
if temperature > 2.0:
# Hier wird der GPIO ausgeschalten wenn die Temperatur größer 2° ist
GPIO.output(pin, GPIO.LOW)
print("Temperatur ist größer als 2.0°. Heizung ist aus")

time.sleep(10) # Sleep 10 Sekunden
 
crontab -e und der Eintrag dass es bei boot ausgeführt werden soll.
Der Eintrag müsste dann "@reboot python3 ./home/pi/allsky/heizneu.py" lauten.
Probier den Befehl vorher in einem Terminal aus.
 
Dankeschön Roger!! Es läuft. Ich werde die Kamera über Pfingsten dann zusammenbauen und mal am Himmel testen. Nochmal herzlichen Dank für deine Hilfe. Alleine hätte ich das nicht geschafft.
Viele Grüße Henry.
 
Hallo Zusammen, wie kann ich den auch Tags über eine Timelapse Aufnahme einrichten? Würde gerne 24h aufnehmen LG Chris
 
Vielleicht in der Datei settings.json angle=+90 setzen?
 
Ich habe nun meine ZWO ASI178MC zusammen mit einem Pi4B (4GB) zum testen am Start. Jedoch funktioniert wohl die automatische Belichtung bei den Tagbildern nicht richtig. In der Serie beginnend von überbelichtet, dann folgen 2-3 normal belichtete Aufnahmen, dann eine unterbelichtete Aufnahme. Kennt jemand dieses Problem? Ich hatte davor 1,5 Jahre eine ZWO ASI120MM mit einem RaspberryPi3+ am Start, damit hatte ich nie Probleme.
 
Hallo,

ich hoffe, es ist OK, dass ich einfach al so reinplatze.
Ich habe selber mit der ZWO 120MC-S experimentiert, bin aber mit der Menge an Hotpixeln sehr unzufrieden. Habe den Eindruck, bei 30s sind da mehr Hotpixel als "gute" Pixel. Mit Dark-Frame geht es, aber, dann habe ich halt dunkle statt bunte Pixel. Also habe ich mich weiter umgesehen und hame mal die neue Raspberry HQ Kamera ausprobiert. Die kommt mit CS-Mount, also kann man das bekannte 1.55mm Objektiv draufschrauben. Mit 12MP keine schlechte Kamera. Mit den aktuellen Firmwareupdates auch gut handlebar.

Dazu habe ich noch einen Servo mit "Lollipop", der nach Sonnenaufgang die Linse bedeckt.

Der Nachteil ist, dass die Raspi_Cam nicht mit der allsky-Software funktioniert. Derzeit erledigt das alles ein Cronjob (jede Minute ein Bild aufnehmen, wenn Tag => Linse abdecken) KG250 habe ich deshalb genommen, weil ich derzeit lieferbar nur 10cm und 20cm Acrylhalbkugeln gefunden habe. Doppelseitiges Klebeband solange ich noch am experimentieren bin. Bevor die dann endgültig aufs Dach kommt, kommt da noch ordentliche Abdichtung drauf :)

VG, Sebastian


index2.jpg
 
Hallo Sebastian,

Ich habe mir auch schon eine HQ Kamera bestellt. Die hat aber Lieferzeit. :(
Ich habe mir das C-Programm von Thomas J. angeschaut und das setzt massiv auf API Aufrufe von ASI auf.
Das mal schnell portieren ist viel Aufwand. Ich werde da trotzdem mal reinschauen. muss mich aber auch erst in das Raspi HQ Kamera API einarbeiten. Das wird aber seine Zeit dauern. :sleep:
Ich habe Thomas angeschrieben ob er da was machen will habe aber bisher keine Antwort bekommen.

Vielleicht kann man das Programm zur Steuerung der HQ Kamera ja auch in die Skripte einbinden und auf die vielen Einstellparameter verzichten
 
Für die Aufnahmen nutze ich ein Shellscript per Cron -> Start jede Minute.
"allsky" ist eigentlich direkt nur für die ZWO API entwickelt worden. Aber man kann die Programme zur Bestimmung der Tageszeit (Tag, Nacht, "Twilight"), für die Keogramme, die Startrails und die Timelapse verwenden.
Das Hauptproblem ist die Berechnung der Belichtungszeit. Da klemmts gerade. nach Sonnenuntergang nehme ich 50s bei ISO800, aber das haut auch erst ab Sonne=-6° Alt hin. Virher halt überbelichtet...
 
Hi,

ich habe mir für die Allsky-Cam jetzt die Heizung von hier gebastelt. Wenn diese aktiv ist, sollte man hier Wärme an den Widerständen fühlen können, oder ist das nicht merkbar "für die Finger"?
 
Hallo Ivo,
Da sind 6 100Ohm Widerstände parallel das ergibt 16,7Ohm. Bei 5V ergibt das eine Leistung von 1,5W.
Das sollte man relativ schnell merken.
Was ich nicht verstehe warum man ein teures und fehleranfälliges Relais verwendet. Ein NMOS Transistor für wenige Cent macht das sehr viel effizienter. Bei so geringen Spannungen und Strömen macht ein Relais nicht wirklich Sinn.
Ich habe mal gelernt "Wenn der Ingenieur nicht weiter weiß, dann nimmt er ein Relais".
 
Zurück
Oben