FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: abc2006 am 06 Januar 2016, 22:46:44

Titel: GELÖST - zwei *gleiche* definitionen - aber nur eine funktioniert
Beitrag von: abc2006 am 06 Januar 2016, 22:46:44
Hallo,
ich habe folgende (einwandfrei funktionierende) Definition:

+*00:00:30 {
my $vlist = ReadingsVal("DS18B20_VorlaufHK","temperature","0");
my $hysterese = 1;
my $vlsoll = calcVL();
if ($vlist < $vlsoll-$hysterese)
{
# waermer
fhem "
set HMW_IO_12_Sw7_DR_LEQ0016352_13 off;
set HMW_IO_12_Sw7_DR_LEQ0016352_14 on;
define wiederaus at +00:00:01 set HMW_IO_12_Sw7_DR_LEQ0016352_14 off;
attr wiederaus room Heizung;
set Heizung_VL_Soll $vlsoll;
"
}
elsif ($vlist > $vlsoll+$hysterese)
{
# kaelter
fhem "
set HMW_IO_12_Sw7_DR_LEQ0016352_14 off;
set HMW_IO_12_Sw7_DR_LEQ0016352_13 on;
define wiederaus at +00:00:01 set HMW_IO_12_Sw7_DR_LEQ0016352_13 off;
attr wiederaus room Heizung;
set Heizung_VL_Soll $vlsoll;
"
}
}

die beiden HMW schalten, das at wird angelegt und landet im raum "Heizung" - getestet habe ich das natürlich mit deutlich verlängerten Zeiten :-)

nach dem selben Schema habe ich dann eine zweite Definition angelegt:
+*00:01:00 {
if (ReadingsVal("DS18B20_KesselInSpeicher","temperature","0") < (calcVL())+10)
{
fhem "
set HMW_IO_12_Sw7_DR_LEQ0016352_15 on;
define istwarm at +02:00:00 set HMW_IO_12_Sw7_DR_LEQ0016352_15 off;
attr istwarm room Heizung;
"
}
}


der HMW_*_15 wird auch geschaltet, das at "istwarm" wird aber nicht angelegt. Habe ich einen Denkfehler?


Fhem Version ist   Release  : 5.7 FeatureLevel: 5.7 , letztes update vor ein paar Minuten.

Grüße
Stephan
Titel: Antw:zwei *gleiche* definitionen - aber nur eine funktioniert
Beitrag von: betateilchen am 06 Januar 2016, 23:19:03
und was steht im Logfile?
Titel: Antw:zwei *gleiche* definitionen - aber nur eine funktioniert
Beitrag von: franky08 am 06 Januar 2016, 23:33:12
Auf den ersten Blick würde mich auch "0" stören, hat aber auf die Funktion/Nichtfunktion keine Einfluss.

PS und siehe betateilchen
Titel: Antw:zwei *gleiche* definitionen - aber nur eine funktioniert
Beitrag von: abc2006 am 07 Januar 2016, 17:11:28
Hi,
erwischt  :-[

Hier ist das Log:

2016.01.07 17:07:36.501 5: exec at command Kessel_frei
2016.01.07 17:07:36.501 5: Cmd: >{
if (ReadingsVal("DS18B20_KesselInSpeicher","temperature","0") < (calcVL())+10)
{
fhem "
        set HMW_IO_12_Sw7_DR_LEQ0016352_15 on;
        define istwarm at +02:00:00 set HMW_IO_12_Sw7_DR_LEQ0016352_15 off;
        attr istwarm room Heizung;
        "
}
}<
2016.01.07 17:07:36.502 5: redefine at command Kessel_frei as +*00:01:00 {
if (ReadingsVal("DS18B20_KesselInSpeicher","temperature","0") < (calcVL())+10)
{
fhem "
        set HMW_IO_12_Sw7_DR_LEQ0016352_15 on;
        define istwarm at +02:00:00 set HMW_IO_12_Sw7_DR_LEQ0016352_15 off;
        attr istwarm room Heizung;
        "
}
}
2016.01.07 17:07:36.503 5: Triggering Kessel_frei (1 changes)
2016.01.07 17:07:36.503 5: Notify loop for Kessel_frei Next: 17:08:36
2016.01.07 17:07:36.504 5: Notify from Device: Kessel_frei recieved
2016.01.07 17:07:36.505 5: DbLog: logging of Device: Kessel_frei , Type: AT , Event: Next: 17:08:36 , Reading: Next , Value: 17:08:36 , Unit:


und wenn das "0" falsch ist, ändere ich es natürlich ab ...

Grüße
Stephan
Titel: Antw:zwei *gleiche* definitionen - aber nur eine funktioniert
Beitrag von: abc2006 am 07 Januar 2016, 17:17:02
und hier das log von dem funktionierenden, ich seh da keinen Unterschied ...

2016.01.07 17:07:59.338 5: exec at command changeVL
2016.01.07 17:07:59.339 5: Cmd: >{
my $vlist = ReadingsVal("DS18B20_VorlaufHK","temperature","0");
my $hysterese = 1;
my $vlsoll = calcVL();
if ($vlist < $vlsoll-$hysterese)
{
# waermer
fhem "
        set HMW_IO_12_Sw7_DR_LEQ0016352_13 off;
        set HMW_IO_12_Sw7_DR_LEQ0016352_14 on;
        define wiederaus at +00:00:01 set HMW_IO_12_Sw7_DR_LEQ0016352_14 off;
        attr wiederaus room Heizung;
        set Heizung_VL_Soll $vlsoll;
        "
}
elsif ($vlist > $vlsoll+$hysterese)
{
# kaelter
fhem "
        set HMW_IO_12_Sw7_DR_LEQ0016352_14 off;
        set HMW_IO_12_Sw7_DR_LEQ0016352_13 on;
        define wiederaus at +00:00:01 set HMW_IO_12_Sw7_DR_LEQ0016352_13 off;
        attr wiederaus room Heizung;
        set Heizung_VL_Soll $vlsoll;
        "
}
}<
2016.01.07 17:07:59.340 5: redefine at command changeVL as +*00:00:30 {
my $vlist = ReadingsVal("DS18B20_VorlaufHK","temperature","0");
my $hysterese = 1;
my $vlsoll = calcVL();
if ($vlist < $vlsoll-$hysterese)
{
# waermer
fhem "
        set HMW_IO_12_Sw7_DR_LEQ0016352_13 off;
        set HMW_IO_12_Sw7_DR_LEQ0016352_14 on;
        define wiederaus at +00:00:01 set HMW_IO_12_Sw7_DR_LEQ0016352_14 off;
        attr wiederaus room Heizung;
        set Heizung_VL_Soll $vlsoll;
        "
}
elsif ($vlist > $vlsoll+$hysterese)
{
# kaelter
fhem "
        set HMW_IO_12_Sw7_DR_LEQ0016352_14 off;
        set HMW_IO_12_Sw7_DR_LEQ0016352_13 on;
        define wiederaus at +00:00:01 set HMW_IO_12_Sw7_DR_LEQ0016352_13 off;
        attr wiederaus room Heizung;
        set Heizung_VL_Soll $vlsoll;
        "
}
}
2016.01.07 17:07:59.341 5: Triggering changeVL (1 changes)
2016.01.07 17:07:59.341 5: Notify loop for changeVL Next: 17:08:29
2016.01.07 17:07:59.342 5: Notify from Device: changeVL recieved
2016.01.07 17:07:59.343 5: DbLog: logging of Device: changeVL , Type: AT , Event: Next: 17:08:29 , Reading: Next , Value: 17:08:29 , Unit:
Titel: Antw:zwei *gleiche* definitionen - aber nur eine funktioniert
Beitrag von: abc2006 am 09 Januar 2016, 23:37:37
Leider funktioniert es immer noch nicht, trotz neuem anlegen des at ...
noch jemand eine Idee?

Grüße
Stephan
Titel: Antw:zwei *gleiche* definitionen - aber nur eine funktioniert
Beitrag von: Deudi am 10 Januar 2016, 10:03:50
Die Klammerung ist seltsam:
( ... < (calcVL())+10)
Soll das vielleicht besser so aussehen (die 10 in die Klammer):
( ... < (calcVL()+10) )
Titel: Antw:zwei *gleiche* definitionen - aber nur eine funktioniert
Beitrag von: Starkstrombastler am 10 Januar 2016, 11:57:04
Das ganze wird mit defmod sicherer, siehe commandref.
Titel: Antw:zwei *gleiche* definitionen - aber nur eine funktioniert
Beitrag von: Dietmar63 am 10 Januar 2016, 14:56:28
Solchen Code als Funktion  in 99_myUtils.pm aufnehmen, dann bekommst du ggf. Übersetzungsfehler des Compilers gemeldet - spart viel Zeit.
Titel: Antw:GELÖST - zwei *gleiche* definitionen - aber nur eine funktioniert
Beitrag von: abc2006 am 11 Januar 2016, 19:58:34
@Deudi: Danke, das wars .
@Starkstrombastler: Danke für deinen Vorschlag, aber diese Funktionalität will ich in diesem speziellen Fall genau *nicht*, das AT soll nur ein mal gesetzt werden (und so bleiben), auch wenn die Funktion erneut aufgerufen wird.

@Dietmar:  Ich werde deinen Tipp auf jeden Fall testen, dann hilft mir das vielleicht in Zukunft.
Mir ist nur eines nicht ganz klar: ich habe ja extra calcVL bereits ausgelagert. Wie sollte das ganze deiner Meinung nach aussehen, wenn noch mehr ausgelagert wird? Wäre super, wenn du mir ein Beispiel geben könntest, ich bin momentan der Meinung, dass das meine MyUtils mit Millionen Miniprogrammen füllen würde, und kann darin keinen Vorteil entdecken - ausser das mit dem Compilerfehler, natürlich.

Grüße
Stephan