Bitte um Syntax Hilfe bei Befehl sleep

Begonnen von Fritz Muster, 12 September 2018, 09:11:15

Vorheriges Thema - Nächstes Thema

Fritz Muster

Hallo in die Runde,

ich wäre für etwas Unterstützung bei meinem Syntax Problem sehr dankbar. Bei meinem define Code

define atVerreist at *17:10
{if ((ReadingsVal("dmyAutomatisierung", "Verreist", 0) == 0) and ((strftime "%d.%m.%Y",localtime time+3600*8) eq (ReadingsVal("calvUrlaub", "t_001_bdate", 0))) and ((ReadingsVal("calvUrlaub","t_001_summary", 0)) eq "Verreist"))
{fhem("setreading dmyAutomatisierung Verreist 1")}
elsif ((ReadingsVal("dmyAutomatisierung", "Verreist", 0) == 1) and (((strftime "%d.%m.%Y",localtime time+3600*8) ne (ReadingsVal("calvUrlaub", "t_001_bdate", 0))) or ((ReadingsVal("calvUrlaub", "t_001_summary", 0)) ne "Verreist")))
{fhem("sleep 32400;;setreading dmyAutomatisierung Verreist 0")} }


funktioniert der Ausführungsteil der elseif Bedingung nicht. Funktion des Ausführungsteil soll ein verzögertes setreading um 32400 Sekunden sein.

Ich habe schon mit den Semikolions und Leerzeichen experementiert, bekomme aber stets Fehlermeldungen im log und die Bedingung wird nicht ausgeführt.

Wenn ich z.B. folgendes im Ausführungsteil schreibe

{fhem("sleep 32400;;setreading dmyAutomatisierung Verreist 0")}

bekomme ich im Log folgendes

2018.09.02 17:10:00 3: sleep 32400;;setreading dmyAutomatisierung Verreist 0 : Cannot interpret 32400;setreading as seconds
2018.09.02 17:10:00 3: atVerreistCheck: Cannot interpret 32400;setreading as seconds


Bei
{fhem("sleep 32400 ;;setreading dmyAutomatisierung Verreist 0")}

steht im Log

sleep 3600 ;;setreading dmyAutomatisierung Verreist 0 : Last parameter must be quiet
atVerreistCheck: Last parameter must be quiet


Und ein
Zitat {fhem("sleep 32400;; setreading dmyAutomatisierung Verreist 0")}

wird im Log mit

sleep 32400;; setreading dmyAutomatisierung Verreist 0 : Cannot interpret 3600; as seconds
atVerreistCheck: Cannot interpret 3600; as seconds


quittiert.

Die Beispiele zum Befehl sleep aus der commandref habe ich ja bereits ohne Erfolg versucht umzusetzten

Zitatsleep 0.5
    define n3 notify btn3.* set lamp toggle;;sleep 0.5;;set lamp toggle
    define a3 at +*00:05 set Windsensor 1w_measure;; sleep 2 quiet;; get Windsensor 1w_temp

Wie schon gesagt wäre dankbar für einen Tipp/Hinweis.

Danke und Grüße

Fritz
RasPi 3B+, Stretch, Fhem 5.9, DBlog SQLite
HMLAN, mapleCUN MAX/WMBus, mapleSduino 868/433/868
HM Sensoren/Aktoren ,Technoline TX 29 DTH-IT, TFA 30.3155WD, MAX!
Hour Counter, Astro, EletricityCounter, Statistics, Charting Frontend, TabletUI, Modbus

Wernieman

#1
Solches sollte funktionieren:
Zitat{fhem("define tempat at +*00:05 setreading dmyAutomatisierung Verreist 0"}

Könnte es sein, das Du die Angaben direkt aus der Config hast? Mich wundert die Meng der ;; die Du angiebst.

Hast Du eigentlich mal die Fehlermeldung gelesen: "Last parameter must be quiet"
Was will FHEM Dir eigentlich damit sagen? z.B. so etwas "sleep 3600 quit"

Ich würde Dir es aber nicht empfehln, da es eventuell blockieren sein könnte, d.h. FHEM arbeitet 3600 secunden nicht richtig. Da ist ein kurzfristiges define über in at besser!
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Beta-User

Zitat von: Wernieman am 12 September 2018, 10:32:17
Könnte es sein, das Du die Angaben direkt aus der Config hast? Mich wundert die Meng der ;; die Du angiebst.
+1: Das direkte Editieren der config dürfte die Ursache sein => lassen, ist fehleranfällig, wie man einmal mehr sehen kann.

Editier den Ausführungsteil mal in der DEF von "atVerreist": Da ist vermutlich dann ein ";" zu wenig drin.

Ansonsten bevorzuge ich auch den Weg, ein (temporätes) at zu definieren, allerdings sollte das nicht wiederholend sein ("*"; da müßte man noch die "-temporary"-Option mit angeben) und am besten mit "defmod" gemacht werden: das gibt keine Fehlermeldung, wenn es das betr. at schon geben sollte.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Fritz Muster

Zitat von: Beta-User am 12 September 2018, 10:52:43
+1: Das direkte Editieren der config dürfte die Ursache sein => lassen, ist fehleranfällig, wie man einmal mehr sehen kann.

Editier den Ausführungsteil mal in der DEF von "atVerreist": Da ist vermutlich dann ein ";" zu wenig drin.


Zitat von: Wernieman am 12 September 2018, 10:32:17
Könnte es sein, das Du die Angaben direkt aus der Config hast? Mich wundert die Meng der ;; die Du angiebst.

Da es hin und wieder mal in anderen Posts die Aufforderung gibt, die commandref zu lesen, habe ich dies natürlich gemacht und da steht es halt wie in meinem 1. Beitrag erwähnt mit ;; drin. Die config fasse ich grundsätzlich nicht an. Weder copy noch paste.

Zitat von: Wernieman am 12 September 2018, 10:32:17
Ich würde Dir es aber nicht empfehln, da es eventuell blockieren sein könnte, d.h. FHEM arbeitet 3600 secunden nicht richtig.

Nach meinem Verständnis ist das nur der Fall wenn dem sleep kein weiterer Befehl folgt. Was bei mir nicht der Fall ist.

Zitat von: Wernieman am 12 September 2018, 10:32:17
Hast Du eigentlich mal die Fehlermeldung gelesen: "Last parameter must be quiet"
Was will FHEM Dir eigentlich damit sagen? z.B. so etwas "sleep 3600 quit"

Ja habe ich. Das quiet sollte aber eine optionale Angabe sein. Die Log Meldung kommt ja bei dem Versuch bei dem ich nach der sleep Sekundenangabe zunächst ein Leerzeichen mache und dann erst die ;;
Somit sieht es für mich aus, das perl das leerzeichen interpretiert und der sleep Syntax nach, nach diesem Leerzeichen nur ein quiet erwartet/akzeptiert. Also für mich nachvollziehbar. Was ich nicht verstehe ist, warum bei dem Versuch
{fhem("sleep 32400;;setreading dmyAutomatisierung Verreist 0")}

das nach der Sekundenangabe folgende Semikolon nicht als solches interpretiert wird sondern dem Sekunden String zugeschrieben wird. Obwohl doch der sleep Befehl laut commandref mit ;; und ohne Leerzeichen benutzt werden kann.

Zitat von: Beta-User am 12 September 2018, 10:52:43
Editier den Ausführungsteil mal in der DEF von "atVerreist": Da ist vermutlich dann ein ";" zu wenig drin.

Das mit dem dritten ; werde ich mal versuchen, klingt jetzt nachdem ich hier alles zusammengeschrieben habe irgendwie logisch.

RasPi 3B+, Stretch, Fhem 5.9, DBlog SQLite
HMLAN, mapleCUN MAX/WMBus, mapleSduino 868/433/868
HM Sensoren/Aktoren ,Technoline TX 29 DTH-IT, TFA 30.3155WD, MAX!
Hour Counter, Astro, EletricityCounter, Statistics, Charting Frontend, TabletUI, Modbus

Beta-User

Zitat von: Fritz Muster am 12 September 2018, 11:21:28
Das mit dem dritten ; werde ich mal versuchen, klingt jetzt nachdem ich hier alles zusammengeschrieben habe irgendwie logisch.
Wenn man an der Stelle zusätzliche ";;" braucht, dann 2, also 4 statt 2.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Damian

Zitatsleep 32400;; setreading dmyAutomatisierung Verreist 0 : Cannot interpret 3600; as seconds

Hier würde ich auf Semikolon zuviel tippen.


Denn 3600; kennt sleep nicht, 3600 dagegen schon.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF