Wie kann ich aus einer Textdatei ein Information exportieren und weiternutzen?

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

    ich hoffe, ich habe die richtige Rubrik für mein Problem gefunden...@Mods: wenn nicht bitte dahin wo es hingehört...danke!

    Also ich habe mir so ein kleines Urlaubsprojekt aus Langeweile zusammen gebastelt.

    Ich habe bei mir zu Hause Webcams montiert, die unter anderem auch das Wetter zeigt. Ein RPI macht damit zuhause auch fleissig Bilder und auch sehr zuverlässig Zeitrafferfilme.

    Ich habe mir jetzt in den Urlaub auch einen RPI mitgenommen, weil ich hier ein bisschen Radarspotting machen wollte. Aber das ist, naja, hier mitten im Atlantik nicht so erquickend.

    Also was tun mit einem unterbeschäfftigten RPI? Weiterbasteln.

    Ich bin dann irgendwann beim goggeln auf ImageMagick gestossen und habe mit da ein bisschen ausgetobt mit meinen Webcambildern. Irgendwann bin ich dann drauf gekommen, aktuelle Daten in die Bilder einzublenden. Die CPU-Temperatur des RPI und anderes Gedöns klappt auch.

    Wo ich jetzt scheitere, ist Wetterdaten in das Bild einzublenden. In Ermangelung von Sensoren hier und auch zuhause hab ich im Internet http://weather.tuxnet24.de/ gefunden, die Wetterdaten in Textform ausgeben.

    So und jetzt zum meinem Problem: Wie bekomme ich die Daten da raus um Sie dann ins Bild mittels ImageMagick reinbekomme?

    Die Daten sehen so aus:

    Mich würden die nur die Daten current_temp und humidity interesieren.

    Ich dachte mir eventuell, die Daten aus der Textdatei zu exportieren und dann in Variablen zu übergeben und dann mittels ImageMagick ins Bild einzublenden.
    Das soll dann mittels crontab dann alle Stunde automatisch erstellt werden und dann auf dem lokalen Webserver des RPi abrufbar sein. Vielleicht habe ich auch einen völlig falschen Denkansatz und es weiss jemand eine andere Lösung.

    Ich weiss ein paar machen das mit Wetterstationen oder Sensoren am RPI direkt, aber wie gesagt, ich habe hier keine Sensoren derzeit zur Hand und das ist nur ein Urlaubsprojekt zum enstpannen, das ich dann zuhause weiternutzen kann bzw weiter ausbauen könnte. Im grunde will ich aber nur weiter lernen...

    Dank schon mal im Voraus für eure Tipps

    Gruß
    YMCA72

    Einmal editiert, zuletzt von ymca72 (28. August 2014 um 11:48)

  • Wie kann ich aus einer Textdatei ein Information exportieren und weiternutzen?? Schau mal ob du hier fündig wirst!

  • Moin,
    wofür brauchst Du denn die entsprechenden Daten - also: mit welchem Programm/welcher Programmiersprache willst Du die Daten weiterverarbeiten?

    Mir fällt da regex resp. grep, awk, sed ein (reguläre Ausdrücke).

    cu,
    -ds-

  • Tell
    <OT>Und da denkt man man kennt awk ... und stellt fest dass es eben doch nicht so ist =( Dass man beim FieldSeparator auch regex angeben kann war mir nicht bewusst und ist eine sehr mächtige Fähigkeit - steht aber schon in der man page drin ... aber wer liest schon die ganze man page von vorne bis hinten :shy: </OT>

  • Hallo zusammen,

    Heute ist mal wieder Pooltag und ich kann mich weiter damit beschäftigen ;)

    Tell: Vielen Dank für den Tip. Nur ich bin nun nicht so ganz fit mit dem ganzen Thema (ich lerne noch) und hab das mal probiert, was du geschrieben hast und hab darüber auch ein bisschen Tante Goggle befragt...

    Code
    awk -F'[ ]*=[ ]*' -f script input

    Ich vermute mal, in die [ ] sollten die Parameter rein, die ich aus der Textdatei ausgelesen werden sollen. Das hab ich getan, aber komischerweise kommt da maximal die 60% der Luftfeuchtig raus. Sonst gibt mir das script nicht aus :(

    Und der Inhalt von script sieht so aus:

    Code
    $1 == "current_temp" { temp = $2 ; }
    $1 == "humidity"     { hum =  $2 ; }
    END                  { printf( "%s %s\n", temp, hum ) ; }

    Das Script von dir hab ich mal in eine ausführbares Script gepackt (Rechte 755) und auch aufgerufen aber rausgekommen ist nur das...vermutlich nur jetzt eine minimale Unzuläglichkeit von mir :s

    Der Aufruf sieht so aus:

    Code
    pi@raspberrypi ~/test $ awk -F'[current_temp ]*=[humidity ]*' -f script.sh wetter.txt
     60%

    Egal, wie ich es nun, zugebenermaßen, "blind" ändere, kommt das oben raus oder keine Ausgabe...

    dreamshader: Ich will die Daten nicht groß weiterverarbeiten, ich will die Daten dann in einem Webcambild einblenden...sozusagen mit einem Aufruf das aktuelle Wetterbild mit eingeblendeten Wetterwerten. Gibt es schon bestimmt tausendfach fertig, aber ich will ja bei was lernen und nicht blind abkupfern...

    Gruß
    YMCA72

  • ...
    Ich vermute mal, in die [ ] sollten die Parameter rein, die ich aus der Textdatei ausgelesen werden sollen...


    Nein. Rufe das awk Script genauso auf mit dem -F Parametern wie von Tell geschrieben. Es ist ein regulärer Ausdruck, der beschreibt, wie die Elemente in einer Zeile getrennt werden sollen: beliebige Leerzeichen [ ]* gefolgt von = gefolgt von beliebigen Leerzeichen [ ]*. Also wird

    Code
    current_temp = 13 °C

    getrennt in

    Code
    $1 = current_temp
    $2 = 13 °C

    ;)

  • :wallbash:
    Mann mann mann....mal wieder der blinde unter den sehenden

    :danke_ATDE: geht!

    Jetzt muss nur noch schauen wie ich das doofe Steuerzeichen rausbekomme....

    Code
    Temperatur:24 °C Rel F:50% Druck:1016.1 mBar
  • Hallo,

    Ich hab es so gelassen wie es mir Tell gegeben hat...habs nur erweitert mit dem Druck, nachdem ich es endlich verstanden habe wie das funzt

    Code
    $1 == "current_temp" { temp = $2 ; }
    $1 == "humidity"     { hum =  $2 ; }
    $1 == "pressure"     { pres = $2 ; }
    END                  { printf( "Temperatur:%s Rel F:%s Druck:%s\n", temp, hum, pres ) ; }

    Wie ich grad sehe, das es ein Steuerzeichen, das in der Textdatei schon steht. Wenn ich das in Nano aufmache, steht der gleiche Müll drin Da wertet das "°" mein Pi nicht richtig aus....hab da wohl die falschen Schrift und Ländercodes nicht eingestellt...Basic`s also...

    Gruß
    YMCA72

    Einmal editiert, zuletzt von ymca72 (29. August 2014 um 19:59)

  • da kommt das raus:

    Code
    7375
    0000090   /   w   e   /   5   2   /   2   7   .   g   i   f  \n   c   u
    0000090    772f    2f65    3235    322f    2e37    6967    0a66    7563
    00000a0   r   r   e   n   t   _   t   e   m   p       =       1   8
    00000a0    7272    6e65    5f74    6574    706d    3d20    3120    2038
    00000b0   Â   °   C  \n   c   u   r   r   e   n   t   _   t   e   x   t
    00000b0    c220    43b0    630a    7275    6572    746e    745f    7865

    Gruß
    YMCA72

    Einmal editiert, zuletzt von ymca72 (30. August 2014 um 00:31)

  • Das liegt wohl am Zeichensatz, entweder search/replace drüber laufen lassen und das Zeichen austauschen lassen, oder vorher/nachher den Zeichensatz konvertieren.

    Evt klappt das:

    Code
    iconv -f UTF8 -t ISO8859-1 input | awk -F'[ ]*=[ ]*' -f script

    anstelle von:

    Code
    awk -F'[ ]*=[ ]*' -f script input
  • So hab die fehlende Codezeile oben eingefügt...sorry dachte die Zeile darunter wäre nicht mehr nötig.

    Benny: Deine Kommandozeile geht nicht...

    Code
    iconv: Kann die Eingabedatei »input« nicht öffnen: Datei oder Verzeichnis nicht gefunden

    Aber mal was anderes nebenbei, was ich nicht verstehe...

    Das script funktioniert an sich so wie ich das haben will. Rechte sind auf 755 gesetzt und geht wenn ich bash script.sh aufrufe.

    Wenn ich das script aber mit der crontab aufrufe (soll immer zur vollen Stunde ein Bild mit allen Daten machen), geht es nicht. Das awk-script für dei Wetterdaten werden ignoriert. Die CPU-Temperatu wird ausgelesen und auch korrekt in das Bild eingebunden. Woran liegt das?

    Sollte das awk in ein eigens script.awk ausgelagert werden?

    Gruß
    YMCA72

    Einmal editiert, zuletzt von ymca72 (30. August 2014 um 01:19)

  • Die Datei input sollte die Wetterdaten enthalten.

    Alternativ kannst du die Ausgabe von einem anderen Programm auch einfach an iconv weiterleiten:

    also z.B.
    cat input | iconv -f UTF8 -t ISO8859-1 | awk -F'[ ]*=[ ]*' -f script

    (in diesem Beispiel wieder die Wetterdaten in der Datei input, ausgelesen von cat, und weitergeleitet an iconv)

  • > Woran liegt das?
    Wahrscheinlich am Pfad fuer script.sh. Was passiert, wenn der ganze Pfad angegeben ist ?

    - - - - -

    Seltsame Zeichen loeschen:

    Mit od -c input herausfinden was das fuer Zeichen sind, und dann mit tr -d wegputzen.

    + + + +

    Oder vielleicht besser: die Zeichen im awk-Script durch "" ersetzen.

    Einmal editiert, zuletzt von Tell (30. August 2014 um 09:35)

  • ...Seltsame Zeichen loeschen:
    Mit od -c input herausfinden was das fuer Zeichen sind, und dann mit tr -d wegputzen

    Löst das Problem. Aber ich würde versuchen herauszubekommen, warum dieses b0 da erscheint. Vielleicht ist es ein anderes Mal mit anderen Werten ein anderes Zeichen was da auftaucht.

    ymca72
    awk kann auch rechnen. D.h. die Benutzung von bc kannst Du Dir eigentlich schenken ;)

  • Holà und Guten Tag,

    also es geht jetzt wie ich es gerne haben will. Dank Euch und Eueren Tipps!:danke_ATDE:

    Benny: mit dem cat geht es jetzt einwandfrei. Damit wird das Steuerzeichen ausgemerzt. Super

    Tell: Das mit dem kompletten Pfad war der Fehler. Ich dachte, wenn ich das script im gleichen Pfad habe wie alles andere auch, brauch ich keine Pfade mehr angeben. Naja, damit merkt man mal wieder, wenn man hauptsächlich Windowsfensterschieber ist (leider ist bei mir in der Firma das die Basis) wird man(n) da schnell ganz ganz nachlässig. Wieder was gelernt und wenn ich zuhause weiter mache (leider ist der Urlaub fast vorbei), werde ich das weiter vertiefen. Da werde ich dann mir ein paar Sensoren besorgen und damit weitermachen.

    Aber ohne eigene Sensoren ist das Ergebnis garnicht mal soooo schlecht :thumbs1::angel:

    Ich hab mal den betreffenden Bildausschnitt hier einfügt, damit das Ergebnis auch sichtbar ist. :bravo2:

    Jedenfalls nochmal danke für Eure Hilfe!

    Gruß
    YMCA72

    Einmal editiert, zuletzt von ymca72 (30. August 2014 um 13:57)

Jetzt mitmachen!

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