at soll eigene 99_myUtils.pm-Routine mit Parametern aufrufen

Begonnen von cb2sela, 08 August 2015, 14:10:16

Vorheriges Thema - Nächstes Thema

cb2sela

Hallo zusammen,

ich bin neu hier. Ich möchte gerne per at eine eigene Routine mit Parametern aus meiner 99_myUtils.pm antriggern aber ich krieg die Syntax nicht hin.

Für alle praktischen Belange soll es mal so aussehen:

Die Routine:

sub meine_routine {
    my ($device, $wann) = @_;
    my ($sec,$min,$hour,$day,$mon,$year) = localtime();
    my $datestamp= sprintf ("%04d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon+1, $day, $hour, $min, $sec );
    my $state = Value($device);
    open (FO, ">>/home/bananapi/motionlog.log" );
    print FO "$datestamp Ich bin meine_routine. Status von $device ist $state und wann ist $wann. Bye.\n";
    close FO;
}


Wenn ich in der fhem.cfg folgendes eintrage:

define FensterFlur_1_OG_Notify notify FensterFlur_1_OG:(open) { \
    reinis_alarm("FensterFlur_1_OG");; \
    meine_routine("FensterFlur_1_OG", 15);; \
}

Dann schreibt er mit artig in mein log:

2015-08-08 13:39:33 Ich bin meine_routine. Status von FensterFlur_1_OG ist open und wann ist 15. Bye.

Nun möchte ich meine_routine aber erst in 15 Minuten aufrufen und ändere den Eintrag in der fhem.cfg wiefolgt ab:

define FensterFlur_1_OG_Notify notify FensterFlur_1_OG:(open) { \
    reinis_alarm("FensterFlur_1_OG");; \
    define atFF at +00:15:00 meine_routine("FensterFlur_1_OG", 15);; \
}


Ich kriege dann beim Öffnen des Flurfensters im Log ein:


2015.08.08 13:43:44 1: PERL WARNING: Bareword found where operator expected at (eval 36) line 3, near "00 meine_routine"
2015.08.08 13:43:44 3: eval: {
    reinis_alarm("FensterFlur_1_OG");
    define atFF at +00:15:00 meine_routine("FensterFlur_1_OG", 15);
}
2015.08.08 13:43:44 1: PERL WARNING:    (Missing operator before meine_routine?)
2015.08.08 13:43:44 3: FensterFlur_1_OG_Notify return value: syntax error at (eval 36) line 3, near "00:"


Ich bin auch schon auf den Trichter gekommen, dass die Zeile mit dem define atFF ggf. in fhem("...")-Klammern sollte, aber auch diese Syntax hier klappt nicht:


define FensterFlur_1_OG_Notify notify FensterFlur_1_OG:(open) { \
    reinis_alarm("FensterFlur_1_OG");; \
    fhem("define atFF at +00:15:00 meine_routine('FensterFlur_1_OG', 15)");; \
}


Beim Öffnen des Fensters kriege ich jetzt keinen Fehler mehr, aber wenn die 15 Minuten abgelaufen sind und er versucht den Befehl abzuarbeiten kriege ich dann:

2015.08.08 13:55:42 3: atFF: Unknown command meine_routine('FensterFlur_1_OG',, try help.

Kann mir bitte jemand bei der Syntax helfen?

Danke + Gruß

marvin78

FensterFlur_1_OG:(open) {
    reinis_alarm("FensterFlur_1_OG");
    fhem("define atFF at +00:15:00 {meine_routine('FensterFlur_1_OG', 15)}");
}


Code für den DEF Bereich im Frontend, NICHT für die fhem.cfg.

Zum Code: FHEM muss wissen, dass es sich um PERL-Code handelt. Ich würde ggf. auch defmod verwenden.

cb2sela

Herzlichen Dank. So funktionierts.

Kleine Anmerkung: Mit DEF Bereich konnte ich erstmal nichts anfangen aber nach einiger Suche konnte ich in der fhem-Einsteiger Doku dann unter dem Begriff "DEF-Textfeld" fündig werden.
Ihr werdets nicht glauben, aber in Richtung "Everything" und dann mal wo draufklicken hab ich mich in 8 Wochen noch kein einziges mal hinverirrt ;-)

Danke für den Hinweis mit defmod, den ich natürlich erst beachtet habe, als ich es schon anders gelöst hatte. Hätte mir im Zweifelsfall das Löschen und Neuanlegen erspart und ist wohl die elegantere Lösung.

Vielen Dank nochmal.

Prof. Dr. Peter Henning

Oh, wir glauben das schon. Wir glauben sogar, dass Anfänger alles hinbekommen. 8)

LG

pah