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.