Du bist nicht berechtigt, die Seite zu bearbeiten. Grund:
Diese Aktion ist auf Benutzer beschränkt, die der Gruppe „Benutzer“ angehören.
Freitext:
[[Category:Projekte]] = Figaro V2 = Figaro v2 ist ein neudesign von [[Projekte:Figaro|Figaro]] == Projektbeschreibung == Figaro in der Version 2 greift die Grundidee des ursprünglichen [[Projekte:Figaro|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 == <gallery> Datei:Figaro-Whiteboard-1.jpg|Erste Idee Datei:Figaro-Whiteboard-2.jpg|Grobe Übersicht Datei:Figaro-Whiteboard-3.jpg|Detaillierte Ansicht </gallery> == 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 <syntaxhighlight lang="xml" line start="1"> <ressource> <rid>dooropener</rid> <titel>Türöffner</titel> <desc>Das ist die Beschreibung welche den Türöffner im groben beschereibt</desc> <element> <rid>1</rid> <name>Haustüre</name> <method> <type>GET</type> <rid>status</rid> <desc>Gibt den Status der Türe aus</desc> </method> <method> <type>PUT</type> <rid>openByLogin</rid> <desc>Öffnet die Türe duch Benutzername/Passwort</desc> <value>name</value> <value>password</value> </method> <method> <type>PUT</type> <rid>openByRFID</rid> <desc>Öffnet die Türe duch RFID</desc> <value>node</value> <value>rfid</value> </method> </element> </ressource> </syntaxhighlight> == API == Das API welches Figaro anbietet lautet [[FAPI]] ( Figaro API ) === REST === Artikel die mir geholfen haben REST zu verstehen: * [[http://www.gen-x-design.com/archives/create-a-rest-api-with-php/ create a rest api with php]]<br> * [[http://particletree.com/features/how-to-add-an-api-to-your-web-service/ how to add an api to your web service]]<br> * [[http://www.recessframework.org/page/towards-restful-php-5-basic-tips towards restful php 5 basic tips]]<br> * [[http://de.wikipedia.org/wiki/HTTP-Statuscode Http Statuscode]] ==== 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 ) == Logo == 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|Adobe Illustrator CS3 (.ai) ]] or as [[:Datei:Figaro-Logo-v1.svg|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: * http://it-republik.de/jaxenter/artikel/Frameworks-zur-Entwicklung-von-RESTful-Web-Services-4145.html * http://www.gen-x-design.com/archives/create-a-rest-api-with-php/ * http://en.wikipedia.org/wiki/Representational_state_transfer#cite_ref-11 * http://www.php.net/manual/en/ref.xml.php === INIT File === ==== Quellen ==== == Todo's ==
Zusammenfassung:
Nur Kleinigkeiten wurden verändert Diese Seite beobachten
Abbrechen