Zweite Bedingung wird nicht ausgeführt

Begonnen von M_I_B, 14 Oktober 2016, 00:19:59

Vorheriges Thema - Nächstes Thema

M_I_B

Hallo liebe Leute,

vermutlich mal wieder ein Denkfehler meinerseits; vielleicht mag mich mal einer aufklären?

define LUM_SF DOIF ([a31] == 1) (set 31d[1|2] 1) \
DOELSEIF ([a31] < 0) (set 31d[1|2] -1) \
DOELSEIF ([a31] == 0 and [LUM] <= 60) (set 31d2 1) \
DOELSEIF ([a31] == 0 and [LUM] <= 50) (set 31d1 1) \
DOELSEIF ([a31] == 0 and [LUM] >= 70) (set 31d[1|2] -1) \
DOELSE
attr LUM_SF do always


Eigentlich ganz einfach... Aber... Die Zeile 4, also die zweite Zeile mit " ... == 0" wird nie ausgeführt resp. abgefragt. Tausche ich Zeile 3 mit 4 bleibt das Problem in Zeile 4; er kommt trotz "do always" und trotz angehängtem leeren "DOELSE" nicht in die 4. Zeile.
Alle anderen Zeilen, also 1-3 so wie 5 werden einwandfrei abgearbeitet...

In meiner Not habe ich das erst mal in drei einzelne Abfragen gesplittet, aber das ist ja nicht Sinn der Sache...

Any Idea?

Ma_Bo

#1
Versuch mal:

define LUM_SF DOIF ([a31] == 1) (set 31d[1|2] 1) \
DOELSEIF ([a31] < 0) (set 31d[1|2] -1) \
        DOELSEIF ([a31] == 0 and [LUM] <= 50) (set 31d1 1) \
DOELSEIF ([a31] == 0 and [LUM] <= 60) (set 31d2 1) \
DOELSEIF ([a31] == 0 and [LUM] >= 70) (set 31d[1|2] -1) \
DOELSE
attr LUM_SF do always


Da das DOIF vorher, wenn der Wert LUM z.B. 45 ist, das 2te DOELSEIF ja erfüllt ist, da es <=60 ist, kann bei einem Wert <=50 bei deinem DOIF niemals das 3te DOELSEIF eintreten.


####Edit1
Sehe gerade das hast du ja schon getestet, mhhhh dann weiß ich leider auch nicht

Grüße Marcel
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.

Ellert

Du könntest Dir, wie hier beschrieben ein FileLog erstellen und das Schaltverhalten analysieren, in dem Du Alle beteiligten Geräte logst.

M_I_B

... ja, danke für den Hinweis; werde ich mal versuchen ...
Aber ist doch merkwürdig, oder nicht? [a31] kommt von einem Dummy und kann nur -1, 0, 1 oder 2 (aus, automatik, an, manuell) sein. Bei "0" funktioniert die erste und die dritte Zeile, die auf "0" prüft, die zweite aber nie, egal welches gerade die zweite Zeile ist. Solche Konstrukte habe ich hier zu Hauf in Verwendung und die funktionieren alle, nur der nicht. Hier muss irgend etwas anders sein...

Ellert

Wenn ich solche mysteriösen Erscheinungen habe, dann mache ich folgendes:

delete <DOIFname>
save
shutdown restart
DOIF im DEF-Editor (nicht in der cfg-Datei direkt) neu anlegen.

Erklären, warum es funktioniert kann ich nicht, es ist mein Hausmittel.

Ellert

Ich habs mal nachgestellt, alles funktionirt korrekt

Mit diesem DOIF:
define LUM_SF DOIF ([a31] == 1)
DOELSEIF ([a31] < 0) ()
DOELSEIF ([a31] == 0 and [LUM] <= 50) ()
DOELSEIF ([a31] == 0 and [LUM] <= 60) ()
DOELSEIF ([a31] == 0 and [LUM] >= 70) ()
DOELSE
attr LUM_SF do always
attr LUM_SF group MIB
attr LUM_SF room 0_Test


Zitat2016-10-14_11:35:13 a31 1
2016-10-14_11:35:13 LUM_SF cmd_nr: 1
2016-10-14_11:35:13 LUM_SF cmd: 1
2016-10-14_11:35:13 LUM_SF cmd_event: a31
2016-10-14_11:35:13 LUM_SF cmd_1
2016-10-14_11:35:30 a31 -1
2016-10-14_11:35:30 LUM_SF cmd_nr: 2
2016-10-14_11:35:30 LUM_SF cmd: 2
2016-10-14_11:35:30 LUM_SF cmd_event: a31
2016-10-14_11:35:30 LUM_SF cmd_2
2016-10-14_11:35:36 a31 0
2016-10-14_11:35:36 LUM_SF cmd_nr: 5
2016-10-14_11:35:36 LUM_SF cmd: 5
2016-10-14_11:35:36 LUM_SF cmd_event: a31
2016-10-14_11:35:36 LUM_SF cmd_5
2016-10-14_11:35:43 LUM 40
2016-10-14_11:35:43 LUM_SF cmd_nr: 3
2016-10-14_11:35:43 LUM_SF cmd: 3
2016-10-14_11:35:43 LUM_SF cmd_event: LUM
2016-10-14_11:35:43 LUM_SF cmd_3
2016-10-14_11:35:45 LUM 55
2016-10-14_11:35:45 LUM_SF cmd_nr: 4
2016-10-14_11:35:45 LUM_SF cmd: 4
2016-10-14_11:35:45 LUM_SF cmd_event: LUM
2016-10-14_11:35:45 LUM_SF cmd_4
2016-10-14_11:35:47 LUM 80
2016-10-14_11:35:47 LUM_SF cmd_nr: 5
2016-10-14_11:35:47 LUM_SF cmd: 5
2016-10-14_11:35:47 LUM_SF cmd_event: LUM
2016-10-14_11:35:47 LUM_SF cmd_5

M_I_B

... komisch :o
Ich werde das zeitnah mal mit deinem Vorschlag versuchen nachzuvollziehen; bin im Moment etwas eingespannt mit Platinen routen; die müssen fertig werden...

Per

#7
Dumme Idee: ist LUM auch numerisch?
Ellert wird es als Dummy angelegt haben und manuell befüllt, da ist es numerisch.

PS: richtig geraten :D

M_I_B

... öhh, ich denke schon. In LUM:state können nur die Ziffern 0-3 stehen und wird via DOIF gesetzt mit (set LUM x), wobei x = 0, 1, 2 oder 3 ...

define LUM dummy
attr LUM devStateIcon .*:noIcon
attr LUM readingList L1 L2 La
attr LUM setList state:0,1,2,3

Ellert

Zitat von: M_I_B am 17 Oktober 2016, 11:52:09
... öhh, ich denke schon. In LUM:state können nur die Ziffern 0-3 stehen und wird via DOIF gesetzt mit (set LUM x), wobei x = 0, 1, 2 oder 3 ...

define LUM dummy
attr LUM devStateIcon .*:noIcon
attr LUM readingList L1 L2 La
attr LUM setList state:0,1,2,3

Wenn LUM nur die Werte 0,1,2,3 annehmen kann, warum prüfst Du auf <= 50,<= 60, >=70 das ist ja völlig sinnlos ::)

M_I_B

Falsches FHEM- Gerät :o  ??? ::) Noch ein paar PI's und ich muss allen Devicenamen einen zum PI passenden Index mitgeben, damit ich nicht durcheinander komme ... ::)

Ok, Kommando zurück. das LUM um das es geht kann Werte von 0-100 annehmen. Sieht genau so aus, hat aber kein setList. Wird gesetzt von ...

define LUM_set DOIF ([+300] or ["HM2BB"]) \
(set LUM {(int((100*(([HM2BB1:brightness]+[HM2BB2:brightness])/2+0.5))/250))}) \
(set LUM L1 [HM2BB1:brightness], set LUM L2 [HM2BB2:brightness], set LUM La {([HM2BB1:brightness]+[HM2BB2:brightness])/2})
attr LUM_set do always


LUM hat im Moment gerade ...
Internals:
   CFGFN      /opt/fhem/_INC/00_Global_Sonne_real.cfg
   NAME       LUM
   NR         770
   STATE      73
   TYPE       dummy
   Readings:
     2016-10-17 16:10:53   L1              183
     2016-10-17 16:10:53   L2              182
     2016-10-17 16:10:53   La              182.5
     2016-10-17 16:10:53   state           73
Attributes:
   devStateIcon .*:noIcon
   readingList L1 L2 La

Per

Was passiert, wenn du LUM in der Kommandozeile auf < 50, < 60 und > 70 testest?