NEWS
VIS Werte werden von ioBroker nicht bestätigt (ack = false)
-
Hallo zusammen,
über die Suche habe nichts auf Anhieb gefunden. Sicherlich ist meine Frage auch schnell gelöst, aber alleine komme ich nicht weiter.Ich erzeuge meine Datenpunkte immer mit createState (siehe nachstehend). Das Beschreiben einiger dieser Datenpunkte erfolgt erstmalig über die jqui Eingabemöglichkeiten mittels VIS. Die Werte werden auch übernommen, allerdings werden diese von iobroker nicht bestätigt.
// Tahoma createState('javascript.0.Tahoma.Beschattungsautomatik', false, false, {type:"boolean", name:"Beschattungsautomatik", role:"indicator.state", unit:""}); createState('javascript.0.Tahoma.WetterBeschattungEmpfehlung', false, false, {type:"boolean", name:"WetterBeschattungEmpfehlung", role:"indicator.state", unit:""}); createState('javascript.0.Tahoma.BeschattungLuxHinten', false, false, {type:"number", name:"BeschattungLuxHinten", role:"level.color.luminance", unit:"Lux"}); createState('javascript.0.Tahoma.BeschattungLuxVorne', false, false, {type:"number", name:"BeschattungLuxVorne", role:"level.color.luminance", unit:"Lux"}); createState('javascript.0.Tahoma.BeschattungBewoelkung', false, false, {type:"number", name:"BeschattungBewoelkung", role:"weather.clouds.forecast", unit:"%"}); createState('javascript.0.Tahoma.Programmsteuerung_Startzeit', '6:30', false, {type:'string', name:"Programmsteuerung_Startzeit", role:"value.datetime", unit:""}); createState('javascript.0.Tahoma.Programmsteuerung_Endzeit', '18:00', false, {type:'string', name:"Programmsteuerung_Endzeit", role:"value.datetime", unit:""}); createState('javascript.0.Tahoma.Programmsteuerung_Startzeit_Stunde', '6', false, {type:'string', name:"Programmsteuerung_Startzeit_Stunde", role:"value.datetime", unit:""}); createState('javascript.0.Tahoma.Programmsteuerung_Startzeit_Minute', '30', false, {type:'string', name:"Programmsteuerung_Startzeit_Minute", role:"value.datetime", unit:""}); createState('javascript.0.Tahoma.Programmsteuerung_Endzeit_Stunde', '18', false, {type:'string', name:"Programmsteuerung_Endzeit_Stunde", role:"value.datetime", unit:""}); createState('javascript.0.Tahoma.Programmsteuerung_Endzeit_Minute', '0', false, {type:'string', name:"Programmsteuerung_Endzeit_Minute", role:"value.datetime", unit:""});
Ist das so, oder wo habe ich was vergessen einzustellen?
-
@SaschaS sollen diese Daten noch irgendwie übernommen und verarbeitet werden?
Von einem Adapter?Wenn es reine eigene Datenpunkte sind müssten sie mit ack=true übergeben werden.
Ob und wie das mit den Widgets out of the Box geht weiß ich nicht. -
@SaschaS sagte:
allerdings werden diese von iobroker nicht bestätigt.
ioBroker bestätigt keine Werte. Dies tun Instanzen mit ihren Datenpunkten. Eigene Datenpunkte können (per Script), müssen aber nicht bestätigt werden.
-
-
@SaschaS sagte:
wie ich per Skript Datenpunkte bestätigen lassen kann?
Wozu möchtest Du sie bestätigen lassen ?
on({id: /^javascript\.0\.Tahoma\..+/, ack: false}, function(dp) { setState(dp.id, dp.state.val, true); });
Problem: Auswertende Skripte müssen auf Wertänderung oder ack = true triggern, da sonst zweimal getriggert wird.
-
Grundsätzlich werden bzw. müssen nach meiner Erfahrung Werte ohne ack geschrieben werden, da sie von Adaptern weiterverarbeitet werden die quasi direkt mit der Hardware kommunizieren.
Wenn Du also über VIS einen Wert setzt, wird er standardmässig bewusst ohne ack gesetzt, damit der "HW-"Adapter oder verarbeitende Adapter erkennen kann, welchen Wert er umsetzen muss und bestätigt die Umsetzung mit einem ack=true.
In sofern wäre eine Visualisierungssoftware, die selbst Änderungen bestätigt völliger Nonsens.
Ist die Verarbeitung rein logisch, dann müsstest Du über Deine Logikmaschine diese Werte auch bestätigen - das ist in meinen Augen völlig korrekt. Insofern ist die Bestätigung über ein Script sinnvoll.In NodeRed wird das bei den iobroker Ausgaben dadurch gesteuert, indem man angibt ob Änderungen als Wert/Value (ack=true) oder als Kommando/Command (ack=false) interpretiert werden sollen. Viele wundern sich, warum dann nichts passiert, wenn sie Werte als Values schreiben. Und die Erklärung ist in meinen Augen die obige.
Logik Maschinen (Java oder NodeRed) können nun auswerten, wann ein Wert gesetzt wurde und wann er vom Adapter bestätigt wurde und ggf. unterschiedlich reagieren.
-
Noch ergänzend zum Beitrag von mickym:
Man kann sich das ack zur Unterscheidung Soll/Ist vorstellen. Angenommen man hat einen Button in vis mit einer Lampe als Statussymbol. In dem Moment, indem man den Button betätigt, wird ein Kommando gesendet: Schalte Lampe ein (=Soll). Dabei ist ACK=false, denn die Bestätigung der Lampe ist ja noch nicht da. Erst wenn die Lampe auch wirklich reagiert hat und an ist, schickt sie ihren Status mit ACK=true (=Istwert) zurück, dann weiß vis, dass die Lampe auch wirklich angegangen ist. Im Falle von z.B. einer Hue-Lampe, die gerade eine Funkstörung hat, würde keine Bestätigung (ACK=true) zurückkommen, damit weiß man dass der Soll-Befehl nicht ausgeführt werden konnte.
Bei einer Jalousie wäre das beispielsweise so: Ich will eine offene (Wert: 0 % geschlossen) Jalousie herunterfahren - ich setze den Sollwert auf 100 % geschlossen. Die Markise braucht eine gewisse Zeit und sendet, während sie fährt, die ganze Zeit Ihren Status ... 10 %, 20 %, 30 %, ... und zwar immer als IST-Wert (ACK=true). Der Sollwert (100 %) bleibt die ganze Zeit unverändert, bis die Jalousie ihr Ziel erreicht hat. Während der ganzen Zeit kann vis aber die aktuelle Position ermitteln und entsprechend anzeigen. Das geht nur, wenn Sie Soll/Ist unterscheiden kann - und dazu brauche ich das Flag "ACK".
Das Flag sollte nur der Teil des Systems setzen, der auch wirklich den aktuellen Zustand kennt.
Ich hoffe, das ist jetzt etwas klarer geworden?