FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: NeuFehm am 10 Dezember 2016, 14:15:25

Titel: Fehler in IF-Bedingung
Beitrag von: NeuFehm am 10 Dezember 2016, 14:15:25
Habe eine "einfache" IF-Bedingung definiert:
define myTest at +*00:01 if ("1" eq "1") (set 40Relais3 off) else (set 40Relais1 on)

Logfile schreibt: 2016.12.10 14:15:00 3: myTest: Unknown command if, try help.

Kann mir jemand sagen warum?
Titel: Antw:Fehler in IF-Bedingung
Beitrag von: Syrex-o am 10 Dezember 2016, 14:38:32
Müsste es nicht einfach: DOIF sein.
Dann sollte es doch schon klappen.
und dann: ELSE für deine Bedingung und falls du mehr als eine hast dann: DOELSEIF

Grüße
Titel: Antw:Fehler in IF-Bedingung
Beitrag von: NeuFehm am 10 Dezember 2016, 14:43:35
Ach mist... klappt alles nicht...
define mywatchdog DOIF ([PIR1:on:sec] < 10) (set 40Relais2 on) DOELSE (set 40Relais2 off)
bin in einer anderen Frage auch genau hier angekommen :(

Mir kommt es so vor, als wenn DOIF nur einmal schaut und dann nie wieder...
Ich dachte der wird initialisiert und schaut dann nach der in der Bedingung genannten Zeit wieder nach und
außerdem immer wenn ein Event durch FHEM geistert ob die Bedingung noch stimmt....

Titel: Antw:Fehler in IF-Bedingung
Beitrag von: Syrex-o am 10 Dezember 2016, 14:47:06
Eigentlich sollte das nicht der Fall sein.
Bei mir zumindest ist das DOIF in Kombination mit allen Geräten die etwas schalten sollen sehr zuverlässig und ändert jedesmal den command je nach dem, welche Status beim Reading vorliegt.
Was möchtest du denn genau machen ?

Grüße
Titel: Antw:Fehler in IF-Bedingung
Beitrag von: igami am 10 Dezember 2016, 14:49:16
if ist ein perl Befehl, IF ein fhem Befehl
Titel: Antw:Fehler in IF-Bedingung
Beitrag von: NeuFehm am 10 Dezember 2016, 16:14:22
Hi Syrex und andere Helfer,
Nocheinmal das Vorhaben.
Ich habe einen Eigenbau Bewegungsmelder, der solange er eine Bewegung erkennt aller 10 Sekunden eine Nachricht verschickt.
Der Bewegungsmelder ist bei mir "PIR1" und das dazugehörige Reading ist "pir1"
Ein weiteres Gerät ist eine Lampe an einem Relais (auch Eigenbau). Das Relais kann ich mit "set 40Relais1 on" oder "set 40Relais1 off" schalten.
Nun war die Idee. dass sobald ein aktuelles Reading vom Bewegungsmelder kommt, ein "set 40Relais1 on" gesendet wird und wenn länger als 20 Sekunden nichts mehr von PIR1 kommt,
oder genauer sich das Datum des readings pir1 länger als 20 Sekunden nicht geändert hat, dann soll die Lampe wieder ausgehen... "set 40Relais1 off"
Daher die Idee:
define mywatchdog DOIF ([PIR1:pir1:sec] < 20) (set 40Relais1 on) DOELSE (set 40Relais1 off)

1. Ist ein DOIF für diese Aufgabe das Richtige?
2. Ist die Bedingung richtig: ([PIR1:pir1:sec] < 20)
Danke für Eure Hilfe

Update:
Zwischenzeitlich konnte ich es lösen.. es ist KEIN DOIF sondern folgende Kombination:

define Bewegung notify PIR1 set 40Relais1 on
define keineBewegung watchdog PIR1 00:00:15 SAME set 40Relais1 off;; trigger keineBewegung .


Danke an alle Tipps!!!