Talk:OpenDuino
From syn2cat - HackerSpace.lu
(Difference between revisions)
(made the "interface" (ie. the LEDs) more responsive) |
m |
||
Line 89: | Line 89: | ||
dialup(); | dialup(); | ||
} | } | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | == Server part I == | ||
+ | |||
+ | <pre> | ||
+ | <?php | ||
+ | |||
+ | |||
+ | try{ | ||
+ | checkHostname(); | ||
+ | setStatus(); | ||
+ | respond(); | ||
+ | } catch (Exception $e) { | ||
+ | print($e->getMessage()); | ||
+ | } | ||
+ | |||
+ | |||
+ | /* functions */ | ||
+ | function checkHostname(){ | ||
+ | $hostname = 'openduino.dyndns.org'; | ||
+ | $ip = $_SERVER['REMOTE_ADDR']; | ||
+ | if($ip != gethostbyname($hostname)) | ||
+ | throw new Exception("Sorry dude, wrong ip!"); | ||
+ | } | ||
+ | |||
+ | function setStatus(){ | ||
+ | $status = $_GET['status']; | ||
+ | if($status != "0" && $status != "1") | ||
+ | throw new Exception('No valid status given!'); | ||
+ | $file = '/var/www/hackerspace.lu/open/status'; | ||
+ | if(file_exists($file) && is_writeable($file)) | ||
+ | file_put_contents($file,$status); | ||
+ | else throw new Exception("Status file not writeable!"); | ||
+ | } | ||
+ | |||
+ | function respond(){ | ||
+ | print('ok'); | ||
+ | } | ||
+ | |||
+ | ?> | ||
+ | </pre> | ||
+ | |||
+ | == Server part II (MW extension) == | ||
+ | |||
+ | <pre> | ||
+ | <?php | ||
+ | |||
+ | /** | ||
+ | * Todo: Refactor | ||
+ | */ | ||
+ | |||
+ | $wgExtensionFunctions[] = "OpenDuino"; | ||
+ | |||
+ | // Extension credits that show up on Special:Version | ||
+ | $wgExtensionCredits['parserhook'][] = array( | ||
+ | 'name' => 'OpenDuino', | ||
+ | 'author' => '[http://david.raison.lu David Raison]' , | ||
+ | 'url' => 'http://www.hackerspace.lu/wiki/OpenDuino', | ||
+ | 'description' => 'OpenDuino is a hard- and software solution to notify site visitors of the hackerspace occupation status' | ||
+ | ); | ||
+ | |||
+ | /* global vars */ | ||
+ | $projectLink = '<a href="OpenDuino">*</a>'; | ||
+ | |||
+ | function OpenDuino(){ | ||
+ | global $wgParser; | ||
+ | $wgParser->setHook('openduino', 'ShowOpenDuinoStatus'); | ||
+ | } | ||
+ | |||
+ | function ShowOpenDuinoStatus(){ | ||
+ | global $wgOpenDuinoFile; | ||
+ | $status = readStatusFile($wgOpenDuinoFile); | ||
+ | if($status == 1) | ||
+ | return displayLightOn(); | ||
+ | elseif($status == 0) | ||
+ | return displayLightOff(); | ||
+ | else | ||
+ | return displayError(); | ||
+ | return true; | ||
+ | } | ||
+ | |||
+ | function readStatusFile($file){ | ||
+ | if(file_exists($file) && is_readable($file)) | ||
+ | return file_get_contents($file); | ||
+ | } | ||
+ | |||
+ | function displayLightOn(){ | ||
+ | global $wgParser, $projectLink; | ||
+ | $output = '<div style="width:90%;height:40px;border:1px dashed navy;padding: 20px 5px 0px 40px;' | ||
+ | .'background:#ffffff url(/w/thumb.php?f=LightOn.svg&width=32) left no-repeat;">' | ||
+ | .'The hackerspace is currently open. Come on in!' | ||
+ | .' '.$projectLink | ||
+ | .'</div>'; | ||
+ | return $output; | ||
+ | } | ||
+ | |||
+ | function displayLightOff(){ | ||
+ | global $wgParser, $projectLink; | ||
+ | //$link = "[[OpenDuino|*]]"; | ||
+ | //$projectLink = $wgParser->parse($link,new Title(), new ParserOptions(),true,true)->getText(); | ||
+ | $output = '<div style="width:90%;height:40px;border:1px dashed navy;padding: 20px 5px 0px 40px;' | ||
+ | .'background:#ffffff url(/w/thumb.php?f=LightOff.svg&width=32) left no-repeat;">' | ||
+ | .'The hackerspace is currently unoccupied. Check back later!' | ||
+ | .' '.$projectLink | ||
+ | .'</div>'; | ||
+ | return $output; | ||
+ | } | ||
+ | |||
+ | function displayError(){ | ||
+ | global $wgParser, $projectLink; | ||
+ | $output = '<div style="width:90%;height:50px;border:1px dashed navy;padding: 20px 5px 0px 40px;' | ||
+ | .'background:#ffffff url(/w/thumb.php?f=Attention.png&width=32) left no-repeat;">' | ||
+ | .'There was an error reading the Hackerspace status.<br/>You should probably contact an office member.' | ||
+ | .' '.$projectLink | ||
+ | .'</div>'; | ||
+ | return $output; | ||
} | } | ||
</pre> | </pre> |
Revision as of 13:52, 25 September 2009
temporary storage for source code of arduino part:
#include <Ethernet.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 192, 168, 1, 99 }; byte gateway[] = { 192 ,168 ,1 ,254 }; byte subnet[] = { 255, 255, 255, 0 }; boolean open = false; //byte server_ip[] = {74, 125, 127, 100}; //google byte server_ip[] = { 80, 90, 47, 170 }; //hackerspace.lu //byte server_ip[] = { 192, 168, 1, 65 }; char request[300] = "GET /OpenDuino.php?status=0 HTTP/1.0"; //char request[300] = "GET /index.html HTTP/1.0"; unsigned long time = 0; unsigned long oldtime = 0; unsigned long trigger_oldtime = 0; //Server server(1337); void setup() { Ethernet.begin(mac, ip, gateway, subnet); //server.begin(); Serial.begin(9600); lights(); // connect once on launch dialup(); oldtime = millis(); } void dialup() { Client client(server_ip,80); Serial.println("Connecting..."); Serial.println(request); if( client.connect() ){ client.println(request); client.println(); } else { Serial.println("Connection failed."); } //*/ if(client.available()) { char c = client.read(); Serial.println(c); } //*/ client.stop(); } void lights() { if( open ) { digitalWrite(7,HIGH); digitalWrite(5,LOW); } else { digitalWrite(7,LOW); digitalWrite(5,HIGH); } } void loop() { time = millis(); // read the switch state if(digitalRead(0) == 0) { if( time - trigger_oldtime > 1000 || time - trigger_oldtime < 0 ) { trigger_oldtime = time; Serial.println("Changing state."); open = !open; request[26] = (int)open+48; lights(); dialup(); } } // send regular updates if( time-oldtime > 300000 || time - oldtime < 0 ) { oldtime = time; dialup(); } }
Server part I
<?php try{ checkHostname(); setStatus(); respond(); } catch (Exception $e) { print($e->getMessage()); } /* functions */ function checkHostname(){ $hostname = 'openduino.dyndns.org'; $ip = $_SERVER['REMOTE_ADDR']; if($ip != gethostbyname($hostname)) throw new Exception("Sorry dude, wrong ip!"); } function setStatus(){ $status = $_GET['status']; if($status != "0" && $status != "1") throw new Exception('No valid status given!'); $file = '/var/www/hackerspace.lu/open/status'; if(file_exists($file) && is_writeable($file)) file_put_contents($file,$status); else throw new Exception("Status file not writeable!"); } function respond(){ print('ok'); } ?>
Server part II (MW extension)
<?php /** * Todo: Refactor */ $wgExtensionFunctions[] = "OpenDuino"; // Extension credits that show up on Special:Version $wgExtensionCredits['parserhook'][] = array( 'name' => 'OpenDuino', 'author' => '[http://david.raison.lu David Raison]' , 'url' => 'http://www.hackerspace.lu/wiki/OpenDuino', 'description' => 'OpenDuino is a hard- and software solution to notify site visitors of the hackerspace occupation status' ); /* global vars */ $projectLink = '<a href="OpenDuino">*</a>'; function OpenDuino(){ global $wgParser; $wgParser->setHook('openduino', 'ShowOpenDuinoStatus'); } function ShowOpenDuinoStatus(){ global $wgOpenDuinoFile; $status = readStatusFile($wgOpenDuinoFile); if($status == 1) return displayLightOn(); elseif($status == 0) return displayLightOff(); else return displayError(); return true; } function readStatusFile($file){ if(file_exists($file) && is_readable($file)) return file_get_contents($file); } function displayLightOn(){ global $wgParser, $projectLink; $output = '<div style="width:90%;height:40px;border:1px dashed navy;padding: 20px 5px 0px 40px;' .'background:#ffffff url(/w/thumb.php?f=LightOn.svg&width=32) left no-repeat;">' .'The hackerspace is currently open. Come on in!' .' '.$projectLink .'</div>'; return $output; } function displayLightOff(){ global $wgParser, $projectLink; //$link = "[[OpenDuino|*]]"; //$projectLink = $wgParser->parse($link,new Title(), new ParserOptions(),true,true)->getText(); $output = '<div style="width:90%;height:40px;border:1px dashed navy;padding: 20px 5px 0px 40px;' .'background:#ffffff url(/w/thumb.php?f=LightOff.svg&width=32) left no-repeat;">' .'The hackerspace is currently unoccupied. Check back later!' .' '.$projectLink .'</div>'; return $output; } function displayError(){ global $wgParser, $projectLink; $output = '<div style="width:90%;height:50px;border:1px dashed navy;padding: 20px 5px 0px 40px;' .'background:#ffffff url(/w/thumb.php?f=Attention.png&width=32) left no-repeat;">' .'There was an error reading the Hackerspace status.<br/>You should probably contact an office member.' .' '.$projectLink .'</div>'; return $output; }