99_myUtils.pm nur Integer aus $event

Begonnen von ecodynamic, 24 Juli 2020, 19:38:03

Vorheriges Thema - Nächstes Thema

ecodynamic

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);
}
Raspberry Pi 3B+, FS20, WifiLight, ESP 8266 via MQTT

MadMax-FHEM

#1
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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

betateilchen


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 :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

ecodynamic

Danke! Aber wie muss ich das in meinen Code einfügen?
Raspberry Pi 3B+, FS20, WifiLight, ESP 8266 via MQTT

betateilchen


  } else {
    $event =~ /([0-9]+)/;
    $event = $1;
    if ($event > 93) {
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ecodynamic

Raspberry Pi 3B+, FS20, WifiLight, ESP 8266 via MQTT

betateilchen

#7
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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#8
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
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ecodynamic

Danke für deine Hilfe. Sorry, ich wusste nicht wie ich ins Logfile schreiben kann.
Ich hatte im Notify einen falschen Parameter übergeben.
Raspberry Pi 3B+, FS20, WifiLight, ESP 8266 via MQTT

MadMax-FHEM

#10
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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)