Hauptmenü

Counter umstricken

Begonnen von Schlafsack, 10 Dezember 2022, 14:53:37

Vorheriges Thema - Nächstes Thema

Schlafsack

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

Otto123

#1
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle

aktives Mitglied des FHEM e.V. (Technik)

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Schlafsack

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?