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
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

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?