NEWS
ack in Skripten setzen?
-
Hi,
zum Thema ack bei States habe ich ein paar ältere Threads und Erklärungen gefunden, z.B.
https://forum.iobroker.net/topic/773/setstate-mit-acknowledge/11
https://forum.iobroker.net/topic/11657/gelöst-datenpunkt-aktualisieren-ohne-aktion
https://github.com/ioBroker/ioBroker/wiki/Adapter-Development-Documentation#commands-and-statusesMir ist bewusst dass der "normale" Anwendungsfall ist, ein Command oder Status eines Adapters mit
ack=false
zu setzen, und der Adapter bestätigt das in dem erack=true
setzt.Kann und darf ich das auch bei meinen eigenen Datenpunkten innerhalb von
0_userdata.0
verwenden?
Also ich setze in eimem TS-Skript einen eigenen Datenpunkt mitack=false
und in einer zweiten Funktion subscribe ich darauf, verwende ihn weiter und setze darin dannack=true
?Wenn ja, gibt es dazu einen einfachen Weg?
So erscheint es mit recht umständlich:
const dpMyUserState: string = '0_userdata.0.testState'; subscribe ({id: dpMyUserState}, function (obj) { /* do the stuff*/ /* set the ack */ setState (obj.id, obj.state.val, true); });
Viele Grüße
Marco -
@stan23 sagte: setze in eimem TS-Skript einen eigenen Datenpunkt mit ack=false und in einer zweiten Funktion subscribe ich darauf, verwende ihn weiter und setze darin dann ack=true?
Wozu soll das gut sein? Virtuelle Datenpunkte setzt man mit ack = true.
-
@paul53 sagte in ack in Skripten setzen?:
@stan23 sagte: setze in eimem TS-Skript einen eigenen Datenpunkt mit ack=false und in einer zweiten Funktion subscribe ich darauf, verwende ihn weiter und setze darin dann ack=true?
Wozu soll das gut sein? Virtuelle Datenpunkte setzt man mit ack = true.
@stan23 bei selbst definierten Daten punkten darfst du das natürlich tun. Du solltest aber in deinem trigger dann auch sicherstellen das ack false ist und ansonsten nix tun.
@paul53 zum Thema wozu: wenn ein Skript sich wie ein Adapter verhalten soll und mit dem ack bestätigen soll das die gewünschte Funktion ausgeführt wurde ist das ein Weg. Ein weiterer Grund ist das verhindern von “change loops”
Von “extern” wird der state üblicherweise ohne ack gesetzt. Wenn du jetzt 2 states hast die z.bsp. Eine Umrechnung machen und sich gegenseitig beeinflussen dann kannst du im Skript auf setzen ohne ack triggern und das Ergebnis mit ack setzen. Dadurch verhinderst du einen change Loop ohne im trigger durch prüfen von obj.state.from Anpassungen durch den JS adapter zu unterbinden.
A.
-
@asgothian sagte: wenn ein Skript sich wie ein Adapter verhalten soll
@stan23 sagte in ack in Skripten setzen?:
in einer zweiten Funktion subscribe ich
Eine zweite Funktion ist nicht unbedingt ein zweites Skript.
-
@asgothian said in ack in Skripten setzen?:
Du solltest aber in deinem trigger dann auch sicherstellen das ack false ist und ansonsten nix tun.
Stimmt, das müsste also so aussehen, damit da keine Schleife entsteht:
const dpMyUserState: string = '0_userdata.0.testState'; subscribe ({id: dpMyUserState, ack: false}, function (obj) { /* do the stuff*/ /* set the ack */ setState (obj.id, obj.state.val, true); });
Danke