Wenn ich ein DOIF habe mit einer Bedingung, die einen zweistufigen Schalter betätigt, kann ich das in einem DOIF schreiben? Oder ist es besser ein zweites DOIF zu nehmen?
z.B. DOIF Ventilator Feuchte über 50% set Schalter1 on; Feuchte über 70% set Schalter2 on DOELSE Feuchte unter 50% set Schalter1 und Schalter2 off.
Ich habe es nicht als code geschrieben, es soll nur ein Beispiel sein.
kann man alles in einem DOIF schreiben. Das geht ja noch von der Größe/Übersicht her.
Hi,
ist wie immer sicher auch Geschmacksache. Du hast ja nicht eine Bedingung, so wie Du schreibst hast Du drei!
Du solltest die Bedingungen klar definieren und dann sind getrennte DOELSEIF Zweige kein Problem. Keinen Fall unberücksichtigt lassen!
Feuchte > 50 and Feuchte <= 70
Feuchte > 70
Gruß Otto
Hier mein Versuch mit "richtigen" Definitionen
([HM_Wand_Weather:humidity] > 60 and [HM_Wand_Weather:humidity] <= 70)(set Vent_Bad_Sw_01 on) DOELSE (set Vent_Bad_Sw_01 off)
([HM_Wand_Weather:humidity] >70)(set Vent_Bad_Sw_01, Vent_Bad_Sw_02 on) DOELSE (set Vent_Bad_Sw_01, Vent_Bad_Sw_02 off)
Würde es reichen, im zweiten DOIF nur Sw_02 einzuschalten? Ich brauche > 70% Sw_01 und Sw_02; bei < 70% nur Sw_01; und unter 60% sollen beide ausgehen.
Hallo,
"richtige" Definitionen wären die Kopie der Raw Defintion oder ein list. Nur die DEF kopieren ist für mich immer ein bisschen halbherzig. ;)
Kommas haben in DOIF einen spezielle Bedeutung -> Du musst sie extra klammern :-[ :-X :'(
Ich würde so denken?
define di_Feuchte DOIF ([HM_Wand_Weather:humidity] > 60 and [HM_Wand_Weather:humidity] <= 70)(set Vent_Bad_Sw_01 on)\
DOELSEIF ([HM_Wand_Weather:humidity] >70)((set Vent_Bad_Sw_01,Vent_Bad_Sw_02 on))\
DOELSE ((set Vent_Bad_Sw_01,Vent_Bad_Sw_02 off))
Wenn es nur die beiden Schalter mit dem namen gibt kannst Du auch so schreiben: (set Vent_Bad_Sw_0. off)
Du schickst damit unter Umständen extra Schaltbefehle obwohl der Schaltzustand schon stimmt, kann man mit einem FILTER noch verhindern.
Gruß Otto
Prima, Danke. Der "\" ist zum Zeilenumbruch, ist das korrekt? Wegen der Übersicht?
Das ist jetzt das "list Luft_Bad"
Internals:
CFGFN
DEF ([HM_Wand_Weather > 60 and [HM_Wand_Weather <= 70)(set Vent_Bad_Sw_01 on)
DOELSEIF ([HM_Wand_Weather >70)((set Vent_Bad_Sw_01, Vent_Bad_Sw_02 on))
DOELSE ((set Vent_Bad_Sw_01, Vent_Bad_Sw_02 off))
NAME Luft_Bad
NR 435
NTFY_ORDER 50-Luft_Bad
STATE cmd_3
TYPE DOIF
READINGS:
2017-09-06 18 Device HM_Wand_Weather
2017-09-06 18 cmd 3
2017-09-06 18 cmd_event HM_Wand_Weather
2017-09-06 18 cmd_nr 3
2017-09-06 18 e_HM_Wand_Weather_humidity 53
2017-09-06 18 error set Vent_Bad_Sw_01, Vent_Bad_Sw_02 off: Unknown argument Vent_Bad_Sw_02, choose one of clear getConfig getRegRaw inhibit off on-for-timer on-till on peerBulk peerIODev press pressS pressL regBulk regSet sign statusRequest toggle
2017-09-06 18 state cmd_3
condition:
0 ReadingValDoIf($hash,'HM_Wand_Weather','humidity') > 60 and ReadingValDoIf($hash,'HM_Wand_Weather','humidity') <= 70
1 ReadingValDoIf($hash,'HM_Wand_Weather','humidity') >70
devices:
0 HM_Wand_Weather
1 HM_Wand_Weather
all HM_Wand_Weather
do:
0:
0 set Vent_Bad_Sw_01 on
1:
0 (set Vent_Bad_Sw_01, Vent_Bad_Sw_02 on)
2:
0 (set Vent_Bad_Sw_01, Vent_Bad_Sw_02 off)
helper:
event humidity: 53,T: 26.3 H: 53 D: 16.0,temperature: 26.3,dewpoint: 16.0
globalinit 1
last_timer 0
sleeptimer -1
timerdev HM_Wand_Weather
timerevent humidity: 53,T: 26.3 H: 53 D: 16.0,temperature: 26.3,dewpoint: 16.0
triggerDev HM_Wand_Weather
timerevents:
humidity: 53
T: 26.3 H: 53 D: 16.0
temperature: 26.3
dewpoint: 16.0
timereventsState:
humidity: 53
T: 26.3 H: 53 D: 16.0
temperature: 26.3
dewpoint: 16.0
triggerEvents:
humidity: 53
T: 26.3 H: 53 D: 16.0
temperature: 26.3
dewpoint: 16.0
triggerEventsState:
humidity: 53
T: 26.3 H: 53 D: 16.0
temperature: 26.3
dewpoint: 16.0
internals:
itimer:
readings:
0 HM_Wand_Weather
1 HM_Wand_Weather
all HM_Wand_Weather
regexp:
0:
1:
all:
state:
STATE:
trigger:
Attributes:
room Bad
wait 1200
Es zickt aber rum
error
set Vent_Bad_Sw_01, Vent_Bad_Sw_02 off: Unknown argument Vent_Bad_Sw_02, choose one of clear:readings,trigger,register,oldRegs,rssi,msgEvents,attack,all getConfig:noArg getRegRaw inhibit:on,off off:noArg on-for-timer on-till on:noArg peerBulk peerIODev press pressS:HM_Wand_SwitchTr pressL:HM_Wand_SwitchTr regBulk regSet sign:on,off statusRequest:noArg toggle:noArg
Sorry für den Wind.
Der Sw_02 war noch nicht mit dem ...Weather gepeert :-(((
Ah, Sch.... ich krieg den verdammten error nicht weg!
Zitat von: stgeran am 06 September 2017, 18:55:11
Ah, Sch.... ich krieg den verdammten error nicht weg!
Korrekte Schreibweise:
ohne Leerzeichen:
((set Vent_Bad_Sw_01,Vent_Bad_Sw_02 on))
oder
hier ist das Leerzeichen egal:
(set Vent_Bad_Sw_01 on, set Vent_Bad_Sw_02 on)
Das sieht schon besser aus :-)
Zitat von: stgeran am 06 September 2017, 18:26:58
Prima, Danke. Der "\" ist zum Zeilenumbruch, ist das korrekt? Wegen der Übersicht?
So ist es. Dann ist die Zeile nicht so lang.
In der Raw Def geht das so per cut & paste
Aber nimm doch
set Vent_Bad_Sw_0. on
- dann hast Du den Kuddel Muddel mit den Kommas nicht.
Zitat von: stgeran am 06 September 2017, 17:57:37Würde es reichen, im zweiten DOIF nur Sw_02 einzuschalten?
Jein. Wenn dein Fhem garantiert 24/7 läuft, ja. Ansonsten würde ich einfach auf Nummer sicher gehen. Kostet ja nix.
Ich habs mit Ottos Vorschlag gemacht. Danke euch für die Hilfe :-)