Uit Hack42
Ga naar: navigatie, zoeken
Project: SpaceStateSwitch
Schroefje24.png
Schroefje24.png
Schroefje24.png
Schroefje24.png
SpaceStateSwitch Picture.jpg

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
File:SpaceStateSwitch_Picture.jpg noez

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

Soekris ap.jpg

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

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 :

Hack42 white.png

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

Soekris ap.jpg

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

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:

Hack42 white.png

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.