Raspberry Pi, Webcam und Twitter

Twitter-Headerbild CyclopPi

Twitter-Headerbild CyclopPi (Originalaufnahme, bearbeitet von Jan mit etwas Photoshop)

Ein Raspberry Pi ist das neueste Gerät im heimischen WLAN. Kein Himbeerkuchen, sondern ein Ein-Platinen-Computer in Scheckkartengröße.

Der älteste Sohn machte in den vergangenen Wochen mehrfach mehr oder weniger deutliche Anspielungen, dass so ein Gerät wunderbar in unseren Haushalt passen würde. Nach einem noch deutlicheren Hinweis im Newsletter meines Lieblingselektronikversenders bestellte ich.

Die Version B dieses Wunderwerks forderte mich heraus. Mit Gehäuse, Netzteil, WLAN-Adapter (die Mini-Ausführung (EW-7811 UN) von Edimax) und Tastatur kamen zwar noch einmal rund zwei Drittel des ursprünglichen Preises hinzu, aber immerhin hatten wir einen tragbaren Computer für ingesamt nur 72,80 Euro! Eine 2-GB-SD-Karte als „Festplattenersatz“ schlummerte noch in einer alten Digitalkamera.

Das passende Debian-Betriebssystem war schnell heruntergeladen. Mit Hilfe eines Macs, des Terminalfenster und der Einsteiger-Anleitung war die SD-Karte für den ersten Start im Mini-Computer vorbereitet.

Die B-Variante des Pis ist unbedingt vorzuziehen, da das Gerät einen LAN-Anschluss besitzt. Einstecken und das Internet ist da. Das hilft bei der Installation von Debian-Paketen ungemein. Wir konnten in aller Ruhe alles einrichten und mussten uns nicht mit der WLAN-Konfiguration herumplagen. Unter der grafischen Oberfläche, die man mit startx aufruft, gelang das nicht zuverlässig. Erst mit der Konsole und der richtigen Konfiguration der wpa_supplicant.conf-Datei lief das WLAN stabil. Diese Konfiguration für Ubuntu hilft auch für den Pi weiter.

Ziemlich schnell haben wir auch die Tastatur wieder abgeklemmt und nur mit der Remoteverbindung über ssh den Raspberry Pi weiter eingerichtet.

ssh IPADRESSE -l pi

Die vergebene IP-Adresse kann man beispielsweise im WLAN-Router nachsehen.

Um doch etwas Beinfreiheit auf der SD-Karte zu haben, kauften wir tagsdrauf eine 8 GB-Karte. Diese hat beim Übertragen des heruntergeladenen Debian-Images wieder nur 2 GB. Mit dem Konfigurationsmenü des Pi gelang es aber, die Partition auf die volle Kartengröße zu erweitern. Zunächst hatten wir diese eingebaute Möglichkeit übersehen. Andere Befehle oder Tools, die wir uns ergoogelt oder eryoutubet hatten, scheiterten.

Der Menüpunkt „Expand root partition to fill SD card“ erledigt diese Aufgabe zur vollen Zufriedenheit. Tipp: Etwas Zeit einplanen!

sudo raspi-config

Weitere Einstellungen der Konfiguration, die man jederzeit mit sudo raspi-config wieder aufrufen kann, findet ihr hier gut beschrieben.

Nachdem wir uns mit dem Gerät etwas angefreundet hatten, entwickelten wir einen Plan: An den Raspberry Pi sollte eine Webcam angeschlossen werden, die regelmäßig Bilder macht und diese im Internet (also hier auf dem Blog) und auf Twitter veröffentlicht.

Webcam und Raspberry Pi in der Fensterbank

Webcam und Raspberry Pi in der Fensterbank (Innen- und Außenansicht)

Zwei Webcam-Typen fanden sich in einer alten Kiste, beide von Microsoft. Das Betriebssystem erkannte beide. Die ältere VX-5000 (oben im Bild auf dem Raspberry pi) liefert nach Installation des Debian-Paketes fswebcam Bilder, die NX-6000 leider nicht.

fswebcam war dann für den praktischen Einsatz nicht zu gebrauchen. Bei Tageslicht lieferte es viel zu helle Bilder.

Mit motion kommt Bewegung in die config

Das umfangreichere Debian-Paket motion hingegen kann besser Helligkeits- und Kontrastunterschiede ausgleichen. Die config-Datei von motion haben wir so angepasst, dass alle fünf Minuten eine Aufnahme gemacht wird: Dazu bei snapshot_interval 300 eintragen. motion schreibt die Bilder in ein Unterverzeichnis des Home-Verzeichnisses des Benutzers pi, wenn man es ihm sagt: target_dir /home/pi/snapshots

motion installiert einen eigenen Webserver, den wir aber abschalten, genauso wie die Bewegungserkennung.

webcam_localhost on
output_normal off

Die Bildgröße steht auf width 640 und height 480.

Auf das Bild schreibt motion etwas Text. fswebcam bietet da viel mehr Möglichkeiten. motion bleibt da hinter den Erwartungen zurück. Wir entschieden uns dafür, unten rechts mittels text_right %d.%m.%y|%H:%M:%S (bspw. 23.05.13|23:00:01) die Zeit anzugeben und unten links die Ortsangaben
text_left Berlin \nCyclop aufzunehmen.

\n steht dabei für eine neue Zeile. Theoretisch könnte man mit zahlreichen \n den Text auch in die obere Ecke schieben.

Ein kurzes Shell-Script und ein Cronjob sichert die Dateien auf dem lokalen Netzwerkspeicher (NAS per FTP) und in der Cloud (Strato HiDrive per scp).

Die Kamera macht nun alle fünf Minuten ein Bild. Das jeweils letzte Bild ist jeweils verlinkt unter lastsnap.jpg zu finden. Dieses wird mit einem weiteren Script eine Minuten später (also zu Minute 6, 11, 16 usw.) auf den Webserver übertragen und dann unter /webcam auf meinem Blog angezeigt.

Nun soll es auch noch twittern…

Was sich hier so einfach und schlüssig liest, hat uns zwei Tage gekostet. Wir beide sind nicht wirklich fit unter Linux und mussten uns vieles in zahlreichen Blogs und Anleitungen sowie YouTube-Tutorials erarbeiten.

Ziel war aber eine twitternde Webcam. Twitter hat seit geraumer Zeit die Authentifizierungsmethode für Anwendungen auf OAuth umgestellt. Also auf https://dev.twitter.com/apps/new nach dem Einloggen mit Benutzername und Kennwort eine Anwendung angemelden, um mit den vielen Buchstaben und Zahlen, die API anzusprechen.

Aber wie? Unsere Kamera soll Bilder twittern. status_update_with_media ist das Stichwort. Die erste Python-Bibliothek haben wir installiert, zahlreiche abhängige Pakete nachinstalliert und den ersten Text-Testtweet geschrieben: Hurra!

Leider stellte sich danach heraus: Die Bibliothek kann keine Bilder twittern. Die nächste gesucht und angesehen. Ein Pony half uns dann weiter: tweetpony von @Mezgrman

Livesupport hilft!

Wegen der rudimentären Python-Kenntnisse und auch der insgesamt sehr verschütteten bzw. noch nicht entwickelten Kenntnisse in anderen Programmiersprachen kamen wir nur mit Twitterunterstützung von @Mezgrman weiter. Er gab uns die entscheidenden Tipps per Twitter, wie wir den media-Parameter richtig ansprechen. Vielen Dank dafür!

Nach zahlreichen Versuchen auf der Python-Kommandozeile fanden wir heraus, dass die Pfadangabe zur Datei nicht reicht, sondern die Datei im Lesemodus geöffnet werden musste.

Schnell und schmutzig heißt die Zeile:

api.update_status_with_media(status = ‚#Berlin #Webcam‘, media = open(„/home/pi/snapshots/lastsnap.jpg“, ‚r‘))

Gewittert wird jede Stunde einmal: Dazu wird das Script in die crontab eingetragen.

Wir ergänzten den API-Aufruf nun noch um die Geokoordinaten (lat = 52.59950, long = 13.32758). Die nächsten Ziele sind automatisch erzeugte Zeitrafferfilme aus den erhaltenen Bildern, das Twittern nach Aufforderung (Hashtag und Mention) und die Ergänzung um Wetterdaten.

Die Webcam blickt in Richtung Nord-Osten. Standort:

Der Account folgt dem @stecki, weil er auch eine Webcam hat. Die twittert allerdings (noch) nicht. Hinweise auf weitere (twitternde) Webcams nehmen wir gerne entgegen.

Fragen beantworte ich gerne in den Kommentaren. Wenn ich es noch weiß… Hat jemand vielleicht noch Verbesserungsvorschläge? Immer gerne!

Update: Ohne zusätzliche Stromversorgung kommt es am USB-Hub gelegentlich zu Aussetzern. Besser ist es, einen USB-Hub mit externer Stromversorgung einzusetzen. Wir haben einen Delock 61393 benutzt, der bislang die Stabilität deutlich erhöht hat.

Raspberry Pi-Verkabelung am USB-Hub

Raspberry Pi-Verkabelung am USB-Hub

Flattr this!

16 Reaktionen auf “Raspberry Pi, Webcam und Twitter

  1. Wirklich tolles Vater-Sohn-Projekt!

    Meine Webcam twittert übrigens nicht, weil sie das Bild minütlich aktualisiert, das wäre dann doch etwas spammig ;)
    Dafür schreibt sie Geokoordination in die erzeugten Bilder, malt eine kleine Uhr rein und erzeugt automatisch Zeitraffer-Zusammenfassungen des letzten Tages (die Website ist sehr basic gebaut, sonst könnte man beliebige Archivzeitpunkte/Zeitraffer ansteuern, denn natürlich bleibt alles gespeichert).

    Was ich immer mal vorhatte: Eine weitere Kamera auf den Gemüsegarten zu richten und dann Jahreszeitrafferverläufe zu machen, also jeden Tag 12 Uhr etc., zur Beobachtung des Wachsen und Gedeihens…

  2. Hallo,
    super Projekt. Das selbe habe ich auch vor. Mittels fswebcam sind die Bilder überbelichtet. mjpg-streamer bekomme ich nicht ans laufen und nun bin ich ebenfalls bei Motion angekommen. Nur leider kann so gut wie keine Einstellung vornehmen. Sobald ich die Größe ändere, werden keine Bilder mehr gemacht (ebenfalls nur Standbilder). Könntest Sie mir eventuell die komplette .conf-Datei von Motion zur Verfügung stellen, damit ich bei mir mal schauen kann, ob ich noch i-wo einen Fehler habe? Dies würde mir extrem weiterhelfen. Ich hoffe, Sie können somit meine E-mail sehen und mir diese zuschicken…..
    Grüße
    Julian Thiele

  3. hallo,
    schönes Projekt. Tatsächlich hat fswebcam nicht viele Controls für die Kamera. Anders als motion Verrat es aber nicht so viele Systemressourcen und erlaubt bessere Beschriftungen des Images.
    Es gibtb aber ein Prog namens uvcdynctrl das alle möglichen Parameter der Cam konfiguriert. Damit kann auch fswebcam ganz ordentliche Snapshots machen.
    Ähnlich wie bei eurem Projekt nutze ich ein Python Skript zum Hochladen der Fotos auf meinen Webserver.
    Noch eine Frage zu eurer Stromversorgung: Sehe ich das richtig, dass euer Pi seinen Strom aus genau dem USB Hub zieht in den er später seine USB Daten einspeist? Also eine Art elektrischer Selbstbefruchtung :-) . Wenn ja, wäre das phantastisch, da man dann nur ein 220v Kabel/Netzteil benötigen würde.

    Danke für den interessanten Post.
    Grüße
    Chris

  4. Alternativ könnte man die Beschriftung auch mit einem PHP-Script realisieren.
    Da sind dann auch Wasserzeichen (Bild in Bild) etc. möglich (Stichwort: GD-LIB).

    Aber sehr schönes Projekt!

    Gruß

  5. Hi, tolles Projekt! Hat mich neugirig gemacht und habs mit meinem PI nachgebaut. Funktioniert 1A. Habe es aber mit dem mjpeg-streamer am laufen. Gibts da auch einen Weg Datum usw einzublenden? Gruß Mario

    • Ich werde nach einem Tool suchen, das auf die abgespeicherte JPG-Datei Text bringt. Denn meine RaspberryPi-Cam ist da und wird bald angeschlossen. Die funktioniert mit ihrer eigenen Software. Stay tuned. ;)

  6. Die Webseite habe ich schon öfter besucht..
    Sehr interessantes Projekt

    Mich interessiert das Thema Wettercam und Twitter auch sehr..

    aber irgendwie bin ich voll von der Spur und bekomme das mit Tweetpony nicht wirklich auf die Kette..

    Gruß Klaus

  7. Hallo, ein Frage. Ich habe das Projekt ähnlich umgesetzt. Zwar verwende ich andere Tools, am Ende sehe ich aber auch auf meiner Website das gewünschte Bild. Mein Problem ist aber, dass nach kurzer Zeit die Webcam Einstellungen total falsch sein müssten, denn wenn ich mir die Fotos anschaue, sind die meistens zu Hell, sodass man nur ein weißes Bild erkennt. Man kann zwar auf dem Foto alles erkennen, aber die Farben sind falsch.
    Gibt es irgendwie eine Möglichkeit, die Einstellungen zurück zu setzen, oder irgendwo die Einstellungen zu ändern?

    LG Martin

  8. Hallo,
    sehr schickes Projekt :)

    Wäre schön, wenn ihr mal eure .py Datei (Natürlich ohne Keys) mit veröffentlicht!
    Ich kämpfe nämlich damit, wo die Geo-Daten hinmüssen :(

    • Das ist einfach:
      #!/usr/bin/env python
      import tweetpony
      api = tweetpony.API(consumer_key='##', consumer_secret='##', access_token='##', access_token_secret='##')
      api.update_status_with_media(status = '#Berlin #Webcam', media = open("/home/pi/snapshots/lastsnap.jpg", 'r'), lat = 52.59950, long = 13.32758)

  9. Hallo erstmal. Tolle Seite, gute Infos. Ich hoffe auch etwas beisteuern zu können zu der Problematik: Zu helle Bilder mit fswebcam. Mit dem Parameter skip 20 werden 20 Bilder erzeugt und verworfen, das 21te dann abgespeichert. In der Zeit hat sich die Webcam an die Lichtverhältnisse angepasst und macht auch erkennbare Bilder. Funktioniert bei mir zuverlässig.
    Hier meine Befehlszeile, die per cron aufgerufen wird:

    fswebcam -d /dev/video0 -r 640×480 –skip 20 -subtitle „Bild vom %d.%m.%Y um %H:%M:%S (%Z)“ –save /home/pi/webcam“`date`.jpg“

    Vielleicht hilft das ja beim Einsatz von fswebcam.

  10. hi

    könnt ihr was damit anfangen ?

    pi@cappa ~/twitter $ ./webcam_twitter.py
    Traceback (most recent call last):
    File „./webcam_twitter.py“, line 5, in
    api.update_status_with_media(status = ‚#Webcam‘, media = open(„/home/pi/lastsnap.jpg“, ‚r‘))
    File „/usr/local/lib/python2.7/dist-packages/tweetpony/api.py“, line 364, in api_call
    raise ParameterError(„Missing required parameters: %s“ % „, „.join(missing_params))
    tweetpony.error.ParameterError: Missing required parameters: media

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *