Hi,
ein erster Test:
my $s = $state =~ s/ lux//r;
ergibt einen syntax error, damit sind alle nachfolgenden Berechnungen kaputt! und selbst wenn ich den syntax error korrigiere kommt für $s immer 0 oder 1 heraus (match/nomatch)!
ein readingsBeginUpdate darfts du dort nicht machen, weil zu diesem Zeitpunkt läuft bereist ein readingsBeginUpdate, und falls doch, musst du auch ein readingsEndUpdate machen, sonst kommen alle internen strukturen durcheinander....
Das ist aber gar nicht nötig !
Falls ich dich richtig verstanden habe, willst du aus einem vom Bus kommenden event "Helligkeit" - den 10fachen wert auf eine andere GA im selben FHEM device schicken.
Das könnte beispielhaft so aussehen:
defmod dpt9004 KNX 14/3/9:dpt9.004:Helligkeit:listenonly 14/4/9:dpt9.004:Helligkeit10
attr dpt9004 IODev myKNXIO
attr dpt9004 stateCmd {\
if ($gadName eq 'Helligkeit')\
{\
# my ($newVal) = $state =~ /([-+\d\.]+).*/ix;;\
my $newVal = (split(' ',$state))[0];;\
$newVal *= 10;;\
Log3 undef, 1, "Helligkeit = $state H10 = $newVal";; \
fhem("sleep 0.1;;set $name Helligkeit10 $newVal");;\
}\
\
return $state;;\
}
... exportiert mit raw definition ! Falls du das im statecmd im detail-view eingeben willst: Aus den 2fachen ;; -> einfache Strichpunkte machen, und \ bedeutet newline!
Kommentar zum code:
2 Varianten um aus "xxx lux" -> "xxx" zu machen, beide haben den charme dass sie alles ignorieren was nach dem 1sten blank kommt.
fhem("sleep 0.1;set $name..... -> zuerst wird das ankommende reading komplett verarbeitet, dann erst erfolgt ein "set..." auf das neue reading- value.
Ganz wichtig: das neue reading: (im Bsp: Helligkeit10) muss in der definition existieren, sonst ergibt das chaos!
Tip: das reading "Helligkeit" mit listenonly spezifizieren, damit niemand in Verlegenheit kommt, das von FHEM aus zu setzen!
Letzte Bemerkung: falls den neue wert größer 670000 wird, wird intern auf 670000 geklippt! (max wert von dpt9)
l.g. erwin