Hallo zusammen,
Ich bin relativ neu in der Shelly Welt und stolpere über ein Problem mit den Scripten, das ich mir nicht erklären kann.
Ich habe ein Script geschrieben, das auf einem Shelly Plus i4 läuft und bei Tastendruck über zwei Shelly Plus 2PM zwei Rollläden steuert.
Das Script läuft auch, es funktioniert wie es soll.
ABER: Wenn ich während das Script läuft erneut auf Sichern klicke (mit oder ohne etwas geändert zu haben), bekomme ich in der Console die Fehlermeldung "MJS error: parse error at line 54: []" und das Script bricht ab. Es lässt sich danach ganz normal wieder Starten.
Wenn das Script nicht läuft, lässt es sich ohne Fehler sichern.
Der Shelly Plus i4 lief auf Firmware 0.12.0 und zum Testen habe ich auf 0.13.0-beta1 upgedated. Das hat keinen Unterschied gemacht.
Die Zeilennummer in der Fehlermeldung variiert, wenn ich das Script verändere und landet dabei NICHT immer in derselben Zeile. Ich denke, die Zeilennummer steht nicht wirklich in einem Zusammenhang mit den Zeilen im Script.
(Ja ich weiß, das Script ist komplizierter als nötig, darum soll es aber hier nicht gehen. Das hier gezeigte Script ist tatsächlich eine abgespeckte Version. Wenn ich es noch weiter kürze, tritt der Fehler nicht mehr auf, egal was ich entferne)
Hat jemand eine Idee, warum es zu dem Fehler kommt? Oder wie ich ihn vermeiden kann?
Viele Grüße,
Martin
let config = [
{input: 0, event: "btn_down",
action: {shelly: "shelly-az-rollladen-dt", method: "Cover.CLose", parameters: {id: 0}}},
{input: 0, event: "long_push",
action: {shelly: "shelly-az-rollladen-dt", method: "Cover.GoToPosition", parameters: {id: 0, pos: 22}}},
{input: 1, event: "btn_down",
action: {shelly: "shelly-az-rollladen-dt", method: "Cover.Open", parameters: {id: 0}}},
{input: 2, event: "btn_down",
action: {shelly: "shelly-az-rollladen-fe", method: "Cover.CLose", parameters: {id: 1}}},
{input: 2, event: "long_push",
action: {shelly: "shelly-az-rollladen-fe", method: "Cover.GoToPosition", parameters: {id: 1, pos: 22}}},
{input: 3, event: "btn_down",
action: {shelly: "shelly-az-rollladen-fe", method: "Cover.Open", parameters: {id: 1}}}
];
let RemoteShelly = {
_cb: function (result, error_code, error_message, transfer) {
if (!result){print("remote shelly not reached"); return;}
let rpcResult = JSON.parse(result.body);
let rpcCode = result.code;
let rpcMessage = result.message;
transfer.callback(rpcResult, rpcCode, rpcMessage, transfer.userdata);
},
composeEndpoint: function (method) {
return "http://" + this.address + "/rpc/" + method;
},
call: function (rpc, data, callback, userdata) {
let postData = {
url: this.composeEndpoint(rpc),
body: data,
};
let transfer = {
callback: callback,
userdata: userdata
};
Shelly.call("HTTP.POST", postData, RemoteShelly._cb, transfer);
},
getInstance: function (address) {
let rs = Object.create(this);
rs.getInstance = null;
rs.address = address;
return rs;
},
};
function processAction(action) {
let myShelly = RemoteShelly.getInstance(action.shelly);
myShelly.call(action.method, action.parameters, function(){});
}
function handleEvent(event) {
for (let i=0; i<config.length; i++) {
let cfg = config[i];
if (cfg.input === event.info.id && cfg.event === event.info.event) {
Timer.set(cfg.delay || 0,false,processAction,cfg.action);
}
}
}
Shelly.addEventHandler(handleEvent, null);
Alles anzeigen