Monatliches Archiv: August 2016

Twitter Photo Bot (Raspberry Pi/Camera Module V2) updated

Comments Off on Twitter Photo Bot (Raspberry Pi/Camera Module V2) updated
Abgelegt unter DIY

IMG_1993

Der neue Raspberry Pi V3 Model B kommt neuerdings mit integriertem WiFi und das neue Kameramodul V2 kommt jetzt neuerdings mit einer 8-MP-Kamera, diese beiden neuen Features unterstützen die Realisierung des “Twitter Photo Bot” ganz wesentlich.
Die Idee: ein System, was regelmässig und völlig autonom Bilder macht und tweetet. Bei minimalem Bedienungsaufwand, heißt: nur am Strom anschliessen, fertig.
Nötig an Hardware dafür ist (neben dem Raspberry Pi und dem Kameramodul) ein mobiler UMTS-WLAN-Router, der die Netzverbindung herstellt. Diese 3 Sachen müssen alle in ein Gehäuse. Der Router braucht natürlich eine SIM-Karte mit entsprechenden Datenkontingent, auf die Schnelle habe ich mit einem Datenverbrauch von 500 MB pro Monat kalkuliert. Das Ganze hat also den Charakter einer Webcam-to-Go, allerdings mit reiner Twitter-Anbindung, denn irgendwohin müssen ja auch die ganzen Daten, im Jahr wären das stolze 6 GB.
Benötigte Software: das Standard-Raspbian, einen Twitter-Account, die Twython-Bibliothek und ein Python-Script, was über Crontab ausgeführt wird. Das Betriebssystem verarbeite ich mit SDFormatter und ApplePi-Baker, siehe AudioCube, das geht definitiv am schnellsten.
Die App-Registration unter apps.twitter.com braucht etwas mehr Zeit, definiert werden muss ein Name, eine Beschreibung und hinterlegt werden muss eine Handynummer. Die kann man aber nach der Registrierung wieder rausnehmen.

Bildschirmfoto 2016-08-03 um 14.32.46

Die benötigten Token (bei “Manage Keys and Access Tokens”) sind: Consumer Key (API Key), Consumer Secret (API Secret), Access Token und Access Token Secret.
Weiterhin brauchen wir die Twython-Bibliothek, diese wird installiert über:

sudo apt-get install python-setuptools
sudo easy_install pip
sudo pip install twython

Hier das endgültige Skript (twitterphotobot.py):


import sys
import os
import random

from twython import Twython

consumer_key = 'lc7dhdghgdhgdfhgdfGPP3'
consumer_secret = 'Fy0S5NhdhgfhdgfhgfdhgfdhdgfhLuvdZpuwiiNgh6'
access_token = '760076306dhdhdfghgdfhdfhgfdhgdfhdgfQzqDhvlLS'
access_token_secret = 'HOidOZfcdhdghdfhgfdhgdfhgfdhdgfZfuXLEAgMMITGKw'

messages = [
"I ve got the Power.",
"Strawberry Fields forever.",
"Boom. Shake, shake, shake the room.",
"We dont need no education.",
]

takephoto = "raspistill -w 1280 -h 960 -q 100 -o /home/pi/Desktop/picture.jpg"
os.system(takephoto)
photo = open('/home/pi/Desktop/picture.jpg', 'rb')
twitter = Twython(consumer_key, consumer_secret, access_token, access_token_secret)
image = twitter.upload_media(media=photo)
twitter.update_status(status=random.choice(messages), media_ids=[image['media_id']])

Unter “messages” stehen die Texte des Tweets, die per Zufall eingebunden werden, letzte Zeile. Unter “takephoto” wird die Grösse des Bildes festgelegt; die Bildgrösse muss unbedingt begrenzt werden, weil die rohe Foto-Ausgabe des Camera-Moduls die maximale Twitter-Photo-Upload-Größe (<3MB) überschreitet. Getestet wird das Skript mit python twitterphotobot.py, bei mir dauerte das ganze ca. 20 Sekunden zum Ausführen, danach sollte der Tweet auch schon veröffentlicht sein.
Troubleshooting: SyntaxError: Non-ASCII character '\xc2' ...
Der Fehler bzgl. der Sonderzeichen innerhalb der “messages”-Sektion passiert häufig, hier werden die Umlaute oder falsche Apostrophe (Akut,´) angemerkt. Stattdessen sollte man das Ersatz-Apostroph verwenden (‘). Eine Lösung für die Umlaute habe ich noch nicht.
Raspberry-Pi-Zeit setzen: sudo dpkg-reconfigure tzdata
Crontab: https://www.raspberrypi.org/documentation/linux/usage/cron.md, bei mir ist jede Viertelstunde eingestellt.
Der letzte Schritt ist die WiFi-Anbindung an den UMTS-Router, dafür gibt es eine kurze Anleitung hier: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md, die SSID und das Passwort stehen bei diesem Model von TP-Link auf der Innenseite des Deckels.
Mit der umfangreichste Teil der Übung ist ein effektives Gehäuse. Ich habe das Innenteil eines Festplattengehäuses in ein MDF-Gehäuse eingepasst, Schwierigkeit besteht darin, dass die Kamera irgendwie fest mit Gehäuse verankert sein muss, gleichzeitig man aber auch an das Innenleben kommen sollte. Und an den Ethernet-Port sollte man auch immer denken, um natürlich das System warten zu können.

Bauteile:

Raspberry Pi V3 Model B 40 EUR
Raspberry Pi Kameramodul V2 32 EUR
TP-Link UMTS Router 56 EUR
SD-Karte 16 GB 8 EUR

PS: das ganze funktioniert auch mit einem Raspberry Pi 1 Model B und Debian Jessie Lite.

IMG_2014

Update 23.9.: Das Sonderzeichen-Problem löst man durch die Definierung des Encodings in der ersten Zeile des Scripts:
# -*- encoding: utf-8 -*-