Hauptmenü

Sleep im IF ?

Begonnen von heppel, 27 Juni 2016, 14:26:23

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: heppel am 01 Juli 2016, 11:45:02

Für mich bleibt der wichtige Punkt, dass die Commandref offensichtlich an zwei Stellen nicht mit der Implementation übereinstimmt.

- Die Syntax mit ";;" funktioniert nicht.
- "sleep" mit Komma tut nicht das Gewünschte.

Möglicherweise hängen die beiden Dinge zusammen.

Hier sollten entweder die Commandref oder das Programm geändert werden.

Wie/wo/wem melde ich das ?

Danke,
  Heppel
Es funktioniert alles wie beschrieben.

Was nicht funktioniert, ist die Kombination aus sleep und IF, wie ich bereits geschrieben habe.

1. Ein Semikolon im DEF-Editior entspricht zwei Semikolons in der cfg-Datei

2. Ein Semikolon trennt FHEM-Befehle und funktioniert nicht in Kombination  IF, weil es die Definition von IF zerstückelt. Daher habe ich als Trennzeichen bei IF das Komma definiert

3. Damit Sleep das ganze System nicht blockiert, muss hinter Sleep ein Semikolon folgen und kein Komma

Diese drei Eigenschaften führen zu dieser Problematik.

Wenn du mit if glücklich bist, dann ist ja alles in bester Ordnung.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

heppel

Zitat von: Damian am 01 Juli 2016, 13:37:38
Es funktioniert alles wie beschrieben.

Was nicht funktioniert, ist die Kombination aus sleep und IF, wie ich bereits geschrieben habe.

Das ist nicht schlimm, wenn man es weiß. Aber damit andere es auch wissen können, sollte es in der Commandref erwähnt werden.

Zitat
1. Ein Semikolon im DEF-Editior entspricht zwei Semikolons in der cfg-Datei

Ja, das hatte ich verstanden.

Zitat
2. Ein Semikolon trennt FHEM-Befehle und funktioniert nicht in Kombination  IF, weil es die Definition von IF zerstückelt. Daher habe ich als Trennzeichen bei IF das Komma definiert

Prima. Danke.

Zitat
3. Damit Sleep das ganze System nicht blockiert, muss hinter Sleep ein Semikolon folgen und kein Komma

Diese drei Eigenschaften führen zu dieser Problematik.

Wenn du mit if glücklich bist, dann ist ja alles in bester Ordnung.

Ich bin immer noch der Meinung, dass laut Commandref mein Notify:


define testn1 notify testn1 IF (1) (set t1 on;;;;set t2 off)

bzw.:

DEF        testn1 IF (1) (set t1 on;;set t2 off)


beim Triggern das Device t1 auf "on" und das Device t2 auf "off" setzen sollte. Tatsächlich setzt es aber das Device t1 auf "on;set t2 off". Ich weiß, dass das mit einem Komma funktionieren würde, ich versuche nur mitzuhelfen, FHEM und seine Doku so gut wie möglich zu machen, indem ich auf diese Diskrepanz hinweise.

Viele Grüße,
  Heppel

P.S.: Vielen Dank an Dich und all die anderen, die FHEM möglich gemacht haben.

willybauss

So, ich bin jetzt auch über dieses Problem gestolpert. Obwohl heppel eindringlich darauf hingewiesen hatte, dass das ziemlich missverständlich ist und um Ergänzung der Commandref gebeten hatte, finde ich auch heute noch kein Sterbenswörtchen dazu in der Commandref.

Es ist schon ärgerlich und unverständlich dass man bekannte Probleme dem Anwender wissentlich verschweigt. Wenn die Commandref darauf hinweisen würde, würde man sich gleich einer anderen Lösung zuwenden, statt mühevoll nach Fehlern im eigenen Code zu suchen.
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

alias2006

Hatte dasselbe Problem. Ich hatte es mit perl {fhem ....} gelöst. Sieht natürlich blöd aus. Die Command ref sollte man dabei weglassen. Nur ausprobieren hilft weiter, leider. :). Bei Problemen hat mir die Command ref selten weitergeholfen. Ich bin sicher, dass darüber noch einige stolpern werden und Zeit verdaddeln.
Raspberry, Fritz, Qnap, it, Homatic, Viessmann, Netatmo, solaredge,Sonnen, shellies, PV Forecast, powerfox, usw.

Damian

Ab morgen wird sleep mit Komma nicht blockierend funktionieren:

Bsp:

IF (...)(set bla1 on,sleep 5, set bla1 off)

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Zitat aus der Commandref:

  sleep kann mit Komma verwendet werden, dabei wirkt das sleep nicht blockierend:
define check at *10:00 IF ([indoor] eq "on") (sleep 2,set lampe1 on,sleep 3,set lampe2 on)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

juemuc

Zitat von: Damian am 03 Januar 2017, 13:59:21
Zitat aus der Commandref:

  sleep kann mit Komma verwendet werden, dabei wirkt das sleep nicht blockierend:
define check at *10:00 IF ([indoor] eq "on") (sleep 2,set lampe1 on,sleep 3,set lampe2 on)

Und ich habe mir am Wochenende so viel Mühe mit dem "fhem-Workaround" gegeben :-)

Vielen Dank für die Erweiterung. Das erleichtert den Ablauf.
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Ma_Bo

@Damian: Das heisst, in einem DOIF kann ich dann auch sleep verwenden?
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.