Webrelais: Unterschied zwischen den Versionen
K (fix typo) |
|||
(17 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | [[ | + | {{Infobox Projekt |
+ | |name = Webrelais | ||
+ | |status = stable | ||
+ | |autor = [[Benutzer:schinken|schinken]] | ||
+ | |beschreibung = Relais-Karte, steuerbar über eine REST-API | ||
+ | |image = Projekt img webrelais.jpg | ||
+ | |imagesize = 300 | ||
+ | |version = 0.8 | ||
+ | }} | ||
+ | |||
+ | [[Category:Hardware]] | ||
+ | [[Category:Software]] | ||
+ | |||
== Webrelais == | == Webrelais == | ||
Webrelais ist ein Projekt für Linux und Windows (ungetestet), mit welchem sich der [http://www.pollin.de/shop/dt/NzcyOTgyOTk-/Bausaetze_Module/Bausaetze/Bausatz_PC_Relaiskarte_K8IO.html Relaisbausatz K8IO] per REST-API fernsteuern lässt. | Webrelais ist ein Projekt für Linux und Windows (ungetestet), mit welchem sich der [http://www.pollin.de/shop/dt/NzcyOTgyOTk-/Bausaetze_Module/Bausaetze/Bausatz_PC_Relaiskarte_K8IO.html Relaisbausatz K8IO] per REST-API fernsteuern lässt. | ||
− | Die Software läuft auf unserer Flepo, welche über einen Parallel-Port verfügt. | + | Die Software läuft auf unserer [http://www.flepo.de/index.php?id=66 Flepo Alpha], welche über einen Parallel-Port verfügt. |
== Software == | == Software == | ||
− | Die Software steht samt Client-Libraries unter https://github.com/Schinken/py-webrelais zur Verfügung | + | Die Software wurde in Python und python-flask realisiert und steht samt Client-Libraries unter https://github.com/Schinken/py-webrelais zur Verfügung |
== Ansteuerung == | == Ansteuerung == | ||
Zeile 14: | Zeile 26: | ||
{|class="wikitable sortable" border="1" | {|class="wikitable sortable" border="1" | ||
|- | |- | ||
− | + | ! HTTP-Befehl | |
− | + | ! Pfad | |
− | + | ! Beschreibung | |
|- | |- | ||
| GET | | GET | ||
| / | | / | ||
| Simples Webinterface zur Steuerung der Relais | | Simples Webinterface zur Steuerung der Relais | ||
+ | |- | ||
+ | | GET | ||
+ | | /relais | ||
+ | | Status aller Relais im JSON Format | ||
|- | |- | ||
| POST | | POST | ||
− | | / | + | | /relais/[0-15]? |
| Relais einschalten | | Relais einschalten | ||
|- | |- | ||
| GET | | GET | ||
− | | / | + | | /relais/[0-15]? |
| Status des Relais abfragen | | Status des Relais abfragen | ||
|- | |- | ||
| DELETE | | DELETE | ||
− | | / | + | | /relais/[0-15]? |
| Relais ausschalten | | Relais ausschalten | ||
|} | |} | ||
− | Wird keine Zahl übergeben, sind alle Relais von der Aktion betroffen | + | Wird keine Zahl übergeben, sind alle Relais von der Aktion betroffen. |
+ | |||
+ | Falls eine Authentifizierung für ein Relais benötigt wird, liefert die Schnittstelle den HTTP-Statuscode <strong>401 - Not authenticated</strong> zurück. | ||
+ | |||
+ | Um sich zu authentifizieren muss ein Username und Passwort per Basic-Auth übergeben werden. Hierzu stellt z.b. CURL die Option <i>CURLOPT_USERPWD</i> bereit. | ||
+ | |||
+ | == Beispiel == | ||
+ | |||
+ | === Alarm einschalten === | ||
+ | |||
+ | ==== Shell ==== | ||
+ | <syntaxhighlight lang="bash" enclose="div"> | ||
+ | curl -X POST 'https://webrelais.bckspc.de/relais/5' | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Python ==== | ||
+ | <syntaxhighlight lang="python" enclose="div"> | ||
+ | import requests | ||
+ | requests.post('https://webrelais.bckspc.de/relais/5') | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Rückgabe ==== | ||
+ | <syntaxhighlight lang="javascript" enclose="div"> | ||
+ | { | ||
+ | "payload": { | ||
+ | "id": 5, | ||
+ | "name": "Alarmlight", | ||
+ | "needs_auth": false, | ||
+ | "status": false | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Alarm ausschalten === | ||
+ | |||
+ | ==== Shell ==== | ||
+ | <syntaxhighlight lang="bash" enclose="div"> | ||
+ | curl -X DELETE 'https://webrelais.bckspc.de/relais/5' | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Python ==== | ||
+ | <syntaxhighlight lang="python" enclose="div"> | ||
+ | import requests | ||
+ | requests.delete('https://webrelais.bckspc.de/relais/5') | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Rückgabe ==== | ||
+ | <syntaxhighlight lang="javascript" enclose="div"> | ||
+ | { | ||
+ | "payload": { | ||
+ | "id": 5, | ||
+ | "name": "Alarmlight", | ||
+ | "needs_auth": false, | ||
+ | "status": true | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
== Verwendungszwecke == | == Verwendungszwecke == | ||
Zeile 42: | Zeile 114: | ||
Durch die Verwendung der REST-API muss sich niemand mehr selbst um die Ansteuerung der Hardware kümmern, sondern kann von $Programmiersprache einfach das zugehörige Relais schalten. | Durch die Verwendung der REST-API muss sich niemand mehr selbst um die Ansteuerung der Hardware kümmern, sondern kann von $Programmiersprache einfach das zugehörige Relais schalten. | ||
+ | |||
+ | == Belegung == | ||
+ | |||
+ | Die momentane Belegung der Relaiskarte sieht wiefolgt aus: | ||
+ | |||
+ | {|class="wikitable" | ||
+ | !Relais | ||
+ | !Funktion | ||
+ | |- | ||
+ | |0 | ||
+ | |Tür öffnen | ||
+ | |- | ||
+ | |1 | ||
+ | |Tür schliessen | ||
+ | |- | ||
+ | |2 | ||
+ | |Türsummer | ||
+ | |- | ||
+ | |3 | ||
+ | |Exit-Licht weiß | ||
+ | |- | ||
+ | |4 | ||
+ | |Exit-Licht rot | ||
+ | |- | ||
+ | |5 | ||
+ | |Alarmleuchte | ||
+ | |- | ||
+ | |6 | ||
+ | |Heizung | ||
+ | |- | ||
+ | |7 | ||
+ | |frei | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | == Authentifizierung == | ||
+ | |||
+ | Da in Zukunft auch sensible Sachen über das Relais geschalten werden (z.b. die Türanlage), ist die REST-API mit einer Authentifizierung abgesichert. Hierfür wird die Datei <strong>acl.py</strong> verwendet. Ein Benutzer kann hier mehreren Relais zugeteilt werden, und umgekehrt. | ||
+ | |||
+ | Die minimalkonfiguration eines Benutzers besteht aus "username" und "passwort". Des weiteren kann der User auch auf einen Host eingeschränkt werden. In der momentan Version ist hier nur eine IP-Adresse möglich - eine Hostauflösung ist geplant. | ||
+ | |||
+ | |||
+ | Beispiel eines Benutzerzugangs: | ||
+ | usr_door = {'user':'username', 'pass':'password', 'host':'127.0.0.1' } | ||
+ | |||
+ | Zuweisung eines Benutzers an ein Relais: | ||
+ | port_permissions[0] = [usr_door] | ||
+ | |||
+ | Zuweisung mehrerer Benutzer an ein Relais | ||
+ | port_permissions[2] = [usr_door, usr_schinken] | ||
== Installation == | == Installation == | ||
Zeile 60: | Zeile 182: | ||
sudo modprobe ppdev | sudo modprobe ppdev | ||
− | Um den Benutzer, unter dem das Script läuft Schreibzugriff auf /dev/parport0 zu gewähren, muss der User entweder der Gruppe "lp" hinzugefügt, oder die Rechte von /dev/parport0 geändert werden | + | Um den Benutzer, unter dem das Script läuft Schreibzugriff auf /dev/parport0 zu gewähren, muss der User entweder der Gruppe "lp" hinzugefügt, oder die Rechte von /dev/parport0 geändert werden. |
Aktuelle Version vom 14. September 2014, 16:33 Uhr
Webrelais Status: stable | |
---|---|
Beschreibung | Relais-Karte, steuerbar über eine REST-API |
Autor: | schinken |
Version | 0.8 |
PayPal |
Webrelais
Webrelais ist ein Projekt für Linux und Windows (ungetestet), mit welchem sich der Relaisbausatz K8IO per REST-API fernsteuern lässt.
Die Software läuft auf unserer Flepo Alpha, welche über einen Parallel-Port verfügt.
Software
Die Software wurde in Python und python-flask realisiert und steht samt Client-Libraries unter https://github.com/Schinken/py-webrelais zur Verfügung
Ansteuerung
HTTP-Befehl | Pfad | Beschreibung |
---|---|---|
GET | / | Simples Webinterface zur Steuerung der Relais |
GET | /relais | Status aller Relais im JSON Format |
POST | /relais/[0-15]? | Relais einschalten |
GET | /relais/[0-15]? | Status des Relais abfragen |
DELETE | /relais/[0-15]? | Relais ausschalten |
Wird keine Zahl übergeben, sind alle Relais von der Aktion betroffen.
Falls eine Authentifizierung für ein Relais benötigt wird, liefert die Schnittstelle den HTTP-Statuscode 401 - Not authenticated zurück.
Um sich zu authentifizieren muss ein Username und Passwort per Basic-Auth übergeben werden. Hierzu stellt z.b. CURL die Option CURLOPT_USERPWD bereit.
Beispiel
Alarm einschalten
Shell
curl -X POST 'https://webrelais.bckspc.de/relais/5'
Python
import requests
requests.post('https://webrelais.bckspc.de/relais/5')
Rückgabe
{
"payload": {
"id": 5,
"name": "Alarmlight",
"needs_auth": false,
"status": false
}
}
Alarm ausschalten
Shell
curl -X DELETE 'https://webrelais.bckspc.de/relais/5'
Python
import requests
requests.delete('https://webrelais.bckspc.de/relais/5')
Rückgabe
{
"payload": {
"id": 5,
"name": "Alarmlight",
"needs_auth": false,
"status": true
}
}
Verwendungszwecke
Über die Relais soll unter anderem der Türöffner oder z.B. eine Rundum-Leuchte geschalten werden.
Durch die Verwendung der REST-API muss sich niemand mehr selbst um die Ansteuerung der Hardware kümmern, sondern kann von $Programmiersprache einfach das zugehörige Relais schalten.
Belegung
Die momentane Belegung der Relaiskarte sieht wiefolgt aus:
Relais | Funktion |
---|---|
0 | Tür öffnen |
1 | Tür schliessen |
2 | Türsummer |
3 | Exit-Licht weiß |
4 | Exit-Licht rot |
5 | Alarmleuchte |
6 | Heizung |
7 | frei |
Authentifizierung
Da in Zukunft auch sensible Sachen über das Relais geschalten werden (z.b. die Türanlage), ist die REST-API mit einer Authentifizierung abgesichert. Hierfür wird die Datei acl.py verwendet. Ein Benutzer kann hier mehreren Relais zugeteilt werden, und umgekehrt.
Die minimalkonfiguration eines Benutzers besteht aus "username" und "passwort". Des weiteren kann der User auch auf einen Host eingeschränkt werden. In der momentan Version ist hier nur eine IP-Adresse möglich - eine Hostauflösung ist geplant.
Beispiel eines Benutzerzugangs:
usr_door = {'user':'username', 'pass':'password', 'host':'127.0.0.1' }
Zuweisung eines Benutzers an ein Relais:
port_permissions[0] = [usr_door]
Zuweisung mehrerer Benutzer an ein Relais
port_permissions[2] = [usr_door, usr_schinken]
Installation
Die Software befindet sich unter https://github.com/Schinken/py-webrelais und kann per
git clone git://github.com/Schinken/py-webrelais.git
ausgecheckt werden.
Folgende Pakete werden bei Debian benötigt:
sudo apt-get install python-parallel python-flask
Des weiteren muss das Kernel-Modul "lp" entfernt und das Modul "ppdev" hinzugefügt werden:
sudo rmmod lp sudo modprobe ppdev
Um den Benutzer, unter dem das Script läuft Schreibzugriff auf /dev/parport0 zu gewähren, muss der User entweder der Gruppe "lp" hinzugefügt, oder die Rechte von /dev/parport0 geändert werden.