Difference between revisions of "Space state"

From Hackerspace ACKspace
Jump to: navigation, search
(added category)
(added fuse group)
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
{{Project
 
{{Project
|State=Completed, Fixed
+
|Featured=No
|Members=Vicarious, xopr ( CoolePascal ), Prodigity
+
|State=Completed
 +
|Members=Vicarious, xopr, Coolepascal, Prodigity
 
|Description=Show the current state (open or closed) of our space
 
|Description=Show the current state (open or closed) of our space
 +
|Picture=Spacestate_closed.jpg
 
}}
 
}}
 
 
=== current implementation ===
 
=== current implementation ===
 
See [[ESP8266-SpaceState]] and [[SpaceAPI]].
 
See [[ESP8266-SpaceState]] and [[SpaceAPI]].
 +
The space state is connected to fuse group [[Fuse group::A]].
  
 
=== previous version ===
 
=== previous version ===
Line 32: Line 34:
  
 
==== code ====
 
==== code ====
<pre>
+
<div class="mw-collapsible mw-collapsed" id="mw-customcollapsible-spacestate_py">
 +
==== spacestate.py ====
 +
<div class="mw-customtoggle-spacestate_py mw-code">Click here to view the source code</div>
 +
<pre class="mw-collapsible-content">
 
#!/usr/bin/python
 
#!/usr/bin/python
 
import time, urllib2
 
import time, urllib2
Line 55: Line 60:
 
         time.sleep(10) # Poll every 10 seconds..
 
         time.sleep(10) # Poll every 10 seconds..
 
</pre>
 
</pre>
 
+
</div>
==== todo ====
 
* Insert <strike>python code and</strike> /etc/init.d/*.sh code
 
* Picture of current setup
 
 
 
 
 
----
 
  
 
=== first version ===
 
=== first version ===
Line 71: Line 70:
 
==== software ====
 
==== software ====
 
This is the perl script that does the thing on te Mac (note that this code is not yet the actual running version)
 
This is the perl script that does the thing on te Mac (note that this code is not yet the actual running version)
<pre>
+
<div class="mw-collapsible mw-collapsed" id="mw-customcollapsible-spacestate_pl">
 +
==== spacestate.pl ====
 +
<div class="mw-customtoggle-spacestate_pl mw-code">Click here to view the source code</div>
 +
<pre class="mw-collapsible-content">
 
   #!/usr/bin/perl -wT
 
   #!/usr/bin/perl -wT
 
   # Title    : spacestate.pl
 
   # Title    : spacestate.pl
Line 114: Line 116:
 
   }
 
   }
 
</pre>
 
</pre>
 +
</div>
  
 
Here to put the php script running on the webserver.
 
Here to put the php script running on the webserver.
Line 123: Line 126:
  
 
==== pics or it didn't happen ====
 
==== pics or it didn't happen ====
 +
 
<gallery>
 
<gallery>
 
Image:Spacestate switch.jpg|Spacestate switch
 
Image:Spacestate switch.jpg|Spacestate switch
 
Image:Spacestate closed.jpg|Spacestate closed
 
Image:Spacestate closed.jpg|Spacestate closed
 
Image:Spacestate open.jpg|Spacestate open
 
Image:Spacestate open.jpg|Spacestate open
<gallery>
+
</gallery>
 +
 
 +
Location: [[Location::hACKspace]] (between the two doors)
 
[[Category:SpaceAPI]]
 
[[Category:SpaceAPI]]

Revision as of 16:59, 16 January 2018

Project: Space state
Featured: No
State Completed
Members Vicarious, xopr, Coolepascal, Prodigity
GitHub No GitHub project defined. Add your project here.
Description Show the current state (open or closed) of our space
Picture
Spacestate closed.jpg

current implementation

See ESP8266-SpaceState and SpaceAPI. The space state is connected to fuse group A.

previous version

notes

A php script now periodically runs on the server to check when the spacestate has last been set;
if it is has been longer then 5 minutes it sets the state to "?".
This has been done to prevent power outages and loss of internet connection leaving an incorrect state.

hardware

Vicarious and Prodigity have revived the SpaceState switch; It now uses a raspberry pi.

The raspberry pi is currently running a python daemon which reads a GPIO pin every 10 seconds. This GPIO pin is connected to one end of the switch and a ground connection from the GPIO header is connected to another. When the switch is in the 'off' position the GPIO pin gets pulled up to +3.3v with the help of a 10K resistor, otherwise (when the switch is 'on') the GPIO pin gets pulled down.

The python script uses the RPi.GPIO, urllib2 and time library to accomplish its task. RPi.GPIO is used to easily read the GPIO pins from within python. urllib2 is used to post the spacestate to the website. Time is used to limit the amount of GPIO polls and more importantly, to limit the amount of network traffic.

code

spacestate.py

Click here to view the source code
#!/usr/bin/python
import time, urllib2
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(18, GPIO.IN)

# Check space switch for ever and ever ....
while 1:
        input_value = GPIO.input(18)
        if input_value == 1: # Space closed
                try:
                        bla = urllib2.urlopen('..')
                except:
                        print "Couldn't connect.."
        else:                # Space open
                try:
                        bla = urllib2.urlopen('..')
                except:
                        print "Couldn't connect.."
        print input_value # for debugging purposes..
        time.sleep(10) # Poll every 10 seconds..

first version

The SpaceState switch is working fine now. This is how it's done:

hardware

We found a huge power switch which we mounted to the space wall this switch is connected with a cable to the Space-Mac using an serial to usb converter. On the Mac a perl scripts reads the space state. If the space-state changes, the perlscripts uses wget to call an php script on the ACKspace website. The php scripts sets an space-state variable in a file. The same script is used to read the space-state variable and show the status on the webpage.

software

This is the perl script that does the thing on te Mac (note that this code is not yet the actual running version)

spacestate.pl

Click here to view the source code
   #!/usr/bin/perl -wT
   # Title    : spacestate.pl
   # Function : read spacestate switch en set action accordingly
   # Author   : Pascal Schiks (C) 2011

   #
   my $serialdev="/dev/tty.PL2303-000061FD";
   
   use strict;
   use IO::Handle;
   use Fcntl;

   my $TIOCMGET = 0x5415;

   my $spacestate=0;
   my $lastspacestate=$spacestate;
   while(1)
   {
      if(sysopen(SERIAL, $serialdev, O_RDWR))
      {
         my $mdmctl="";
         my $ioresult;
         unless(($ioresult=ioctl(SERIAL,  $TIOCMGET, $mdmctl))==-1)
         {
            $mdmctl = unpack('i',$mdmctl);
            $spacestate = ($mdmctl&64)==0 ? "open":"close";
            print "$spacestate\n" if($spacestate ne $lastspacestate);
         }
         else
         {
            print "Weet ik veel Error\n";
         }
         close(SERIAL);
         $lastspacestate = $spacestate;
      }
      else
      {
         print "Error, Could not open $serialdev\n";
      }
      sleep(1);
   }

Here to put the php script running on the webserver.

  <?php
      some code
  ?>

pics or it didn't happen

Location: hACKspace (between the two doors)