de | en
zurück
Notizen zur Fotografie

t2l

Gastbeitrag von ↬ Jonathan Frech geschrieben.

Abstract.
Mein Beitrag zur Ausstellung ↬ Der Reflex des Wiedererkennens #1: eine Twitter-gespeiste LED-Unterstreichung eines meiner Sonette.

t2l, ein Akronym für den Datenfluss Twitter -> Leuchtdioden, belauscht den laufenden Twitter-Feed nach Tweets in welchen Wörter vorkommen, die ich auch in meinem Sonett »Ich schau auf den Boden – lauter Ritzen« verwendet habe. Kommen solche Wörter vor, werden sie mittels unter den Sonett-Zeilen angebrachter LED-Bänder unterstrichen; wird der Hashtag #schaelpic verwendet ist die Farbe der Unterstreichung das schaelpic-Orange.
Die Ausstellung befand sich in der ↬ schaelpic photokunstbar und lief vom 6. August 2021 bis zum 1. Oktober 2021. In diesem Beitrag schreibe ich darüber, wie ich die Installation technisch umgesetzt habe; der volle Quelltext ist veröffentlicht womit Sie selbst die Möglichkeit haben, ein eigenes t2l einzurichten.

fotografiert von Martin Frech: Funkelnde 𝔽₂-Fragmente (Schrägansicht)

Hardware-Installation. Das im Herbst 2019 geschriebene Sonett passte thematisch zum Ausstellungsthema sowie zum → Schwarzbuch 2020 und wurde folglich auserwählt, auf Kappa-Platten aufgebracht und mit 320 Einheiten des LED-Bands ›YUNBO WS2812B‹ unterstrichen. Die hardwarenahe GPIO-Pin-Ansteuerung des LED-Bands wird von der Python-3-Bibiliothek ›rpi_ws281x‹ übernommen, womit nur noch der Software-Teil zu schreiben ist: 1

Sonett-
Lichterband
   ^
   |
   +------ Python-3-Controller <- Go-Controller
                                        ^
                                        |
   +------------------------------------+
   |
   v                                    Twitter-API-
 Cloud-Backend <----------------------> Endpoint

Die Grundidee ist, einen soliden zu wenig fähigem Client in der Installation anzubringen, welcher wie ein Monitor für das Cloud-Backend agiert. Somit ist die Ausfallwahrscheinlichkeit der Komponenten in der Ausstellung überschaubar gering gehalten und Verhaltensänderungen jeglicher Art sind in der Cloud umsetzbar ohne sich am Ausstellungsort befinden zu müssen. Animationen am LED-Band sind mittels der postmodernen Internetgeschwindigkeit ohne viel Protokoll-Genialität möglich: die 963 Bytes an Farbinformation werden schlicht zehn Mal die Sekunde durch Deutschland gebeamt – und scheinen alle anzukommen.
Dieser Client ist in zwei Sub-Clients aufgeteilt: Das LED-Band wird von einer Python-3-Bibliothek gesteuert, welche mit ein wenig Glue-Code von einem Go-Controller kommandiert wird. Dieser Go-Controller kommuniziert über einen WebSocket mit dem ebenfalls in Go geschriebenen Cloud-Backend.

Pi-Setup. Nach dem Erdenken kommt die Verwirklichung. Es folgt ein Zeitbericht welcher Zugleich als Setup-Anleitung dient falls man selbst einen t2l-Client aufsetzen möchte. 2

Für das t2l-Projekt reinstalliere ich das Himbeerenbetriebssystem: ↬ 2021-05-07-raspios-buster-armhf-lite.zip [abgerufen 2021-07-23] mit dem ↬ Raspberry Pi Imager. Leider ist ssh anscheinend standardmäßig ausgeschaltet. Also krame ich mein HDMI-Kabel heraus, ziehe dem Pi den Stecker, finde eine Tastatur und schalte ssh ein: Login-Name pi, Passwort raspberrz (englisches Layout), sudo systemctl enable ssh && reboot. Den Rest der Konfiguration erledige ich über die sichere Shell.
Um den Pi im lokalen Netz zu finden, nutze ich % nmap -sn 192.168.2.0/24 | grep raspberrypi. Mittels % ssh pi@192.168.2.108 und Passwort raspberry bekomme ich eine Shell auf dem Pi. Das Erste was zu tun ist ist natürlich das Abändern des Passworts ($ sudo passwd pi) und danach den Schlüsselaustausch % ssh-copy-id pi@... zu vollführen.
Auf dem Pi kann man nun $ sudo apt install --assume-yes curl && cd && curl -f#SL https://nzf.medienfrech.de/96/t2l.tar -o t2l.tar && tar -xf t2l.tar && cd t2l && sudo make setup -C t2l-pi ausführen. Dies kann einige Zeit in Anspruch nehmen und sollte den Pi vollständig initialisieren.
Falls das LED-Band bereits mit Strom versorgt und an den richtigen Pin (standardmäßig Pin 18) angeschlossen ist, sollte $ sudo systemctl stop t2l-pi && sudo make -C t2l-pi test-led-strip-controller das Band mit zufälligen Farben füllen.

Der vollständige t2l-Quelltext ist unter der ↬ Expat-Lizenz lizensiert und als GNU-tar-Ball herunterladbar: → t2l.tar

Pinout. Der numerische Wert der Pins (nicht der GPIO-Index) kann der Doku­mentation 3 entnommen werden; wenn die Himbeere aufrecht steht ist das Pin-Layout wie folgt:

        GPIO-18 ---+   +--- Ground
                   v   v
     2  4  6  8 10 12 14 16 18 20 22 ... 40

     1  3  5  7  9 11 13 15 17 19 21 ... 39

Der Wert GPIOPIN in led-strip-controller.py ist standardmäßig 18, also muss das grüne Kabel des LED-Bands mit dem oberen sechsten Pin von links des Pis verbunden werden. Das weiße Kabel des LED-Bands kann mit einem beliebigen Ground-Pin verbunden werden, ich habe mich für den eins rechts daneben entschieden. Das rote Kabel des LED-Bands wird nicht mit dem Pi verbunden, da das LED-Band über ein externes Netzteil eine eigene Strom­ver­sorgung von +5 Volt erhält.

Twitter-API. Das Herzstück der Installation ist der Tweet-Datenfluss welcher über die Twitter-API 4 seinen Weg zum LED-Band findet. Die API-Dokumentation ist vollständig und mit curl-Beispielen erläutert. Einzig die Wahl zwischen JSON-Zahl und -Dezimalzeichenkette schien zwischen den verschiedenen Antworten der API uneinheitlich; ich bin der Überzeugung, dass die API sich im Zeitraum der Aus­stel­lung geändert hat und jetzt nur noch Dezimalzeichenketten schickt (andernfalls kann ich mir einen in der Ausstellungsdauer plötzlich aufgetretenen Fehler nicht erklären). Wenn auch etwas verwunderlich, bewies sich der JSON-Unmarshaller 5 der Go-Standard­bibliothek welchem die Änderung schnell beigebracht war.
Einzig die API-Beschränkung von 500.000 Tweets pro Monat (wobei die Monats­pe­ri­o­de am Tag der Einrichtung des API-Zugangs beginnt) ist nicht auf die leichte Schulter zu nehmen: rechnet man mit einunddreißig Tagen im Monat, so sind das 500000/31/24/60/60 = 0,1867 Tweets in der Sekunde; betrachtet man die laufende Installation, so sieht man eher eine Hand voll Tweets in der Sekunde. Es gilt also, das Back-End intelligent abzuschalten und nicht zu unachtsam Twitter anzufragen.

Zwitschern in der Büchse. Vor Abbau der Installation haben wir ein kleines Video gedreht um die dynamische Natur ihrer einzufangen:

Nach dem Einschalten durchläuft der t2l-Client (links im Video) eine Ini­ti­a­li­sie­rungs­sequenz welche zuerst aufzeigt ob das LED-Band angesteuert werden kann gefolgt von ob das Cloud-Backend antwortet. Danach unterwirft sich der Client gänzlich dem Server. Dieser hat nun vollständige Kontrolle über das LED-Band und beginnt Twitter zu lauschen. Die erlauschten Tweets werden auf der Ausstellungswebsite (rechts im Video) angezeigt, dort orange hervorgehobene Tweets beinhalten den Hashtag #schaelpic. Im Video ist weiter zu sehen, wie die Installation auf von mir verfasste Tweets (rechts in der Mitte, eingeblendet) reagiert.

Lyrisches Herzstück der Installation ist folgendes von mir geschriebenes Sonett.

Ich schau auf den Boden – lauter Ritzen.
Zu meiner Linken sitzt'n Bettler – traurig.
Mir ist heute wirklich nicht nach Witzen.
Ich denk oft an meine Zukunft – schaurig.

Am Job angekomm' stell ich mich an.
Sowie auch sie, er, der Hund und Schrank: stopf
Ein jeder wird mal sterben – doch nur wann?
Alle ins Büro – ich drück 'nen and'ren Knopf.

Die Türe öffnet sich, ich schau runter.
Der Schacht ist tief, so tief, eng und dunkel.
Es nächtigt bald, der Himmel wird bunter.
In meinen Augen ein letztes Funkeln.

Ich hör das sanfte Rascheln der Linden.
Unten werd ich meinen Frieden finden.

Jonathan Frech, 23.10.2019


1
Ein frühes Konzept: → ein-fruehes-t2l-konzept.jpg
2
Entwicklungsnotizen: → t2l-entwicklungsnotizen.jpg
3
↬ raspberrypi.org/documentation/usage/gpio/ [abgerufen 2021-07-24]
4
↬ https://developer.twitter.com/ [abgerufen 2021-10-05]
5
↬ https://pkg.go.dev/encoding/json#Unmarshal [abgerufen 2021-10-06]

Zitierempfehlung:
Frech, Jonathan: t2l. In: Notizen zur Fotografie, 2021-10-14. Online: http://www.medienfrech.de/foto/NzF/2021-10-14/t2l.html [Abrufdatum]