NEWS
[done]Erweiterungswunsch
-
Hallo,
das ist schon ein ganz tolles Projekt! Was hier auf die Beine gestellt wurde ist echt super!
Einen Erweiterungswunsch im JavaScript-Adapter hätte ich. Soweit ich das sehe gibt es zwar
ein on(), bzw. subscribe(), aber kein unsubscribe(). Ein on(), temporär in einer function zu nutzen
ist praktisch um z.B. nach Abschluss einer eingeleiteten Aktion eine weitere Aktion auszuführen.
Das funktioniert soweit auch, nur bleibt die Subscription auch nach verlassen der Funktion bestehen.
Daher fehlt in dieser Situation ein unsubscribe().
Ich weiß, das ließe sich auch über ein globales subscribe() und entsprechender Abfrage bestimmter
Variablen erledigen, aber das ist nicht so elegant und es wird dauerhaft eine Subscription verwendet,
die nur temporär benötigt wird.
Hier einmal ein Script Beispiel und ein paar Zeilen Code, wie der JavaScript-Adapter erweitert werden
könnte. Ist nur ein Vorschlag um meinen Wunsch zu erläutern.
var dp = "test.switch"; dp1 = "test.switch1"; createState(dp, dp); createState(dp1, dp1); on({id:"javascript.0." + dp, change: 'any'}, function (data) { log ("+++++++++++++++++++++"); on({id:"javascript.0." + dp1, change: 'any', uid: "0815"}, function (data) { log("2222222222222"); //unsubscribe("0815"); unsubscribe("javascript.0." + dp1); }); });
javascript.js
`unsubscribe: function (pattern) { for (var i = subscriptions.length - 1; i >= 0 ; i--) { //if (subscriptions[i].name == name && subscriptions[i].pattern.uid== pattern) { if (subscriptions[i].name == name && subscriptions[i].pattern.id == pattern) { adapter.log.info("unsubscribe: " + name + ': ' + pattern); subscriptions.splice(i, 1); sandbox.__engine.__subscriptions -= 1; break; } } }, subscribe: function (pattern, callbackOrId, value) {` Ich würde mich sehr über eine Reaktion freuen.[/i][/i][/i][/i]
-
Ich werde nicht groß reagieren. Ich baue einfach ein. :lol:
Danke für die fertige Lösung. :!:
-
Eine gute Ergänzung zu clearSchedule()
Btw: ich denke, dass ich das Problem bei clearSchedule gefunden habe:
`clearSchedule: function (schedule) { for (var i = 0; i < script.schedules.length; i++) { if (script.schedules[i]) {` Wenn ich es richtig verstehe würde dieses code alle scheduled Funktionen entfernen. Das slice sollte ein splice(-i,1), oder? Solte es so ausehen? Ich bin ein Javscript anfanger so vielleicht habe ich es nicht richtig verstanden... `~~[code]~~ Wie kann ich es testen? Kann ich das javascript.js einfach bei mir editieren und dann das Javascript adpaptor neue starten? clearSchedule: function (schedule) { for (var i = script.schedules.length - 1; i >= 0 ; i--) { if (script.schedules[i] == schedule) { if (!mods['node-schedule'].cancelJob(script.schedules[i])) { adapter.log.error('Error by canceling scheduled job'); } delete script.schedules[i]; script.schedules.splice(i, 1); return true; } } return false; },` [/i][/i][/i][/code][/i]
-
Hast du absolut recht:
script.schedules.splice(i, 1);
ist richtig.
-
https://github.com/ioBroker/ioBroker.ja … nsubscribe
### 1.0.4 (2015-10-30) * (bluefox) add unsubscribe
### unsubscribe
unsubscribe(id or handler)
Remove all subscriptions for given object ID or for given handler.
// By handler var mySubscription = on({id: "javascript.0.myState", change: 'any'}, function (data) { // unsubscribe after first trigger if (unsubscribe(mySubscription)) { log('Subscription deleted'); } }); // by Object ID on({id: "javascript.0.myState1", change: 'ne'}, function (data) { log('Some event'); }); on({id: "javascript.0.myState1", change: 'any'}, function (data) { // unsubscribe if (unsubscribe("javascript.0.myState1")) { log('All subscriptions deleted'); } });
-
Hast du absolut recht:
script.schedules.splice(i, 1);
ist richtig. `
Das "schedule" Parameter wird nicht benutz, oder? Sollte das if nicht so sein?
`if ((script.schedules[i]) && (script.schedules[i] == schedule)){` [/i][/i]
-
Oh je…
Ja. Aber so reicht:
`if (script.schedules[i] == schedule){` Danke.[/i]
-
Oh je…
Ja. Aber so reicht:
`if (script.schedules[i] == schedule){` Danke. 1.0.5 aktiviert und jetzt funktionier alles prima: kein Absturz mehr! Vielen Dank! Ich werde meine State Machine script in anderem Post senden, wo ich clearSchedule benutze. Vielleicht hilft es jemand.[/i] ``` `
-
Danke an Bluefox. Super, auch dass das Object als eindeutige Bedingung verwendet werden kann. Bin begeistert, auch über die schnelle Umsetzung.