Hallo zusammen,
bin gerade dabei einige Sachen bei mir in PERL umzustellen und hänge bei meinem Counter fest. Dieser Counter taktet bei Temperaturänderung im Sekundentakt.
Hochtakten
([Waermepumpe] eq "Online" && ([Isttemperatur:state] < [Solltemperatur]) && ([Isttemperatur:state] < 79))
(set Isttemperatur {([Isttemperatur:state]+1)};
set Temp_mehr on-for-timer 1)
DOELSE
(set Temp_mehr off)
Runtertakten
([Waermepumpe] eq "Online" && ([Isttemperatur:state] > [Solltemperatur]) && ([Isttemperatur:state] > 24))
(set Isttemperatur {([Isttemperatur:state]-1)};
set Temp_weniger on-for-timer 1)
DOELSE
(set Temp_weniger off)
PERLVERSUCH
subs {
my $Ist = ReadingsVal("Isttemperatur","state",undef);;
my $Soll = ReadingsVal("Solltemperatur","state",undef);;
sub count_inc {
if ($Ist < $Soll) {
$Ist ++;
fhem "set Isttemperatur $Ist";
set_Exec("timer",1,"count_inc")
}
}
sub count_dec {
if ($Ist > $Soll) {
$Ist --;
fhem "set Isttemperatur $Ist";
set_Exec("timer",1,"count_dec")
}
}
}
{if ([$Ist] < [$Soll]) {count_inc()} elsif ([$Ist] > [$Soll]) {count_dec()}}
das Ding läuft aber einfach nicht :-( und das setzen des Temp_weniger und Temp_mehr fehlt auch noch. Vielleicht kann mir Jemand einen Tip geben.
Vielen Dank
Hi Schlafsack,
Bedenke Du redest von "DERL" :) - DOIF PERL. Das solltest erstens erwähnen und zweitens in ganzen Sätzen posten. Also die komplette Raw Definition oder/und ein List. Und für DOIF gibt es auch ein spezielles Board https://forum.fhem.de/index.php/board,73.0.html. ;)
Vielleicht kann Dir dann eher einer helfen.
Z.B. kann man nicht erkennen wo Du Deinen Perlversuch hingeschrieben hast und was da nicht "läuft".
Gruß Otto
Das kann so nicht funktionieren.
Der Block "subs" wird nur einmal ausgeführt, nämlich bei der Definition des Devices und dann nie wieder.
Der "Ereignisblock":
{if ([$Ist] < [$Soll]) {count_inc()} elsif ([$Ist] > [$Soll]) {count_dec()}}
hat aber keine Trigger.
Angaben der Art: [$Ist] sind nicht erlaubt.
Besten Dank Damian, jetzt zählt der Counter schon mal, aber leider nur alle geraden Zahlen und nur bis 2 Zahlen vor der Solltemperatur
defmod Counter DOIF subs {\
my $Ist = ReadingsVal("Isttemperatur","state",undef);;;;\
my $Soll = ReadingsVal("Solltemperatur","state",undef);;;;\
\
sub count_inc\
{\
if ($Ist < $Soll)\
{\
$Ist ++;;\
fhem "set Isttemperatur $Ist";;\
set_Exec("timer",1,"count_inc")\
} \
}\
sub count_dec\
{\
if ($Ist > $Soll)\
{\
$Ist --;;\
fhem "set Isttemperatur $Ist";;\
set_Exec("timer",1,"count_dec")\
}\
}\
}\
{if ([Isttemperatur] < [Solltemperatur]) {count_inc()} elsif ([Isttemperatur] > [Solltemperatur]) {count_dec()}}
attr Counter group Warmwasser
attr Counter icon edit_settings
attr Counter room Testraum
setstate Counter initialized
setstate Counter 2022-12-11 12:56:14 Device Isttemperatur
setstate Counter 2022-12-11 12:56:14 block_01 executed
setstate Counter 2022-11-29 07:16:31 count
setstate Counter 2022-12-11 12:56:14 e_Isttemperatur_STATE 39
setstate Counter 2022-12-11 12:55:44 e_Solltemperatur_STATE 41
setstate Counter 2022-12-11 12:55:16 mode enabled
setstate Counter 2022-12-11 12:55:16 state initialized
zum Verständnis: jetzt sollte doch im Ereignisblock der Trigger die sich ändernde Solltemperatur sein?