Projects | |
---|---|
name | Infoscreen |
status | stable |
description | Ein Infoscreen der Dinge anzeigt |
maintainer | noc |
location | Irgendwo im 1. OG |
Projects | |
---|---|
name | Infoscreen |
status | stable |
description | Ein Infoscreen der Dinge anzeigt |
maintainer | noc |
location | Irgendwo im 1. OG |
Der Infoscreen zeigt Dinge an. Darunter: Aktuelle Zeit, Raumstatistik, Abfahrtszeiten ÖPNV Essen Süd & Karolinenstr, aktueller Traffic, Wetter, sonstiger foo.
Der Infoscreen mit einem Raspberry Pi umgesetzt und als Anzeige dient ein altes 17„ LCD, das über einen Adapter aus China ans Pi angeschlossen ist.
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.
Irgendwas ändern? Nicht in /var/www/infoscreen rumfummeln, das ist ein Git-Repository!
Lokale Änderungen sind und gehören in /etc/infoscreen.conf
Die Daten, die auf dem Infoscreen angezeigt werden, stehen auch als Echtzeit-Rohdaten im lokalen Netzwerk zur Verfügung. Dafür einfach per 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:
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) }
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. }, ... ]
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
'*'
Unter
raumstatus
findet sich der aktuelle Raumstatus der foobar.
[true, '23:42'] // Ob die foobar offen ist und seit wann das so ist.
Unter
wetter
werden die aktuellen Wetterdaten von draußen direkt vor unserer Tür geliefert. Quelle ist 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 ]
Unter
nmap
wird die aktuelle Anzahl Geräte im Raum geliefert. Jetzt wirklich!
[23] // Anzahl wie diskutiert
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
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… ]
Hübsche Bilder, regelmäßig mal ein neues.
['lalala.png'] // Pfad zum Bild