Denne siden er arkivert, og kan inneholde utdatert, gammel eller feil informasjon.
Infotavler
Samfundet har besluttet å gå til anskaffelse av infotavler, i denne noden ønsker vi å samle litt krav vi setter til systemet, både programvare og maskinvare.
Maskinvare
Baserer oss så langt på Asus Pundit-R (RS200) da disse har VGA, DVI, S-Video og Composit-utgang. Dette gjør oss lite bundet til hva slags medie vi ønsker å kjøre på.
Så langt har vi anskaffet følgende skjermer:
- 40" LCD fra QPVision, montert i Edgar
- ?" LCD fra ?, montert i Lyche (donnert fra Adressa og skal ha Adressa-RSS)
- ?" LCA fra ?, monter bak baren i Lyche
Programvare
show er ikke lenger i bruk på Samfundet. Informasjonen under er kun historisk og mulgiens til nytte om noen finner ut at skjermene skal opp igjen.
Samfundets nåværende infoskjermsystem er utviklet her på huset og tilpasset våre behov. De viktigste featurene til systemet er innhenting av RSS, iCal, visning av statisk tekst og bilder.
Systemet er bygget opp av følgende komponenter:
- Cron-jobb for innhenting av oppdateringer
- Klienter som er satt opp med minimal pywebkit nettleser via Puppet
- Backendsystem i Django på http://show.samfundet.no/
Cron
En cron-jobb i /etc/cron.d/show som kjører ti på halv og hel time henter inn oppdateringer. Per i dag er det bare iCal- og feed-innhenting som blir gjort.
Feed-koden prøver å sjekke HTTP-headerne "Not-Modified" og "E-Tag" når den ber om feeder. iCal-koden gjør ikke noe slikt enda (og www.samfundet.no sin iCal støtter det heller ikke).
Klienter
show-klienter er utrolig enkelt satt opp :) De er en minimal Debian etch-instalalsjon med X, pywebkit som kjører i fullscreen, en cron-jobb samt noen andre små programmer. For full oversikt over hva som inngår se Puppet-klassen show-node.
XHTML+CSS+JavaScript
Visningen drives av show.js som bruker Prototype for å slippe å slåss med for mye browser quirks og lignende.
Merk at ting styres av show.css og style.css, hvor show.css inneholder et generelt stilsett mens style.css er site-spesifikt. CSS-stilene er avhengige av hvorvidt <body> har CSS-klassen show, f.eks:
.show #head { postition: absolute; top: 0; } .show #foot { postition: absolute; bottom: 0; }
CSS-en sørger videre for at det kunne er <div id="splash"> som vises ved oppstart i show-modus inntil JavaScript-koden bytter slide.
JavaScript-koden sjekker også om vi er i show-modus. Om dette er tilfellet gjør den følgende:
- Sjekk at vi fikk lastet de eksterne scriptene (prøv igjen om det feiler)
- Installer event handlers
- Fiks bilder og tekststørrelse på alle element med klasse page
- Sjekk om siden er for gammel og at vi har sider å vise
- Sett timeout for når splash-screenen skal fjernes og showet startes
Backend
Måten ting henger sammen intern kan grovt sett forklares med følgende ASCII-art:
+------+ +-----+ +--------+ | show |---+->| foo |------->| ical-1 | +------+ | +-----+ /+--------+ ^ | ,---` | | +-----+ / +-------+ | +->| bar |------->| rss-1 | | | +-----+ +-------+ | | | | +-----+ +-----+ | +->| baz |------->| ... | | +-----+ +-----+ +--------+ | maskin | +--------+
Litt mer forklaring er sikkert greit; maskiner mappes opp mot show ved at en maskin går inn på URL-en /h/<hostnavn>. Koblingen til show brukes til å finne hvilke katgorier showet består av. Alle sidene hentes fra kategoriene.
Show består idag av følgende moduler/Django-apps:
- common
- inneholder show, kategorier og maskiner samt plugin-koden
- page
- gir støtte for statisk infotekst formatert med Markdown, samt ett bilde
- image
- fullscreen bildevisning
- feed
- import av RSS/Atom-feeds ved hjelp av feedparser
- ical
- innhenting av iCal-eventer vha. vobject
- weather
- henter værvarsel fra yr.no
Mesteparten av show sin backend er bygget med helt standard Django og burde være fint forståelig om man først leser gjennon følgende tutorial. Plugin-systemet som er brukt trenger nok litt mer forklaring ettersom det er egenutviklet for formålet.
La oss begynne med det enkle, å legge til en plugin gjøres med følgende kode:
from show.common.models import plugins class FooBar(models.Model) .... plugins.add(FooBar)
Plugin-systemet utvider så klassen med en mange-til-mange kobling til kategorier, sist modifisert dato, opprettet dato og varighet (kan slås av med kwargs til add()). Når vi skal vise et show, brukes plugin-systemet sin metode plugins.all(categories), som gjør et oppslag i f.eks. FooBar.objects.filter(categories__in=[1,2,3]) (fremmednøkkelen som slås opp mot kan endres via kwargs til add()).
Ved oppdatering sjekker vi alle pluginene som er registrert og kjører metoden update() på alle objektene som finnes.
Avhengigheter
- python-django
- python-psycopg2
- python-feedparser
- python-markdown
- python-beautifulsoup
- python-vobject
- python-dateutil
Gammel kravspek
Samfundet kjørte phunky, utviklet av apario.net ved BTD (Bjørn Torkel Dahl elns). Under testperioden kom vi frem til følgende krav systemet må oppfylle.
Kunstnerisk del
- Enkel opplasting av bakgrunnsbilde for å stille inn standardbakgrunn, spesiell for en slide og generell bildevisning.
- Mulighet for video, ikke et must, men kjekt.
- Enkel redigering av slides for de arrangerende gjengene.
- Mulig å isolere hva som skal kjøres på hver enkelt skjerm, gjerne kategori inndeling.
- Isolere hva hver enkelt bruker skal kunne tafse på av informasjon som skal ut.
- Stille varighet av slide, og enkeltvis.
Brukergrensesnitt
- Kunne slette slide fra et eventuelt grensesnitt helt.
- Sette rekkefølge på slidene innenfor en kategori.
- Prioritere kategoriene, her også panicløsning.
Teknisk del
- Lukket binærløsning på servere er ikke ønskelig.
- Om det benytter webløsning, skal fungere med Debian Apache2 uten mye styr.
- Om det benytter en database, skal benytte PostgreSQL.
- Skal helst kjøre på Linux på server- og klient-side, da dette oppleves som enklere å administrere.
- Må sikkerhetsvedlikeholdes av de som leverer systemet
- Driftssikkert
- Må starte opp automagisk med boksen uten interaksjon
- Skal fungere uten nett, skal da rullere det som var tilgjengelig av informasjon etter siste polling fra serveren.
- Ønskelig med tilknytning til brannsentralen for å få denne til å sende ut brannmelding på alle skjermene.
- Lesing av RSS feed fra Adresseavisa, som skal kjøres prioritert 2 minutter hvert 15. minutt på valgte skjermer.
Ønsker
- Vise hvilken sang som spiller i Edgar
Nye forslag fra LIM
Lenker: Start
Epost: itk@samfundet.no | Telefon: 992 15 925 | Sist endret: 2020-10-06 11:10 | Revisjon: 24 (historie, blame) | Totalt: 1905 kB | Rediger