Weitere Fortschritte auf dem Weg zur All Sky Kamera

Zwischenstand

Von meiner Liste habe ich inzwischen folgende Punkte abgehakt:

  • Übernahme der Wetterdaten vom CloudWatcher in die interne Webseite
  • Verweis auf das jeweils neueste Bild im aktuellen Verzeichnis

So sieht die interne Webseite inzwischen aus:

Das Auslesen der Daten des CloudWatcher funktioniert und diese können somit wie gewünscht zur Aufnahmesteuerung genutzt werden. Leider bin ich mit der Nutzung der Pythonskripte noch nicht weiter. Statt dessen habe ich noch zwei Dinge an der Hardware geändert:

  • Durch folgende Ergänzung in der Datei /boot/config.txt wird die Status LED dauerhaft ausgeschaltet, die die Aufnahmen vermutlich empfindlich stören würde:
    # Disable the ACT LED on the Pi Zero.
    dtparam=act_led_trigger=none
    dtparam=act_led_activelow=on
  • Folgende Zeile in der Datei /etc/rc.config schaltet den HDMI Ausgang ab:
    /usr/bin/tvservice -o
    Dieser wird vermutlich nie wieder benötigt, verbraucht aber dennoch permanent Strom.

Jetzt geht es weiter mit dem Zusammenbau (der Sensor für die interne Temperatur und Luftfeuchtigkeit ist inzwischen angekommen) und vor allem mit dem Einrichten der Software zur Aufnahme der Bilder.

Einrichten des Pi Zero für die All Sky Kamera

Vorwort

Wie im ersten Teil beschrieben, soll der Pi lediglich die AllSky Kamera steuern und braucht dafür keine grafische Oberfläche. Für die Ersteinrichtung werden ein OTG Adapter zum Anschluss einer USB Tastatur sowie ein Mini HDMI -> HDMI Adapter benötigt. Falls beim Einrichten etwas schief geht und die SD Karte neu eingerichtet werden muss, ist es vorteilhaft, eine Linux Installation zu haben, z.B. in einer virtuellen Maschine, da Windows die Linux Partition nicht erkennt und somit auch nicht löschen kann. Auf diesem Weg lässt sich aber auch bestens auf der Mikro SD Karte arbeiten, sollte der Zugriff via SSH zu umständlich sein oder wegen Netzwerkproblemen ausfallen. Dies ist natürlich auch dann hilfreich, wenn durch eine falsche Konfiguration das System nicht mehr startet.
Einzugebende Kommandos sind in Anführungszeichen („“) geschrieben, diese werden nicht mit eingegeben.
Schritte, die evtl. im Nachhinein doch nicht erforderlich sind, habe ich in eckige Klammern gesetzt. Ggf. können diese Schritte jederzeit nachgeholt werden.
Was ich bereits hier beschrieben habe zur Einrichtung der Mikro SD Karte, wiederhole ich natürlich nicht mehr.

Bitte beachten: Wie bereits im vorigen Teil beschrieben, gelten die genannten Versionsnummern jetzt im März 2018. Zu einem späteren Zeitpunkt kann sich etliches geändert haben, vor allem natürlich Abhängigkeiten zwischen den Paketen. Dies ist einer der Gründe, warum ich möglicherweise mehr Pakete installiert habe, als ich zur Zeit benötige. Wer weiss, was ich in Zukunft alles updaten müsste, damit es funktioniert. Ich rechne eher damit, dass ich das System nicht mehr anrühren werde, wenn es einmal läuft, auch wenn dann einiges darauf veraltet. Wenn’s doch läuft…

Los geht’s

  • Download von Raspbian Stretch Lite https://www.raspberrypi.org/downloads/raspbian/ und Installation auf der Mikro SD Karte
  • Download von INDI Library (http://www.indilib.org/download/raspberry-pi/category/6-raspberry-pi.html) und kopieren des Archives auf die Mikro SD Karte
  • Anschluss der USB Tastatur und HDMI Display
    • Bei Verwendung eines kleinen Display muss evtl. erst die Konfiguration angepasst werden, z.B. 5“ Waveshare:
      Datei /boot/config.txt am Ende wie folgt ergänzen:
      max_usb_current=1
      hdmi_group=2
      hdmi_mode=87
      hdmi_cvt 800 480 60 6 0 0 0
      hdmi_drive=1
      Dies kann bereits auf der SD Karte nach deren Einrichtung erfolgen. Der Editor muss aber Unix Stil erkennen, der Windows Editor ist ungeeignet.
  • Pi Zero starten, Einloggen mit Benutzer pi und Passwort raspberry, wobei das US Layout voreingestellt ist, auf einer deutschen Tastatur muss also raspberrz eingegeben werden.
  • Anschliessend mittels „sudo raspi-config“ WLAN, Sprach- und Regionaleinstellungen, Tastaturlayout etc. einrichten und neu starten. Bei der Eingabe des Benutzernamens erst testen, ob das deutsche Tastaturlayout übernommen wurde (z/y).
    Unter „Interfacing Options“ ssh aktivieren für Fernzugang.
  • System aktualisieren: „sudo apt-get update“, „sudo apt-get upgrade“.
  • Webserver installieren: „sudo apt-get apache2“
  • PHP 7 installieren: „sudo apt-get install php7.0 php7.0-curl php7.0-gd php7.0-imap php7.0-json php7.0-mcrypt php7.0-mysql php7.0-opcache php7.0-xmlrpc libapache2-mod-php7.0“
  • [ MySQL installieren: „sudo apt-get install mysql-server mysql-client“
    ((Sicheres Passwort vergeben und merken! Wird im nächsten Schritt abgefragt.
    Falls die Abfrage nicht automatisch erscheint:
    mysqladmin -u root -p password [Passwort] <Enter>
    Passwort wiederholen (Klappt jedenfalls)
    Neustart: „sudo reboot“))
  • phpMyAdmin installieren: „sudo apt-get install -t stretch phpmyadmin“
  • „apache2“ auswählen mit Leertaste, mit Tabulator auf Ok und <Enter>
    Nächste Abfrage mit <Enter> bestätigen
  • Passwort für phpMyAdmin eingeben und noch einmal bestätigen
  • „sudo nano /etc/php/7.0/apache2/php.ini“ und am Ende „extension=mysql.so“ einfügen
  • „sudo nano /etc/apache2/apache2.conf“ und am Ende „Include /etc/phpmyadmin/apache.conf“ einfügen ]
  • „sudo /etc/init.d/apache2 restart“
  • Testen:
    • Apache:
      http://[Name_des_Pi oder IP_Adresse] im Browser auf einem anderen Rechner oder Mobilgerät im Netzwerk sollte eine Default Page anzeigen
    • PHP:
      Test-Datei anlegen: „echo „echo ‚<?php phpinfo();?>‘ >> /var/www/html/phpinfo.php“ | sudo bash“
      http://[Name_des_Pi oder IP_Adresse]/phpinfo.php sollte Infos zu PHP anzeigen
    • [ phpMyAdmin:
      http://[Name_des_Pi oder IP_Adresse]/phpmyadmin sollte die phpMyAdmin Loginseite anzeigen ]
  • Installation von python 3
    „sudo apt-get install python3-setuptools python3-dev python3-pip swig“
  • Installation von INDI (http://indilib.org/download/raspberry-pi.html)
    • „sudo apt-get install cdbs libcfitsio-dev libnova-dev libusb-1.0-0-dev libjpeg-dev libusb-dev libtiff5-dev libftdi1-dev fxload libkrb5-dev libcurl4-gnutls-dev libraw-dev libgphoto2-dev libgsl-dev dkms libboost-regex-dev libgps-dev libdc1394-22-dev“
    • In dem Verzeichnis mit dem INDI Archiv, siehe Schritt 2: „tar -xzf libindi_1.6.0_rpi.tar.gz“
      „cd libindi_1.6.0_rpi2“
      „sudo dpkg -i *.deb“
    • evtl. nötig: „sudo apt-get update“
      „sudo apt-get upgrade“
      „sudo apt –fix-broken install“
    • Installation von pyindi-client (nur für den aktuellen Benutzer)
      „pip3 install –user –install-option=“–prefix=“ pyindi-client“
    • Modul systemweit installieren, ist vielleicht erforderlich:
      „sudo -H pip3 install –system pyindi-client“
  • Samba für Verzeichnisfreigabe installieren (https://www.elektronik-kompendium.de/sites/raspberry-pi/2007071.htm)
    • „sudo apt-get update“
    • „sudo apt-get install samba samba-common samba-client“
    • Verzeichnis für die Aufnahmen anlegen: „sudo mkdir /home/shares/pictures“
    • Besitzer wechseln: „sudo chown root:root /home/shares/pictures“
    • Zugriffsrechte setzen: „sudo chmod 770 /home/shares/pictures“
    • Zugriffsrechte für Webseitenverzeichnis setzen: „sudo chmod 770 /var/www/html“
    • Neue smb.conf erstellen:
      • „sudo mv /etc/samba/smb.conf /etc/samba/smb.conf_alt“
      • „sudo nano /etc/samba/smb.conf“
        Folgenden Inhalt eingeben (alles zwischen den === Zeichen):
        ====================
        [global]
        workgroup = WORKGROUP
        security = user
        encrypt passwords = yes

        [Aufnahmen]
        comment = AllSky-Bilder
        path = /home/shares/pictures
        read only = no

        [Webseite]
        comment = Webseite
        path = /var/www/html
        read only = no
        ====================

      • sudo service smbd restart
      • sudo service nmbd restart
      • sudo smbpasswd -a pi
    • Damit können diese beiden Verzeichnisse von anderen Rechnern im Netzwerk gelesen und geschrieben werden können, z.B. also die Aufnahmen herunter geladen und der Speicherplatz freigegeben werden oder die Webseite mit einem beliebigen Editor remote bearbeitet und im Browser kontrolliert werden. Beim Verbinden muss wie bei jedem Netzlaufwerk eine auf dem Pi eingerichteter Benutzer mit Passwort angeben werden, standardmäßig also „pi“ und „raspberry“.
  • Für später ffmpeg installieren: http://blogs.warwick.ac.uk/mikewillis/entry/quick_and_easy/
    • Von https://johnvansickle.com/ffmpeg/ den armel build herunter laden, da der Pi Zero die gleiche Architektur wie der Pi 1 hat.
    • In dem Verzeichnis mit dem Archiv: „tar xvJf ffmpeg…“
    • Testen mit „ffmpeg…/ffmpeg“, es sollten diverse Ausgaben kommen, die mit „Use -h to get full help or, even better, run ‚man ffmpeg'“ enden.

Diesen letzten Download habe ich übrigens auf einem Mac gemacht und dann die Datei über das Netzlaufwerk in das Bilderverzeichnis kopiert und mir von dort auf dem Pi in das HOME Verzeichnis geholt. Ohne Samba müsste man auf dem Pi mit sftp arbeiten, was bei weitem nicht so benutzerfreundlich ist. Wie bereits mehrfach betont, sind aber einige Grundkenntnisse über Linux und die Kommandozeile unabdingbar, falls mal etwas nicht so funktioniert wie gewünscht oder aber in meiner Anleitung Fehler sind oder Schreibfehler beim Abtippen aufgetreten sind.

Nachtrag:

Leider musste ich feststellen, dass der Pi nach einiger Zeit ohne Aktivität nicht mehr erreichbar war, obwohl er einwandfrei lief. Eine Suche brachte nur mäßigen Erfolg, der Pi verfügt über keinerlei Power Management. Warum er dann trotzdem offenbar die WLAN Verbindung abschaltet, weiss anscheinend niemand. Die Lösung besteht darin, regelmäßig ein Skript laufen zu lassen, welches die Verbindung prüft und ggf. den Adapter neu startet. Seitdem habe ich keine Probleme mehr mit dem Zugriff.

  • „sudo nano /usr/local/bin/wifi_rebooter.sh“
  • Folgenden Inhalt eingeben:
    #!/bin/bash
    # The IP for the server you wish to ping (8.8.8.8 is a public Google DNS server)
    SERVER=8.8.8.8
    # Only send two pings, sending output to /dev/null
    ping -c2 ${SERVER} > /dev/null
    # If the return code from ping ($?) is not 0 (meaning there was an error)
    if [ $? != 0 ]
    then
    # Restart the wireless interface
    /sbin/ifdown –force wlan0
    /sbin/ifup wlan0
    fi
  • Datei ausführbar machen: „sudo chmod +x /usr/local/bin/wifi_rebooter.sh“
  • Folgende Zeile in /etc/crontab ergänzen:
    */10 * * * * root /usr/local/bin/wifi_rebooter.sh
    Dadurch wird das Skript alle 10 Minuten aufgerufen.

All-Sky Kamera mit Raspberry Pi

Einleitung

Schon seit längerer Zeit wünsche ich mir eine All-Sky Kamera 😀 Die kommerziell erhältlichen Modelle sind mir jedoch zu teuer, ausserdem habe ich den größten Teil der Hardware ja bereits. Schon vor einiger Zeit habe ich TimeLapse Videos des gesamten Himmels erstellt, z.B. auf dem HTT:

Als Kamera habe ich eine Skyris 445M mit einem Fujinon Fischaugenobjektiv eingesetzt und diese mit einem Netbook gesteuert. Für den dauerhaften Einsatz zu Hause soll jedoch ein Raspberry Pi eingesetzt werden, der nicht nur wegen des Stromverbrauchs zu bevorzugen ist, sondern aufgrund der Größe auch problemlos mit in das Gehäuse der Kamera passt. Noch eine Nummer kleiner ist der Raspberry Pi Zero W, der mit WLAN und einer einzigen USB Schnittstelle alles bietet, was ich benötige und dabei keine 10 € kostet:

Als Gehäuse nutze ich ein simples KG Rohr in der Größe 125 mm. Eine 100 mm Plexiglashalbkugel mit Kragen passt genau auf die Endkappe:

Nach meinen bisherigen Erfahrungen mit dem Raspberry Pi 3 klappte die Installation der Software einigermassen reibungslos. Da ich bei diesem Einsatz keine grafische Benutzeroberfläche benötige, habe ich als Betriebssystem diesmal Raspbian Stretch Lite gewählt.

Vorbemerkungen

An dieser Stelle sollte ich anmerken, dass alle genannten Schritte Anfang 2018 funktionieren. Ich musste leider feststellen, dass manche Tutorien, Blogs etc. sich auf mittlerweile ältere Softwareversionen beziehen. Das macht es mitunter schwierig, die verschiedenen Informationen passend zu verbinden. Ausserdem gebe ich derzeit nur den aktuellen Stand meiner Arbeit wieder, also möglicherweise nur einen Zwischenschritt. Es kann sein, dass ich mehr Software installiert habe, als nötig. Da andererseits nicht so lange hält wie ein Provisorium, bin ich nicht sicher, ob ich die Installation wirklich einmal bereinige. Zu guter Letzt gehen hier natürlich nur meine ganz eigenen Anforderungen und Vorstellungen in das Projekt ein. Weiterhin empfehle ich das Projekt nur demjenigen, der fundierte Kenntnisse im Umgang mit Linux, allgemeiner Programmierung und seiner Hardware hat. Ich übernehme keinerlei Verantwortung für evtl. Schäden, die beim Nachvollziehen meiner Schritte hier auftreten können oder irgend eine Garantie, dass jedermann mit diesem Text ein lauffähiges Projekt auf die Beine stellen kann.

Anforderungen

Die Kamera soll folgende Anforderungen erfüllen:

  • möglichst automatisch und autark arbeiten
  • per WLAN im Netzwerk eingebunden sein
  • Zugriff per SSH
  • Statusanzeige per Browser
  • Download der Bilder per Netzlaufwerk

Dass zur Steuerung der Raspberry zum Einsatz kommen soll, war sofort klar, wie bereits beschrieben. Dieser soll den AAG Cloudwatcher auslesen, um zu entscheiden, ob eine Aufnahme erfolgen soll. Die 2. Bedingung stellt sicher, dass nur ein Stromkabel zur Kamera hin benötigt wird. Für einen Reset kann die Steckdose später noch durch eine im SmartHome eingebundene schaltbare Steckdose ergänzt bzw. ersetzt werden.
Der Zugriff per SSH ist Standard, so können Wartungs- und sonstige Aufgaben schnell und einfach erledigt werden. Das aktuelle Bild, die aktuellen Wetterdaten sowie die letzte Animation sollen im Browser angezeigt werden, die einzelnen Aufnahmen sollen per Netzlaufwerk zugänglich gemacht werden.
Die Steuerung der Hardware klappt via INDI, welches wiederum mit Python Skripten gesteuert werden kann. Daraus ergibt sich, dass folgende Software installiert und konfiguriert werden muss:

  • INDI
  • Python
  • Apache
  • PHP
  • Samba

Die erforderlichen Schritte habe ich mitgeschrieben und stelle sie in einem separaten Beitrag zur Verfügung. Allerdings ist die Aufstellung derzeit möglicherweise noch umfangreicher als nötig. Ein Image zum direkten Benutzen könnte ich evtl. auch bereit stellen, selbstverständlich ohne jegliche Gewährleistung und für jedermann auf eigenes Risiko.
Übrigens habe ich mich für eine 16 GB mikroSD Karte entschieden. Das System belegt derzeit ca. 2,6 GB, d.h. ich habe noch etwa 13 GB für Daten zur Verfügung. Eine Aufnahme dieser Kamera im FITS Format belegt etwa 2,5 MB. Bei meinem Himmel beschränke ich mich auf 15 s Belichtungszeit. Pro Stunde werden also 240 Aufnahmen gespeichert, in einer langen Nacht von 10 Stunden fallen demnach etwa 6 GB an Daten an.

Aktueller Stand (März 2018)

Nach der Installation der ganzen Software sowie der Kamera konnte ich bereits von einem Raspberry Pi mit installiertem KStars/Ekos auf den Zero zugreifen und  eine Aufnahmesequenz abarbeiten:

Eine interne Webseite ist ebenfalls in Arbeit:

Als nächstes sind folgende Punkte zu erledigen:

  • Einbau der Kamera in das Gehäuse und Montage am Haus
  • Übernahme der Wetterdaten vom CloudWatcher in obige Seite
  • Verweis auf das jeweils aktuelle Bild
  • Python Skript(e) zur lokalen Steuerung auf dem Pi (Vorlagen bzw. Entwürfe sind im Internet zu finden)
  • Die Tabelle „Interne Daten“ bezieht sich auf einen Sensor, der auf dem Pi installiert wird. Der steckt aber noch auf dem langen Postweg aus China…

Die Punkte 1 bis 3 sind reine Fleissarbeit und bereits im Gange. Mit Punkt 4 habe ich eben erst angefangen, das wird noch etwas Einarbeitung erfordern. Punkt 5? Schauen wir mal 😉

Ausblick

Sobald die Python Skripte arbeiten, werde ich weiter berichten. Als weitere Ziele stelle ich mir vor, die Webseite (mit den erforderlichen Angaben natürlich) im Internet zu veröffentlichen. Ausserdem wäre eine weitere Automatisierung wünschenswert:
Das Programmpaket ffmpeg kann aus den aufgenommenen FITS Dateien das Video erzeugen. Dazu muss ich mich noch darin einarbeiten, vor allem aber testen, ob die Rechenleistung des Zero dazu ausreicht. Von besonderem Interesse sind natürlich Sternschnuppen, optimal wäre, wenn diese Bilder ebenfalls automatisch heraus gefiltert werden könnten. Ob es hierzu bereits Lösungen gibt, habe ich noch nicht geschaut. Für Hinweise bin ich dankbar 😀 Derzeit stelle ich mir vor, ein Differenzbild aus zwei aufeinanderfolgenden zu berechnen. Deutliche Helligkeitsunterschiede, erkennbar beim Aufsummieren sämtlicher Pixelwerte, wären das Kriterium. Natürlich machen sich Flugzeuge in gleicher Weise bemerkbar…