DirtyHaerry
Da du deine Firmware in C++ programmiert hast, sollte es für dich kein ernsthaftes Problem sein, ein Shelly Skript zu erstellen, wenn du das anstreben solltest. Darin brauchst du
- einen EventHandler - eine in der Shelly Firmware zu registrierende Funktion mit einem zu importierenden Parameter (das Event Objekt),
- einen HTTPServer Endpoint - eine in der Shelly Firmware zu registrierende Funktion mit einem zu importierenden response Objekt, mit welchem die Antwort an das Frontend (Web Browser) gesendet wird.
Die EventHandler-Funktion muss auf die Änderung des Eingangssignals (SW), Component "input:0" reagieren. Dazu selektierst du ausschließlich die Ereignisse mit der Component "input:0". Damit du sehen kannst, welche Ereignis-Informationen im EventHandler eintreffen, lässt du einfach den importierten Parameter ausgeben, am besten per JSON.stringify() in ein kompakteres Ausgabeformat umwandeln.
function eventHandler(evt) {
print(JSON.stringify(evt));
}
Shelly.addEventHandler(eventHandler);
An der Ausgabe kannst du erkennen, wie du auf die importierten Informationen zugreifen kannst und welche für dein Projekt relevant sind. Du kannst dir für den Einstieg auch meine Skripteinführung anschauen - s. meine Signatur.
Die HTTPServer Endpoint Funktion wird bei deren Registrierung einem Namen zugeordnet, welcher in der Anforderung der Webseite enthalten sein muss. Wie du die gewünschte Webseite zusammenstellen willst, weißt du ja bereits - s. dein C++ Code.
function httpEndpoint(request, response) {
response.code = 200;
response.headers = [["Content-Type", "text/html"]];
if(request.method==='GET') {
// Parameter stecken in request.query.
let para = request.query;
// Parameter als String verarbeiten.
}
else if(request.method==='POST') {
// Parameter stecken in request.body.
print(request.body);
let para = JSON.parse(request.body);
// Parameter Objekt verarbeiten.
}
// http body für die Antwort zusammenstellen
response.body = ...
// Antwort senden
response.send();
}
HTTPServer.registerEndpoint("ctrl", httpEndpoint);
Alles anzeigen
Die Webseite wird dann wie folgt angefordert, hier per Methode GET.
http://<IP Adresse des Shelly>/ctrl?<Parameterliste>
Die Funktionsnamen kannst du selbstverständlich nach deinem Gutdünken wählen, wie auch den HTTP Endpoint Namen - ich wählte "ctrl".
Die Methode POST ist für in der Shelly Antwort eingebetteten JavaScript Code - im Frontend verarbeitet - besser geeignet. Die Methode GET ist für eingebettete Links gut geeignet.
Insgesamt kann mit einem Skript die Funktion des Shelly flexibler und insbesondere on the fly angepasst werden.