FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: gestein am 30 August 2019, 19:30:26

Titel: at und mehrere Befehle
Beitrag von: gestein am 30 August 2019, 19:30:26
Hallo,

ich möchte gerne meine Bewässerung  zu einer bestimmten Zeit automatisch starten.
Prinzipiell ja kein Problem mit "at".

Allerdings möchte ich gerne dem at 2 Befehle mitgeben.
1. soll ich per pushmsg benachrichtigt werden
2. soll die Bewässerung gestartet werden.

Also habe ich das so eingerichtet:
Internals:
   CFGFN     
   COMMAND    set pushmsg msg "fhem" "Bewässerung: automatischer Start auf Terrasse Ost"; set TO.Sprinkle_Alle An
   DEF        +*12:00 set pushmsg msg "fhem" "Bewässerung: automatischer Start auf Terrasse Ost"; set TO.Sprinkle_Alle An
   FUUID      5d683409-f33f-0b7a-e3ec-90785a025be7d5cc
   NAME       Bewaesserung.TO
   NR         110895
   NTM        06:00:00
   PERIODIC   yes
   RELATIVE   yes
   REP        -1
   STATE      Next: 06:00:00
   TIMESPEC   12:00
   TRIGGERTIME 1567224000
   TRIGGERTIME_FMT 2019-08-31 06:00:00
   TYPE       at
   READINGS:
     2019-08-30 19:21:37   state           Next: 06:00:00
Attributes:
   alignTime  06:00
   room       Bewässerung
   verbose    5


So wird aber nur der 1. Befehl ausgeführt.
In der Anleitung zu at steht, dass man ";;" angeben muss.
Wenn ich das tue, kommt bei einem execNow folgender Log-Eintrag:
2019.08.30 19:28:58.940 3: Bewaesserung.TO: Usage: pushmsg msg <text> [ option1=<value> option2='<value with space>' ... ]

Klammern helfen auch nicht.
Was mache ich falsch?

Danke im Voraus
lg, Gerhard
Titel: Antw:at und mehrere Befehle
Beitrag von: Otto123 am 30 August 2019, 21:17:29
Hi,
Das funktioniert in der FHEM Kommandozeile?
set pushmsg msg "fhem" "Bewässerung: automatischer Start auf Terrasse Ost"

Gruß Otto
Titel: Antw:at und mehrere Befehle
Beitrag von: CoolTux am 30 August 2019, 21:43:54
Die neue Syntax wäre so

pushmsg msg title=Heizungssteuerung! device=handy-marko priority=0 Die durschnittliche Nachttemperatur für die nächsten 11 Tage liegt bei unter 10 Grad!
Titel: Antw:at und mehrere Befehle
Beitrag von: gestein am 30 August 2019, 21:48:10
Ja, das funktioniert.
Habe ich an anderen Stellen auch so verwendet.
Nur nicht beim at.

lg, Gerhard
Titel: Antw:at und mehrere Befehle
Beitrag von: gestein am 30 August 2019, 21:49:56
@CoolTux: Echt? Das alte funktioniert aber immer noch.
Dann werde ich mal die ganzen Aufrufe anpassen.

lg, Gerhard
Titel: Antw:at und mehrere Befehle
Beitrag von: gestein am 30 August 2019, 21:53:53
@Otto:
Beim Eingeben des Befehls in die Befehlszeile ist mir was altes aufgefallen.
Nach einigem Probieren funktioniert die Definition nun anscheinend.

+*12:00 {fhem "set pushmsg msg 'fhem' 'Bewässerung: automatischer Start auf Terrasse West'; set TW.Sprinkle_Alle An"}

Aber warum?
lg, Gerhard
Titel: Antw:at und mehrere Befehle
Beitrag von: Otto123 am 30 August 2019, 22:12:43
Hallo Gerhard,

so machts Du jetzt Perl -> fhem - mit nur fhem Befehlen. Sieht für mich nicht falsch aber umständlich aus.

Aber ich habe keine Ahnung von pushmsg msg ...
{fhem "set pushmsg msg 'fhem' 'Bewässerung: automatischer Start auf Terrasse West'; set TW.Sprinkle_Alle An"}ist aus meiner Sicht gleich
set pushmsg msg 'fhem' 'Bewässerung: automatischer Start auf Terrasse West'; set TW.Sprinkle_Alle Anmüsste also auch in der FHEM Kommandozeile gehen.

Gruß Otto
Titel: Antw:at und mehrere Befehle
Beitrag von: gestein am 30 August 2019, 22:48:17
Ich habe das nun auch probiert und es funktioniert auf einmal auch.
Keine Ahnung warum.
Wahrscheinlich war ich irgendwo im nirgendwo verloren.

Aber müssten da nicht 2 ";" sein?
https://wiki.fhem.de/wiki/At#Mehrere_Aktionen_ausf.C3.BChren (https://wiki.fhem.de/wiki/At#Mehrere_Aktionen_ausf.C3.BChren)

Aber dann kommt beim execNow wieder der Fehler:
2019.08.30 22:45:12.384 3: Bewaesserung.TW: Usage: pushmsg msg <text> [ option1=<value> option2='<value with space>' ... ]

Ich werde mal den Timer mit einem ";" automatisch laufen lassen.
Vielleicht klappt es ja.
Vielen Dank für Deine Hilfe!
lg, Gerhard
Titel: Antw:at und mehrere Befehle
Beitrag von: Otto123 am 30 August 2019, 23:08:29
Hallo Gerhard,

Du musst die Beispiele dort genau und in Ruhe lesen, die stimmen schon alle. Es geht aber um define in der Kommandozeile und nicht um die DEF (den DEF editor)
Spiel sie durch um zu sehen was passiert!
Ich ergänze die Beschreibung mal noch: Ist das so verständlicher?
define morgens at *7:00:00 set lampe1 on ; set lampe2 on → schaltet lampe 1 immer um 7 an, aber lampe2 sofort. Der erste Befehl landet in der config (im at) der zweite Befehl wird einfach sofort ausgeführt.

define morgens at *7:00:00 set lampe1 on ;; set lampe2 on → schaltet BEIDE Lampen immer um 7 an. Beide Befehle landen in der config (im at)

Gruß Otto
Titel: Antw:at und mehrere Befehle
Beitrag von: gestein am 30 August 2019, 23:38:03
Hallo Otto,

ja, das ist nun verständlicher.
Darauf wäre ich nicht gekommen. Warum sollte ich denn auch gleichzeitig ein def anlegen und eine Lampe schalten wollen ;)

Aber hmm:
wenn ich das define mit 2 Befehlen anlegen will, muss ich in der Befehlszeile 2 ";" verwenden?
Und im Editor nur eines?
Auch im Def landet nur ein ";". Eigenartig.

Danke für die Aufklärung.
lg, Gerhard
Titel: Antw:at und mehrere Befehle
Beitrag von: Otto123 am 31 August 2019, 11:24:59
Guten Morgen Gerhard,

naja das sind aber nun mal (sicher schwer zu verstehende) Basics -> https://commandref.fhem.de/#command
Aber irgendwann gehts  ;D ;D ;D
ZitatWarum sollte ich denn auch gleichzeitig ein def anlegen und eine Lampe schalten wollen
Willst Du nicht, aber es passiert :)

In der Kommandozeile wird der Befehl interpretiert, das ; dient als Trenner: Bei der Ausführung verschwindet es quasi.
Soll es nicht verschwinden, also erhalten bleiben und in die DEF wandern, muss es geschützt (verdoppelt) werden.
Oder anders:
Der FHEM Befehl endet am Zeilenende oder am semikolon. Alles nach dem semikolon wird als neuer Befehl interpretiert. Damit kann man mehrere Befehle hintereinander in eine Zeile schreiben.
Soll das Semikolon kein Ende/Trenner sondern Bestandteil des Befehls sein, muss es geschützt/escaped/verdoppelt werden.

Gruß  Otto