2016-01-07 // Wetter.chrisge.org Update & Wettergraphen 2015
Nachdem die Wetterstation hinter Wetter.chrisge.org mittlerweile über Wetteraufzeichnungen der letzten 4 Jahre verfügt, habe ich über die Feiertage neben der Umstellung des Designs der Wetterseite zusätzlich noch eine Übersichtsseite generiert, auf der die Graphen vom Temperatur und relativer Luftfeuchte für diese 4 Jahre jeweils als Plot über das ganze Jahr sowie für die einzelnen Monate betrachtet werden können.
Das neue Design basiert – wie unschwer zu erkennen ist – auf Twitter Bootstrap. Im Hintergrund werkeln weiterhin die gleichen Komponenten (Munin, OWFS sowie ein paar Bash Skripte). Auch die externen Wetterdaten werden weiterhin über die Wundergound Weather API bezogen. Nur die Webcam läuft seit Mai dieses Jahres nicht mehr.
Wettergraphen 2015
Traditionell auch in diesem Jahr wie bereits 2012, 2013 und 2014 die Wettergraphen des vergangen Jahres. Die Graphen dieser Jahren sind nun übersichtlich auf der überarbeiteten Wetterseite dargestellt.
2014-12-30 // Jahresrückblick: Wettergraphen 2014
Die Wetteraufzeichnen von Weather.chrisge.org reichen mittlerweile 3 Jahre zurück. Deshalb gibt es dieses Jahr zusätzlich zu den traditionellen Wettergraphen ein kurzer Kommentar zum Wetterjahr 2014.
Leider gibt es dieses mal keine Jahres-Timelapse wie in den beiden letzten Jahren. Dies liegt vor allem daran, dass die Qualität der Webcambilder bereits letztes Jahr erheblich nachgelassen hat (Lichteinstrahlung auf die Webcam). Ein anderer Grund ist aber auch die wiederholte starke Absenkung der „Kamerahalterung“. Bis ich keine bessere Position für die Kamera gefunden habe, werde ich gegen dieses Problem aber nicht mehr vorgehen.
Das Wetter 2014
Doch nun zum Wetter! Der diesjährige August war insgesamt recht kalt, dafür vielen die ersten Juniwochen sehr warm aus. Der September war wie der ganze Herbst sehr mild. Der Herbst war im Vergleich zum letzten Jahr wärmer und zog sich gefühlt bis Ende Dezember hin. Erst in der letzten Woche dieses Jahres wurde es kälter und es viel tatsächlich mal wieder Schnee.
Die Durchschnittstemperatur war auf allen gemessenen Sensoren (und der externen Referenzquelle) höher als die Jahre zuvor, dies bestätigen auch externe Quellen, 2014 gilt als das bisher wärmste Jahr seit Beginn der Wetteraufzeichnungen.
Jahresraffer 2012 & 2013
2014-12-29 // Wacom Intuos Pen & Touch unter Linux nutzen
Ich habe mir vor kurzem ein Wacom Intuos Pen & Touch S (CTH-480M-N) zugelegt. Die Wacom Grafiktabletts werden dank dem Linux Wacom Project sehr gut von Linux unterstützt (siehe auch hier). In aktuellen Versionen von Ubuntu (in meinem Fall Ubuntu Gnome 14.04) laufen auch die neueren Versionen der Grafiktabletts out of the box, so auch das Intuos P&T. Es ist sogar ein kleines graphisches Einstellungstool in der Standardinstallation enthalten.
In dem folgenden Beitrag werde ich unter anderem darauf eingehen, wie man mit dem CLI-Tool xsetwacom
weitere, nicht in der GUI enthaltene Einstellungen vornimmt und (Grafik-)Anwendungen aufzählen, die mit etwas Konfigurationsarbeit die Funktionen des Grafiktabletts unterstützen.
Benutzung von xsetwacom
Das Tool besitzt im wesentlichen die Schalter list
, mit dem neben den verfügbaren Geräten auch die möglichen Einstellungen ausgegeben werden können und get
sowie set
, mit denen die Einstellungen gesetzt oder abgerufen werden können. Eine vollständige Liste der möglichen Einstellungen erhält man so z.B. mit xsetwacom list parameters
.
$ xsetwacom Usage: xsetwacom [options] [command [arguments...]] Options: -h, --help - usage -v, --verbose - verbose output -V, --version - version info -d, --display "display" - override default display -s, --shell - generate shell commands for 'get' -x, --xconf - generate xorg.conf lines for 'get' Commands: --list devices - display detected devices --list parameters - display supported parameters --list modifiers - display supported modifier and specific keys for keystrokes --set "device name" parameter [values...] - set device parameter by name --get "device name" parameter [param...] - get current device parameter(s) value by name
Bei mir wird neben dem Radierer und dem Stift das Pad selbst und die Touchfunktion erkannt.
$ lsusb Bus 001 Device 008: ID 056a:0302 Wacom Co., Ltd (...) $ xsetwacom list Wacom Intuos PT S Pen stylus id: 15 type: STYLUS Wacom Intuos PT S Pen eraser id: 16 type: ERASER Wacom Intuos PT S Finger touch id: 17 type: TOUCH Wacom Intuos PT S Finger pad id: 18 type: PAD
Um nun zum Beispiel den Parameter TapTime
des Touchpads abzurufen, zu verändern und ggf. die Änderung zu kontrollieren, gehe ich wie folgt vor.
$ xsetwacom get "Wacom Intuos PT S Finger touch" TapTime # Wert abrufen 250 $ xsetwacom set "Wacom Intuos PT S Finger touch" TapTime 200 # Wert ändern $ xsetwacom get "Wacom Intuos PT S Finger touch" TapTime # Wert nochmal abrufen => wurde geändert 200
Buttons belegen
Das Intuos P&T verfügt über vier Harwarebuttons, die glücklicherweise belegt werden können. Die Buttons sind mit 1, 3, 8 und 9 indizierbar. Eine Liste der möglichen „Modifiers“, also möglichen Tasten erhält man mit xsetwacom list modifiers
. Leider klappte die Belegung mit +
und -
nicht. Im Folgenden ein Beispiel für Inkscape und Firefox.
# Beispiel für Inkscape $ xsetwacom set "Wacom Intuos PT S Finger pad" Button 1 "key ctrl y" $ xsetwacom set "Wacom Intuos PT S Finger pad" Button 3 "key ctrl shift z" $ xsetwacom set "Wacom Intuos PT S Finger pad" Button 8 "key ctrl down" $ xsetwacom set "Wacom Intuos PT S Finger pad" Button 9 "key ctrl up" # Beipsiel für Firefox $ xsetwacom set "Wacom Intuos PT S Finger pad" Button 1 "key ctrl tab" $ xsetwacom set "Wacom Intuos PT S Finger pad" Button 3 "key ctrl shift tab" #xsetwacom set "Wacom Intuos PT S Finger pad" Button 8 "key end" $ xsetwacom set "Wacom Intuos PT S Finger pad" Button 8 "key ctrl w" $ xsetwacom set "Wacom Intuos PT S Finger pad" Button 9 "key home"
Gerade Linien zeichnen
Wie hier ausführlich ausgeführt, wirken den Linien, die mit den Standardeinstellungen gezeichnet wurden, etwas zittrig. Abhilfe schaffen die folgenden Einstellungen.
$ xsetwacom set "Wacom Intuos PT S Pen stylus" RawSample 9 $ xsetwacom set "Wacom Intuos PT S Pen stylus" Suppress 10 $ xsetwacom set "Wacom Intuos PT S Pen eraser" RawSample 9 $ xsetwacom set "Wacom Intuos PT S Pen eraser" Suppress 10
Feintuning am Touchpad
Um die Touchfunktion besser nutzen zu können, habe ich noch weitere Parameter angepasst.
$ xsetwacom set "Wacom Intuos PT S Finger touch" ScrollDistance 40 $ xsetwacom set "Wacom Intuos PT S Finger touch" ZoomDistance 200 $ xsetwacom set "Wacom Intuos PT S Finger touch" TapTime 200
Noch mehr?
Weitere Beispiele finden sich im Wiki des Projekts.
Anwendungen mit Unterstützung für Grafiktabletts
Das Grafiktablett lässt sich dańk der Touchfunktion sehr gut in den täglichen Workflow (z.B. Browser, PDFs, Bildbetrachter, usw.) integrieren. Die eigentliche Funktion, also Zeichnen/Illustrieren lässt sich mit den meisten Linux Standardanwendungen für Grafik & Co. natürlich auch nutzen. Dabei wird sowohl Drucksensitivität als auch der Wechsel zwischen Radierer und Stift unterstützt.
Im Folgenden eine kleine Übersicht über Software und die nötigen Einstellungen.
Anwendung | nötige Einstellungen |
---|---|
Xournal | Unter Optionen die Optionen Radiererspitze und Drucksensitivität aktivieren |
MyPaint | keine Einstellungen notwendig |
Inkscape | Unter Datei → Eingabegeräte die Optionen (…) Pen stylus und (…) Pen eraser aktivieren (jew. auf Bildschirm), außerdem Haken bei Druckempfindliches (…) verwenden |
Gimp | Unter Bearbeiten → Eingabegeräte im Dropdown bei (…) Pen stylus und (…) Pen eraser von Deaktiviert auf Bildschirm setzen |
2014-09-04 // PiFace CAD: Erste Versuche mit MPD
Wie bereits berichtet habe ich vor mit dem PiFace Control and Display (CAD) und MPD einen kleinen Musikplayer aus einem Raspberry Pi Model B zu basteln. Zum PiFace CAD existiert eine offizielle Python Library, die über die Raspbian Paketquellen nachinstalliert werden kann. Mit dieser kann man auf recht einfache Weise alle Funktionen der Erweiterungsplatine nutzen. Da sich meine Python Kenntnisse aber eher gering waren, habe ich mich in letzter Zeit ein bisschen in Python eingearbeitet. Sollte mein Programmierstil also noch etwas suboptimal sein, schrecke bitte nicht vor einem Kommentar zurück!
Vorbereitung
Zunächst habe ich das Board mit dem Raspberry Pi (Model B) in das passende Gehäuse eingebaut, welches es beispielsweise beim Distributor Farnell element14 gibt. Dies geht am besten, wenn zuerst der Pi und anschließend die Erweiterungsplatine in das Case gesteckt wird.
Auf das Model B+ passt das CAD zwar, allerdings liegt es aufgrund der neuen USB-Buchsen wie in den Bildern erkennbar etwas schief auf. Wenn die Kontaktstellen mit etwas Isolierband abgeklebt werden und sichergestellt wird, dass die GPIOs gut verbunden sind, dürfte dies aber kein Problem darstellen. Da ich aber ein „altes“ Model B verwende, bleiben mir diese Probleme erspart.
MPD installieren & konfigurieren
Auf die Installation und Konfiguration von MPD will ich hier nicht weiter eingehen, dazu gibt es zahlreiche Ressourcen. Statt dessen will ich kurz erläutern, welche Änderungen für den Pi notwendig sind und einen groben Einstiegspunkt liefern.
Nachdem die Pakete mpd
und mpc
installiert sind und die gröbsten Anpassungen in /etc/default/mpd
und /etc/mpd.conf
gemacht sind, kann mit raspi-config
festgelegt werden welche Audioausgang verwendet werden soll. Diese Option findet sich unter Punkt 8 Advanced Options
→ Punkt A6 Audio
. Ebenfalls unter Punkt 8 Advanced Options
kann bei A5 SPI
noch SPI, was später für das CAD benötigt wird, aktiviert werden.
Ich verwende für meinen Versuch die 3.5'er Klinke. Reicht die oft krtitisierte Qualität der Klinkenbuchse nicht aus kann ein HDMI Audio Extractor oder eine externe USB-Soundkarte verwendet werden. Im folgenden eine für den Pi gut funktioniernde MPD Audioconfig. Soll statt der internen Soundkarte eine externe USB-Soundkarte verwendet werden, muss noch Alsa konfiguriert werden.
audio_output { type "alsa" name "My ALSA Device" mixer_control "Master" mixer_type "software" }
Nun kann die MPD Konfiguration überprüft werden, dazu aktualisiere ich zunächste mit mpc update
die Datenbank, füge alle Titel der Wiedergabewarteschlange hinzu und starte die Wiedergabe. MPD sollte nun beginnen die Playlist, also alle verfügbaren Titel abzuspielen.
$ mpc update # warten bis MPD die Datenbank aktualisiert hat (mit mpc status checken) $ mpc add / $ mpc play
MPC ist ein kleiner CLI Client für MPD. Eine Übersicht über die zur Verfügung stehenden Optionen liefert mpc help
.
PiFace CAD einrichten
Auf mein.homelinux.com habe ich bereits eine Kurzanleitung zum PiFace CAD erstellt. Dort findet sich auch ein Abschnitt zur Einrichtung. Die Eckpunkte meines Vorgehens zu Einrichtung des CADs, die im Übrigen sehr gut auf der offziellen Seite dokumentiert sind:
- SPI aktivieren (siehe weiter oben)
python{,3}-pifacecad
(die offizielle Python 2 bzw. 3 Library) installieren und anschließend den Pi neustartensysinfo.py
(eine Systemstatusanzeige) ausprobieren- den IR-Receiver bzw. LIRC einrichten
Die ersten Versuche
Zum PiFace CAD existiert eine offizielle Python Library, über die alle Funktionen des Boards in Python genutzten werden können. In der Dokumentation zur Library finden sich einige gut erklärte Beispiele, sodass auch ein Python Neuling wie ich etwas damit anfangen kann. Hin und wieder lohnt sich auch ein Blick in die Referenz.
Die wichtigsten Funktionen der Lirbrary habe ich hier kurz zusammengefasst. Dort finden sich auch einige kleine Beispiele, die im Endeffekt meine ersten Versuche waren.
Dieser Code nutzt zum Beispiel „Interrupts“ und gibt den gerade gedrückten Button auf das Display aus, dies ist besonders praktisch, wenn einem die Buttonbelegung noch nicht bekannt ist.
import pifacecad # Init the CAD def initCad(): cad.lcd.blink_off() cad.lcd.cursor_off() cad.lcd.clear() cad.lcd.backlight_on() # Handle pushed pins def handlePin(event): event.chip.lcd.clear() event.chip.lcd.write("Pressed button:") event.chip.lcd.set_cursor(0, 1) event.chip.lcd.write(str(event.pin_num)) cad = pifacecad.PiFaceCAD() initCad() listener = pifacecad.SwitchEventListener(chip=cad) for i in range(8): listener.register(i, pifacecad.IODIR_FALLING_EDGE, handlePin) listener.activate()
Für den Anfang habe ich mich entschieden vorerst kein LIRC zu verwenden. Ich will zuerst eine funktionierende Steuerung nur mit den Buttons realisieren.
MPD ansteuern
MPD lässt sich ganz einfach aus der Shell mit dem CLI Client mpc
steuern. In Verbindung mit der Fähigkeit von Python Shell Befehle zum Beispiel mit os.system()
auszuführen, ergibt sich hieraus eine sehr einfache Möglichkeit MPD zu kontrollieren:
$ python3 >>> import os >>> os.system("mpc next") # nächster Titel
Um nun auch die Ausgaben von mpc
parsen zu können, kann subprocess.check_output()
verwendet werden:
$ python3 >>> import subprocess >>> status = subprocess.check_output("mpc status", shell=True, stderr=subprocess.STDOUT) # Achtung: Python3 => binary string >>> status = status.decode() >>> status.find("%")
Mit diesen Hilfsmitteln habe ich nun versucht eine einfach Steuerung zu realisieren:
- Eine erste naive Umsetzung: Mein erster Versuch, in dem das Display nicht wirklich verwendet wird, ist hier ersichtlich. Der Code nutzt den Status (Play/Pause) von MPC nur bedingt.
- Erweiterte Realisierung: In diesem Code berücksichtige ich die Ausgaben von
mpc
zur Titelanzeige, Volumenanzeige und zur Ermittlung des Statuses (Play/Pause). Außerdem habe ich die Steuerung von MPD in eine eigene Klasse ausgelagert.
Wie gehts es weiter?
Der Code kann bis jetzt nur die Basisaufgaben, so aktualisiert sich die Anzeige noch nicht. Pin/Taster 0 ist eigentlich noch unbelegt und soll später dazu verwendet werden zwischen den einzelnen Funktionen des erweiterten Mediaplayersumzuschalten.
Bis jetzt habe ich neben der MPD Steuerung noch eine Uhr- und Wetteranzeige, eine Netzwerk bzw. Statusfunktion und die Möglichkeit den Raspberry Pi herunterzufahren oder zu rebooten in Planung. Diese zusätzlichen Funktionen werde ich nach und nach implementieren und hier über meinen Fortschritt berichten.