Mechanoid1 und ggf. andere
Danke an joma0815 für die Vorlage zum Nachrichten pushen.
Das folgende Skript beinhaltet zwei Teile.
- Die Funktion toggleInpEn(id) schaltet zwischen Freigabe und Sperre des Eingangs input:id um - wie bereits in #5 dargelegt.
- Ein Eventhandler reagiert auf die Konfigurationsänderung von input:x.
Er triggert zwei verschiedene Szenen, welche vom Anwender in der Cloud anzulegen sind. Ich habe zwei manuell startbare Szenen dafür getestet, die jeweils eine Push Nachricht senden, wie "Eingang gesperrt" bzw. "Eingang freigegeben". Hier kann der Anwender die Nachrichtentexte verwenden, die ihm zusagen.
Der Eventhandler hat den Vorteil, dass immer auf eine Änderung der input:x Konfiguration reagiert wird, unabhängig von der Quelle dieser Änderung.
Der von mir erstellte Eventhandler hat folgende Einschränkung, welche vermutlich zumeist nicht als störend empfunden werden.
Es wird auf jede Konfigurationsänderung jedes Eingangs reagiert - auch auf nicht enable Änderungen (name, type, invert). Eine selektive Verarbeitung sowohl des Eingangs als auch der geänderten Eigenschaft ist prinzipiell möglich, letzteres muss aber programmiert werden, weil die Antwort seitens der Firmware hierzu keine Information liefert. Diese Programmierung muss das KVS verwenden und die Änderung im Detail ermitteln. Diesen Aufwand wollte ich nun nicht treiben.
Falls auf Konfigurationsänderungen zweier Eingänge reagiert werden soll, sind b.a.w. vier Nachrichtenszenen zu erstellen. Falls es möglich ist, die Nachricht einer Szene via Skript zu ändern, so erscheint dies zumindest nicht zweckmäßig und ggf. leicht fehlerträchtig.
Das komplettierte Skript
function toggleInpEn(id) {
Shelly.call("Input.GetConfig", {id:id},
function(res, errc, errm, id) {
if(errc) {console.log(errc, errm); return;}
print(JSON.stringify(res));
Shelly.call("Input.SetConfig", {id:id, config:{enable:!res.enable}},
function(res, errc, errm) {
if(errc) {console.log(errc, errm); return;}
print(JSON.stringify(res));
}
);
}, id
);
}
// only for push messages
const CLOUD = {
server: 'https://shelly-xx-eu.shelly.cloud', // xx must be changed!
auth_key: 'your key', // Enter your cloud key!
}
const Scene = [ // Do change both scene id!
{id:1770311823950, msg:"input disabled"},
{id:1770311672088, msg:"input enabled"}
];
function sceneTrigger(i){
//Übergabe: Szene ID
if(Scene[i]===undefined || Scene[i]===null) return;
let url = CLOUD.server + '/scene/manual_run&auth_key=' +
CLOUD.auth_key + '&id=' + Scene[i].id;
Shelly.call('HTTP.GET',{'url': url},
function(resp, err, msg) {
if (err !== 0) {print ('Szene error: ', err, msg); return}
let ok = JSON.parse(resp.body).isok;
print(Scene[i].msg + ", Szene wurde " + (ok ? "" : "nicht ") + "ausgelöst");
}
);
}
function inpEn(ev) {
if(ev.name!=="input") return;
if(ev.info.event!=="config_changed") return;
//print(JSON.stringify(ev));
Shelly.call("Input.GetConfig", {id:ev.id},
function(res, errc, errm) {
if(errc) {console.log(errc, errm); return;}
print(JSON.stringify(res));
sceneTrigger(res.enable ? 1 : 0);
}
);
}
Shelly.addEventHandler(inpEn);
Alles anzeigen
Nachdem die Anpassungen in den Cloud Einträgen vorgenommen wurden und zwei Nachrichtenszenen in der Cloud erstellt wurden, müssen die Id der Szenen in der Konstanten Scene eingetragen/geändert werden. Danach sollte alles funktionieren. Was bitte? ...
Mechanoid1 drückt seinen Button1 lang -> die Freigabe von Eingang x wird geändert und auf das Smartphone mit der App "Shelly Smart Control" die passende Push Nachricht gesendet. Somit kann er erkennen, ob seine smarte Klingel freigegeben oder gesperrt ist. 
Edit:
Diese Lösung ist alles andere als autark und verbraucht relativ viel Energie. Das sollte wenigstens bekannt sein.
Eine autarke Lösung, welche erheblich weniger Energie verbraucht, wäre das Schalten einer LED (evtl. rot/grün) vor Ort als Rückmeldung. Nachteil: Anwender muss dort sein, wo die LED sichtbar ist, wenn er eine Rückmeldung haben will.
Die obige energieaufwändigere Lösung ist immerhin remote (als Dienstleistung) möglich, also bspw. auch, wenn jemand keine Klingel hören will, dies aber nicht selbst einrichten kann.