FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: cwagner am 12 April 2016, 13:56:55

Titel: DOIF und das Zusammenfügen von Readings in einem Perl-Ausdruck
Beitrag von: cwagner am 12 April 2016, 13:56:55
Für die zeitgerechte Aussendung von Wetter-Informationen nutze ich DOIF als "Zeitschaltuhr". Das klappte auch lange sehr klasse, bis ich mir in den Kopf setzte, zur Beurteilung von "Eiskratzgefahr" auch aus dem Statistikmodul die MIN/AVG/MAX-Werte mit einbinden zu wollen. [Einfache Regel: Wenn Taupunkt oberhalb der niedrigsten Nachttemperatur und Temperaturen um den Gefrierpunkt, dann gibt es Tau/Raufreif]

Meine DOIF-Definition ist also:
(([6:50] and [DI_DST:cmd_nr])==2 or ([7:50] and [DI_DST:cmd_nr]==1)) ({DebianMail('XXXX@YYYY.ZZ','Regenmessung','Gestern: '. [CN_Regen:Regen] .' mm. Aussentemperatur: '. [T_Aussen:temperature] .' Grad C '. [T_Aussen:stat_TemperatureDay] .' | Feuchtigkeit: '. [T_Aussen:humidity] .'% | Taupunkt: '. [T_Aussen:Taupunkt] .' Grad C')})

Daraus macht DOIF:
{DebianMail('XXXX@YYYY.ZZ','Regenmessung','Gestern: '. 0.0 .' mm. Aussentemperatur: '. 7.8 .' Grad C '. Min: 7.1 Avg: 8.1 Max: 9.1 .' | Feuchtigkeit: '. 82.99 .'% | Taupunkt: '. 5.1 .' Grad C')}

Problematisch ist offenbar das Einfügen von [T_Aussen:stat_TemperatureDay] = Min: 7.1 Avg: 8.1 Max: 9.1. Denn DOIF verendet in einem Perl-Fehler:

2016.04.12 07:50:00 1: PERL WARNING: Bareword found where operator expected at (eval 63048) line 1, near "7.1 Avg"
2016.04.12 07:50:00 3: eval: {DebianMail('XXXX@YYYY.ZZ','Regenmessung','Gestern: '. 0.0 .' mm. Aussentemperatur: '. 7.8 .' Grad C '. Min: 7.1 Avg: 8.1 Max: 9.1 .' | Feuchtigkeit: '. 82.99 .'% | Taupunkt: '. 5.1 .' Grad C')}
2016.04.12 07:50:00 1: PERL WARNING: (Missing operator before Avg?)
2016.04.12 07:50:00 1: PERL WARNING: Bareword found where operator expected at (eval 63048) line 1, near "8.1 Max"


Was kann ich tun?

Herzliche Grüße

Christian
Titel: Antw:DOIF und das Zusammenfügen von Readings in einem Perl-Ausdruck
Beitrag von: Per am 12 April 2016, 14:03:50
Die Ausgaben in eckigen Klammern werden schon vom DOIF aufgelöst und direkt übergeben. Du musst sie also zusätzlich in Anführungszeichen setzen.
Titel: Antw:DOIF und das Zusammenfügen von Readings in einem Perl-Ausdruck
Beitrag von: Ellert am 12 April 2016, 14:12:07
Befehle, die Kommata enthalten, sind zusätzlich in runde Klammern zu setzen, siehe: http://fhem.de/commandref_DE.html#DOIF_Angaben_im_Ausfuehrungsteil
Zitat
(({DebianMail('XXXX@YYYY.ZZ','Regenmessung',...)}))
Titel: Antw:DOIF und das Zusammenfügen von Readings in einem Perl-Ausdruck
Beitrag von: cwagner am 12 April 2016, 21:36:55
@Per, vielen Dank, die Anführungszeichen waren es, es klappt!

Christian
Titel: Antw:DOIF und das Zusammenfügen von Readings in einem Perl-Ausdruck
Beitrag von: Per am 12 April 2016, 22:30:06
Zitat von: cwagner am 12 April 2016, 21:36:55die Anführungszeichen waren es
Eigene Erfahrungen :D
Titel: Antw:DOIF und das Zusammenfügen von Readings in einem Perl-Ausdruck
Beitrag von: Damian am 13 April 2016, 07:22:51
Zitat von: Ellert am 12 April 2016, 14:12:07
Befehle, die Kommata enthalten, sind zusätzlich in runde Klammern zu setzen, siehe: http://fhem.de/commandref_DE.html#DOIF_Angaben_im_Ausfuehrungsteil

Nur mal zur Info:

Das gilt nur für FHEM-Befehl in runden Klammern, bei geschweiften Klammern (Perl) braucht man keine zusätzlichen runden Klammern um Kommata zu schützen.

Titel: Antw:DOIF und das Zusammenfügen von Readings in einem Perl-Ausdruck
Beitrag von: Ellert am 13 April 2016, 09:53:44
Zitat von: Damian am 13 April 2016, 07:22:51
Nur mal zur Info:

Das gilt nur für FHEM-Befehl in runden Klammern, bei geschweiften Klammern (Perl) braucht man keine zusätzlichen runden Klammern um Kommata zu schützen.
Ist das neu? Ich meine bei (set a b, {Log 1, "XYZ"}) bekam ich eine Fehlermeldung, daher schreibe ich immer  (set a b, ({Log 1, "XYZ"}))
Titel: Antw:DOIF und das Zusammenfügen von Readings in einem Perl-Ausdruck
Beitrag von: Per am 13 April 2016, 11:11:45
Da hast du ja auch ein Komma außerhalb der geschweiften Klammer.
Titel: Antw:DOIF und das Zusammenfügen von Readings in einem Perl-Ausdruck
Beitrag von: Damian am 13 April 2016, 17:11:47
Zitat von: Ellert am 13 April 2016, 09:53:44
Ist das neu? Ich meine bei (set a b, {Log 1, "XYZ"}) bekam ich eine Fehlermeldung, daher schreibe ich immer  (set a b, ({Log 1, "XYZ"}))

Nein, das sollte immer schon funktioniert haben.

Was jetzt neuerdings funktioniert, ist das hier:

(set bla {(... , ...)})

früher musste man

((set bla {(... , ...)}))

angeben.

Jetzt wird ein Komma innerhalb von irgendwelchen Klammern geschützt, da ich jetzt keinen split Befehl verwende, sondern einen eigenen SplitDoIf.

Gruß

Damian