NEWS
Bestätigt/Acknowledged-Flag Bedeutung - ein Mysterium ;-)
-
@loredo sagte: allein für sich alleine werkelt.
Weshalb muss er von sich aus das Ack-Flag beeinflussen?
-
@paul53 das ist genauso wie bei einem physischen Gerät hinten dran: Ein Logik-Adapter bekommt eine Kommando-Anfrage mit
ack=false
und kann sich überlegen, ob er es verarbeitet oder nicht. Ein physisches, externes Gerät macht das genauso und je nachdem, wie "gut" die externe API implementiert ist, liefert das externe Gerät dann den neuen Wert als Bestätigung zurück oder eben den alten Wert wieder. In beiden Fällen wird der Adapter aber die Antwort dann mitack=true
schreiben. Ich mache in meinem Residents Adapter nichts anderes, nur dass ich auch so geschäftig bin zusätzlich noch das Quality Flag zu benutzen, so wie es gedacht ist -
@loredo sagte: liefert das externe Gerät dann den neuen Wert als Bestätigung zurück oder eben den alten Wert wieder. In beiden Fällen wird der Adapter aber die Antwort dann mit ack=true schreiben.
Im dritten Fall, dass das Gerät sich nicht zurück meldet, schreibt ein Geräte-Adapter nichts zurück. Das würde wohl eher dem Fall "nicht annehmen" entsprechen.
-
@paul53 sagte in Bestätigt/Acknowledged-Flag Bedeutung - ein Mysterium :
@loredo sagte: liefert das externe Gerät dann den neuen Wert als Bestätigung zurück oder eben den alten Wert wieder. In beiden Fällen wird der Adapter aber die Antwort dann mit ack=true schreiben.
Im dritten Fall, dass das Gerät sich nicht zurück meldet, schreibt ein Geräte-Adapter nichts zurück. Das würde wohl eher dem Fall "nicht annehmen" entsprechen.
Jaein, das kommt eben ganz drauf an. Einige Adapter reagieren leider so, selbst wenn sie eigentlich "verbunden" sind und werten die Rückmeldung (oder eben das Fehlen jener) nicht gut aus. Ist zumindest meine bescheidene Beobachtung und ist nicht der Anspruch, den ich an einen gut implementierten Adapter hätte.
-
@loredo
Es entspricht der Philosophie von ioBroker, dass der Datenpunkt ein Sollzustands-Datenpunkt (val = neuer Wert, ack = false) bleibt, solange die Rückmeldung ausbleibt. -
Ich hatte mir zum ack Thema mal den github-iobroker-wiki-Artikel notiert: https://github.com/ioBroker/ioBroker/wiki/Adapter-Development-Documentation#commands-and-statuses
Ist das noch aktuell?
-
@paul53 Es ist halt ein Unterschied nicht zu reagieren oder etwas nicht anzunehmen und zurückzuweisen. Nicht zu reagieren, obwohl man das Kommando wahrgenommen hat, ist halt nicht zu unterscheiden davon, dass der Adapter einfach nicht läuft. Ich finde es aber wichtig das zu unterscheiden. IMHO sollte ein laufender Adapter immer etwas tun, aber mir persönlich reicht da ein einfacher Logeintrag nicht. Ich möchte das auch Event basiert verarbeiten können und auch direkt im Admin Adapter sehen können, ohne das Log zu durchforsten.
Die von dir besagte Philosophie stört mich nicht selten und hinterlässt bei mir oft den Eindruck eines nur halb fertigen Adapters.
Es ist aber erlaubt, dass du eine andere Meinung hast als ich -
@klassisch sagte: Ist das noch aktuell?
Ja, und es beschreibt es so, wie ich geschrieben habe.
Beispiel: HomeMatic, Datenpunkt MANUAL_MODE: Darüber schaltet man den Thermostaten in den manuellen Modus und man übergibt den manuellen Sollwert. Dieser Datenpunkt wird nie bestätigt.Anmerkung: ioBroker ist ursprünglich aus einer Erweiterung für HomeMatic hervorgegangen. Das ist für Dich sicher nicht neu, aber wahrscheinlich für @Loredo.
-
@paul53 Korrekt. Nein das ist nicht neu für mich, sondern an vielen Stellen sehr offensichtlich (was nicht schlimm ist). Ich kenne ioBroker auch schon seit etlichen Jahren, auch wenn ich ihn noch nicht so lange aktiv nutze.
Das ist für mich aber deshalb nicht dauerhaft in Stein gemeißelt, sondern kann sich weiterentwickeln
Ich habe für meinen Adapter entschieden, dass ich das Verhalten so sinnvoller finde. Vor allem auch deshalb, weil eine Darstellung der tatsächlich korrekten Werte über eine externe GUI möglich sein soll. Da stört es, wenn in der GUI dann plötzlich aber Werte angezeigt werden, die gar nicht dem Ist-Zustand entsprechen. Meine oberste Priorität ist immer, den Ist-Zustand zu jeder möglichen Zeit richtig anzuzeigen, nicht den Soll-Zustand. -
@loredo sagte: Ist-Zustand zu jeder möglichen Zeit richtig anzuzeigen, nicht den Soll-Zustand.
Dann muss aber auch der Wert mit dem Ist-Wert überschrieben werden - nicht nur das Ack-Flag. Der Fehlversuch wird dann natürlich in der History mit aufgezeichnet.
-
@paul53 sagte in Bestätigt/Acknowledged-Flag Bedeutung - ein Mysterium :
@loredo sagte: Ist-Zustand zu jeder möglichen Zeit richtig anzuzeigen, nicht den Soll-Zustand.
Dann muss aber auch der Wert mit dem Ist-Wert überschrieben werden - nicht nur das Ack-Flag.
Hatte ich ja oben auch so geschrieben, dass ich
oldState
mitack=true
ergänzt von z.B.q=0x40
zurückschreibe
oldState
muss sich halt der laufende Adapter selbst organisieren, weshalb es auch unschön ist, wenn Änderungen an Objekten passieren, während der Adapter nicht läuft. der JS-Controller wäre besser dafür geeignet,oldState
(also nur die States mitack=true
) für alle Adapter bereitzuhalten, aber sowas gibts wohl bisher nicht.By the way, da fällt mir gerade wieder der Bug ein, der mir bei der Entwicklung begegnet ist:
getForeignStateAsync()
liefert nurack: false
Dadurch muss man beim zurückschreiben (je nachdem, wie lange der Adapter schon läuft) trotzdem nochmal explizit
ack=true
setzen. Das aber nur am Rande erwähnt, weil es auch was mit der Nutzung derack
Werte zu tun hat. Das macht es leider derzeit auch schwierig denack
-Wert außerhalb von Events abzuprüfen, weil der Wert eben immerfalse
ist und nietrue
</OffTopic> -
@wildbill
das stimmt und ich finde es bedauerlich!
Ich hätte gerne, dass ich mit setState() steuern könnte, ob ein Wert im History Adapter an die jeweilige DB übertragen wird. -
@wildbill sagte in Bestätigt/Acknowledged-Flag Bedeutung - ein Mysterium :
z.B. beim Harmony-Adapter zum Starten von Activities
da ist es ja tatsächlich so dass ein "working" über einen anderen Wert als der initiale oder der Zielwert ist.
Ich finde es richtig wenn das auch geloggt wird, da damit die korrekte Funktion ind Gänze abgebildet wird. -
@marty56 sagte in Bestätigt/Acknowledged-Flag Bedeutung - ein Mysterium :
Ich hätte gerne, dass ich mit setState() steuern könnte, ob ein Wert im History Adapter an die jeweilige DB übertragen wird.
Das wäre Bilanzfälschung!
Entweder ich logge jede Veränderung um auch später jeden Eingriff sehen zu können, oder ich lasse es.
"Beweise manipulieren" zu können, indem man aktiv bei bestimmten Aktionen die Spuren verwischt, halte ich für keine gute Idee!Ist jetzt absichtlich überspitzt formuliert!
-
@marty56 sagte in Bestätigt/Acknowledged-Flag Bedeutung - ein Mysterium :
Ich hätte gerne, dass ich mit setState() steuern könnte, ob ein Wert im History Adapter an die jeweilige DB übertragen wird.
Wie @Homoran schon schrieb: Das wäre „geschummelt“
Aber Du kannst ja beim Abfragen der DB die Datensätze ohneack
wegfiltern. -
@homoran Ok. Netter Nonsense Witz, ha ha!
-
@marty56 dann erstelle dir einen Schattenstate und sortiere per Skript oder irgendeiner Logik aus und logge den dann. Easy
-
@apollon77 Ja, dass mit dem "Schattenstate" habe ich natürlich gemacht. Dennoch nicht besonders elegant
-
@marty56 da diese Anforderung meiner Meinung nach ein Edge Case ist finde ich die Lösung sehr elegant ;-)) (ich weiß das du das so nicht hören wolltest )
-
Der Beitrag hat mir sehr geholfen, vielen Dank!
Wie ist das aber mit VIS Buttons?
Offenbar nutzen die immer "Steuere ID.."Kann ich mit einem Button einen Datenpunkt setzen?
Natürlich könnte ich mit einem Script laufend den Datenpunkt abfragen und ihn beim Ändern des Wertes aktualisieren.
Aber das muß doch auch einfach aus dem Widget heraus gehen?Viele Grüße
Uwe