Figarov2

Aus PILARKTO.ORG Open Laboratory e.V.
Wechseln zu: Navigation, Suche
Figaro v2
Projektstart 2012/03/13
Projektleiter Benedikt.schumm
Betreuer Philippe.Käufer
Status Planing
Projektname Figaro ( V2 )
Bildbeschribung Figaro v2

Inhaltsverzeichnis

Figaro V2

Figaro v2 ist ein neudesign von Figaro


Projektbeschreibung

Figaro in der Version 2 greift die Grundidee des ursprünglichen Figaro Projektes auf. Soll jedoch generelle Ansteuerung von einer vielzahl von Schaltern/Sensoren ermöglichen. Im Konzept ist auch eine Schnitstelle vorgesehen, um jederzeit weitere Geräte ansteuern zu können.

Die Ansteuerung soll ebenfalls über ein API stattfinden, um die Funktionen auch weiteren Tools zur verfügung zu stellen.


Ideensammlung

Bestandteile

REST Controller

  • Nimmt Interne/Externe requests entgegen
  • Überprüft anhand des INIT-File, ob die Anfrage gültig ist ( 202 Accepted / 501 Not Implemented )
  • Überprüft den API Key, der bei der Anfrage verwendet wird

API Key

Der API key soll in erster linie die möglichkeit bieten:

  • Kontakt zu den Nutzern des API zu halten ( wartung / neue Version / unsupported etc.)
  • Übersicht der Projekte bieten, welche auf das API angewiesen sind
  • Statistiken über die requests

Data Agent

Optional. Gedanke war, eine Schittstelle zur kommunikation auf Datensätze zu bieten.

Script Container

Der Script-Bereich besteht aus Script Containern. Jeder Container beinhaltet die Scripte die zum ausführen der Befehle notwendig sind.

Scripte können in jeder unterstützten/installierten Sprache geschrieben werden.

  • Der Container kann nur Befehle vom REST Controller entgegen nehmen !
  • * KEINE Kommunikation unter Scriptcontainern möglich!
  • Blick nur EXTERN
  • Muss exakt definiert haben welche werte erlaubt sind

Ebenfalls existiert ein INIT-File, welches in XML die zur verfügung stehenden Schnittstellen spezifiziert.

INIT-File

* Nur Lesbar
* Bei der Installation/Update erstellt
* Sagt REST Controller, welche Schittstellen zur verfügung stehen
* Basiert auf XML


  1. <ressource>
  2. 	<rid>dooropener</rid>
  3. 	<titel>Türöffner</titel>
  4. 	<desc>Das ist die Beschreibung welche den Türöffner im groben beschereibt</desc>
  5.  
  6. 	<element>
  7. 		<rid>1</rid>
  8. 		<name>Haustüre</name>
  9.  
  10. 		<method>
  11. 			<type>GET</type>
  12. 			<rid>status</rid>
  13. 			<desc>Gibt den Status der Türe aus</desc>
  14. 		</method>
  15.  
  16. 		<method>
  17. 			<type>PUT</type>
  18. 			<rid>openByLogin</rid>
  19. 			<desc>Öffnet die Türe duch Benutzername/Passwort</desc>
  20. 			<value>name</value>
  21. 			<value>password</value>
  22. 		</method>
  23.  
  24. 		<method>
  25. 			<type>PUT</type>
  26. 			<rid>openByRFID</rid>
  27. 			<desc>Öffnet die Türe duch RFID</desc>
  28. 			<value>node</value>
  29. 			<value>rfid</value>
  30. 		</method>
  31.  
  32. 	</element>
  33.  
  34. </ressource>

API

Das API welches Figaro anbietet lautet FAPI ( Figaro API )

REST

Artikel die mir geholfen haben REST zu verstehen:

Beispiel Gedanken

/api/[VERSION]/[RESOURCE]/[ELEMENT]/[TYPE?]

Beispiel: Türsummer an Türe 1

< GET /api/v1/dooropener/door
> Door 1
> Door 2
> Door 3

Jetzt wissen wir es gibt 3 Türen

< GET /api/v1/dooropener/door/1
> Openings = 400
> Last Access = Test.User

Die Türe 1 hat offensichtlich verschiedene Attribute diese können wir auch einzeln abrufen

< GET /api/v1/dooropener/door/1/openings
> Openings = 400

Um die Optionen heraus zu finden, stellen wir ebenfalls eine Anfrage

< OPTIONS /api/v1/dooropener/door/1
> accessByLdap ( req. name/password )

Um die Türe zu öffnen senden wir ein PUT

< PUT /api/v1/dooropener/door/1/accessByLdap
< name = test.user
< password = MeinFalschesPasswort123
> 403 Fordidden

Mit dem richtigen Passwort sollte die Anfrage wie folgt aussehen

< PUT /api/v1/dooropener/door/1/accessByLdap
< name = test.user
< password = MeinRichtigesPasswort1337
> 200 OK
( Türe Summmt )

Die Idee des Logo ist es, dem Projekt ein Bild zu geben.

  • Das Rechteck soll den modularen Aufbau symbolisieren.
  • Die Kabelanschlüsse sollen die vielzahl von Schaltern/Sensoren repräsentieren.
  • Die Hörner visualisieren den Namen für dieses teuflisch gute Projekt ;)

Download

Hier das Logo in verschiedenen Dateiformaten:

Download as Datei:Figaro-Logo-v1.ai or as Scalable Vector Graphic (.svg)

Version 2

Wenn sich jemand dem Logo annimmt, wäre es schön, wenn die Kabel etwas deutliches zum vorschein kommen, und diese den Namen Figaro bilden :)


Fall Beispiel

Hier möchte ich gerne einen Fall anhand eines RFID Readers vorstellen.

Angenommen wir haben eine fertige Implementation eines RFID Login Systems

  • RFID Reader ( an der Türe )
  • Türe ( mit Summer ausgestattet )
  • Script Container
    • INIT File
    • Script welches die aufbereiteten ID's der RFID Karte entgegen nimmt
  • Translator welcher für die aufbereitung der Daten vom RFID Reader zuständig ist

Legt nun eine Person seine Karte auf den RFID Reader, wird diese von Reader erkannt, und über dessen Schnittstelle an den Translator weiter gereicht.

Der Translator nimmt die Rohdaten des RFID Readers entgegen, und konvertiert diese in die entsprechenden ID's

Das Script innerhalb des Script Containers ist nun über eine x-Beliebige Schnittstelle mit dem Translator verbunden, und nimmt die ID's entgegen. Hier findet auch die erste Filterung statt. Doppelte/Falsche ID's werden aussortiert. Ebenfalls ist ein Timeout installiert, welcher es verhindet, dass ein Bruteforce angriff stattfinden kann. Der Script Container benutzt nun die REST-Schnittstelle intern, um die Türe zu öffnen.

Dabei wird ein request z.B so abgesetzt:

PUT /api/v1/dooropener/1/accessByRFID
> API-Key = xyz123007bla
> RFID = 000000000000123
< 200 OK

Der dooropener (Türöffner) Container übernimmt die überprüfung der ID mit der Datenbank, Protokolliert die Anfrage/Ergebniss und öffnet die Türe durch entsprechende Ansteuerung der angeschlossenen Summer.

Die Antwort des dooropener Containers kann der RFID Script Container wiederum nutzen, um z.B Visuell die LED auf grün zu schalten.


Entwicklung

REST Controller

Tools

Als sehr hilfreiches Tool hat sich das Firefox Plugin HttpRequester herausgestellt, damit ist es möglich durch ein übersichtliches GUI HTTP Requests an das zu entwickelnde API zu senden.

Quellen

Hier eine Liste der Quellen, welche ich zur Entwicklung herangezogen habe:

INIT File

Quellen

Todo's

ToDo-Icon.png

TODO: DTD File erstellen
Verantwortlich: Erledigt: 0
Die INIT Files müssen einem Regelwerk unterworfen sein, dafür können wir auch ein dtd file erstellen.



ToDo-Icon.png

TODO: Schnittstelle definieren
Verantwortlich: Benedikt.schumm Erledigt: 1
Die Schnittstelle soll für die API v1 definiert werden



ToDo-Icon.png

TODO: INIT Files lesen
Verantwortlich: Benedikt.schumm Erledigt: 0
Der Controller soll die INIT-Files autom einlesen, und die Schnitstellen dadurch anbieten



ToDo-Icon.png

TODO: Scriptcontainer Konzept
Verantwortlich: Erledigt: 0
Ein Konzept, wie die Scriptcontainer realisiert werden können.

Stichworte:

  • chroot?