Vielleicht hilft dir diese Code als Beispiel weiter:
Shelly mit der IP: 192.168.178.150
var coverState = null; // Globale Variable zum Speichern des Cover-Zustands
const allowedStates = ["closing", "opening", "open", "close","stopped"]; // Liste der erlaubten Zustände
// Script auf Shelly mit der sendIP Addresse: Nr. 0 bis 2 ----> 0 = Cover L | 1 = Cover VL + VR | 2 = Cover R
const indexCoverInDictionary = "1"; // = Cover VL + VR sendet
const sendIP = "192.168.178.161";
const scriptPath = "script/3";
Shelly.addEventHandler(function (event) {
if (event.name === "cover") {
let newState = event.info.event; // Neuer Zustand des Covers
// Überprüfen, ob der neue Zustand in der Liste der erlaubten Werte ist
if (allowedStates.indexOf(newState) !== -1) {
// Nur speichern, wenn der Zustand sich geändert hat
if (coverState !== newState) {
coverState = newState; // Zustand in globale Variable speichern
print("Cover hat sich geändert. Neuer Zustand: " + newState);
// Sende zu Register.Endpoint -> 0 = Rastore L
Shelly.call("HTTP.REQUEST", {
method: "GET",
url: "http://" + sendIP + "/" + scriptPath + "/raffstoresZustand?" + indexCoverInDictionary + ":" + newState
});
}
}
}
});
Alles anzeigen
Empfänger:
Shelly IP: 192.168.178.161
Script 3
const ENDPOINT = {
allowedStates: ["closing", "opening", "open", "close","stopped"],
}
HTTPServer.registerEndpoint('raffstoresZustand', function (req, res) {
let resultArray = req.query.trim().split(":");
print ("resultArray: " + resultArray);
if (ENDPOINT.allowedStates.indexOf(resultArray[1]) !== -1) {
print("Anfrage erhalten. Handler für 'raffstoresZustand' aufgerufen. -> req.query: " + req.query);
// z.B. Jetzt eine Function aufrufen um seinen Code auszuführen....
// Melde das es Empfangen wurde...
res.body = "Shelly Webserver: " + req.query;
res.code = 200;
res.send();
}
});
Alles anzeigen
Das Erste Script (IP: 192.168.178.150) abonniert den EventHandler wenn sich der Zustand des Covers ändert. Also betätigt wird.
Wenn das nach den abgefragten Kriterien erfüllt ist, wird den anderen Shelly (192.168.178.161) per Register.Endpoint ein String zugesandt:
Wichtig beim ersten Script ist eigentlich nur das Senden:
Shelly.call("HTTP.REQUEST", {
method: "GET",
url: "http://" + sendIP + "/" + scriptPath + "/raffstoresZustand?" + indexCoverInDictionary + ":" + newState
});
Der Empfänger abonniert dann 'raffstoresZustand' und wartet darauf bis etwas gesendet wird.
Empfängt HTTPServer.registerEndpoint('raffstoresZustand' was wird die function ausgeführt.
INFO: Es ist nicht nötig den registerEndpoint in einer Timer Schleife zu setzen. der Code wird ausgeführt sobald was empfangen wird.
So kann man über zwei verschiedene Shelly´s Daten austauschen.
Das geht auch mit mehreren Shelly´s die auf dem selben Register.Endpoint senden.
Als Übertragung habe ich "1:open" gewählt.
Der String wird dann beim Empfänger aufgeschnitten "1" und "open" -> so kann ich auswerten welcher Shelly gesendet hat, in diesem Beispiel "1" und als Daten = "open"