Hauptmenü

Fehler in IF-Bedingung

Begonnen von NeuFehm, 10 Dezember 2016, 14:15:25

Vorheriges Thema - Nächstes Thema

NeuFehm

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?
Raspberry Pi B+
RS 485 Schnittstellen: DIGITUS DA-70157, LINKSPTITE RS485/GPIO Shield for Raspberry Pi
RS485 Geräte: Ultraschallsensor für Zisternenfüllstand (Eigenbau), 4x8 Relais-M-Mastermodule (Eigenbau), 6 T-Module (Schalter und 3 analoge Eingänge) (Eigenbau)
sonstige Hardware: 2 Relay Modul

Syrex-o

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

NeuFehm

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....

Raspberry Pi B+
RS 485 Schnittstellen: DIGITUS DA-70157, LINKSPTITE RS485/GPIO Shield for Raspberry Pi
RS485 Geräte: Ultraschallsensor für Zisternenfüllstand (Eigenbau), 4x8 Relais-M-Mastermodule (Eigenbau), 6 T-Module (Schalter und 3 analoge Eingänge) (Eigenbau)
sonstige Hardware: 2 Relay Modul

Syrex-o

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

igami

if ist ein perl Befehl, IF ein fhem Befehl
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

NeuFehm

#5
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!!!
Raspberry Pi B+
RS 485 Schnittstellen: DIGITUS DA-70157, LINKSPTITE RS485/GPIO Shield for Raspberry Pi
RS485 Geräte: Ultraschallsensor für Zisternenfüllstand (Eigenbau), 4x8 Relais-M-Mastermodule (Eigenbau), 6 T-Module (Schalter und 3 analoge Eingänge) (Eigenbau)
sonstige Hardware: 2 Relay Modul