FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ecodynamic am 24 Juli 2020, 19:38:03

Titel: 99_myUtils.pm nur Integer aus $event
Beitrag von: ecodynamic am 24 Juli 2020, 19:38:03
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);
}
Titel: Antw:99_myUtils.pm nur Integer aus $event
Beitrag von: MadMax-FHEM am 24 Juli 2020, 19:44:38
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
Titel: Antw:99_myUtils.pm nur Integer aus $event
Beitrag von: betateilchen am 24 Juli 2020, 19:49:20

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 :)
Titel: Antw:99_myUtils.pm nur Integer aus $event
Beitrag von: MadMax-FHEM am 24 Juli 2020, 19:53:03
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
Titel: Antw:99_myUtils.pm nur Integer aus $event
Beitrag von: ecodynamic am 24 Juli 2020, 20:04:01
Danke! Aber wie muss ich das in meinen Code einfügen?
Titel: Antw:99_myUtils.pm nur Integer aus $event
Beitrag von: betateilchen am 24 Juli 2020, 20:10:36

  } else {
    $event =~ /([0-9]+)/;
    $event = $1;
    if ($event > 93) {
Titel: Antw:99_myUtils.pm nur Integer aus $event
Beitrag von: ecodynamic am 24 Juli 2020, 20:15:20
So hatte ich es auch. Ging nicht.
Titel: Antw:99_myUtils.pm nur Integer aus $event
Beitrag von: betateilchen am 24 Juli 2020, 21:00:02
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.
Titel: Antw:99_myUtils.pm nur Integer aus $event
Beitrag von: betateilchen am 24 Juli 2020, 21:02:56
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
Titel: Antw:99_myUtils.pm nur Integer aus $event
Beitrag von: ecodynamic am 25 Juli 2020, 11:59:12
Danke für deine Hilfe. Sorry, ich wusste nicht wie ich ins Logfile schreiben kann.
Ich hatte im Notify einen falschen Parameter übergeben.
Titel: Antw:99_myUtils.pm nur Integer aus $event
Beitrag von: MadMax-FHEM am 25 Juli 2020, 12:11:55
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