Problem mit Perl Code in DOIF

Begonnen von OK_DE, 17 Dezember 2019, 11:20:55

Vorheriges Thema - Nächstes Thema

OK_DE

Hallo,

ich wollte meine Waschmaschinenüberwachung mit DOIF umsetzen habe aber leider Probleme mit dem Perl Teil.
Denke das liegt an der Klammerung aber trotz viel Rumprobieren komme ich nicht darauf woran wie ich es lösen könnte.

Danke für eure Hilfe im Voraus.

([WASCHMASCHINE_Pwr:power:d] > 30 and [?WASCHMASCHINE_Status_DOIF] eq "aus|initialized|initialize")
((
  ({Log 3, "Waschmaschine Programm wurde gestartet"}),
  set $SELF Start_Wh {(sprintf('%.2f',(ReadingsVal("WASCHMASCHINE_Pwr","energy",0))))},
  set $SELF Start_Timestamp {(time())}
))
DOELSEIF ([WASCHMASCHINE_Pwr:power:d] < 3.4 and [?WASCHMASCHINE_Status_DOIF] eq "an")
((
  ({Log 3, "Waschmaschine Programm wurde beendet"}),
  set $SELF End_Wh {(sprintf('%.2f',(ReadingsVal("WASCHMASCHINE_Pwr","energy",0))))},
  set $SELF lastRun_Wh {(sprintf('%.2f',(ReadingsVal("$SELF","End_Wh",0) - ReadingsVal("$SELF","Start_Wh",0))))},
  set $SELF End_Timestamp {(time())}
))
DOELSEIF ([WASCHMASCHINE_Pwr:power:d] < 3.4 and [?WASCHMASCHINE_Status_DOIF] eq "standby")
((
  ({Log 3, "Waschmaschine wurde ausgeschaltet"}),
  set GONG playTone 10,
  ({
  my $Start_Time=ReadingsVal("$SELF","Start_Time","0");
my $End_Time=ReadingsVal("$SELF","End_Time","0");
my ($seconds, $minutes, $hours) = localtime($End_Time - $Start_Time);
my $lastRun_Wh = ReadingsVal("$SELF","lastRun_Wh","0");
my $Consumption_kWh = int($lastRun_Wh + 0.5)/1000;
my $Costs_Per_kWh = ReadingsVal("MAIN_STROMKOSTEN","state","0");
my $Costs_Total = $Consumption_kWh * $Costs_Per_kWh;
$minutes=($minutes < 10) ? "0".$minutes : $minutes;
$hours=($hours < 10) ? "0".$hours : $hours;
$Costs_Total = (int((($Costs_Total*100)+0.5)/100));
fhem ("set Pushmsg msg 'Waschmaschiene ausgeschaltet' 'Verbrauch: $Consumption_kWh kWh\\nWaschdauer: $hours:$minutes\\nKosten: $Costs_Total Euro'");
})
))


Dieser Teil wirf den Fehler
  ({
  my $Start_Time=ReadingsVal("$SELF","Start_Time","0");
my $End_Time=ReadingsVal("$SELF","End_Time","0");
my ($seconds, $minutes, $hours) = localtime($End_Time - $Start_Time);
my $lastRun_Wh = ReadingsVal("$SELF","lastRun_Wh","0");
my $Consumption_kWh = int($lastRun_Wh + 0.5)/1000;
my $Costs_Per_kWh = ReadingsVal("MAIN_STROMKOSTEN","state","0");
my $Costs_Total = $Consumption_kWh * $Costs_Per_kWh;
$minutes=($minutes < 10) ? "0".$minutes : $minutes;
$hours=($hours < 10) ? "0".$hours : $hours;
$Costs_Total = (int((($Costs_Total*100)+0.5)/100));
fhem ("set Pushmsg msg 'Waschmaschiene ausgeschaltet' 'Verbrauch: $Consumption_kWh kWh\\nWaschdauer: $hours:$minutes\\nKosten: $Costs_Total Euro'");
})



Der Fehler ist bei folgender Klammerung ({})


   ({Log 3, "Waschmaschine wurde ausgeschaltet"}),   set GONG playTone 10,  ({    my $Start_Time=ReadingsVal("WASCHMASCHINE_Status_DOIF","Start_Time","0"); my $End_Time=ReadingsVal("WASCHMASCHINE_Status_DOIF","End_Time","0"); my ($seconds, $minutes, $hours) = localtime($End_Time - $Start_Time); my $lastRun_Wh = ReadingsVal("WASCHMASCHINE_Status_DOIF","lastRun_Wh","0"); my $Consumption_kWh = int($lastRun_Wh + 0.5)/1000; my $Costs_Per_kWh = ReadingsVal("MAIN_STROMKOSTEN","state","0"); my $Costs_Total = $Consumption_kWh * $Costs_Per_kWh; $minutes=($minutes < 10) ? "0".$minutes : $minutes; $hours=($hours < 10) ? "0".$hours : $hours; $Costs_Total = (int((($Costs_Total*100)+0.5)/100)); fhem ("set Pushmsg msg 'Waschmaschiene ausgeschaltet' 'Verbrauch: $Consumption_kWh kWh\\nWaschdauer: $hours:$minutes\\nKosten: $Costs_Total Euro'"); }) : Unknown command ({Log, try help.
Unknown command my, try help.
Unknown command my, try help.
Unknown command my, try help.
Unknown command my, try help.
Unknown command my, try help.
Unknown command my, try help.
Unknown command $minutes=($minutes, try help.
Unknown command $hours=($hours, try help.
Unknown command $Costs_Total, try help.
Unknown command fhem, try help.
Unknown command }), try help.



Klammere ich anderes rum also statt ({ }) ein {()} kommt der Fehler
({Log 3, "Waschmaschine wurde ausgeschaltet"}), set GONG playTone 10,  : Unknown command ({Log, try help.

amenomade

Ohje.... warum machst Du es nicht simpel?
DOIF (Bedingung1)
      (fhem Befehl)
      {perl Befehl}
      (fhem Befehl)
      {perl Befeh}

So funktioniert es. Diese Mischung (( ({}),(),({}} )) ist unheimlich kompliziert

DOELSEIF ([WASCHMASCHINE_Pwr:power:d] < 3.4 and [?WASCHMASCHINE_Status_DOIF] eq "standby")
    {Log 3, "Waschmaschine wurde ausgeschaltet"}
    (set GONG playTone 10)
    {
    my $Start_Time=ReadingsVal("$SELF","Start_Time","0");
my $End_Time=ReadingsVal("$SELF","End_Time","0");
my ($seconds, $minutes, $hours) = localtime($End_Time - $Start_Time);
my $lastRun_Wh = ReadingsVal("$SELF","lastRun_Wh","0");
my $Consumption_kWh = int($lastRun_Wh + 0.5)/1000;
my $Costs_Per_kWh = ReadingsVal("MAIN_STROMKOSTEN","state","0");
my $Costs_Total = $Consumption_kWh * $Costs_Per_kWh;
$minutes=($minutes < 10) ? "0".$minutes : $minutes;
$hours=($hours < 10) ? "0".$hours : $hours;
$Costs_Total = (int((($Costs_Total*100)+0.5)/100));
fhem ("set Pushmsg msg 'Waschmaschiene ausgeschaltet' 'Verbrauch: $Consumption_kWh kWh\\nWaschdauer: $hours:$minutes\\nKosten: $Costs_Total Euro'");
}
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus