Ja, wurde heute angeboten.
Firmware: 20250730-063157/1.7.0-gbe7545d
VPN/Proxy erkannt
Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.
Ja, wurde heute angeboten.
Firmware: 20250730-063157/1.7.0-gbe7545d
Seit dem letzten Update beim Shelly AZ Plug ist die Option „Repeat when = -1“ bei WebHook-Aktionen nicht mehr verfügbar – geht jetzt nur noch 0 oder höher.
Das ist echt ungünstig, weil -1 früher dafür gesorgt hat, dass der WebHook nur einmal beim Über- oder Unterschreiten eines Schwellwerts ausgelöst wurde (z. B. über 30 W oder unter 3 W). Jetzt wird der WebHook ständig erneut geschickt, solange die Bedingung erfüllt ist – bei schwankender Leistung (z. B. Fernseher) ist das ein echtes Problem.
Gerade wenn man die WebHooks in eigenen Skripten verarbeitet, läuft dadurch alles mehrfach oder falsch. Hoffentlich kommt -1 wieder zurück – oder wenigstens eine Option wie „nur bei Zustandsänderung“.
Durch den Standort des Blu Motion in der Küche bin ich gezwungen, das so zu lösen.
Zudem kommt es immer wieder vor, dass man bei der „Ende der Bewegung - Aus Funktion“ immer wieder, trotz Anwesenheit, im Dunkeln steht.
1. Soll heißen, das der Blu Motion über der Tür Platziert ist und nach rechts nicht schauen kann, da der Kühlschrank im Sichtfeld steht.
2. Nichtbewegung funktioniert weder mit den Motion 1, 2, noch Blu Motion zuverlässig, wenn man sich länger nicht bewegt.
3. Ich bin alleine im Haus, wenn Besuch da ist, dann wird der Motion im Wohnzimmer entfernt.
4. Ich will es so, wenn es möglich ist mit den Blu Motion. Mit den Wlan Geräten ist es ohne Probleme zu realisieren.
Es geht um die Blu Motion Geräte (Bluetooth)
Wie aktivieren, deaktivieren und Blindtime zurücksetzen?
Hi,
ich habe eine Frage, da ich bis jetzt keine Lösung für mein Skript Problem gefunden habe.
Es geht um die Blu Motion Geräte.
Situation Blu Motion im Wohnzimmer und Küche:
Küche: Bewegung - Licht Küche AN
Wohnzimmer: Bewegung - Licht Küche AUS
Wenn ich jetzt vom Wohnzimmer in die Küche gehe, dort länger als 30 Sec. verweile und dann zurückgehe, ist das kein Problem.
Wenn ich jetzt aber unter 30 Sekunden das mache (Beispiel: Teller in Spüle oder Müll usw.), ist der Blu Motion noch im Blindtime und führt natürlich nichts aus.
Durch den Standort des Blu Motion in der Küche bin ich gezwungen, das so zu lösen.
Zudem kommt es immer wieder vor, dass man bei der „Ende der Bewegung - Aus Funktion“ immer wieder, trotz Anwesenheit, im Dunkeln steht.
Der Blu Motion im Wohnzimmer ist so platziert, dass es nur einen kleinen Bereich an der Tür sieht. Im Prinzip wie eine Lichtschranke.
Was ich jetzt gerne machen würde ist:
Küche: Bewegung - Licht Küche AN - Blu Motion Wohnzimmer aktivieren
Wohnzimmer: Bewegung - Licht Küche AUS - Blu Motion Wohnzimmer deaktivieren
Bei den WLAN-Motion 1 und 2 geht das einfach über http-Befehle wie
Sensor aktivieren AN:
http://192.168.178.xx/settings?motion_enable=true
Sensor deaktivieren AUS:
http://192.168.178.xx/settings?motion_enable=false
und Motion Blindtime zurücksetzen
http://192.168.178.xx/settings/actio…&name=motion_on
Ist es überhaupt machbar, per Skript die Blu Geräte zu deaktivieren/aktivieren, oder Blindtime auf 0 zurück zu setzen?
Hat jemand eine Idee bzw. eine Lösung für das Problem?
Herzlichen Glückwunsch
Moin,
hatte so ein ähnliches Problem auch schon mit localhost/127.0.0.1 im Skript gehabt.
Bei mir hat es immer geholfen, den entsprechenden Shelly einfach neu zu starten.
Moin,
wenn das Teil von Amazon sein sollte, dann ist es sehr wahrscheinlich, das die Batterie schwach, bzw. leer ist. Sollte man überprüfen.
Sorry, das gilt für Blu Door/Window.
Kann man einen gemachten Eintrag hier löschen, Wenn ja, wie?
Moin,
das hätte ich wohl kurz vorher lesen müssen.
Kanns bestätigen. Absolut nix im Log.
Skript läuft auf Shelly Plus 2PM und ein anderer auf Shelly Plus 1PM
Hat sich erledigt.
Das
BTH[0x02] = { n: "Temperature", t: int16, f: 0.01, u: "°C" };
auf das ändern.
BTH[0x45] = { n: "temperature", t: int16, f: 0.1, u: "°C" };
Info von Karl Otto
Karl Otto, dank dir.
Hi Leute,
habe die letzten Tage meine Shelly Blu und Plus Geräte aktualisiert.
Jetzt habe ich das Problem, das die Blu Motion Geräte nicht mehr im Skript funktionieren.
Alles andere funktioniert weiterhin wie App und Cloud.
Meine Vermutung ist, dass es wohl an den Blu Motion liegt. Diese wurden über App (BLE Debug) aktualisiert. Es wird jetzt auch Temperatur angezeigt, daher wird es wohl die neueste Firmware sein.
Skript läuft auf einen Shelly Plus 1 PM. Der ein oder zwei Tage vorher aktualisiert wurde.
Das es aktuelle API für die Blu Geräte gibt habe ich bereits registriert. Nur kann ich nicht wirklich was damit anfangen.
Das sind die Definitionen, die in Verwendung sind/waren, die auch funktioniert hatten.
BTH[0x00] = { n: "pid", t: uint8 };
BTH[0x01] = { n: "Battery", t: uint8, u: "%" };
BTH[0x02] = { n: "Temperature", t: int16, f: 0.01, u: "°C" };
BTH[0x03] = { n: "Humidity", t: uint16, f: 0.01, u: "%" };
BTH[0x05] = { n: "Illuminance", t: uint24, f: 0.01 };
BTH[0x1a] = { n: "Door", t: uint8 };
BTH[0x20] = { n: "Moisture", t: uint8 };
BTH[0x2d] = { n: "Window", t: uint8 };
BTH[0x3a] = { n: "Button", t: uint8 };
BTH[0x3f] = { n: "Rotation", t: int16, f: 0.1 };
BTH[0x21] = { n: "Motion", t: uint8 };
Egal was ich in dieser Richtung versuche, es klappt nicht. Was muss geändert, bzw. aktualisiert werden, damit es wieder funktioniert?
Erkannt werden sie. Nur weiter geht’s nicht.
Die anderen Blu (1x Button und 3x DoorWindow)Geräte funktionieren weiterhin.
Log zeigt diese Meldung bei den Blu Motion.
BTH: unknown type
Shelly BTH-Paket: {"encryption":false,"BTHome_version":2,"pid":161,"Bat…
@De kat "Teste das Script bitte noch etwas ausführlich, wenn nichts schief geht werde ich das Script als getestet einstufen."
2 Tage jetzt. Auch immer wieder Ein/Ausgeschaltet. Keine Störungen bemerkt. Bis jetzt funktioniert alles zuverlässig.
Moin,
@De kat, ich danke dir. Skript erfüllt alles, was gewünscht war, und funktioniert einwandfrei.
special_delay auf 1 gesetzt und keine Ausfälle gehabt. Mehr als 10x hintereinander, Licht Kran und Schrank, ein und ausgeschaltet. Funktion zuverlässig.
Wenn ich es richtig verstehe, ist das so, das der Shelly Licht Kranz, die in „special_delay“ eingegebene Zeit abwartet, bevor er die Aktion ausführt, wenn die Bedingungen passen. Richtig?
Moin,
Ok, Skript funktioniert fast, wie gewünscht. Dank dir @ De kat
Hier muss man aufpassen
"Licht Schlafzimmer": {"on": true,"off": false, ip: "192.168.178.30/relay /0"},
"Licht Schlafzimmer": {"on": true,"off": false, ip: "192.168.178.30/light/0"},
„relay“ funktioniert im Skript nicht bei einer Shelly Color Bulb.
Leider habe ich immer noch das Problem, dass wenn Licht Schrank und Licht Kranz gleichzeitig eingeschaltet werden, das Kranz wieder ausgeschaltet wird. Also nicht immer, sondern alle paar mal.
Manchmal wird es sofort ausgeschaltet und ein anderes Mal erst nach 1-2 Sec.
Das Skript selber funktioniert so wie es soll.
Ich nehme an, bzw. vermute, dass es die Statusmeldung von Licht Schrank (Shelly Plug S) nicht schnell genug erhält. Die WebHooks werden eigentlich schnell genug und zuverlässig vom Skript erkannt.
Ich habe das auch mit einer Verzögerung Versucht. Indem Fall damit, das Bedingung mindestens 1000 (natürlich auch mit höheren Werten versucht) Millisekunden übereinstimmen muss, damit Aktion ausgeführt wird. Die Verzögerung funktioniert auch, wie sie soll. Dachte, wenn da das Skript beim Aktualisieren der Statusmeldungen stolpert/verzögert wird, hätte es noch genug Zeit, die richtigen Werte zu erhalten.
Problem ist leider auch mit Verzögerung vorhanden.
function Logic() {
try {
if (debug) print('Debug: saved_states -->', saved_states);
if (Object.keys(saved_states).length < Object.keys(shellys).length) return; // Exit if mising states
// if x and y and z do k --- > logic
if (!saved_states.Licht_Wohnzimmer && !saved_states.Licht_Schrank && !saved_states.Licht_Schlafzimmer && saved_states.Licht_Kranz) {
// Start a delay before turning off Licht_Kranz
if (delayTimeout) Timer.clear(delayTimeout);
delayTimeout = Timer.set(1000, 0, function () {
Call("http.get", { url: shellys.Licht_Kranz.ip + "?turn=off" }, null, null, debug); // Turn Kranz off
delayTimeout = null; // Reset the delayTimeout
});
}
} catch (e) {
ErrorMsg(e, 'Logic()', debug); // Error Handling
}
}
Alles anzeigen
„ich hatte ja vorher gefragt ob du kvs oder seperate Abfragen möchtest.“
Sorry, hatte die Zusammenhänge nicht ganz verstanden. Bin heute etwas weiter.
„Licht TV“ ist auf Alexa eine Routine, die einfach nur die zwei Lampen Licht Schrank und Licht Kranz einschaltet.
Leider immer noch nicht zufriedenstellend.
Es funktioniert alle, wie es soll. Abgesehen von der Zuverlässigkeit. Ich habe eine Szene, die sich Licht TV nennt und die Licht Schrank und Kranz gleichzeitig einschaltet.
Was leider nicht Zuverlässig klappt. Da wird immer wieder mal Licht Kranz durch das Skript ausgeschaltet, da er wohl nicht schnell genug die Statusmeldung erhält, das Schrank an ist. Vermute ich. Habe keine Lösung gefunden. Die Lampen nacheinander einschalten, würde gehen, will ich aber nicht.
Moin,
KVS steht für "Key-Value Store" (Schlüssel-Wert-Speicher)
Es speichert den aktuellen Wert, bzw. das was er gerade erhalten hat. Zumindest verstehe ich das so. Wenn Skript aus und eingeschaltet wird, funktioniert es wieder nicht, da er wie vorher, den aktuellen Status der Shellys wieder nicht hat.
Ich habe versucht, GetDeviceStatus-Funktion (http.get Statusabfrage), mit Hilfe von ChatGPT, einzubauen. So wie es auszieht funktioniert es.
Skript aus -> Licht Kranz an -> Skript einschalten -> nach ca. 4 Sec. wird Licht Kranz ausgeschaltet.
Die Bedingungen werden beachtet. Danach ist das Skript natürlich schneller als 4 Sec.
Status wird einmal beim Start des Scripts und zusätzlich 4x am Tag aktualisiert. Denke, das reicht für eine zuverlässige Funktion.
Das waren jetzt wieder mehrere Stunden und ganz verstanden habe ich es trotzdem nicht.
Hier mein Aktuelle Skript:
// Konfiguration
var shelly_Password = ""; // Das Shelly-Passwort ist nur erforderlich, wenn ein Gerätepasswort festgelegt wurde. Das lokale und das Remote-Passwort müssen identisch sein.
var shelly_Licht_Wohnzimmer = "http://192.168.178.20/relay/1/Status";
var shelly_Licht_Kranz = "http://192.168.178.20/relay/0/Status";
var shelly_Licht_Schrank = "http://192.168.178.22/relay/0/Status";
var shelly_Licht_Schlafzimmer = "http://192.168.178.28/light/0/Status";
var endpoint_Name = "Kranzautomatic"; // Ein beliebiger Name als Zeichenfolge
var debug = true; // Debug-Protokollausgaben aktivieren
// Globale Variablen
var saved_states = {}; // Objekt zum Speichern einiger Remote-Zustände
var tH1 = 0; // Timer-Handler
// Funktion zum Speichern von Zuständen dauerhaft auf dem Shelly
function SaveStatesPermanent() {
try {
tH1 = 0; // Timer-Handler löschen
Shelly.call("KVS.Set", { key: "saved_states-" + endpoint_Name, value: saved_states }, function(response) {
if (response && response.body) {
console.log("Debug: Zustände dauerhaft gespeichert -->", saved_states);
} else {
console.error("Error: Konnte Zustände nicht dauerhaft speichern");
}
});
} catch (e) {
console.error('Error in SaveStatesPermanent():', e);
}
}
// Funktion zur Hauptlogik
function MainLogic() {
try {
if (debug) console.log("Debug: saved_states -->", saved_states);
tH1 ? Timer.clear(tH1) : tH1 = Timer.set(6 * 60 * 60 * 1000, false, SaveStatesPermanent);
// Hauptlogik hier
console.log("Debug: Vor der Bedingung");
// Wenn Licht Kranz an ist und alle anderen Lichter aus sind, schalte Licht Kranz aus
if (saved_states.Licht_Kranz === 'on' &&
saved_states.Licht_Wohnzimmer === 'off' &&
saved_states.Licht_Schrank === 'off' &&
saved_states.Licht_Schlafzimmer === 'off') {
console.log("Debug: Bedingung erfüllt, schalte Licht Kranz aus");
Shelly.call("http.get", { url: "http://192.168.178.20/relay/0?turn=off" }, function(response) {
if (response && response.body) {
console.log("Debug: Licht Kranz ausgeschaltet");
} else {
console.error("Error: Konnte Licht Kranz nicht ausschalten");
}
});
} else {
console.log("Debug: Bedingung nicht erfüllt");
}
} catch (e) {
console.error('Error in MainLogic():', e);
}
}
// Funktion zum Speichern von Remote-Zuständen und Aktualisierung
function SaveRemoteState(remote_state_key, remote_state_value) {
try {
saved_states[remote_state_key] = remote_state_value;
// Einfache Fallabfrageverwaltung
var value_error = '_[ ' + remote_state_value + ' ]_ is an invalid value!';
switch (remote_state_key) {
case 'Licht_Kranz':
case 'Licht_Wohnzimmer':
case 'Licht_Schrank':
case 'Licht_Schlafzimmer':
if (remote_state_value !== 'on' && remote_state_value !== 'off') throw new Error(value_error);
break;
default:
delete saved_states[remote_state_key];
throw new Error('_[ ' + remote_state_key + ' ]_ is an invalid key!');
}
MainLogic(); // Hauptlogik aufrufen
} catch (e) {
console.error('Error in SaveRemoteState():', e);
}
}
// Funktion zur Abfrage des Gerätestatus
function GetDeviceStatus(callback) {
try {
var urls = {
Licht_Wohnzimmer: shelly_Licht_Wohnzimmer,
Licht_Kranz: shelly_Licht_Kranz,
Licht_Schrank: shelly_Licht_Schrank,
Licht_Schlafzimmer: shelly_Licht_Schlafzimmer
};
Object.keys(urls).forEach(function (device) {
Shelly.call("http.get", { url: urls[device] }, function (response) {
if (response && response.body) {
var statusData = JSON.parse(response.body);
console.log(device + " Status:", statusData);
if (callback) callback(device, statusData);
}
});
});
} catch (e) {
console.error('Error in GetDeviceStatus():', e);
}
}
// Funktion beim Start des Skripts
function OnScriptStart() {
try {
// Lade gespeicherte Zustände beim Start des Skripts
Shelly.call("KVS.Get", { key: "saved_states-" + endpoint_Name }, function(response) {
if (response && response.body) {
saved_states = JSON.parse(response.body);
console.log("Debug: Gespeicherte Zustände geladen -->", saved_states);
}
// Rufe den Gerätestatus auf und verarbeite ihn
GetDeviceStatus(function (device, statusData) {
// Verarbeiten Sie den Status beim Start nach Bedarf
SaveRemoteState(device, statusData.ison ? 'on' : 'off');
});
});
} catch (e) {
console.error('Error in OnScriptStart():', e);
}
}
// Funktion für den HTTP-Endpunkt-Loop
function EndpointLoop(request, response) {
try {
response.code = 200;
response.body = 'ok';
response.send();
if (!request.query || request.query.indexOf('=') === -1) return;
SaveRemoteState(request.query.slice(0, request.query.indexOf('=')), request.query.slice(request.query.indexOf('=') + 1));
} catch (e) {
console.error('Error in EndpointLoop():', e);
}
}
// Registrieren Sie den HTTP-Endpunkt
HTTPServer.registerEndpoint(endpoint_Name, EndpointLoop);
// Rufen Sie die Funktion beim Start des Skripts auf
OnScriptStart();
Alles anzeigen
Denke kvs dürfte ausreichen. Soll ja nur einmal beim Starten, oder eventuell ein Mal am Tag, den Status aktualisieren.
Moin
@De kat, ich danke dir vielmals für den Skript. Es funktioniert, wie gedacht. Meine Versuche haben etliche Stunden gekostet und haben ihr Ziel nicht ganz erreicht.
Habe die http-Befehle in allen vier Shellys eingegeben und IP für das zu schaltendes Gerät.
Anfangs hat es nicht Funktioniert. Nachdem ich aber alle Shellys einmal an und wieder ausgeschaltet habe, hat der Skript dann funktioniert. Danach hat das Skript anscheinend erst die richtigen Statusmeldungen. Sollte man dran denken, da es wohl immer beim ersten Start des Skriptes nötig ist. Stromausfall, Neustart oder einfach kurzzeitige Netzwerkprobleme.
Jetzt muss es nur noch, auf Dauer, zuverlässig laufen.
Zu deinem Tipp mit „Endlos-Schleife immer wieder nach dem Status zu fragen.“ Denke das, dass wohl zuverlässiger währe. Aber Netzwerk-Traffic würde sich immer weiter erhöhen, vor allem wenn man anfängt immer mehr Skripte dieser Art zu nutzen.
Besser wäre, beim Start vom Skript, einmal den Geräte Status zu überprüfen, und Eventuell dann alle paar Stunden, oder einmal am Tag. So wäre es zuverlässiger, ohne Trafik. Auch bei Neustart oder sonstigen Störungen.
Mittlerweile sind mir einfache zusammenhänge des skriptens verständlich, leider bei weitem nicht wie es notwendig wäre.
Acrtion/Endpoint Variante =??
Hi,
ich habe die letzten Tage versucht das Skript mit meiner Szene zu erstellen. Hab es soweit hingekriegt, dass der Status der Shellys überprüft wird und wenn die entsprechenden Bedingungen erfüllt sind, die Szene ausgeführt wird. Soweit, so gut.
Das Problem, das ich jetzt habe, ist, Skript wird nur einmal ausgelöst. Danach kriegt es Statusänderungen nicht mit. Was ich jetzt dachte, wäre, über HTTP-Befehle den Status an dem Skript weiterzugeben und Skript wieder auszuführen.
Licht Kranz (Shelly 2.5) AN/AUS – HTTP an Script (auf Shelly Plus 2PM) – dieser führt Skript erneut aus
Es würde reichen, wenn der Status vom Licht Kranz weitergeben wird.
Irgendwas in der Art - „GET http://192.168.178.XXX/script/2/restartScript“
Hier einmal mein Skript:
// Licht Wohnzimmer
var shelly1 = {
name: "Licht Wohnzimmer",
type: "Shelly 2.5",
ip: "192.168.178.20",
channel: 1,
statusEndpoint: "/relay/1"
};
// Licht Kranz
var shelly3 = {
name: "Licht Kranz",
type: "Shelly 2.5",
ip: "192.168.178.20",
channel: 0,
statusEndpoint: "/relay/0/Status"
};
// Licht Schrank
var shelly4 = {
name: "Licht Schrank",
type: "Shelly Plug S",
ip: "192.168.178.22",
channel: 0,
statusEndpoint: "/relay/0/Status"
};
// Licht Schlafzimmer
var shelly5 = {
name: "Licht Schlafzimmer",
type: "Shelly Color Bulb",
ip: "192.168.178.28",
channel: 0,
statusEndpoint: "/light/0/Status"
};
// Funktion zum Abrufen des Shelly-Status
function getShellyStatus(shelly, callback) {
try {
Shelly.call(
"HTTP.GET",
{ url: "http://" + shelly.ip + shelly.statusEndpoint },
function (response, error_code, error_message, user_data) {
if (error_code === 0) {
shelly.status = JSON.parse(response.body);
} else {
print("Fehler beim Abrufen des Status von " + shelly.name + ": " + error_message);
shelly.status = {}; // Setze status auf ein leeres Objekt, um undefined zu verhindern
}
// Rufe das Callback auf, um zu signalisieren, dass die Statusaktualisierung abgeschlossen ist
callback();
},
this
);
} catch (e) {
print("Fehler beim Abrufen des Status von " + shelly.name + ": " + e);
shelly.status = {}; // Setze status auf ein leeres Objekt, um undefined zu verhindern
// Rufe das Callback auf, um zu signalisieren, dass die Statusaktualisierung abgeschlossen ist
callback();
}
}
// Funktion zum Ausführen einer Aktion
function executeAction(shelly, actionUrl) {
try {
print("Debugging: Aktion wird ausgeführt für " + shelly.name);
Shelly.call(
"HTTP.GET",
{ url: actionUrl },
function (response, error_code, error_message, user_data) {
if (error_code === 0) {
print("Aktion erfolgreich ausgeführt für " + shelly.name);
} else {
print("Fehler beim Ausführen der Aktion für " + shelly.name + ": " + error_message);
}
},
this
);
} catch (e) {
print("Fehler beim Ausführen der Aktion für " + shelly.name + ": " + e);
}
}
// Funktion für die Szene
function executeScene() {
print("Debugging: Szene wird überprüft");
// Überprüfe die Bedingungen der Szene
if (
shelly1.status && shelly1.status.ison === false && // Licht Wohnzimmer Aus
shelly4.status && shelly4.status.ison === false && // Licht Schrank Aus
shelly3.status && shelly3.status.ison === true && // Licht Kranz An
shelly5.status && shelly5.status.ison === false // Licht Schlafzimmer Wand Aus
) {
print("Debugging: Szene wird ausgelöst");
// Wenn alle Bedingungen erfüllt sind, führe die Aktion aus
executeAction(shelly3, "http://192.168.178.20/relay/0?turn=off");
}
}
// Aktualisierte Hauptprogramm-Funktion
function main() {
// Zähler für die abgeschlossenen Statusaktualisierungen
var completedUpdates = 0;
// Callback-Funktion für jede abgeschlossene Statusaktualisierung
function statusUpdateCallback() {
completedUpdates++;
// Wenn alle Statusaktualisierungen abgeschlossen sind, überprüfe die Szene
if (completedUpdates === 4) {
executeScene();
}
}
// Aktualisiere die Statusinformationen für alle Shelly-Geräte
getShellyStatus(shelly1, statusUpdateCallback);
getShellyStatus(shelly3, statusUpdateCallback);
getShellyStatus(shelly4, statusUpdateCallback);
getShellyStatus(shelly5, statusUpdateCallback);
}
// Aufruf der Hauptprogramm-Funktion
main();
Alles anzeigen
Moin,
kein Problem, machst es wenn mal Zeit ist.
Ich bin immer noch dabei. Einmal angefangen, gibt es meistens kein Ende mehr.
Habe mittlerweile 3 Funktionierende Scripts, ohne Ahnung von der Materie zu haben. Wie gesagt durch copy/paste, ChatGPT und leichte Anpassungen, die ausnahmsweise verstanden habe.
- Blu Butoon (ein Gerät, das andere Shellys über Http steuert)
- Blu Door/Windows (mit mehreren Geräten, die jeweils ihre eigene Aktionen ausführen)
- Anwesenheit-Handy (Anleitung hier im Forum, sehr einfach, danke dafür. Funktioniert)