Voraussetzungen
Hardware
Funkschaltung so eingerichtet wie in Doku beschrieben
Software
Node.js Grunlagen
Node.js installieren (s. https://nodejs.org). An gewünschter Stelle (aktuell /home/pi/Desktop/nodejs-server
) intialisieren:
npm init
und als nötige Pakete
npm install express
npm install child_process
npm install process
hinzufügen. Grundstruktur des node.js-Servers (aktuell home/pi/Desktop/nodejs-server/server.js
) mit zwei einfachen Tests:
const express = require('express');
const {exec} = require('child_process');
const {stderr} = require('process')
const app=express();
const port=3000;
app.get('/helloserver',(req,res,next)=>{
res.send("hello world!");
})
app.get('/helloshell', (req,res,next)=>{
exec('touch /home/pi/Desktop/ShellTestSuccess.txt');
res.send('yay!')
})
app.listen(port);
Server einschalten:
node /home/pi/Desktop/nodejs-server/server.js
Zum ausschalten ctrl + C
.
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.
Lichtsteuerung
Der Server stellt wie folgt Endpunkte bereit, die das An-/Ausschalten des Lichts auslösen:
app.get('/lichtan', (req,res,next)=>{
exec('/usr/local/bin/send 01001 1 1');
res.send('yay!')
})
app.get('/lichtaus', (req,res,next)=>{
exec('/usr/local/bin/send 01001 1 0');
res.send('yay!')
})
Durch GET-Anfrage an [IP des Raspi]:3000/lichtan
wird das Licht mit dem Identifikator 01001 1 (vgl. Doku) eingschaltet; entsprechend zum Ausschalten und durch Veränderung des Identifikators für andere Funksteckdosen.
Foto von Kamera holen
Der folgende Endpunkt setzt das Verzeichnis /home/pi/Desktop/nodejs-server/photos
voraus.
app.get('/photo', (req,res,next)=>{
exec('raspistill -o /home/pi/Desktop/nodejs-server/photos/test.jpg');
res.sendFile('/home/pi/Desktop/nodejs-server/photos/test.jps');
})
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.