Hauptmenü

DOIF in "Etappen"

Begonnen von stgeran, 05 September 2017, 13:26:20

Vorheriges Thema - Nächstes Thema

stgeran

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.
FHEM auf Raspberry
CSM 866MHz für EM1010 mit Strom und Gaszähler
CUL 866MHz für MAX! Radiator Thermostat 
CUL 433MHz für Innen und Aussen Temp
HMLAN für HM-LC-Sw1-PI-2

CoolTux

kann man alles in einem DOIF schreiben. Das geht ja noch von der Größe/Übersicht her.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

stgeran

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.
FHEM auf Raspberry
CSM 866MHz für EM1010 mit Strom und Gaszähler
CUL 866MHz für MAX! Radiator Thermostat 
CUL 433MHz für Innen und Aussen Temp
HMLAN für HM-LC-Sw1-PI-2

Otto123

#4
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

stgeran

Prima, Danke. Der "\" ist zum Zeilenumbruch, ist das korrekt? Wegen der Übersicht?
FHEM auf Raspberry
CSM 866MHz für EM1010 mit Strom und Gaszähler
CUL 866MHz für MAX! Radiator Thermostat 
CUL 433MHz für Innen und Aussen Temp
HMLAN für HM-LC-Sw1-PI-2

stgeran

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
FHEM auf Raspberry
CSM 866MHz für EM1010 mit Strom und Gaszähler
CUL 866MHz für MAX! Radiator Thermostat 
CUL 433MHz für Innen und Aussen Temp
HMLAN für HM-LC-Sw1-PI-2

stgeran

Sorry für den Wind.
Der Sw_02 war noch nicht mit dem ...Weather gepeert :-(((
FHEM auf Raspberry
CSM 866MHz für EM1010 mit Strom und Gaszähler
CUL 866MHz für MAX! Radiator Thermostat 
CUL 433MHz für Innen und Aussen Temp
HMLAN für HM-LC-Sw1-PI-2

stgeran

Ah, Sch.... ich krieg den verdammten error nicht weg!
FHEM auf Raspberry
CSM 866MHz für EM1010 mit Strom und Gaszähler
CUL 866MHz für MAX! Radiator Thermostat 
CUL 433MHz für Innen und Aussen Temp
HMLAN für HM-LC-Sw1-PI-2

Damian

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)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

stgeran

Das sieht schon besser aus :-)
FHEM auf Raspberry
CSM 866MHz für EM1010 mit Strom und Gaszähler
CUL 866MHz für MAX! Radiator Thermostat 
CUL 433MHz für Innen und Aussen Temp
HMLAN für HM-LC-Sw1-PI-2

Otto123

#11
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.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Per

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.

stgeran

Ich habs mit Ottos Vorschlag gemacht. Danke euch für die Hilfe :-)
FHEM auf Raspberry
CSM 866MHz für EM1010 mit Strom und Gaszähler
CUL 866MHz für MAX! Radiator Thermostat 
CUL 433MHz für Innen und Aussen Temp
HMLAN für HM-LC-Sw1-PI-2