Syntax Problem mit einem watchDog

Begonnen von Andreas74, 31 Januar 2016, 22:10:00

Vorheriges Thema - Nächstes Thema

Andreas74

Hallo Gemeinde,

Ich habe einen Watchdog der nach 10 Sekunden "Fenster offen", einen Dummy auf "on" schaltet und sich von einem Wandthermostat die Desired-temp holt und in einer Variablen abspeichert.

Der watchDog an sich funktioniert:

define Schlafzimmer_Watchdog watchdog SchlafzimmerFenster:contact:.open.* 00:00:10 SchlafzimmerFenster:contact:.closed.* set SchlafzimmerOffen on;; trigger Schlafzimmer_Watchdog . ;;

und im FHEMWEB einzeln funktioniert auch die Routine zum Abspeichern:

{my $dt=Value("Thermostat_Wohnzimmer_Clima");; my ($a,$b,$c,$e,$f,$g)=split(' ',$dt);; {fhem ("set DesiredTempWertSchlafzimmer ".$e)}}

Alles zusammen gesetzt wirft Fehler:

define Schlafzimmer_Watchdog watchdog SchlafzimmerFenster:contact:.open.* 00:00:10 SchlafzimmerFenster:contact:.closed.* { fhem ("set SchlafzimmerOffen on");; my $dt=Value("Thermostat_Wohnzimmer_Clima");; my ($a,$b,$c,$e,$f,$g)=split(' ',$dt);; fhem ("set DesiredTempWertSchlafzimmer ".$e);; trigger Schlafzimmer_Watchdog . ;; }

Ich seh den Wald vor lauter Bäumen nicht mehr :-(

Kann mir evtl. jemand helfen?

Danke

Andreas


rudolfkoenig

Wie lautet die Fehlermeldung?
Es faellt auf, das trigger nicht in fhem() gepackt ist, das wird so nicht funktionieren.

Wenn man schon in FHEMWEB editiert, dann wuerde ich den Ausdruck mehrzeilig formatieren, und dann kann man auch die haesslichen ;; weglassen (bzw. nur ; ersetzen).

Andreas74

Hi,

ich bekomm in der Version (hab schon vieles rum probiert)

"Unknown command $my, try help.".

Wie muss ich die Syntax verstehen?? Reinen Perlcode wie "my $foo = $value{"DEVICE"}" kann ich einfach so in den Watchdog schreiben, alles was FHEM tut muss ich in FHEM() verpacken?

Viele Grüße


Andreas

rudolfkoenig

Zitat"Unknown command $my, try help.".
Das muss aus einer anderen Variante deiner Versuche stammen, $my sehe ich hier nicht.

ZitatReinen Perlcode wie "my $foo = $value{"DEVICE"}" kann ich einfach so in den Watchdog schreiben, alles was FHEM tut muss ich in FHEM() verpacken?
Das hat mit watchdog nur indirekt was zu tun, und es waere gut, die Grundlagen (http://fhem.de/commandref.html#command und http://fhem.de/commandref.html#perl) zu verstehen: In diesem Fall haben wir einen Perl-Block (wg. dem {}). Im Perl Block kann man keine FHEM-Kommandos (set, get, trigger) direkt ausfuehren, das waere ja kein Perl. Dafuer muss man die Funktion fhem() verwenden.

$value{"DEVICE"} ist unerwuenscht, und mit Featurelevel 5.7 nicht mehr verfuegbar. Alternative ist Value("DEVICE").
Und es heisst fhem() und nicht FHEM(). Wichtig.

Andreas74

Jetzt geht's! Danke!

Meine Fehler waren (in den vielen Kombinationen und Versuchen):

- der komplette Command Block war nicht in allen Versuchen in {} eingebetet
- die fhem Kommandos hatte ich mal mit fhem ("set devive on|off") und mal einfach mit set device on|off angegeben. (siehe rudolfkoenig)

So läuft der WatchDog tadellos:


define Schlafzimmer_Watchdog watchdog SchlafzimmerFenster:contact:.open.* 00:00:10 SchlafzimmerFenster:contact:.closed.* { fhem ("set SchlafzimmerOffen on");; my $dt=Value("Thermostat_Wohnzimmer_Clima");; my ($a,$b,$c,$e,$f,$g)=split(' ',$dt);; fhem ("set DesiredTempWertSchlafzimmer ".$e);; fhem ("trigger Schlafzimmer_Watchdog . ") ;; }


Nochmals Danke!!