FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Markus am 13 Februar 2015, 13:00:08

Titel: Probleme mit notify
Beitrag von: Markus am 13 Februar 2015, 13:00:08
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
Titel: Antw:Probleme mit notify
Beitrag von: nesges am 19 Februar 2015, 19:29:49
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.
Titel: Antw:Probleme mit notify
Beitrag von: Mitch am 19 Februar 2015, 22:44:19
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.
Titel: Antw:Probleme mit notify
Beitrag von: Markus am 21 Februar 2015, 15:24:39
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")\
}  \
}
Titel: Antw:Probleme mit notify
Beitrag von: Markus am 22 Februar 2015, 21:23:12
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
Titel: Antw:Probleme mit notify
Beitrag von: Mitch am 23 Februar 2015, 09:22:37
Welches Event wird denn von Gefrier.* erzeugt?
Titel: Antw:Probleme mit notify
Beitrag von: Markus am 23 Februar 2015, 11:14:58
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 ▾
Titel: Antw:Probleme mit notify
Beitrag von: Mitch am 23 Februar 2015, 12:08:54
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.