Sonnenposition

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Zitat

    Ich fände es ohne die Dateien ungefähr 200% schöner

    Ja, das Programm stürzt ab, wenn kein int()-Wert in der Datei steht.

    Das kann passieren, wenn z.B. das Crontab-Script gerade einen neuen Wert in azimut.txt oder sonnenhoehe.txt schreibt und dieses Script gleichzeitig einliest.

    Zitat

    schont die SD-Karte

    Die Dateien wandern doch in den RAM, das sollte die SD nicht belasten.

  • Im Moment lasse ich das Script einfach nur testweise laufen und warte auf den Sonnenaufgang ;)

    Als nächstes wage ich mich an den Schrittmotor, der soll sich solange drehen, bis er an den Startschalter kommt und sich anschliessend je nach Wert in Richtung Sonne drehen, das Script soll sich den Wert aber merken, damit sich der Schrittmotor auch wieder in Ausgangsstellung fahren kann.

    Ein Pythonscript für Schrittmotoren habe ich hier gefunden, kann aber nicht beurteilen, ob der für meine Zwecke geeignet ist:

    https://www.raspberrypi-spy.co.uk/2012/07/steppe…trol-in-python/

    EDIT: Das Schrittmotor-Test-Script ist wohl noch für Python2, ich habs mal bissl bearbeitet, jetzt läufts auch mit Python3:

    Das Script ist nur zum testen gut, bei Unterbrechung werden die GPIOs nicht auf 0 gesetzt, was dazu führt, dass sich der Schrittmotor mit der Zeit deutlich erwärmt.

    Also am besten nach dem stoppen des Programms mit gpio readall nachsehen, der ein oder andere GPIO steht bestimmt noch auf 1.

    Ein guter Zeitpunkt, um über ein Getriebe nachzudenken, denn je länger der Motor läuft, desto mehr erwärmt er sich, dafür muss aber auch nicht soviel Kraft aufgewenden werden, um die Last zu bewegen, andererseits leidet natürlich die Genauigkeit, je kleiner die Übersetzung ist. Die interne Übersetzung meines Schrittmotors beträgt 1 : 64, somit hält er die Position auch ohne Strom sehr gut. Der Winkel pro Schritt beträgt 5.625° , geteilt durch 64 sollten das 0,087890 Grad pro Schritt sein.

    Im Leerlauf, also ohne Last, benötigt der Schrittmotor ca. 45 Sekunden für eine 360-Grad-Drehung in der 8 Schritt-Sequenz, bzw. ca. 22 Sekunden bei der 4-Schritt-Sequenz., ich schätze, dass er selbst in der 8 Schritt-Sequenz unter "Last" nicht länger als eine Minute pro Umdrehung braucht. Zur Zeit errechnet mir das Script über Crontab alle 30 Min. einen neuen Wert, das ließe sich aber natürlich auch auf eine Minute verkürzen, dann würde es zeitlich schon enger werden.

  • Meinst du den: ?

    Sonnenposition

    Gesehen ja, aber nein, habe ich noch nicht getestet, hab mich erst mal mit dem Schrittmotor weiter beschäftigt. :blush:

    Aber ich probiers noch, versprochen :bussi2:

    P.S.:

    Zitat

    lat = 50
    lon = 12
    elevation = 500

    Du weisst doch spätestens seit dem letzten Usertreffen, wo wir (ich hol mal Andreas mit ins Boot ) wohnen :baeh2:

    Erwartungsgemäß kommt die Meldung:

    Code
    ImportError: No module named sunposition
  • Wo Du ungefähr wohnst, weiß ich, ich war nur zu faul die Koordinaten rauszusuchen. Merken kann ich mir sowas prinzipiell nicht.

    Den Fehler vermeidest Du, wenn Du sunposition.py ins selbe Verzeichnis wie Dein Skript kopierst.

  • Zitat

    und eine fiese Lösung mit Bearbeitung des Suchpfads verwendest...

    War das nicht der eklatante Fehler, welchen ich als solches bezeichnet habe, obwohl es ein Feature ist.

    Pythonskript mit Eingabeaufforderung über PHP starten

    Ich habe wohl die Schwäche meines Ausspruchs noch nicht ganz erkannt.

    Kommt Zeit kommt Rat. :daumendreh2:

  • fred0815

    Hallo fred0815

    der "http://rredc.nrel.gov/solar/codesandalgorithms/solpos/" interessiert mich auch.

    Ich habe die drei Dateien gerade in ein Projekt gepackt und mit dem Compiler "lcc32" für den PC übersetzt.

    Bei einem printf-Befehl wirft er eine Warnung aus, weil der printf wohl eine Fließzahl erwartet, aber eine Komplexe-Zahl übergeben wird. Das lässt sich lösen.

    Das Programm lief auf Anhieb. Super sauber geschriebener Code.

    Ich werde mal schauen, wie da die Parameter übergeben werden.

    Wenn das auf dem PC läuft, kann ich es via VS2015 auch auf dem Raspberry als Kommandozeilen-Version zum laufen bringen. Das Programm wird man dann via "System ()"aufgerufen. Die Ergebnisse werden in eine Datei auf der RAM-Disk geschrieben, und können von dort aus weiter verarbeitet werden.

    Ich bleib dran.

    Gruß Prittzl

  • Entschuldigung, wenn ich mich einmische,

    Wenn ich die Datei direkt mit D&D kopiere hat sie 644 Zeilen, wenn ich vorher raw 'drücke' und dann mit D&D kopiere hat sie 654 Zeilen, so wie auf der Web Seite.

    Nur Leerzeilen und zuletzt main eingerückt oder nicht.

  • import numpy as np from datetime import datetime class _sp

    das sind 4 Zeilen (inkl. der Leerzeile) so sieht es richtig aus:

    Python
    ...
    # SOFTWARE.
    
    import numpy as np
    from datetime import datetime
    
    class _sp:
        @staticmethod
        def calendar_time(dt):
    ...

    auf dem raspi sieht der aufruf so aus:

    Code
    pi@pipaos4:~$ python sonnenposition.py -t now -lat 48 -lon 11 -e 523
    Computing sun position at T = 2017-11-09 13:01:26.990014 + 0.0 s
    Lat, Lon, Elev = 48.0 deg, 11.0 deg, 523.0 m
    T, P = 14.6 C, 1013.0 mbar
    Results:
    Azimuth, zenith = 210.945051645 deg, 70.2778440672 deg
    RA, dec, H = 224.678475725 deg, -16.8673440625 deg, 30.3949307563 deg

    arbeitest du evtl. auf windows?

    die Datei hat unix Zeilenende.

    2 Mal editiert, zuletzt von kle (9. November 2017 um 14:24)

  • solpos.c läuft jetzt auf dem Raspberry

    Aufruf: Laenge Breite Zeitzone Jahr TagNummer Stunde Minute Sekunde Temperatur Luftdruck


    Beispiel: 7,479 52,222 1 2017 313 13 13 13 12,8 1018

    Laenge: oestlich von Greenwich positive Werte; westlich von Greenwich negative Werte


    Breite: noerdlich des Aequators positive Werte; suedlich des Aequatoers negative Werte


    Zeitzone: pro 15 Grad Abstand von Greenwich um 1 erhoehen, nach Osten positiv, nach Westen negativ


    Zeitzone: in Mitteleurpa: 1 fuer Winterzeit, 2 fuer Sommerzeit


    Jahr: vierstellig


    TagJahr: der wievielte Tag des Jahres 9. November 2017 ist 313


    Stunde: 0..23


    Minute: 0..59


    Sekunde: 0..59


    Aussentemperatur: in Grad Celsius


    Luftdruck: in hPa (mbar)

    Und so sieht die Antwort aus:

    SOLTEST -> 2017.11.09, daynum 313, retval 0, amass 2.953235, ampress 2.967812


    SOLTEST -> azim 195.053068, cosinc 0.577514, elevref 19.640788


    SOLTEST -> etr 468.568271, etrn 1394.041744, etrtilt 805.079217


    SOLTEST -> prime 1.202331, sbcf 1.077277, sunrise 466.800530


    SOLTEST -> sunset 1001.046354, unprime 0.831718, zenref 70.359212

    root@raspberrypi:~/projects/Sonnenstand/bin/ARM/Debug#


    Ich weiß allerdings noch nicht, was das alles bedeutet.

    sunrise und sunset sind die Tages-Minuten für Sonnenauf- und Sonnenuntergang

    Intern berechnet das Programm noch viel mehr Werte, aber die wurden nicht angezeigt.

    Ich habe den Anzeigeteil so übernommen wie er war.

    2 Mal editiert, zuletzt von Prittzl (9. November 2017 um 23:08)

  • Zitat

    arbeitest du evtl. auf windows?

    Ja, ich bin per ssh auf dem Pi, aber normalerweise klappt das mit den Zeilenumbrüchen, wenn ich den Text kopiere und mit putty per rechtsklick einfüge.

    Ich habs jetzt manuell überarbeitet.

    EDIT: Sogar in Notepad++ zerreisst es mir plötzlich die Zeilenumbrüche, obwohl ich auf Unix gestellt habe.:conf:

    Merkwürdig, bisher ging das immer problemlos.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!