Hallo,
ich bräuchte bitte nochmals eure Hilfe. Ich möchte die fhem.cfg aufräumen und ein großes Notify in die 99_myUtils.pm auslagern.
Das Notify brauche ich für Alexa und meinen FS20 Dimmer. Es rechnet einen Dimmwert z. B. von 60% auf FS20 kompatible 62% um.
Mein Problem ist, dass $event "dim 60%" ausgibt und nicht "60".
sub LightRange($) {
my ($event) = @_;
my $dim_cmd = "";
my $dim = 0;
if ($event eq "on") {
$dim_cmd = "set lamp on";
} elsif ($event eq "off") {
$dim_cmd = "set lamp off";
} else {
if ($event > 93) {
$dim = 100;
} elsif ($event > 87) {
$dim = 93;
} elsif ($event > 81) {
$dim = 87;
} elsif ($event > 75) {
$dim = 81;
} elsif ($event > 68) {
$dim = 75;
} elsif ($event > 62) {
$dim = 68;
} elsif ($event > 56) {
$dim = 62;
} elsif ($event > 50) {
$dim = 56;
} elsif ($event > 43) {
$dim = 50;
} elsif ($event > 37) {
$dim = 43;
} elsif ($event > 31) {
$dim = 37;
} elsif ($event > 25) {
$dim = 31;
} elsif ($event > 18) {
$dim = 25;
} elsif ($event > 12) {
$dim = 18;
} elsif ($event > 6) {
$dim = 12;
} elsif ($event > 0) {
$dim = 6;
} else {
$dim = 0;
}
$dim_cmd = "set lamp dim $dim";
}
fhem($dim_cmd);
}
Wie/was übergibst du!?
Also ein list vom notify würde helfen...
Entweder dort mit $EVTPART0, $EVPTART1, usw. arbeiten oder in der sub mit split...
EDIT: da du auch on/off aus dem Event auswertest, dann wohl wenn nicht on oder off eben split und da dann nur die Zahl raus-splitten...
EDIT: oder per RegEx "filterst"...
Gruß, Joachim
sub beispiel2 {
my $event = "dim 60%";
$event =~ /([0-9]+)/;
$event = $1;
return $event;
}
Zitat von: MadMax-FHEM am 24 Juli 2020, 19:44:38
Also ein list vom notify würde helfen...
nein, würde es nicht. Die Anforderung ist klar formuliert :)
Zitat von: betateilchen am 24 Juli 2020, 19:49:20
nein, würde es nicht. Die Anforderung ist klar formuliert :)
Ja, ist mir beim nächsten lesen auch aufgefallen...
Gruß, Joachim
Danke! Aber wie muss ich das in meinen Code einfügen?
} else {
$event =~ /([0-9]+)/;
$event = $1;
if ($event > 93) {
So hatte ich es auch. Ging nicht.
Zitat von: ecodynamic am 24 Juli 2020, 20:15:20
Ging nicht.
mit einer solchen Fehlerbeschreibung kann Dir niemand helfen...
Teste mal das:
} else {
Debug $event;
$event =~ /([0-9]+)/;
$event = $1;
Debug $event;
if ($event > 93) {
und schau nach, was dann im Logfile steht.
ich vermute, Du hast ein Logikproblem in deinem if/elsif/else Konstrukt
if ($event eq "on") {
$dim_cmd = "set lamp on";
} elsif ($event eq "off") {
$dim_cmd = "set lamp off";
} elsif {
$event =~ /([0-9]+)/;
$event = $1;
if ($event > 93) {
oder
if ($event eq "on" || $event eq "off") {
$dim_cmd = "set lamp $event";
} else {
$event =~ /([0-9]+)/;
$event = $1;
if ($event > 93) {
könnte funktionieren
Danke für deine Hilfe. Sorry, ich wusste nicht wie ich ins Logfile schreiben kann.
Ich hatte im Notify einen falschen Parameter übergeben.
Zitat von: ecodynamic am 25 Juli 2020, 11:59:12
Danke für deine Hilfe. Sorry, ich wusste nicht wie ich ins Logfile schreiben kann.
Ins Logfile schreiben geht auch so:
Log3(undef, 1, "Einen einführenden Text event: $event WeitereVariable: $WeitereVariable ...")
https://forum.fhem.de/index.php?topic=14341.0
Zitat von: ecodynamic am 25 Juli 2020, 11:59:12
Ich hatte im Notify einen falschen Parameter übergeben.
Hmm, dann hätte ein list vom notify doch geholfen ;)
Gruß, Joachim