Inhaltsverzeichnis

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 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 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 ([[http://de.wiktionary.org/wiki/drau%C3%9Fen|draußen]])

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
  ]

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