Syntax: Mehrere FHEM-Befehle hintereinander

17,848 views
Skip to first unread message

Damian

unread,
Nov 14, 2012, 4:44:18 AM11/14/12
to fhem-...@googlegroups.com
Hallo zusammen,

ich wollte über ein Notify ein simples Ausführen von zwei FHEM-Befehlen hintereinander schalten. Die Syntax:

set Lampe on; set Rolladen off 

führt zu einer Fehlermeldung.

erst 

{FHEM("set Lampe on")};{FHEM("set Rolladen off")}

führt zum Erfolg - recht umständlich in solch einem Fall, wie ich finde.

Gibt es evtl. noch eine Alternative für ein Einfaches ausführen mehrere FHEM-Befehle, die ich evtl. übersehen habe?

Das Auslagern in ein Script halte ich in solchen einfachen Fällen nicht für sinnvoll.

Oder anders gefragt: wäre eine Syntaxerweiterung, wie im obigen Beispiel oder ähnlich nicht sinnvoll?

Gruß

Damian


puschel74

unread,
Nov 14, 2012, 5:24:19 AM11/14/12
to fhem-...@googlegroups.com
Hallo,

siehe Heimautomatisierung mit fhem.pdf
Es gibt mehrere Möglichkeiten.

a) structure
b) set lamp1 on;;set lamp2 on

Das doppelte Semikolon müsste in diesem Fall zum gewünschten Ergebnis führen.

Müsste auch in der commandref so beschrieben sein - ich finde auf die schnelle nur die Stelle nicht.

Grüße

JoWiemann

unread,
Nov 14, 2012, 5:33:55 AM11/14/12
to fhem-...@googlegroups.com
Hallo Damian,
 
 
dort steht auf Seite 24 als Beispiel: define Schalter1NotifyAn notify Schalter1:on set wz_Media on;;set wz_Licht off bedeutet für Dich: set Lampe on;; set Rolladen off 
 
Sonder zeichen wie @, ;, % müssen durch @@, ;;, %% maskiert werden.
Herzliche Grüße
 
Jörg

Am Mittwoch, 14. November 2012 10:44:18 UTC+1 schrieb Damian:

Rudolf Koenig

unread,
Nov 14, 2012, 5:45:20 AM11/14/12
to fhem-...@googlegroups.com
> M�sste auch in der commandref so beschrieben sein - ich finde auf die
> schnelle nur die Stelle nicht.

http://fhem.de/commandref.html#command

Damian

unread,
Nov 14, 2012, 6:08:05 AM11/14/12
to fhem-...@googlegroups.com
Danke für euch für die Tipps, jedoch

führt bei mir die Syntax

set Schreibtisch off;;set R_Dachboden on

zu folgender Fehlermeldung:

no set value specified

die obigen Befehle einzeln aufgeführt funktionieren dagegen.

Schreibtisch ist eine FS20-Steckdose, R_Dachboden ist bei mir ein HM-Rollladen.

Ist hier was kaputt? 

Mein FHEM läuft unter Windows mit ActivePerl.

Gruß

Damian





puschel74

unread,
Nov 14, 2012, 12:09:15 PM11/14/12
to fhem-...@googlegroups.com
Hallo,

du kannst die Geräte aber einzeln mit set schalten?
Also mit
set Schreibtisch on
und
set R_Dachboden on
die Steckdose einschalten und den Rollladen hochfahren (oder runter)?

Grüße

Damian

unread,
Nov 14, 2012, 12:42:58 PM11/14/12
to fhem-...@googlegroups.com
du kannst die Geräte aber einzeln mit set schalten?
Also mit
set Schreibtisch on
und
set R_Dachboden on
die Steckdose einschalten und den Rollladen hochfahren (oder runter)?

ja, wie bereits oben geschrieben kann ich:

set Schreibtisch off 

schalten

sowie

set R_Dachboden on

Allerdings funktioniert das Hintereinanderschalten der Kommandos nicht.

Alle folgenden Beispiele funktionieren nicht:

set Schreibtisch off;;set R_Dachboden on

set Schreibtisch off ;;set R_Dachboden on

set Schreibtisch off;; set R_Dachboden on

set Schreibtisch off ;; set R_Dachboden on

Das Gleiche mit einem Semikolon funktioniert genauso wenig.

Bei allen Versuchen kommt die oben genannte Meldung:

no set value specified

fhem.pl ist vom 31.10.2012

Hat sich da etwa ein Fehler eingeschlichen?

Kann das Jemand verifizieren?

Gruß

Damian

puschel74

unread,
Nov 14, 2012, 1:01:20 PM11/14/12
to fhem-...@googlegroups.com
Hallo,

ich hab bei mir für den Bewegungsmelder ein

set EG_Eingang_Licht_innen on-for-timer 30; sleep 1; set EG_Vorraum_Licht on-for-timer 48

im Einsatz (ACHTUNG!!! Aus der DEF für das notify entnommen daher nur einfache Semikolon.

Mit Notepad++ sieht das ganze so aus

define zuhause_on notify EG_Eingang_Bewegungsmelder:on.* { \
my $now=sprintf("%%02d:%%02d",$hour,$min);;\
if(sunrise_abs(3600) gt $now || $now gt sunset_abs(-3600)) {\
fhem ("set EG_Eingang_Licht_innen on-for-timer 30;; sleep 1;; set EG_Vorraum_Licht on-for-timer 48");;\
}\
}
attr zuhause_on room 20_Erdgeschoss

Ich hab auch grad versucht in fhem
set EG_Eingang_Licht_innen on-for-timer 30;; sleep 1;; set EG_Vorraum_Licht on-for-timer 48
abzusetzen und bekomme auch ein
no set value spezified
Wenn du das ganze natürlich über ein notify machen willst musst du auch

fhem ("set EG_Eingang_Licht_innen on-for-timer 30;; sleep 1;; set EG_Vorraum_Licht on-for-timer 48");;\

schreiben, oder bei dir

fhem ("set Schreibtisch on;; set R_Dachboden on");;\
wenn du das über notepad++ eingibst oder im DEF direkt dann

fhem ("set Schreibtisch on;; set R_Dachboden on");

Damit sollte es auch bei dir klappen.

Grüße

Damian

unread,
Nov 14, 2012, 1:50:09 PM11/14/12
to fhem-...@googlegroups.com
Dass es kompliziert geht, habe ich bereits im ersten Post geschrieben, lt. Verweis  von Rudi auf die Dokumentation:

    Multiple fhem commands are separated by semicolon (;). In order to use semicolon in perl code or shell programs, they have to be escaped by the double semicolon (;;). See the Notes section of the notify chapter on command parameters and escape rules.
    E.g. the following first command switches Lamp1 off at 07:00 and Lamp2 immediately (at the point of definition), the second one switches both lamps off at 07:00.
      define lampoff at 07:00 set Lamp1 off; set Lamp2 off
      define lampoff at 07:00 set Lamp1 off;; set Lamp2 off
soll es aber auch einfacher gehen.

Gruß

Damian


Rudolf Koenig

unread,
Nov 14, 2012, 1:58:55 PM11/14/12
to fhem-...@googlegroups.com
> soll es aber auch einfacher gehen.

Kannst Du mal das Ganze mit "attr global verbose 5" durchfuehren, und den
relevanten Abschnitt aus dem Logfile zeigen?

puschel74

unread,
Nov 14, 2012, 2:02:43 PM11/14/12
to fhem-...@googlegroups.com
Hallo,

also klappt es mit meinem letzten Beispiel nicht?
Ich weiß zwar nicht was an

fhem ("set lamp1 on;;set lamp2 on");;\
kompliziert isein soll aber ok.

@Rudi
Geht das auch "einfacher" aus einem notify heraus?
Ich dachte mir immer ein notify spielt in Perl und fhem muss daher explizit genannt werden.
Hmm, hab ich mich wohl getäuscht.

Evtl. wäre ein - hier ist mein notify, das klappt so nicht was mach ich falsch, besser als ein
das geht nicht ich hab das in meinem notify drin.
Poste doch mal dein notify damit wir sehen was und wie abgefragt wird.

Grüße

Damian

unread,
Nov 14, 2012, 2:06:20 PM11/14/12
to fhem-...@googlegroups.com
2012.11.14 20:02:36 5: Cmd: >set Schreibtisch off;; set R_Dachboden on<
2012.11.14 20:02:36 4: /fhem?room=Info&cmd=set+Schreibtisch+off%3B%3B+set+R_Dachboden+on / RL: 911 / text/html; charset=UTF-8 / Content-Encoding: gzip

führt zu der oben genannten Fehlermeldung.
 

Rudolf Koenig

unread,
Nov 14, 2012, 2:44:07 PM11/14/12
to fhem-...@googlegroups.com
> 2012.11.14 20:02:36 5: Cmd: >set Schreibtisch off;; set R_Dachboden on<

Das ist Quatsch, weil ;; sagt, bitte nicht trennen, sondern als _ein_ Befehl
betrachten. Das FS20 Modul kriegt fuer Schreibtisch das Befehl
"off; set R_Dachboden on", und liefert eine ziemlich beknackte Fehlermeldung.


> 2012.11.14 20:02:36 4:
> /fhem?room=Info&cmd=set+Schreibtisch+off%3B%3B+set+R_Dachboden+on / RL: 911
> / text/html; charset=UTF-8 / Content-Encoding: gzip

Das ist ein Bug: die FHEMWEB Kommandozeile hat immer nur ein Befehl
ausgefuehrt, nie Ketten, im Gegensatz zu der Telnet Schnittstelle.
Ich hab das geaendert, hoffentlich ohne Nebenwirkungen. Ab morgen per
updatefhem.

Damian

unread,
Nov 14, 2012, 3:05:03 PM11/14/12
to fhem-...@googlegroups.com

> 2012.11.14 20:02:36 4: 
> /fhem?room=Info&cmd=set+Schreibtisch+off%3B%3B+set+R_Dachboden+on / RL: 911
> / text/html; charset=UTF-8 / Content-Encoding: gzip

Das ist ein Bug: die FHEMWEB Kommandozeile hat immer nur ein Befehl
ausgefuehrt, nie Ketten, im Gegensatz zu der Telnet Schnittstelle.
Ich hab das geaendert, hoffentlich ohne Nebenwirkungen.  Ab morgen per
updatefhem.
 
wird damit dann auch ein notify "richtig" funktionieren:

hier nochmal ein Beispiel

CFGFN
DEF
Drucker:on set Schreibtisch off;; set R_Dachboden on
NAME
N_test
NR
158
NTFY_ORDER
50-N_test
REGEXP
Drucker:on
STATE
active
TYPE
notify

im Log steht beim Auslösen von N_test:

2012.11.14 20:22:36 5: Triggering N_test
2012.11.14 20:22:36 5: Cmd: >set Schreibtisch off; set R_Dachboden on<
2012.11.14 20:22:36 3: N_test return value: no set value specified

Gruß

Damian
 

Rudolf Koenig

unread,
Nov 14, 2012, 3:15:26 PM11/14/12
to fhem-...@googlegroups.com
> wird damit dann auch ein notify "richtig" funktionieren:

Hat damit nichts zu tun, das war auch vorher nur ein Befehl.

puschel74

unread,
Nov 14, 2012, 3:16:50 PM11/14/12
to fhem-...@googlegroups.com
Hallo,

versuch es doch indem du ein
trigger Drucker on
absetzt.
Was passiert dann?

Grüße

Damian

unread,
Nov 14, 2012, 3:37:11 PM11/14/12
to fhem-...@googlegroups.com


Hat damit nichts zu tun, das war auch vorher nur ein Befehl. ?

Irgendwie reden wir an einander vorbei. Ich versuche es noch einmal:

Laut Doku soll funktionieren, Zitat:
    'define lampoff at 07:00 set Lamp1 off;; set Lamp2 off'
Nun mache das Ganze nicht mit Notify, sondern mit einem at-Kommando, genauso, wie in der Doku:

also:

define A_test at 21:24 set Schreibtisch on;; set R_Dachboden on

im Log steht dann:

2012.11.14 21:24:00 5: exec at command A_test
2012.11.14 21:24:00 5: Cmd: >set Schreibtisch on; set R_Dachboden on<
2012.11.14 21:24:00 3: no set value specified

auch hier gleiches Verhalten wie bei Notify.

Daher meine Frage: ist die Doku falsch, mache ich etwas falsch oder ist es ein Bug?

Gruß

Damian






 

UliM

unread,
Nov 14, 2012, 4:06:38 PM11/14/12
to fhem-...@googlegroups.com


Am Mittwoch, 14. November 2012 21:37:11 UTC+1 schrieb Damian:
Daher meine Frage: ist die Doku falsch, mache ich etwas falsch oder ist es ein Bug?

Scheinbar ist die Doku falsch.
Wenn Du hier bestätigst, dass es funzt, wenn Du nur ein Semikolon setzt, korrigiere ich die Doku gern.

Gruß, Uli

Damian

unread,
Nov 15, 2012, 2:06:45 AM11/15/12
to fhem-...@googlegroups.com
Scheinbar ist die Doku falsch.

Wenn Du hier bestätigst, dass es funzt, wenn Du nur ein Semikolon setzt, korrigiere ich die Doku gern.
 
Hiermit kann ich bestätigen:

Ein Notify oder At-Befehl funktioniert mit einem Semikolon wie erwartet:)

Daher sind die fett markierten Stellen falsch. Denn es wird mit einem Semikolon auch nichts unmittelbar geschaltet, sondern geht in die Definition des at-Kommandos ein.
      E.g. the following first command switches Lamp1 off at 07:00 and Lamp2 immediately (at the point of definition), the second one switches both lamps off at 07:00.
        define lampoff at 07:00 set Lamp1 off; set Lamp2 off
        define lampoff at 07:00 set Lamp1 off;; set Lamp2 off
      Mit anderen Worten ist das Einzige, was hier Sinn macht:

      define lampoff at 07:00 set Lamp1 off; set Lamp2 off

      hiermit werden um 07:00 Uhr beide Lampen geschaltet.

      Gruß

      Damian

      Rudolf Koenig

      unread,
      Nov 15, 2012, 4:48:44 AM11/15/12
      to fhem-...@googlegroups.com
      > Mit anderen Worten ist das Einzige, was hier Sinn macht:
      > define lampoff at 07:00 set Lamp1 off; set Lamp2 off

      Das stimmte so bis gestern, wenn man diesen Befehl in der FHEMWEB Kommandozeile
      eingegeben hat. Im telnet und ab heute nach einem Update in FHEMWEB muss das
      dokumentierte ;; verwendet werden. Im FHEMWEB editiere ich sowas im
      Detail-Ansicht, deswegen ist das mir noch nie aufgefallen.

      Damian

      unread,
      Nov 15, 2012, 7:38:59 AM11/15/12
      to fhem-...@googlegroups.com

      Das stimmte so bis gestern, wenn man diesen Befehl in der FHEMWEB Kommandozeile
      eingegeben hat. Im telnet und ab heute nach einem Update in FHEMWEB muss das
      dokumentierte ;; verwendet werden.  Im FHEMWEB editiere ich sowas im
      Detail-Ansicht, deswegen ist das mir noch nie aufgefallen.

      Dann bin ich ja beruhigt, dass ich doch nicht auf den Kopf gefallen bin und meine Frage von oben:

      'wird damit dann auch ein notify "richtig" funktionieren?'

      durchaus berechtigt war und jetzt mit "ja" zu beantworten ist.

      Gut, dass wir darüber gesprochen haben und die Welt (hier zumindest die Dokumentation und die Software) wieder in Ordnung ist;)

      Gruß

      Damian

      Reply all
      Reply to author
      Forward
      0 new messages