Daten aus JSON Wundergound Weather-API weiterverarbeiten

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Liebes Forum,
    ich habe das Ziel mithilfe der Wundergound Weather-API, Wetterdaten zu sammeln und in einem zweiten Schritt hieraus eine Visualisierung zu erstellen.
    Mithilfe /1/]dieses Tutorials komme ich an die Daten im JSON-Format.
    Die Abfrage funktioniert mit:

    Die resultierende Datei output_sw sieht dann wie folgt aus:

    Die Abfrage soll über crontab z.B. stündlich laufen und die Datei output_sw immer wieder überschreiben. Nun habe ich mir als leichtesten Weg vorgestellt, die wichtigsten Daten wie Datum, Temperatur, Luftfeuchtigkeit etc. aus der Datei zu extrahieren und in eine ständig wachsende Datei (z.B. wetterdaten.log) zeilenweise zu ergänzen bspw.:

    Code
    Datum Uhrzeit Temperatur Luftfeuchtigkeit
    07.07.2016 18:30 25 80
    07.07.2016 18:45 24 82
    usw.

    Aus dieser Datei soll dann in einem zweiten Schritt eine grafische Darstellung über einen Webserver auf dem RasPi realisiert werden.
    Leider habe ich nicht viel Ahnung von Python und tue mir schon mit dem ersten Schritt schwer.
    Kann jemand helfen? Lieben Dank!

  • Daten aus JSON Wundergound Weather-API weiterverarbeiten? Schau mal ob du hier fündig wirst!

  • Warum dann nicht direkt mit html u. javascript ? Wenn Du doch später sowieso einen WebServer einsetzen willst .

    Beispiel

    Einmal editiert, zuletzt von YellowWind32201 (7. Juli 2016 um 21:18)

  • Wollte auch old stets frage stellen, nimm node-RED und lade dir die node-RED -contrib-ui dazu und dann hast auch schon den Webserver und die Grafik mit 2-3 nodes.
    Ich hab das mit meiner Wetterstation gemacht die auch JSON ausgibt.

    Frank

    Nach 35 Jahren im IT business hab ich mit Raspi mal selbst zum Programmieren begonnen...
    Habe auch einen 3D-Drucker, eine CNC-Fräse und etwas Elektronik-Bastelei als Hobby

    Einmal editiert, zuletzt von fjoke (7. Juli 2016 um 21:37)

  • Vielen Dank an alle! Ich habe mir nach einigen Stunden Arbeit ein Python- und ein Bash-Script angefertigt, dass zunächst die ersten beiden Schritte erledigt:
    1. Wetterdaten von Underground abholen
    2. Daten in eine neue Zeile, durch Semikolons getrennt, in eine Datendatei schreiben
    3. Daten nutzen, um eine Webcam mit den Wetterdaten zu versehen.
    Die Daten werden stündlich über einen Cronjob aktualisiert und dann entsprechend auf der Webcam wiedergegeben.
    Es besteht aber noch ein Problem. Im String "condition" im Script "get_weather.py" können Umlaute auftauchen (z.B. "Gewitter möglich"). Dann bricht das Script mit einer Fehlermeldung ab:

    UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 10: ordinal not in range(128)

    Was kann ich tun, um die Fehlermeldung zu vermeiden?

    Hier das Script "get_weather.py":

    Nun noch das Script, welches die Fotos mit der RaspiCam schießt, die Wetterdaten einfügt und auf den Webspace lädt:

    Sicher gibt es noch viel zu verbessern, aber ich bin ja auch erst Code-Anfänger :)
    Primär würde mich mal die Lösung des Problems mit den deutschen Umlauten interessieren.
    Herzlichen Dank!

  • Ein Weiteres Problem ist noch aufgetaucht:
    Beim Auslesen der letzten Zeile der Datendatei, die die Wetterwerte enthält, wird der letzte Teil nur bis zum Leerzeichen in das Array geschrieben. Alles nach dem Leerzeichen fällt unter den Tisch.
    Eine Zeile der Datendatei sieht so aus:

    Code
    10.07.2016;17:56;Berchtesgaden;31;46%;30;18;5:21;21:05;Teils Wolkig

    Anstatt "Teils Wolkig" in das Array zu schreiben, kommt dort nur "Teils" an. Weiß jemand Rat?

    Hier der entsprechende Codeschnipsel:

  • Ohne mir all das durchgelesen zu haben was dem vorrausging - fuer mich trennt ein "for" an *allem* whitespace, also nicht nur dem Newline welches du moechtest.

    Code
    beer:~ deets$ for v in "a
    > b
    > c
    > d e"; do echo $v; done
    a b c d e

    Man kann das bestimmt auch mit bash irgendwie hinfummeln - aber meine Erfahrung ist, Shell und whitespace einfach bloed ist. Darum in Python ein simples

    Code
    with open(wetterdatei) as inf:
            line = inf.readlines()[-1].strip() # letzte zeile, ohne newline
            values = line.split(";")
            print(values)

    und das war's.

  • ...Man kann das bestimmt auch mit bash irgendwie hinfummeln ...


    Wenn man eine einzige Zeile einfügt funktioniert es:

    PHP
    counter=0
    IFS=""             # <==== diese hier
    for value in $text
    do[/php]
    Warum funktioniert es dann?
    
    
    Die Standardzeichen bei denen die bash splittet ist <space>, <tab> und <newline>. Du änderst ';' in <newline> im Text und deshalb kannst Du die Elemente in der for Loop einzeln bearbeiten. Da aber "Teils Wolkig" noch durch ein Leerzeichen getrennt ist wird das auch noch getrennt. Aber durch
    [code]IFS=""

    wird nichts mehr gesplittet und Du bekommst die gesamte Zeile :shy:

    Polarlys: Ich Du machst das ganze noch etwas umstaendlich. Ich habe mal eine einfachere Version beigefügt ;)
    [code=php]# Letzte Zeile der Datei auslesen:
    lastline=$(tail -n 1 $wetterdatei)
    # trenner ist ;
    IFS=";"
    # erstelle array liste und fülle aus lastline wobei die elemente durch ; getrennt sind
    liste=( $lastline )
    echo "Elemente (Counter): ${#liste}"[/php]
    Automatisch zusammengefügt:

    ... Was kann ich tun, um die Fehlermeldung zu vermeiden? ...


    encode und decode sind da sehr hilfreich. Siehe dazu Python unicode HowTo

Jetzt mitmachen!

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