====== Infoscreen ======
Der Infoscreen zeigt Dinge an. Darunter: Aktuelle Zeit, Raumstatistik, Abfahrtszeiten ÖPNV Essen Süd & Karolinenstr, aktueller Traffic, Wetter, sonstiger foo.
====== Hardware ======
Der Infoscreen mit einem Raspberry Pi umgesetzt und als Anzeige dient ein altes 17" LCD, das über einen [[http://www.ebay.com/itm/HDMI-Male-to-VGA-RGB-Female-HDMI-to-VGA-Video-Converter-adapter-1080P-for-PC-new-/280964507216|Adapter aus China]] ans Pi angeschlossen ist.
====== Software ======
Die Anzeige läuft als Webseite auf einem lokalen Server (apache2, /etc/apache2/ports.conf nur auf 10.0.0.2 konfiguriert) und läuft mit Chromium im Fullscreen. Die Daten werden von einem Python-Websocket-Server beschafft und stehen im lokalen Netzwerk überall zur Verfügung.
Den aktuell laufenden Quelltext kann man von pi@infoscreen:infoscreen-live.git clonen. Wenn auf das Repository auf dem Infoscreen gepusht wird, startet sich der Server und Chromium automatisch neu.
====== Konfiguration ======
**Irgendwas ändern? Nicht in /var/www/infoscreen rumfummeln, das ist ein Git-Repository!**
Lokale Änderungen sind und gehören in /etc/infoscreen.conf
====== API ======
Die Daten, die auf dem Infoscreen angezeigt werden, stehen auch als Echtzeit-Rohdaten im lokalen Netzwerk zur Verfügung. Dafür einfach per [[http://de.wikipedia.org/wiki/WebSocket|WebSocket]]-Prokoll mit infoscreen:9000 bzw 10.0.0.4:9000 verbinden. Der Server sendet dann JSON-Objekte im folgenden Format:
{
name: 'wetter', // Name des Datenmoduls
time: 123.45, // unixtimestamp-float des Events. (Achtung, die Uhr des Infoscreens spinnt gerne mal.)
data: ... // Daten in Eventabhängiger Syntax, siehe unten.
}
Beim Verbinden wird die letzte Nachricht von jedem Modul gesendet, anschließend bekommt ihr Daten, wenn der Server gerade an neue Daten kommt.
Hier nun die Datenformate der einzelnen Datenmodule:
===== MPD =====
Das Datenmodul mpd
liefert den aktuellen Status unseres MPDs.
{
repeat: false, // True, wenn die Playlist geloopt wird.
random: false, // True, wenn die Playliste in zufälliger Reihenfolge wiedergegeben wird.
state: 'play', // play, stop oder pause
elapsed: 13.37, // Vergangene Sekunden des aktuellen Stücks
current: { ... }, // Aktuell gespieltes Stück (Syntax siehe unten)
next1: { ... }, // Nächstes Stück (funktioniert auch bei Zufallswiedergabe)
next2: { ... } // Übernächstes Stück (Funktioniert nur ohne Zufallswiedergabe)
}
Bitte beachte, dass elapsed
nicht ständig aktualisiert wirst. Du kriegst das Objekt nur wenn sich einer der anderen Werte ändert, oder im Stück umhergesprungen wird.
Und so sieht die Syntax eines Musikstücks aus:
{
album: 'Machine Lullaby', // Albumname (Kann auch mal fehlen, wenn schlecht getaggt)
artist: 'Fear Of Ghosts', // Interpret (Kann auch mal fehlen, wenn schlecht getaggt)
title: 'Machine Lullaby Intro', // Stücktitel (Kann auch mal fehlen, wenn SEHR schlecht getaggt)
hash: '...', // Eindeutige ID des Stücks (String der Syntax ^[a-zA-z0-9_-]$)
time: 13.37, // Dauer des Stücks in Sekunden
cover: '...' // (nur bei current) Albumcover, Bild vom Interpreten oder nocover.jpg (via last.fm-API)
}
===== VRR-Abfahrtszeiten =====
Die nächsten Abfahrten an diversen Haltestellen hier in der Nähe. Realisiert über die API von derf0.
Die Namen der Module lauten vrr-sueds
, vrr-moltke
, vrr-karo
für die Haltestellen Essen Süd, Moltkestraße und Karolinenstraße.
[ // Liste bestehen aus mehreren Elementen der folgenden Form:
{
key: '...', // Eindeutiger Key von genau dieser Fahrt dieser Linie
line: '105', // Linienname
linetype: 'str', // 3-Buchstabiger, str-aßenbahn, uba-hn, sba-hn oder bus
lineroute: 'blabla', // Routenbeschreibung
dest: 'Essen Unterstr.', // Zielhaltestelle
time: '19:42', // Uhrzeit, zu der die Bahn vorr. fährt
delay: '5', // aktuelle Verspätung in Minuten
sched_time: '19:37', // planmäßige Uhrzeit
countdown: '42', // Minuten bis zur vorraussichtlichen Abfahrt
platform: 2, // Bahnsteig/Bussteig
info: 'Achtung Baustelle', // Aktuelle Informationen
cancelled: False // true, wenn die Fahrt ausfällt.
},
...
]
===== IRC =====
Unter irc
findet sich ein aktueller Live-Feed aus unserem Channel #chaospott im hackint. Er nutzt dabei den selben BNC wie der IRC-Bot.
['GlaDOS', 'The Cake is a lie.'] // Nick, Nachricht
Bei Systemnachrichten (XY hat den Channel betreten etc.) ist das erste Element nur '***'
, bei /me
-Nachrichten ist der Nick mit in der Nachricht und das erste Element nur '*'
===== foobar-Raumstatus =====
Unter raumstatus
findet sich der aktuelle Raumstatus der foobar.
[true, '23:42'] // Ob die foobar offen ist und seit wann das so ist.
===== Wetter =====
Unter wetter
werden die aktuellen Wetterdaten von draußen direkt vor unserer Tür geliefert. Quelle ist [[http://openweathermap.org|openweathermap.org]]
[
'weather/night-fullmoon/weather-few-clouds.svg', // Pfad zu aktuellem Wettericon
13, // Temperatur in °C
37.42, // Windrichtung in °
2.3, // Windgeschwindigkeit in km/h
1024, // Luftdruck in hPa
42, // Luftfeuchtigkeit in Prozent
'06:21 – 23:42' // Sonnenauf- und untergang
]
===== Geräte im WLAN =====
Unter nmap
wird die aktuelle Anzahl Geräte im Raum geliefert. **Jetzt wirklich!**
[23] // Anzahl wie diskutiert
===== Aktueller Traffic im Netzwerk =====
Aktueller traffic
auf unserem Netzwerk. Die Daten liefert der Router dem Infoscreen alle 10 Sekunden per collectd.
[1.23, 0.05] // Aktueller Down- und Upspeed in Mbit/s
===== Twitter =====
Aktuelle Tweets an oder von @foobarEv. Jede Nachricht ist eine Liste aus diversen Tweets, per default die der letzten Stunde, mindestens aber die letzten vier. Neue Liste kommt automatisch in Echtzeit, wenn ein Tweet dazu kommt.
[
{
'tid': 12345678, // Tweet-ID
'text': 'Dumdidldum', // Tweet-Text
'name': 'foobar e.V.', // Name
'screen_name': '@foobarEv', // Screen
'user_img': 'irgendwas.png', // Benutzerbild
'media': 'fooo', // Pfad zu getwittertem Bild oder null.
'datetime': 'tolles format', // Datum und Uhrzeit in Menschenlesbarer Form
'seconds': 314159265 // Timestamp des Tweets, glaub ich
},
[…] // und noch mehr tweets…
]
===== Imagerotate =====
Hübsche Bilder, regelmäßig mal ein neues.
['lalala.png'] // Pfad zum Bild