Attribut wird trotz Fehlermeldung gesetzt

Begonnen von zap, 15 November 2021, 19:27:35

Vorheriges Thema - Nächstes Thema

zap

Eines meiner Module prüft in der Funktion X_Attr bei einem Attribut einen Wert auf Gültigkeit. Wenn der Wert nicht gültig ist, wird eine Fehlermeldung zurückgegeben. Sonst undef.

Die Fehlermeldung taucht auch im fhem Log auf, also wird der falsche Wert korrekt erkannt. Allerdings setzt fhem das Attribut trotzdem auf den falschen Wert. Ich hätte erwartet, dass das Attribut nicht gesetzt wird, wenn ein Wert != undef zurückgegeben wird.

Oder habe ich das falsch verstanden?
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

rudolfkoenig

Nein, genauso funktioniert das, gerade geprueft.

zap

Ja, funktioniert für alle Attribute außer "eventMap", denn in der fhem.pl in CommandAttr():

Erst:


if($attrName eq "eventMap") {
      delete $hash->{".eventMapHash"};
      delete $hash->{".eventMapCmd"};
      $attr{$sdev}{eventMap} = $attrVal;


Hier wird das Attribut bereits gesetzt.
Und ein paar Zeilen später dann:

    $ret = CallFn($sdev, "AttrFn", "set", $sdev, $attrName, $attrVal);
    delete($defs{$sdev}->{CL});
    if($ret) {
      push @rets, $ret;
      next;
    }

    $attr{$sdev}{$attrName} = $attrVal;


Hier wird die Fehlermeldung von der AttrFn also behandelt und mit "next" das Setzen des Attributs verhindert. Da ist eventMap aber schon lange in %attr.
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

rudolfkoenig

eventMap gehoert aber nicht den Modulen, insofern haben die auch kein Vetorecht...