FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: zap am 15 November 2021, 19:27:35

Titel: Attribut wird trotz Fehlermeldung gesetzt
Beitrag von: zap am 15 November 2021, 19:27:35
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?
Titel: Antw:Attribut wird trotz Fehlermeldung gesetzt
Beitrag von: rudolfkoenig am 15 November 2021, 20:33:20
Nein, genauso funktioniert das, gerade geprueft.
Titel: Antw:Attribut wird trotz Fehlermeldung gesetzt
Beitrag von: zap am 16 November 2021, 13:47:26
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.
Titel: Antw:Attribut wird trotz Fehlermeldung gesetzt
Beitrag von: rudolfkoenig am 16 November 2021, 17:00:27
eventMap gehoert aber nicht den Modulen, insofern haben die auch kein Vetorecht...