Webrelais: Unterschied zwischen den Versionen

 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:
 
|name            = Webrelais
 
|name            = Webrelais
 
|status          = stable
 
|status          = stable
|autor          = schinken
+
|autor          = [[Benutzer:schinken|schinken]]
 
|beschreibung    = Relais-Karte, steuerbar über eine REST-API
 
|beschreibung    = Relais-Karte, steuerbar über eine REST-API
 
|image          = Projekt img webrelais.jpg
 
|image          = Projekt img webrelais.jpg
Zeile 33: Zeile 33:
 
| /
 
| /
 
| Simples Webinterface zur Steuerung der Relais
 
| Simples Webinterface zur Steuerung der Relais
 +
|-
 +
| GET
 +
| /relais
 +
| Status aller Relais im JSON Format
 
|-
 
|-
 
| POST
 
| POST
| /relais/[0-7]?
+
| /relais/[0-15]?
 
| Relais einschalten
 
| Relais einschalten
 
|-
 
|-
 
| GET
 
| GET
| /relais/[0-7]?
+
| /relais/[0-15]?
 
| Status des Relais abfragen
 
| Status des Relais abfragen
 
|-
 
|-
 
| DELETE
 
| DELETE
| /relais/[0-7]?
+
| /relais/[0-15]?
 
| Relais ausschalten
 
| Relais ausschalten
 
|}
 
|}
Zeile 52: Zeile 56:
  
 
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.
 
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 83: Zeile 139:
 
|-
 
|-
 
|5
 
|5
|frei
+
|Alarmleuchte
 
|-
 
|-
 
|6
 
|6
|frei
+
|Heizung
 
|-
 
|-
 
|7
 
|7

Aktuelle Version vom 14. September 2014, 16:33 Uhr

Crystal Clear action run.png
Webrelais

Status: stable

Projekt img webrelais.jpg
Beschreibung Relais-Karte, steuerbar über eine REST-API
Autor: schinken
Version 0.8
PayPal Spenden für Webrelais

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.