c8ec96756d9933906e6e25df940fb68e024d47d6
smart_home/Server.md
... | ... | @@ -1,75 +0,0 @@ |
1 | -# Voraussetzungen |
|
2 | - |
|
3 | -## Hardware |
|
4 | - |
|
5 | -Funkschaltung so eingerichtet wie in [Doku](Funksteckdose über 433MHz von Raspi ansteuern) beschrieben |
|
6 | - |
|
7 | -## Software |
|
8 | - |
|
9 | -### Node.js Grunlagen |
|
10 | - |
|
11 | -Node.js installieren (s. https://nodejs.org). An gewünschter Stelle (aktuell `/home/pi/Desktop/nodejs-server`) intialisieren: |
|
12 | -``` |
|
13 | -npm init |
|
14 | -``` |
|
15 | -und als nötige Pakete |
|
16 | -``` |
|
17 | -npm install express |
|
18 | -npm install child_process |
|
19 | -npm install process |
|
20 | -``` |
|
21 | -hinzufügen. Grundstruktur des node.js-Servers (aktuell `home/pi/Desktop/nodejs-server/server.js`) mit zwei einfachen Tests: |
|
22 | -``` |
|
23 | -const express = require('express'); |
|
24 | -const {exec} = require('child_process'); |
|
25 | -const {stderr} = require('process') |
|
26 | - |
|
27 | -const app=express(); |
|
28 | -const port=3000; |
|
29 | - |
|
30 | -app.get('/helloserver',(req,res,next)=>{ |
|
31 | - res.send("hello world!"); |
|
32 | -}) |
|
33 | - |
|
34 | -app.get('/helloshell', (req,res,next)=>{ |
|
35 | - exec('touch /home/pi/Desktop/ShellTestSuccess.txt'); |
|
36 | - res.send('yay!') |
|
37 | -}) |
|
38 | - |
|
39 | - |
|
40 | -app.listen(port); |
|
41 | -``` |
|
42 | -Server einschalten: |
|
43 | -``` |
|
44 | -node /home/pi/Desktop/nodejs-server/server.js |
|
45 | -``` |
|
46 | -Zum ausschalten `ctrl + C`. |
|
47 | - |
|
48 | - |
|
49 | -Tests: Ein Gerät im lokalen Netzwerk sollte durch GET-Anfrage an `[IP des Raspi]:3000/helloserver` die Antwort "hello world!" erhalten. Durch GET-Anfrage an `[IP des Raspi]:3000/helloshell` sollte auf dem Desktop des Raspi eine leere Text-Datei namens `ShellTestSuccess.txt` angelegt werden und an das anfragende Gerät die Antwort "yay!" geschickt werden. |
|
50 | - |
|
51 | -### Lichtsteuerung |
|
52 | -Der Server stellt wie folgt Endpunkte bereit, die das An-/Ausschalten des Lichts auslösen: |
|
53 | -``` |
|
54 | -app.get('/lichtan', (req,res,next)=>{ |
|
55 | - exec('/usr/local/bin/send 01001 1 1'); |
|
56 | - res.send('yay!') |
|
57 | -}) |
|
58 | - |
|
59 | -app.get('/lichtaus', (req,res,next)=>{ |
|
60 | - exec('/usr/local/bin/send 01001 1 0'); |
|
61 | - res.send('yay!') |
|
62 | -}) |
|
63 | - |
|
64 | -``` |
|
65 | -Durch GET-Anfrage an `[IP des Raspi]:3000/lichtan` wird das Licht mit dem Identifikator 01001 1 (vgl. [Doku](Funksteckdose über 433MHz von Raspi ansteuern)) eingschaltet; entsprechend zum Ausschalten und durch Veränderung des Identifikators für andere Funksteckdosen. |
|
66 | - |
|
67 | -### Foto von Kamera holen |
|
68 | -Der folgende Endpunkt setzt das Verzeichnis `/home/pi/Desktop/nodejs-server/photos` voraus. |
|
69 | -``` |
|
70 | -app.get('/photo', (req,res,next)=>{ |
|
71 | - exec('raspistill -o /home/pi/Desktop/nodejs-server/photos/test.jpg'); |
|
72 | - res.sendFile('/home/pi/Desktop/nodejs-server/photos/test.jps'); |
|
73 | -}) |
|
74 | -``` |
|
75 | -Durch GET-Anfrage an `[IP des Raspi]:3000/photo` wird die Aufnahme eines Fotos auf dem Raspi ausgelöst, das dieser in dem o.g. Pfad ablegt (to do: Zeitstempel, damit die Bilder behalten statt überschrieben werden) und als Antwort an das anfragende Gerät zurückschickt. |