Project: SpaceStateSwitch | |
---|---|
Naam | SpaceStateSwitch |
Door | RickDeckardt |
Status | Afgerond |
Madskillz | madhacks |
Doel / Omschrijving | |
Een coole schakelaar die de spacestate twittert/irc/etc met rudimentaire api | |
Alle Projecten - Project Toevoegen |
Nederlands
Om te weten te komen of de hackerspace open is of niet moet dit snel op te vragen zijn. Sowieso zichtbaar op een webpagina, liefst de voorpagina van hack42.nl, maar twitter en irc zou ook een mooie lokatie zijn om aan te geven wat de status van de space is. Vandaar de SpaceStateSwitch. Hoe dit te doen? In ieder geval met een schakelaar die Mad Scientist Lab-waardig is. Hieronder de implementatie van de rest van de schakelaar.
Hardware
De SpaceStateSwitch is een maakschakelaar (toevallig tweepolig, maar dat is niet niet relevant) die via een relais gekoppeld is aan de tweede ethernetpoort van een Soekris 4511 accesspoint. Sluiten van de schakelaar bekrachtigt het relais; dit verbindt tx+/rx+ en tx-/rx-, waardoor eth1 de link up detecteert. Via een hulpschakeling met 2 NE555's en twee relais (in de groepenkast) schakelt de switch ook de ruimteverlichting. De 555's laten de verlichting vertraagd in- en uitschakelen.
Software
Het Access Point draait linux. Met behulp van cron wordt iedere minuut een statecheck script gestart. wat met ethtool kijkt of eth1 link heeft.
Pseudocode van het statecheck.sh script:
IF connection_state_eth1 eq connected AND laststate eq closed; curl http://user@pass:host/spacestate/setstate.php?state=open IF curl_success; set laststate open IF connection_state_eth1 eq disconnected AND laststate eq open; curl http://user@pass:host/spacestate/setstate.php?state=closed IF curl_success; set laststate closed
'API'-mogelijkheid voor externe apps
- http://hack42.nl/spacestate/state (kan de text open of closed bevatten, handig voor apps)
- http://hack42.nl/spacestate/state.time (bevat de time van de laatste state-change, handig voor apps)
- http://hack42.nl/spacestate/state.csv (bevat date,time,state per regel, handig voor bouwen van graphs)
Tweets
De koppeling naar twitter wordt vanuit het setstate.php script gedaan, dit phpscript twittert de spacestate op @hack42 en past de bovenstaande files aan.
Voor twitter gebruikt setstate.php de twitteroauth module van Abraham https://github.com/abraham/twitteroauth.
Koppeling naar IRC
Op irc://irc.hack42.nl/#hack42 draait een gozerbot met rss-feed plugin Een van de rss-feeds die hij volgt is die van http://twitter.com/hack42, elke minuut kijkt hij naar nieuwe tweets van hack42 en bij een nieuwe tweet hoest hij deze het irckanaal in.
XSS in je eigen webpagina!
setstate.php past ook http://hack42.nl/spacestate aan, dit is een hele simpele pagina geschik voor zo goed als alle browsers, zo ook die op simpele gsm's.
Plak deze code in je webpagina voor de hack42 spacestate-bar
<iframe width="390" height="50" scrolling="no" style="border: none;" src="https://hack42.nl/spacestate/"></iframe>
Growlnotifier door jvhaarst
Knippen en plakken naar hack42notify.sh
#!/bin/bash # Scriptje om een Growl notify te krijgen bij openen (en sluiten) van de space # jvhaarst, 13/2/2011 8h47 # Aangepast door Deckardt # Aangepast jvhaarst 13/2/2011 15h03 # Aangepast jvhaarst 13/2/2011 21h20 (datum van statuswijziging toegevoegd) # Aangepast jvhaarst 13/2/2011 21h50 (datum van statuswijziging uit state.time) # Nodig: # bash # curl # Growl (http://growl.info/) # growlnotify (in extras directory van de Growl dmg) # plaatje van https://hack42.nl/wiki/index.php/Huisstijl # Start debugging from here #set -o xtrace #set -o verbose # variabelen DEBUG=false OLDSTATE="closed" IMAGE=~jvhaarst/bin/code/42/Hack42_white.png # Oneindige loop, iedere 60 sec draait ie while TRUE; do # check op state, ignore 404's, but returm error state CURRENTSTATE=`curl -f -s http://hack42.nl/spacestate/state` CURL_ERROR=$? # debug $DEBUG && echo $CURRENTSTATE # check op verandering if [[ "$CURRENTSTATE" != "$OLDSTATE" && $CURL_ERROR -eq 0 ]];then # Haal tijd van verandering op TIME=`curl -s http://hack42.nl/spacestate/state.time` # Growl de state ! growlnotify -s -m "#42 is $CURRENTSTATE! ("$TIME")" --image $IMAGE # De huidige is de oude, zodat bij we een nieuwe state dat merken (lekker cryptisch, niet ?) OLDSTATE=$CURRENTSTATE fi sleep 60 done
Het icon staat hier :
Opties
Het doorverbinden van tx+/rx+ en tx-/rx- kan behalve met een dubbelpolige schakelaar, ook met een tweepolig maakrelais zoals hier is toegevoegd. Dit kan gestuurd worden met een handmatige (enkelpolige) schakelaar, gekoppeld met de ruimteverlichting, een toegangssysteem of bewegingsmelders.
English
For members and potential guests of the hackersspace who'd like to know if the space is opened or closed before they pop by, we needed a simple method of indicating this. Preferably on the main site http://hack42.nl/, but also on twitter and in our irc channel. The simple method chosen was a SpaceStateSwitch, based on a mad-scientist-lab worthy switch, as depicted above. This is the story of the rest of the technical implementation.
Hardware
The SpaceStateSwitch is an Awesome Switch connected via a DPST relay to the second ethernet port of a Soekris 4511 accesspoint. Closing the switch activates the relay which connects tx+/rx+ and tx-/rx-, causing eth1 to detect link up. Via an auxiliary circuit with two nE555's and two relays the SpaceStateSwitch also controls part of the space lighting. The 555's introduce a short delay between flipping the switch and the lights coming on or going out.
Software
The Access Point runs linux. Using cron the statecheck script is executed each minute; it uses ethtool to check for eth1 link up.
statecheck.sh script in pseudocode:
IF connection_state_eth1 eq connected AND laststate eq closed; curl http://user@pass:host/spacestate/setstate.php?state=open IF curl_success; set laststate open IF connection_state_eth1 eq disconnected AND laststate eq open; curl http://user@pass:host/spacestate/setstate.php?state=closed IF curl_success; set laststate closed
rudimentary 'API' for external apps
- http://hack42.nl/spacestate/state (contains the text 'open' or 'closed', to be read by apps)
- http://hack42.nl/spacestate/state.time (contains the last state-change time, to be read by apps)
- http://hack42.nl/spacestate/state.csv (contains date,time,state per line, for graphing purposes)
Tweets
Twittering the status change to @hack42 is done using setstate.php on the external webserver.
The setstate.php script uses Abrahams twitteroauth module https://github.com/abraham/twitteroauth.
Interface to IRC
irc://irc.hack42.nl/#hack42 runs a gozerbot with rss-feed plugin. One of the feeds is http://twitter.com/hack42, which is checked every minute and echoed into the channel
XSS in your own webpage!
setstate.php also modifies http://hack42.nl/spacestate , a very bare page which can be quickly and easily accessed via almost any phone with internet capabilities.
Paste this code in your webpage to show the hack42 spacestate-bar
<iframe width="390" height="50" scrolling="no" style="border: none;" src="https://hack42.nl/spacestate/"></iframe>
Growlnotifier by jvhaarst
cut and paste to hack42notify.sh
#!/bin/bash # Scriptje om een Growl notify te krijgen bij openen (en sluiten) van de space # jvhaarst, 13/2/2011 8h47 # Aangepast door Deckardt # Aangepast jvhaarst 13/2/2011 15h03 # Aangepast jvhaarst 13/2/2011 21h20 (datum van statuswijziging toegevoegd) # Aangepast jvhaarst 13/2/2011 21h50 (datum van statuswijziging uit state.time) # Nodig: # bash # curl # Growl (http://growl.info/) # growlnotify (in extras directory van de Growl dmg) # plaatje van https://hack42.nl/wiki/index.php/Huisstijl # Start debugging from here #set -o xtrace #set -o verbose # variabelen DEBUG=false OLDSTATE="closed" IMAGE=~jvhaarst/bin/code/42/Hack42_white.png # Oneindige loop, iedere 60 sec draait ie while TRUE; do # check op state, ignore 404's, but returm error state CURRENTSTATE=`curl -f -s http://hack42.nl/spacestate/state` CURL_ERROR=$? # debug $DEBUG && echo $CURRENTSTATE # check op verandering if [[ "$CURRENTSTATE" != "$OLDSTATE" && $CURL_ERROR -eq 0 ]];then # Haal tijd van verandering op TIME=`curl -s http://hack42.nl/spacestate/state.time` # Growl de state ! growlnotify -s -m "#42 is $CURRENTSTATE! ("$TIME")" --image $IMAGE # De huidige is de oude, zodat bij we een nieuwe state dat merken (lekker cryptisch, niet ?) OLDSTATE=$CURRENTSTATE fi sleep 60 done
The icon is here:
Options
Connecting tx+/rx+ and tx-/rx- can be done directly using a DPST switch, but also using a DPST relay. This can be controlled by a SPST switch, an access system, motion sensors or simply hooked up to the room lighting.