Moin,
bei der folgenden definition:
define AZ.SteckdoseSchrankLED_notify notify AZ.SteckdoseSchrankLED { $EVENT=~s/://;;;; fhem("setreading AZ.SteckdoseSchrankLED $EVENT") ;;;; }
gibt es leider Events, denen der name fehlt. Auszug:
setreading <devspec> <reading> <value>
Im Log steht dann sowas:
setreading AZ.SteckdoseSchrankLED on : Usage: setreading <name> <reading> <value>
Lässt sich in der ~s/.. Anweisung auch die Angabe state für den fehlenden Namen bei on/off ergänzen?
thor42
Vielleicht solltest Du Dir erstmal anschauen was von Deinem EVENT noch übrig bleibt. Statt fhem(" vielleicht einfach erstmal ein Log 1, "Event gleich $EVENT";
Es kommt halt für den state lediglich ein on bzw off an, d.h. der name ist nich angegeben.
Andere Werte kommen als power 2.5 W an und können dann einfach übernommen werden.
Ich hätte den on bzw. off dann gerne im state und würde dazu gerne einfach den Text im Falle on/off um das Wort state ergänzen.
Logauszug:
2017.03.25 10:20:23 1: Event gleich reportedState off
2017.03.25 10:20:23 1: Event gleich power 0.0 W
2017.03.25 10:23:45 1: Event gleich on
2017.03.25 10:23:45 1: Event gleich on
2017.03.25 10:23:45 1: Event gleich reportedState on
2017.03.25 10:23:46 1: Event gleich off
2017.03.25 10:23:46 1: Event gleich off
2017.03.25 10:23:46 1: Event gleich reportedState off
2017.03.25 10:24:58 1: Event gleich on
2017.03.25 10:24:58 1: Event gleich on
2017.03.25 10:24:58 1: Event gleich reportedState on
2017.03.25 10:24:59 1: Event gleich power 2.5 W
2017.03.25 10:24:59 1: Event gleich off
2017.03.25 10:24:59 1: Event gleich off
2017.03.25 10:24:59 1: Event gleich reportedState off
2017.03.25 10:25:00 1: Event gleich power 0.0 W
Bei on bzw off kommt dann folgendes im Log:
2017.03.25 10:41:11 3: setreading AZ.SteckdoseSchrankLED off : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.
Es sollte 'state off' bzw. 'state on' werden.
Wenn es sich um einen Dummy handelt den du befüllen willst dann nimm set statt setreading. Ansonsten schau mal ob du nach dem setreading DEVICENAME nicht ein state hinschreiben kannst und danach erst EVENT. Bin mir aber nicht sicher ob man state mit setreading setzen kann.
Habe den notify etwas umgeschrieben:
AZ.SteckdoseSchrankLED {
$EVENT=~s/://;;
my $vls=scalar(split(/\s+/, $EVENT));;
Log 1, "Event gleich $EVENT $vls";;
if($vls > 1) { Log 1, "AA $EVENT";; fhem("setreading AZ.SteckdoseSchrankLED $EVENT") ;; }
}
Dann schreibt er nur die Werte, die auch den Namen haben.
und für den dummy ein stateFormat ergänzt:
attr stateFormat {sprintf("%s",ReadingsVal("AZ.SteckdoseSchrankLED","status",0))}
Damit funktioniert es wie beabsichtigt. Liesse sich evt. auch einfacher schreiben.
Es gibt das Attribut addStateEvent
Danke igami, damit verkürzt sich das ohne Fehlermeldungen im Log auf:
attr AZ.SteckdoseSchrankLED_notify addStateEvent 1
AZ.SteckdoseSchrankLED { $EVENT=~s/://;; fhem("setreading AZ.SteckdoseSchrankLED $EVENT") ;; }
thor42