FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: tklein am 18 April 2017, 17:55:00

Titel: [gelöst] Wie rufe ich eine eigene Funktion (99_My_Utils) mit Parameter
Beitrag von: tklein am 18 April 2017, 17:55:00
Hallo,

folgende Funktion habe ich:


sub alarmmail() {

my ($alarm_von) = @_;
fhem("set Dummy_test alarmmail");

my $subject = " Alarm von: " . $alarm_von;
my $text = "Das oben genannte Gerät hat Alarm ausgelöst";

DebianMail('max.mustermann@test.de',$subject,$text);
fhem("set Pushover_Client msg $subject $text '' 0 '' ");

return $subject;

}


Im DOIF steht:


([Alarmanlage] eq "an" and [PIR433_1] eq "on") ((set Pushover_Client msg 'Bewegung' 'Bewegung im Flur' '' 0 '') (set PIR433_1 off) (set alarm an) (alarmmail(PIR Flur)))


Log sagt mir: alarmmail(PIR Flur): Unknown command alarmmail("PIR, try help.

Wie bekomme ich die Fehlermeldung weg bzw. wie sollte der Aufruf erfolgen?

Grüße Thomas
Titel: Antw:Wie rufe ich eine eigene Funktion (99_My_Utils) mit Parameter in einem DOIF auf?
Beitrag von: MadMax-FHEM am 18 April 2017, 18:08:18
Ich nutze zwar kein DOIF sondern notify aber mache es wie folgt:

statt:

(alarmmail(PIR Flur)

mal folgendes versuchen:

{alarmmail(\"PIR Flur\")}

EDIT: deine sub-Definition muss dann aber auch so lauten: sub alarmmail($)

Gruß, Joachim
Titel: Antw:Wie rufe ich eine eigene Funktion (99_My_Utils) mit Parameter in einem DOIF auf?
Beitrag von: tklein am 18 April 2017, 19:30:35
Hi Joachim,

jetzt bekomme ich:
{alarmmail(\"PIR Flur\")}: Can't find string terminator '"' anywhere before EOF at (eval 3333) line 1.

bei:

([Alarmanlage] eq "an" and [PIR433_1] eq "on") ((set Pushover_Client msg 'Bewegung' 'Bewegung im Flur' '' 0 '') (set PIR433_1 off)(set alarm an)({alarmmail(\"PIR Flur\")}))

ZitatEDIT: deine sub-Definition muss dann aber auch so lauten:
Code: [Auswählen]

sub alarmmail($)
watn blöder copy&paste Fehler :-)

Grüße
Thomas
Titel: Antw:Wie rufe ich eine eigene Funktion (99_My_Utils) mit Parameter in einem DOIF auf?
Beitrag von: MadMax-FHEM am 18 April 2017, 19:45:06
Hi,

sorry ich dachte (warum auch immer) ich müsste die Anführungszeichen maskieren...
...vielleicht einfach mal so:

([Alarmanlage] eq "an" and [PIR433_1] eq "on") ((set Pushover_Client msg 'Bewegung' 'Bewegung im Flur' '' 0 '') (set PIR433_1 off)(set alarm an)({alarmmail("PIR Flur")}))

EDIT: Wobei ich wie geschrieben DOIF nicht verwende, kann also gut sein, dass da noch irgendwo ein Strichpunkt etc. zum Trennen zwischen den set-Befehlen und dem Perl-Aufruf rein muss...

Gruß, Joachim
Titel: Antw:Wie rufe ich eine eigene Funktion (99_My_Utils) mit Parameter in einem DOIF auf?
Beitrag von: tklein am 18 April 2017, 20:00:27
jup das wars. Vielen lieben Dank!!
Titel: Antw:Wie rufe ich eine eigene Funktion (99_My_Utils) mit Parameter in einem DOIF auf?
Beitrag von: MadMax-FHEM am 18 April 2017, 20:01:30
Bitte gerne!

Viel Spaß!

Achja, den Thread  mal als gelöst "kennzeichnen": z.B. umbenennen in "[gelöst] Wie rufe ich eine eigene Funktion (99_My_Utils) mit Parameter in einem DOIF auf?"

Gruß, Joachim
Titel: Antw:[gelöst] Wie rufe ich eine eigene Funktion (99_My_Utils) mit Parameter
Beitrag von: tklein am 18 April 2017, 20:39:26
schon längst geschehen. Mache ich bei meinen gelösten Threads eigentlich immer. :-)
Titel: Antw:[gelöst] Wie rufe ich eine eigene Funktion (99_My_Utils) mit Parameter
Beitrag von: MadMax-FHEM am 18 April 2017, 20:44:25
Ups, hab ich wohl übersehen...
...bzw. ist ja nicht jeder ein Forumsprofi wie du ;)

Gruß, Joachim
Titel: Antw:[gelöst] Wie rufe ich eine eigene Funktion (99_My_Utils) mit Parameter
Beitrag von: automatisierer am 18 April 2017, 21:00:03
Funktioniert es denn wirklich?

Zumindest, wenn du von deiner Sub einen Rückgabewert erwartest oder eine Berechnung machst, musst du den Perl Befehl in den geschweiften Klammern nochmal zusätzlich in runde Klammern setzten.

Zitat Commandref:
ZitatBerechnungen können in geschweiften Klammern erfolgen. Aus Kompatibilitätsgründen, muss die Berechnung unmittelbar mit einer runden Klammer beginnen. Innerhalb der Perlberechnung können Readings, Status oder Internals wie gewohnt in eckigen Klammern angegeben werden.

Bei mir funktioniert dieser Aufruf zum Beispiel nicht ohne runde Klammern:
(set pushover msg title=Warnung {(checkWindowOpen("msg"))} device=Ingo priority=2 sound=siren retry=30 expire=3600)
wohlgemerkt ist das DOIF Kram und hat nix mit der Sub zu tun. Ohne die runden Klammern wird nur der Aufruf selber per Pushover versendet und nicht der Rückgabewert.
Titel: Antw:[gelöst] Wie rufe ich eine eigene Funktion (99_My_Utils) mit Parameter
Beitrag von: tklein am 20 April 2017, 08:48:26
@ Joachim:

Wenn schon nicht FHEM etc. dann das Forum ein bißchen. :-)

@ automatisierer:

Danke für den Hinweis. Werde ich ausprobieren. Während ich bastel habe ich so meine Werte überprüft. Im DOIF brauche ich keinen Rückgabewert. Daher wird es mir nicht aufgefallen sein.

Grüße & Dake für die Hilfe!
Thomas