Difference between revisions of "Project:Tool Access Control/Solexious Proposal"

From London Hackspace Wiki
Jump to navigation Jump to search
(Corrected the use of the status posts so that they include the card ID as appropriate)
 
(13 intermediate revisions by 2 users not shown)
Line 21: Line 21:
 
I have made a prototype shield for testing code while the full design remains to be tested and produced. http://www.flickr.com/photos/solexious/6865500239/
 
I have made a prototype shield for testing code while the full design remains to be tested and produced. http://www.flickr.com/photos/solexious/6865500239/
  
Design for the full ACNode at: https://github.com/solexious/ACNode
+
Design for the full ACNode at: https://github.com/solexious/ACNode Embedded code at: https://github.com/solexious/ACNodeEmbedCode
  
Incomplete implementation of server side is hosted here: https://github.com/asokoloski/tacserv
+
The server side component is now complete - it's available at https://github.com/mentarus/acserver and a test version of the code is running on babbage on port 1234. See https://github.com/mentarus/acserver/blob/master/application/controllers/api.php for usage examples.
 
 
Incomplete python version: https://github.com/londonhackspace/ACNode
 
  
 
==Network protocol==
 
==Network protocol==
Line 31: Line 29:
  
 
===Get card permissions===
 
===Get card permissions===
'''GET /[nodeID]/card/'''
+
'''GET /[nodeID]/card/[cardID]'''
  
 
i.e.
 
i.e.
Line 44: Line 42:
  
 
===Add card===
 
===Add card===
'''POST /[nodeID]/grant-to-card/[card_being_granted_to]/by/[card_with_admin_permissions]'''
+
'''POST /[nodeID]/grant-to-card/[card_being_granted_to]/by-card/[card_with_admin_permissions]'''
  
 
i.e.
 
i.e.
* POST /1/grant-to-card/04FF7922E40080/by/04FF792AAAAAA
+
* POST /1/grant-to-card/04FF7922E40080/by-card/04FF792AAAAAA
  
 
returns
 
returns
Line 53: Line 51:
 
* 1 - card added
 
* 1 - card added
  
''STATUS: Done - but not yet tested''
+
''STATUS: Done''
  
 
===Check DB sync===
 
===Check DB sync===
Line 78: Line 76:
  
 
''STATUS: Done - tested on UI, but not with ACNode''
 
''STATUS: Done - tested on UI, but not with ACNode''
 +
''NOTE: Due to CodeIgniter REST limitations, the ACNode code will have to strip any leading and trailing quote characters from the card.'' 04FF7922E40080 is incorrectly returned as '04FF7922E40080', and the quotes must be stripped off if supplied
  
 
===Report tool status===
 
===Report tool status===
Line 83: Line 82:
  
 
i.e.
 
i.e.
* PUT /1/status/0
+
* POST /1/status/0/by/04FF7922E40080
  
 
* 0 - out of service
 
* 0 - out of service
Line 92: Line 91:
 
* 1 - saved
 
* 1 - saved
  
''STATUS: Not yet done''
+
''STATUS: Done - tested on UI, but not with ACNode''
 +
 
 +
''QUESTION: should any user be able to take a tool out of service? Should it even require a card ID?''
  
 
===Check tool status===
 
===Check tool status===
Line 103: Line 104:
 
* 1 - in service
 
* 1 - in service
  
''STATUS: Done - tested on UI, but not with ACNode''
+
''STATUS: Done''
  
 
===Tool usage (live)===
 
===Tool usage (live)===
'''POST /[nodeID]/tooluse/[status]/by/[cardID]'''
+
'''POST /[nodeID]/tooluse/[status]/[cardID]'''
  
 
i.e.
 
i.e.
Line 119: Line 120:
 
* 1 - saved
 
* 1 - saved
  
''STATUS: Not yet done''
+
''STATUS: Done''
  
 
===Tool usage (usage time)===
 
===Tool usage (usage time)===
Line 131: Line 132:
 
* 1 - saved
 
* 1 - saved
  
''STATUS: Not yet done''
+
''STATUS: Done - tested on UI, but not with ACNode''
  
 
===Case alert===
 
===Case alert===
Line 137: Line 138:
  
 
i.e.
 
i.e.
* PUT /1/case/1
+
* POST /1/case/1
  
 
Alert if the ACNode case is opened
 
Alert if the ACNode case is opened
Line 148: Line 149:
  
  
''STATUS: Not yet done''
+
 
 +
''STATUS: Done - tested on UI, but not with ACNode''

Latest revision as of 04:45, 18 July 2014

(ACN refers to Access Control Node, a physical node attached to a tool)

I plan to

  • Base the device on the Duemilanove arduino as it fits our needs and has a wide base of users.
  • Use the wiznet chip for ethernet support
  • Use i2c sm030 rfid readers
  • allow different control outputs (relay, Darlington, servo control etc)
  • use eeprom memory for internal storage

Services

Mission critical

These must function without networking or main server available:

  • Check if card in ACN local db and allow use if is
  • Set tool into "out of order" mode

Non critical

  • Add cards
  • Report back to central server (usage etc)

Progress

I have made a prototype shield for testing code while the full design remains to be tested and produced. http://www.flickr.com/photos/solexious/6865500239/

Design for the full ACNode at: https://github.com/solexious/ACNode Embedded code at: https://github.com/solexious/ACNodeEmbedCode

The server side component is now complete - it's available at https://github.com/mentarus/acserver and a test version of the code is running on babbage on port 1234. See https://github.com/mentarus/acserver/blob/master/application/controllers/api.php for usage examples.

Network protocol

This is mostly RESTful, but not entirely because we're using text/plain (for the small atmega). In particular, the /sync request could actually use /card with weird Range headers, but that's pretty awkward. It should be easy to upgrade to a full JSON or hypertext system.

Get card permissions

GET /[nodeID]/card/[cardID]

i.e.

  • GET /1/card/04FF7922E40080

returns

  • 0 - no permissions
  • 1 - user
  • 2 - maintainer

STATUS: Done

Add card

POST /[nodeID]/grant-to-card/[card_being_granted_to]/by-card/[card_with_admin_permissions]

i.e.

  • POST /1/grant-to-card/04FF7922E40080/by-card/04FF792AAAAAA

returns

  • 0 - card not added
  • 1 - card added

STATUS: Done

Check DB sync

GET /[nodeID]/sync/

Returns first card in db

i.e.

  • GET /1/sync/

returns the first card in the DB i.e.

  • 04FF7922E40080

GET /[nodeID/sync/[last received card]/

i.e.

  • GET /1/sync/04FF7922E40080/

returns either the next card in DB i.e.

  • 03FF7922FF008F

or when out of cards returns

  • END


STATUS: Done - tested on UI, but not with ACNode NOTE: Due to CodeIgniter REST limitations, the ACNode code will have to strip any leading and trailing quote characters from the card. 04FF7922E40080 is incorrectly returned as '04FF7922E40080', and the quotes must be stripped off if supplied

Report tool status

POST /[nodeID]/status/[new_status]/by/[cardWithAdminPermissions]

i.e.

  • POST /1/status/0/by/04FF7922E40080
  • 0 - out of service
  • 1 - in service

returns

  • 0 - not saved
  • 1 - saved

STATUS: Done - tested on UI, but not with ACNode

QUESTION: should any user be able to take a tool out of service? Should it even require a card ID?

Check tool status

GET /[nodeID]/status/

Check if the ACNode has been remotely taken out of service, or put back in service

returns

  • 0 - out of service
  • 1 - in service

STATUS: Done

Tool usage (live)

POST /[nodeID]/tooluse/[status]/[cardID]

i.e.

  • POST /1/tooluse/0/04FF7922E40080

Status is one of:

  • 0 - tool use stopped
  • 1 - tool in use

returns

  • 0 - not saved
  • 1 - saved

STATUS: Done

Tool usage (usage time)

POST /[nodeID]/tooluse/time/for/[cardID]/[timeUsed]

i.e.

  • POST /1/tooluse/time/for/04FF7922E40080/34000

returns

  • 0 - not saved
  • 1 - saved

STATUS: Done - tested on UI, but not with ACNode

Case alert

POST /[nodeID]/case/change/[new_status]

i.e.

  • POST /1/case/1

Alert if the ACNode case is opened

  • 0 - case closed
  • 1 - case opened

returns

  • 0 - not saved
  • 1 - saved


STATUS: Done - tested on UI, but not with ACNode