Webrelais
Webrelais Status: stable | |
---|---|
Beschreibung | Relais-Karte, steuerbar über eine REST-API |
Autor: | schinken|rel=author |
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.