Meine laufende Analyse deines Skripts ...
Vermutlich werde ich diesen Post nach und nach erweitern. Wenn am Ende das Wort "fertig" steht, habe ich meine Analyse (vorläufig) abgeschlossen.
Nicht alles, was ich anmerke, hat unmittelbar mit der Funktionalität zu tun.
1. Alter URL zu neuem Dimmer - ab Zeile 139, s.a. deine Zeile 93.
Shelly.call(
"http.get",
{ url: "http://" + deviceIp + "/relay/0?turn=toggle" },
null,
null
);
Dieser URL funktioniert, solange die Rückwärtskompatibilität erhalten bleibt und sich das auch auf die Component Light auswirkt. Ich täte stattdessen "https://shelly-forum.com/rpc/light.toggle?id=0" verwenden, was dafür vorgesehen ist. Und wozu die zwei überflüssigen null Werte? Das macht das Skript nur unübersichtlicher.
Bspw. führt eine kurze Variante zu mehr Übersichtlichkeit und kann von anderen leichter gelesen werden:
else if (logicalConfig.type === "switch" && event.info.state) {
logMessage("Button " + logicalId + ": Sending toggle switch command.");
Shelly.call("http.get", {url: "http://" + deviceIp + "/rpc/light.toggle?id=0"});
}
2. Eine andere Sequenz, die viel Platz einnimmt ab Zeile 111. Mein Vorschlag muss dir nicht gefallen. Er soll zeigen, wie ein Skript erheblich kürzer und imho übersichtlicher gestaltet werden kann.
else if (event.info.event === "long_push") {
dimstate[logicalId] = true;
if (up[logicalId]) {
up[logicalId] = false;
logMessage("Button " + logicalId + ": Sending dimming down command.");
Shelly.call(
"http.get",
{ url: "http://" + deviceIp + "/rpc/Light.DimDown?id=0&fade_rate=3" },
null,
null
);
} else {
up[logicalId] = true;
logMessage("Button " + logicalId + ": Sending dimming up command.");
Shelly.call(
"http.get",
{ url: "http://" + deviceIp + "/rpc/Light.DimUp?id=0&fade_rate=3" },
null,
null
);
}
Alles anzeigen
Mein Vorschlag mit derselben Funktionalität - 7 statt 21 Codezeilen:
else if (event.info.event === "long_push") {
dimstate[logicalId] = true;
let up = up[logicalId];
up[logicalId] = !up;
logMessage("Button " + logicalId + ": Sending dimming " + (up?"down":"up") +" command.");
Shelly.call("http.get", {url: "http://" + deviceIp + "/rpc/Light.Dim" + (up?"Down":"Up")+"?id=0&fade_rate=3"});
}
Wenn du bisher (wohlwollend) gelesen hast, kommt vermutlich hier die Belohnung. 
S.a. API Dokumentation: https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/Light
In Zeile 82 steht:
{ url: "http://" + deviceIp + "/rpc/Light.Stop?id=0" },
Statt Light.Stop muss es Light.DimStop lauten.
{ url: "http://" + deviceIp + "/rpc/Light.DimStop?id=0" },
Bin gespannt ...
fertig