MQTT2_DEVICE - hyperaktivität behandeln

Begonnen von betateilchen, 27 Mai 2023, 18:43:42

Vorheriges Thema - Nächstes Thema

betateilchen

Moin,

gegeben ist folgendes device:

defmod ub1 MQTT2_DEVICE
attr ub1 readingList ub1/state:.* state
attr ub1 setList mode fhemhome/ub1/mode:r

Funktioniert grundsätzlich super.

Aber: kann das device nicht einfach das reading "state" in Ruhe lassen? Jedesmal, wenn ich per set eine neuen Modus setze, wird mir das reading "state" verhunzt. Dort soll nach meiner Konzeption grundsätzlich eine Information drinstehen, die vom gesteuerten device selbst kommt und nichts mit dem set Befehl zu tun hat.

Die Doku zu setStateList habe ich gelesen, das hilft aber nicht weiter. Damit kann ich maximal erreichen, dass dann statt des Verhunzens von "state" ein zusätzliches reading erzeugt wird, das ich nicht haben will.

Wenn es nicht mit vorhandenen Mitteln (vielleicht übersehe ich was?) lösbar ist, wünsche ich mir für setStateList die Möglichkeit, "ignore" angeben zu können, damit MQTT2_DEVICE dann einfach das reading "state" in Ruhe lässt und auch sonst nix tut, was ich nicht "in Auftrag gegeben" habe.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#1
Zitat von: fhem-hm-knecht am 27 Mai 2023, 21:44:00schreibe mal inactive ins state
danach geht nicht mal mehr deine setList auch wird state nicht mehr aktualisiert

Und was soll mir dieser schwachsinnige* unqualifizierte* Vorschlag helfen?

Zitat von: fhem-hm-knecht am 27 Mai 2023, 21:44:00state wird bei mir generel abgeändert

Genau das ist ja das Problem.
Und ich brauche das reading state, nicht das internal STATE.
Deshalb hilft auch Dein Vorschlag mit stateFormat absolut nix.


* Auf Wunsch von Rudi geändert, ohne dass damit eine Meinungsänderung meinerseits verbunden wäre.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

ZitatAber: kann das device nicht einfach das reading "state" in Ruhe lassen?
Das geht (als Seiteneffekt), wenn man setStateList setzt:
attr ub1 setStateList X X
X X ist ein Workaround, nach einem update reicht auch ein einfaches X oder Y :)



ZitatUnd was soll mir dieser schwachsinnige Vorschlag helfen?
Das kann man bitte hoeflicher ausdruecken, und falls bis 10 Zaehlen nicht reicht, dann laenger warten.

betateilchen

Zitat von: rudolfkoenig am 28 Mai 2023, 14:51:23und falls bis 10 Zaehlen nicht reicht, dann laenger warten.

Vor meinem Kommentar hatte ich schon bis 150 gezählt, ich hätte wohl auch bis 1000 zählen können, ohne auf eine andere Einschätzung des Vorschlags zu kommen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: rudolfkoenig am 28 Mai 2023, 14:51:23Das geht (als Seiteneffekt), wenn man setStateList setzt:
attr ub1 setStateList X X
X X ist ein Workaround, nach einem update reicht auch ein einfaches X oder Y :)

Danke für den Hinweis. Aber Du hattest schon gelesen, dass ich das vor meiner Frage probiert hatte und ebenfalls nicht das gewünschte Verhalten des device erreicht hatte?

Zitat von: betateilchen am 27 Mai 2023, 18:43:42Die Doku zu setStateList habe ich gelesen, das hilft aber nicht weiter. Damit kann ich maximal erreichen, dass dann statt des Verhunzens von "state" ein zusätzliches reading erzeugt wird, das ich nicht haben will.

defmod ub1 MQTT2_DEVICE
attr ub1 setList mode fhemhome/ub2/mode
attr ub1 setStateList X

setstate ub1 2023-05-28 16:40:17 IODev mqtt2
setstate ub1 2023-05-28 16:42:58 mode set 6

Es wird ein reading namens "mode" erzeugt, in dem dann "set 6" steht.
Das reading ist nicht erwünscht und der Inhalt wenig hilfreich (und nicht benötigt).

Mein gewünschtes Ergebnis ist, dass das MQTT2_DEVICE einfach nur den set-Befehl ausführt und sonst gar nichts tut.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: betateilchen am 27 Mai 2023, 18:43:42Wenn es nicht mit vorhandenen Mitteln (vielleicht übersehe ich was?) lösbar ist, wünsche ich mir für setStateList die Möglichkeit, "ignore" angeben zu können, damit MQTT2_DEVICE dann einfach das reading "state" in Ruhe lässt und auch sonst nix tut, was ich nicht "in Auftrag gegeben" habe.

Index: 10_MQTT2_DEVICE.pm
===================================================================
--- 10_MQTT2_DEVICE.pm  (revision 27624)
+++ 10_MQTT2_DEVICE.pm  (working copy)
@@ -422,6 +422,8 @@
       $hash->{skipStateFormat} = 1;
       readingsSingleUpdate($hash, "state", "set_$cmdSE", 1);
       delete($hash->{skipStateFormat});
+    } elsif ($ssl =~m/^ignore$/i) {
+      # do nothing
     } else {
       unshift(@a, "set");
       readingsSingleUpdate($hash, $cmdName, join(" ",@a), 1);
@@ -1140,6 +1142,8 @@
       will be set to on (probably with the help of stateFormat). Commands not
       in the list will set a reading named after the command, with the word set
       and the command parameters as its value.<br><br>
+      If this attribute is set to "ignore", a set command will not affect any
+      reading in the device.
       If this attribute is not defined, then a set command will set the state
       reading to the name of the command.
       </li><br>
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Hab dein Vorschlag uebernommen und eingecheckt.


ZitatVor meinem Kommentar hatte ich schon bis 150 gezählt, ich hätte wohl auch bis 1000 zählen können, ohne auf eine andere Einschätzung des Vorschlags zu kommen.
Dann entweder weiterzaehlen, bis sie Forumstauglich wird, oder auf die Einschaetzung verzichten.

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#8
Zitat von: rudolfkoenig am 29 Mai 2023, 10:47:50Dann entweder weiterzaehlen, bis sie Forumstauglich wird, oder auf die Einschaetzung verzichten.

Laut Enzyklopädie der Wortbedeutungen hat das Adjektiv "schwachsinnig" zwei Bedeutungen.

  • die Bedeutung "unsinnig, dumm, sinnlos". Hier bezieht sich das Adjektiv auf eine Sache.
  • eine (veraltete) medizinische Bedeutung, die sich auf den Geisteszustand eines Menschen bezieht.

Da ich den Vorschlag "inactive per setreading zu setzen", immer noch für "unsinnig, dumm, sinnlos" halte, weiß ich wirklich nicht, was an meiner Wortwahl tatsächlich so schlimm ist. Das Adjektiv wurde definitiv bezogen auf die Antwort (also eine Sache) verwendet.

Hält irgendjemand (vielleicht außer dem Autor des Vorschlags) diesen Vorschlag tatsächlich für intelligent, bezogen auf das Thema des Threads und mein konkrekt formuliertes Anliegen? Das kann ich mir kaum vorstellen.

Diese Diskussion ist müssig. Wenn ich etwas für "unsinnig, dumm, sinnlos" halte, möchte ich auch einen Begriff aus meiner Muttersprache verwenden dürfen, der dafür vorgesehen ist, ohne mich dafür rechtfertigen zu müssen.

Schönen Feiertag!

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!