Dieser code Funktioniert aber ich wollte es jetzt als einzeiler lösen aber das klappt nicht so wie ich es will,
Vielleicht kann mir ja jemand einen tipp geben ;-)
define Gefrierschrank1_zu_Warm notify Gefrier.* \
{ fhem ("set petzeGefrier Ein") if (ReadingsVal("Gefrierschrank_1","temperature","") >= -10 && Value("petzeGefrier") eq "bereit") }\
{ fhem ("set petzeGefrier Ein") if (ReadingsVal("Gefrierschrank_2","temperature","") >= -10 && Value("petzeGefrier") eq "bereit") }\
{ fhem ("set petzeGefrier Ein") if (ReadingsVal("Gefrierschrank_3","temperature","") >= -10 && Value("petzeGefrier") eq "bereit") }\
{ fhem ("set petzeGefrier Ein") if (ReadingsVal("Gefrierschrank_4","temperature","") >= -10 && Value("petzeGefrier") eq "bereit") }\
{ fhem ("set petzeGefrier Ein") if (ReadingsVal("Gefrierschrank_5","temperature","") >= -10 && Value("petzeGefrier") eq "bereit") }\
{ fhem ("set petzeGefrier Ein") if (ReadingsVal("Gefrierschrank_6","temperature","") >= -10 && Value("petzeGefrier") eq "bereit") }
Ich hab es in dieser art versucht funktioniert aber nicht...
define Gefrierschrank1_zu_Warm notify Gefrier.* \
{ fhem ("set petzeGefrier Ein") if (ReadingsVal("@","temperature","") >= -10 && Value("petzeGefrier") eq "bereit") }
define Gefrierschrank1_zu_Warm notify Gefrier.* \
{ fhem ("set petzeGefrier Ein") if (ReadingsVal("$name","temperature","") >= -10 && Value("petzeGefrier") eq "bereit") }
define Gefrierschrank1_zu_Warm notify Gefrier.* \
{ fhem ("set petzeGefrier Ein") if (ReadingsVal("Gefrier.*","temperature","") >= -10 && Value("petzeGefrier") eq "bereit") }
gruss Markus
Warum nicht einfach per IF?
define Gefrierschrank1_zu_Warm notify Gefrier.* IF ( [petzeGefrier] eq "bereit" && ( [Gefrierschrank_1] >= -10 || [Gefrierschrank_2] >= -10 || [Gefrierschrank_3] >= -10 ..etc.. ) ) ( set petzeGefrier Ein )
Wobei ich jetzt nicht getestet habe, ob IF mit geschachtelten Klammern zurecht kommt; aber davon gehe ich aus.
Ansonsten sowas in der Art in die 99_myUtils.pm:
sub check() {
if(Value("petzeGefrier") eq "bereit")) {
foreach my $device (qw(Gefrierschrank_1 Gefrierschrank_2 Gefrierschrank_3 Gefrierschrank_4 Gefrierschrank_5 Gefrierschrank_6)) {
if( ReadingsNum($device,"temperature",0) >= -10) {
fhem("set petzeGefrier Ein");
return 1;
}
}
}
return 0;
}
Ungesteter Code, Typos nicht ausgeschlossen - aber die Idee sollte klar werden.
Die Klammern im DOFI sind falsch ;)
Ich würde das mit einer Struktur für die Gefrierschrank_1 bis _6 machen:
define Gefrierschraenke structure Gefrier Gefrierschrank_1 Gefrierschrank_2 Gefrierschrank_3 Gefrierschrank_4 Gefrierschrank_5 Gefrierschrank_6
dann den notify
define Gefrierschrank1_zu_Warm notify Gefrier.* \
{ fhem ("set petzeGefrier Ein") if (ReadingsVal("Gefrierschraenke","temperature","") >= -10 && Value("petzeGefrier") eq "bereit") }
oder DOIF
define Gefrierschrank1_zu_Warm DOIF ([Gefrieschraenke] >= "-10" and [petzeGefrier] eq "bereit") (set petzeGefrier Ein)
Und wenn Du doch die myUtils nutzen willst, einfach ein array anlegen.
Danke für die Antworten!
hab wo anders dieses Beispiel gefunden und scheint zu Funktionieren
.cfg
define Sofa_Benutzt_zu_Warm notify Gefrier.* { \
if ($EVTPART1 > -10) { \
fhem("set petzeGefrier Ein")\
} \
}
Dieses notify funktioniert aber ich habe immer diese Meldung im log
define Sofa_Benutzt_zu_Warm notify Gefrier.* { \
if ($EVTPART1 > -10) { \
fhem("set petzeGefrier Ein")\
} \
}
2015.02.22 20:18:13 3: Sofa_Benutzt_zu_Warm return value: Global symbol "$EVTPART1" requires explicit package name at (eval 113) line 2.
2015.02.22 20:18:14 3: Sofa_Benutzt_zu_Warm return value: Global symbol "$EVTPART1" requires explicit package name at (eval 116) line 2.
2015.02.22 20:18:16 3: Sofa_Benutzt_zu_Warm return value: Global symbol "$EVTPART1" requires explicit package name at (eval 119) line 2.
2015.02.22 20:18:18 3: Sofa_Benutzt_zu_Warm return value: Global symbol "$EVTPART1" requires explicit package name at (eval 122) line 2.
2015.02.22 20:18:28 3: Sofa_Benutzt_zu_Warm return value: Global symbol "$EVTPART1" requires explicit package name at (eval 137) line 2.
2015.02.22 20:18:30 3: Sofa_Benutzt_zu_Warm return value: Global symbol "$EVTPART1" requires explicit package name at (eval 140) line 2.
2015.02.22
Welches Event wird denn von Gefrier.* erzeugt?
Die Events im Eventsmonitor schauen so aus:
2015-02-23 11:12:31 OWTHERM Gefrierschrank_1 temperature: -20.8275
2015-02-23 11:12:31 OWTHERM Gefrierschrank_1 T: -20.83 °C ▾
2015-02-23 11:12:38 OWTHERM Gefrierschrank_2 temperature: -21.35
2015-02-23 11:12:38 OWTHERM Gefrierschrank_2 T: -21.35 °C ▾
2015-02-23 11:12:39 OWTHERM Gefrierschrank_3 temperature: -20.5
2015-02-23 11:12:39 OWTHERM Gefrierschrank_3 T: -20.50 °C ▾
Wenn ich das richtig im Kopf habe, dann ist doch $EVTPART1 temperature: und T:?
Müsste es nicht $EVTPART2 sein?
Ich würde aber nach wie vor eine Struktur einrichten und auf die readings triggern.