Hauptmenü

Fehler in DoIf Abfrage

Begonnen von devien, 01 Juli 2017, 19:49:43

Vorheriges Thema - Nächstes Thema

devien

Hallo, ich kriege stetig folgende Meldung:

2017.07.01 19:37:13 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 148478) line 1.
2017.07.01 19:37:13 3: eval: Solar_on_off: warning in condition c02

habe jedoch mehrfach durchgeschaut, komme nicht auf den Fehler :(

define Solar_on_off DOIF ([21:00-07:00])(set Relay2:FILTER=STATE=on off)(set Pumpe_02 dim 0)(set Relay3:FILTER=STATE=on off)(set Pumpe_03 dim 0) DOELSEIF([07:00-21:00] and ({Value("Solar_temp_01")} > 40.0 or {Value("Solar_temp_04")} > 40.0 or {Value("Solar_temp_05")} > 40.0 or {Value("Solar_temp_06")} > 40.0 or {Value("Solar_temp_08")} > 40.0 and [DS18B20_Vorlauf_S:temperature] < 65.0))(set Pumpe_02 dim 26)(set Relay2:FILTER=STATE=off on)(set Pumpe_03 dim 91)(set Relay3:FILTER=STATE=off on) DOELSEIF([07:00-21:00] and [DS18B20_Vorlauf_S:temperature] >65.0)(set Relay2:FILTER=STATE=off on)(set Relay3:FILTER=STATE=off on)(set Pumpe_03 dim {([Pumpe_03:dim]-2)}) DOELSEIF([07:00-21:00] and [DS18B20_Vorlauf_S:temperature] <=65.0 and ({Value("Solar_temp_01")} > 40.0 or {Value("Solar_temp_04")} > 40.0 or {Value("Solar_temp_05")} > 40.0 or{Value("Solar_temp_06")} > 40.0 or {Value("Solar_temp_08")} > 40.0)(set Pumpe_03 dim 86))
attr Solar_on_off DbLogInclude 1
attr Solar_on_off disable 0
attr Solar_on_off room Solarsteuerung
attr Solar_on_off verbose 5


Sieht jemand woran es liegt?
FHEM + UniPi + Arduino = gute Lösung

Damian

Zitat von: devien am 01 Juli 2017, 19:49:43
Hallo, ich kriege stetig folgende Meldung:

2017.07.01 19:37:13 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 148478) line 1.
2017.07.01 19:37:13 3: eval: Solar_on_off: warning in condition c02

habe jedoch mehrfach durchgeschaut, komme nicht auf den Fehler :(

define Solar_on_off DOIF ([21:00-07:00])(set Relay2:FILTER=STATE=on off)(set Pumpe_02 dim 0)(set Relay3:FILTER=STATE=on off)(set Pumpe_03 dim 0) DOELSEIF([07:00-21:00] and ({Value("Solar_temp_01")} > 40.0 or {Value("Solar_temp_04")} > 40.0 or {Value("Solar_temp_05")} > 40.0 or {Value("Solar_temp_06")} > 40.0 or {Value("Solar_temp_08")} > 40.0 and [DS18B20_Vorlauf_S:temperature] < 65.0))(set Pumpe_02 dim 26)(set Relay2:FILTER=STATE=off on)(set Pumpe_03 dim 91)(set Relay3:FILTER=STATE=off on) DOELSEIF([07:00-21:00] and [DS18B20_Vorlauf_S:temperature] >65.0)(set Relay2:FILTER=STATE=off on)(set Relay3:FILTER=STATE=off on)(set Pumpe_03 dim {([Pumpe_03:dim]-2)}) DOELSEIF([07:00-21:00] and [DS18B20_Vorlauf_S:temperature] <=65.0 and ({Value("Solar_temp_01")} > 40.0 or {} > 40.0 or {Value("Solar_temp_05")} > 40.0 or{Value("Solar_temp_06")} > 40.0 or {Value("Solar_temp_08")} > 40.0)(set Pumpe_03 dim 86))
attr Solar_on_off DbLogInclude 1
attr Solar_on_off disable 0
attr Solar_on_off room Solarsteuerung
attr Solar_on_off verbose 5


Sieht jemand woran es liegt?

DOIF-Bedingung entspricht einer Perl-Bedingung, da haben geschweifte Klammern nichts verloren. Abgesehen davon  ist Value("Solar_temp_01")  das Gleiche wie [Solar_temp_01].
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tomspatz

#2
Sorry nur kurz vom Handy aber m.E. fehlt dir jeweils vor der Zeit ein "?"
Dann musst du die cmd_2 nochmals dahingehend ändern das "und" vor "oder" geht.

EDIT die {} habe ich gar nicht wahrgenommen
LG
Tom

devien

Zitat von: tomspatz am 01 Juli 2017, 20:12:50
Sorry nur kurz vom Handy aber m.E. fehlt dir jeweils vor der Zeit ein "?"
also die Zeitklausel funktioniert bei mir ohne ein "?" wunderbar, ich wüste nicht was das helfen sollte, lasse mich jedoch gern eines besseren belehren.
Zitat von: tomspatz am 01 Juli 2017, 20:12:50
Dann musst du die cmd_2 nochmals dahingehend ändern das "und" vor "oder" geht.
die Reihenfolge und zugehörige Klammersetzung ist m.M. nach korrekt. letztlich möchte ich ja das "auch" geprüft wird ob einer der Sensoren (egal welcher) die Schwelle von 40° überschritten hat, zusätlich zu den anderen mit "und" verknüpften Vorraussetzungen.

nach eingehender Prüfung hats geholfen die geschweiften Klammern zu entfernen. Momentan sieht es so aus:
defmod Solar_on_off DOIF ([21:00-07:00])(set Relay2:FILTER=STATE=on off)(set Pumpe_02 dim 0)(set Relay3:FILTER=STATE=on off)(set Pumpe_03 dim 0) DOELSEIF([07:00-21:00] and ([Solar_temp_01] > 40.0 or [Solar_temp_04] > 40.0 or [Solar_temp_05] > 40.0 or [Solar_temp_06] > 40.0 or [Solar_temp_08] > 40.0 and [DS18B20_Vorlauf_S:temperature] < 65.0))(set Pumpe_02 dim 26)(set Relay2:FILTER=STATE=off on)(set Pumpe_03 dim 91)(set Relay3:FILTER=STATE=off on) DOELSEIF([07:00-21:00] and [DS18B20_Vorlauf_S:temperature] >65.0)(set Relay2:FILTER=STATE=off on)(set Relay3:FILTER=STATE=off on)(set Pumpe_03 dim {([Pumpe_03:dim]-2)}) DOELSEIF([07:00-21:00] and ([Solar_temp_01] > 40.0 or [Solar_temp_04] > 40.0 or [Solar_temp_05] > 40.0 or [Solar_temp_06] > 40.0 or [Solar_temp_08] > 40.0) and [DS18B20_Vorlauf_S:temperature] <=65.0) (set Pumpe_03 dim 86)
attr Solar_on_off DbLogInclude 1
attr Solar_on_off disable 0
attr Solar_on_off room Solarsteuerung
attr Solar_on_off verbose 5


leider konnte ich den Ausdruck (set Pumpe_03 dim {([Pumpe_03:dim]-2)}) bislang noch nicht um die geschweiften Klammern reduzieren ohne die Funktionalität einzubüßen. Aber das log zeigt keine Fehler mehr mit verbose 5.
FHEM + UniPi + Arduino = gute Lösung

KernSani

Der Bedingungsteil von DOIF ist Perl, der Ausführungsteil nicht (da brauchst du also die geschweiften Klammern)


Funktioniert es denn jetzt oder nicht?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

devien

es merkert nicht im Logfile, ob es funktioniert kann ich erst morgen im laufe des tages sagen wenn die zeitbedingungen abgearbeitet werden und die Temperaturen entsprechend steigen.
FHEM + UniPi + Arduino = gute Lösung

tomspatz

Zitatalso die Zeitklausel funktioniert bei mir ohne ein "?" wunderbar, ich wüste nicht was das helfen sollte, lasse mich jedoch gern eines besseren belehren.

Nicht belehren nur halt ohne auf die Zeit zu triggern:
ZitatZeitintervalle, Readings und Status ohne Trigger   back

Angaben in eckigen Klammern, die mit einem Fragezeichen beginnen, führen zu keiner Triggerung des Moduls, sie dienen lediglich der Abfrage.

Anwendungsbeispiel: Licht soll zwischen 06:00 und 10:00 angehen, getriggert wird nur durch den Taster nicht um 06:00 bzw. 10:00 Uhr und nicht durch das Device Home

define di_motion DOIF ([?06:00-10:00] and [button] and [?Home] eq "present")(set lamp on-for-timer 600)
attr di_motion do always

LG
Tom

devien

Zitat von: tomspatz am 03 Juli 2017, 16:36:19
Nicht belehren nur halt ohne auf die Zeit zu triggern:
LG
Tom
aha, interessant, ich baue das mal um, Dankeschön.

übrigends, die doif Abfrage selbst funktioniert hingegen soweit gut.
FHEM + UniPi + Arduino = gute Lösung