Hauptmenü

[gelöst] Lüfter ansteuern

Begonnen von Eisix, 19 Januar 2020, 08:22:58

Vorheriges Thema - Nächstes Thema

Eisix

Hallo,

Kann mir jemand auf die Sprünge helfen warum mein doif auf cmd5 steht und nicht auf cmd2?

Luefter_state auto
Luefter_stufe 2

Manuelles checkall bewirkt nichts


Internals:
   DEF        ([Luefter:state] ne "off" and [Luefter:stufe] eq "1") (set MQTT2_DVES_A19F5D POWER1 on)
DOELSEIF ([Luefter:state] ne "off" and [Luefter:stufe] eq "2") (set MQTT2_DVES_A19F5D POWER2 on)
DOELSEIF ([Luefter:state] ne "off" and [Luefter:stufe] eq "3") (set MQTT2_DVES_A19F5D POWER3 on)
DOELSEIF ([Luefter:state] ne "off" and [Luefter:stufe] eq "4") (set MQTT2_DVES_A19F5D POWER4 on)
DOELSE (set MQTT2_DVES_A19F5D POWER1 off;set MQTT2_DVES_A19F5D POWER2 off;set MQTT2_DVES_A19F5D POWER3 off;set MQTT2_DVES_A19F5D POWER4 off;setreading Luefter stufe 0)
   FUUID      5c4c60c0-f33f-8e5f-8f83-71bfebe6efff7d64
   FVERSION   98_DOIF.pm:0.209290/2020-01-10
   MODEL      FHEM
   NAME       Program.Luefter
   NOTIFYDEV  global,Luefter
   NR         449
   NTFY_ORDER 50-Program.Luefter
   STATE      cmd_5
   TYPE       DOIF
   VERSION    20929 2020-01-10 09:44:35
   READINGS:
     2020-01-18 13:09:29   Device          Luefter
     2020-01-18 12:48:10   cmd             5
     2020-01-18 12:48:10   cmd_event       Luefter
     2020-01-18 12:48:10   cmd_nr          5
     2020-01-18 13:09:29   e_Luefter_state auto
     2020-01-18 05:24:53   e_Luefter_stufe 2
     2020-01-18 12:48:10   state           cmd_5
   Regex:
     accu:
     cond:
       Luefter:
         0:
           state      ^Luefter$:^state:
           stufe      ^Luefter$:^stufe:
         1:
           state      ^Luefter$:^state:
           stufe      ^Luefter$:^stufe:
         2:
           state      ^Luefter$:^state:
           stufe      ^Luefter$:^stufe:
         3:
           state      ^Luefter$:^state:
           stufe      ^Luefter$:^stufe:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'Luefter','state') ne "off" and ::ReadingValDoIf($hash,'Luefter','stufe') eq "1"
     1          ::ReadingValDoIf($hash,'Luefter','state') ne "off" and ::ReadingValDoIf($hash,'Luefter','stufe') eq "2"
     2          ::ReadingValDoIf($hash,'Luefter','state') ne "off" and ::ReadingValDoIf($hash,'Luefter','stufe') eq "3"
     3          ::ReadingValDoIf($hash,'Luefter','state') ne "off" and ::ReadingValDoIf($hash,'Luefter','stufe') eq "4"
   do:
     0:
       0          set MQTT2_DVES_A19F5D POWER1 on
     1:
       0          set MQTT2_DVES_A19F5D POWER2 on
     2:
       0          set MQTT2_DVES_A19F5D POWER3 on
     3:
       0          set MQTT2_DVES_A19F5D POWER4 on
     4:
       0          set MQTT2_DVES_A19F5D POWER1 off;set MQTT2_DVES_A19F5D POWER2 off;set MQTT2_DVES_A19F5D POWER3 off;set MQTT2_DVES_A19F5D POWER4 off;setreading Luefter stufe 0
   helper:
     DEVFILTER  ^global$|^Luefter$
     NOTIFYDEV  global|Luefter
     event      auto
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   
     timerevent auto
     timerevents
     timereventsState
     triggerDev
   internals:
   perlblock:
   readings:
     all         Luefter:state Luefter:stufe
   trigger:
   uiState:
   uiTable:
Attributes:
   room       Luefter



Gruß
Eisix

Gisbert

Hallo Eisix,

nur eine Vermutung von mir, kann es sein, dass die Bedingungen 1 bis 4 nicht erfüllt sind? Dann würde bedingungslos cmd_5 gesetzt.

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

amenomade

Zitat von: Gisbert am 19 Januar 2020, 09:44:08
Hallo Eisix,

nur eine Vermutung von mir, kann es sein, dass die Bedingungen 1 bis 4 nicht erfüllt sind? Dann würde bedingungslos cmd_5 gesetzt.

Viele​ Grüße​ Gisbert​
stufe ist aber seit 05:24 auf 2, und state wurde um 12:48 auf "auto" gesetzt...

@Eisix: ich verstehe das auch nicht. Kannst Du bitte ein "list" von Luefter posten?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Eisix

Hallo,


Hier das list vom Luefter Dummy, allerdings Zustand jetzt.

Internals:
   FUUID      5c4996ee-f33f-8e5f-07c3-7d60c6912bc18543
   FVERSION   98_dummy.pm:0.206650/2019-12-06
   NAME       Luefter
   NR         447
   STATE      auto
   TYPE       dummy
   READINGS:
     2020-01-19 08:34:38   state           auto
     2020-01-19 08:35:38   stufe           2
Attributes:
   room       Luefter
   setList    stufe:0,1,2,3,4 off auto man
   useSetExtensions 1
   webCmd     stufe: auto man off



Und ein darüber liegendes doif das da auch mitspielt.

Internals:
   DEF        ([Luefter:state] eq "auto" and [Sensor_BAD_OG:humidity:dd] > 65) (setreading Luefter stufe 4, set Program.Luefter checkall)
DOELSEIF ([Luefter:state] eq "auto" and [Sensor_BAD_OG:humidity:dd] <= 60 and [myHOMEMODE:season] eq "winter" and [Wetter:windchill] <= 10 and [Wetter:wind] >= 20 and [Wetter:wind] <= 30) (setreading Luefter stufe 1)
DOELSEIF ([Luefter:state] eq "auto" and [Sensor_BAD_OG:humidity:dd] <= 60 and [myHOMEMODE:season] eq "winter" and [Wetter:windchill] > 5 and [Wetter:wind] > 30) (setreading Luefter stufe 1)
DOELSEIF ([Luefter:state] eq "auto" and [Sensor_BAD_OG:humidity:dd] <= 60 and [myHOMEMODE:season] eq "winter" and [Wetter:windchill] <= 5 and [Wetter:wind] > 30) (setreading Luefter stufe 0)
DOELSEIF ([Luefter:state] eq "auto" and [Sensor_BAD_OG:humidity:dd] <= 65 and [myHOMEMODE:season] ne "winter" and [EnO_4BS_018C3E20:CleanTemp] >= 23.5 and ([Sensor_aussen:CleanTemp]) <= [EnO_4BS_018C3E20:CleanTemp]) (setreading Luefter stufe 3)
DOELSEIF ([Luefter:state] eq "auto" and [Sensor_BAD_OG:humidity:dd] <= 65 and [myHOMEMODE:season] ne "winter" and [EnO_4BS_018C3E20:CleanTemp] >= 23.5 and ([Sensor_aussen:CleanTemp]) > [EnO_4BS_018C3E20:CleanTemp]) (setreading Luefter stufe 0)
DOELSEIF ([Luefter:state] eq "man") (setreading Luefter stufe [Luefter:stufe])
DOELSE (setreading Luefter stufe 2)
   FUUID      5c4dfa50-f33f-8e5f-9f30-a4b0969a7cc7cc54
   FVERSION   98_DOIF.pm:0.209290/2020-01-10
   MODEL      FHEM
   NAME       Steuerung.Luefter
   NOTIFYDEV  Sensor_aussen,EnO_4BS_018C3E20,myHOMEMODE,Sensor_BAD_OG,global,Luefter,Wetter
   NR         450
   NTFY_ORDER 50-Steuerung.Luefter
   STATE      cmd_8
   TYPE       DOIF
   VERSION    20929 2020-01-10 09:44:35
   READINGS:
     2020-01-19 18:41:16   Device          Sensor_aussen
     2020-01-19 08:35:38   cmd             8
     2020-01-19 08:35:38   cmd_event       Luefter
     2020-01-19 08:35:38   cmd_nr          8
     2020-01-19 18:33:08   e_EnO_4BS_018C3E20_CleanTemp 22.2
     2020-01-19 08:34:38   e_Luefter_state auto
     2020-01-19 18:31:58   e_Sensor_BAD_OG_humidity 55 %
     2020-01-19 18:41:16   e_Sensor_aussen_CleanTemp 3.0
     2020-01-19 18:02:58   e_Wetter_wind   7.2
     2020-01-19 18:02:58   e_Wetter_windchill 0.6
     2020-01-18 01:16:16   mode            enabled
     2020-01-19 08:35:38   state           cmd_8
     2020-01-19 08:35:38   wait_timer      no timer
   Regex:
     accu:
     cond:
       EnO_4BS_018C3E21:
         0:
         1:
         2:
         3:
         4:
           CleanTemp  ^EnO_4BS_018C3E21$:^CleanTemp:
         5:
           CleanTemp  ^EnO_4BS_018C3E21$:^CleanTemp:
         6:
       Luefter:
         0:
           state      ^Luefter$:^state:
         1:
           state      ^Luefter$:^state:
         2:
           state      ^Luefter$:^state:
         3:
           state      ^Luefter$:^state:
         4:
           state      ^Luefter$:^state:
         5:
           state      ^Luefter$:^state:
         6:
           state      ^Luefter$:^state:
       Sensor_BAD_OG:
         0:
           humidity   ^Sensor_BAD_OG$:^humidity:
         1:
           humidity   ^Sensor_BAD_OG$:^humidity:
         2:
           humidity   ^Sensor_BAD_OG$:^humidity:
         3:
           humidity   ^Sensor_BAD_OG$:^humidity:
         4:
           humidity   ^Sensor_BAD_OG$:^humidity:
         5:
           humidity   ^Sensor_BAD_OG$:^humidity:
         6:
       Sensor_aussen:
         0:
         1:
         2:
         3:
         4:
           CleanTemp  ^Sensor_aussen$:^CleanTemp:
         5:
           CleanTemp  ^Sensor_aussen$:^CleanTemp:
         6:
       Wetter:
         0:
         1:
           wind       ^Wetter$:^wind:
           windchill  ^Wetter$:^windchill:
         2:
           wind       ^Wetter$:^wind:
           windchill  ^Wetter$:^windchill:
         3:
           wind       ^Wetter$:^wind:
           windchill  ^Wetter$:^windchill:
         4:
         5:
         6:
       myHOMEMODE:
         1:
           season     ^myHOMEMODE$:^season:
         2:
           season     ^myHOMEMODE$:^season:
         3:
           season     ^myHOMEMODE$:^season:
         4:
           season     ^myHOMEMODE$:^season:
         5:
           season     ^myHOMEMODE$:^season:
   attr:
     cmdState:
     wait:
       0:
         0
       1:
         0
       2:
         0
       3:
         0
       4:
         0
       5:
         0
       6:
         0
       7:
         60
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'Luefter','state') eq "auto" and ::ReadingValDoIf($hash,'Sensor_BAD_OG','humidity','','dd') > 65
     1          ::ReadingValDoIf($hash,'Luefter','state') eq "auto" and ::ReadingValDoIf($hash,'Sensor_BAD_OG','humidity','','dd') <= 60 and ::ReadingValDoIf($hash,'myHOMEMODE','season') eq "winter" and ::ReadingValDoIf($hash,'Wetter','windchill') <= 10 and ::ReadingValDoIf($hash,'Wetter','wind') >= 20 and ::ReadingValDoIf($hash,'Wetter','wind') <= 30
     2          ::ReadingValDoIf($hash,'Luefter','state') eq "auto" and ::ReadingValDoIf($hash,'Sensor_BAD_OG','humidity','','dd') <= 60 and ::ReadingValDoIf($hash,'myHOMEMODE','season') eq "winter" and ::ReadingValDoIf($hash,'Wetter','windchill') > 5 and ::ReadingValDoIf($hash,'Wetter','wind') > 30
     3          ::ReadingValDoIf($hash,'Luefter','state') eq "auto" and ::ReadingValDoIf($hash,'Sensor_BAD_OG','humidity','','dd') <= 60 and ::ReadingValDoIf($hash,'myHOMEMODE','season') eq "winter" and ::ReadingValDoIf($hash,'Wetter','windchill') <= 5 and ::ReadingValDoIf($hash,'Wetter','wind') > 30
     4          ::ReadingValDoIf($hash,'Luefter','state') eq "auto" and ::ReadingValDoIf($hash,'Sensor_BAD_OG','humidity','','dd') <= 65 and ::ReadingValDoIf($hash,'myHOMEMODE','season') ne "winter" and ::ReadingValDoIf($hash,'EnO_4BS_018C3E21','CleanTemp') >= 23.5 and (::ReadingValDoIf($hash,'Sensor_aussen','CleanTemp')) <= ::ReadingValDoIf($hash,'EnO_4BS_018C3E21','CleanTemp')
     5          ::ReadingValDoIf($hash,'Luefter','state') eq "auto" and ::ReadingValDoIf($hash,'Sensor_BAD_OG','humidity','','dd') <= 65 and ::ReadingValDoIf($hash,'myHOMEMODE','season') ne "winter" and ::ReadingValDoIf($hash,'EnO_4BS_018C3E21','CleanTemp') >= 23.5 and (::ReadingValDoIf($hash,'Sensor_aussen','CleanTemp')) > ::ReadingValDoIf($hash,'EnO_4BS_018C3E21','CleanTemp')
     6          ::ReadingValDoIf($hash,'Luefter','state') eq "man"
   do:
     0:
       0          setreading Luefter stufe 4, set Program.Luefter checkall
     1:
       0          setreading Luefter stufe 1
     2:
       0          setreading Luefter stufe 1
     3:
       0          setreading Luefter stufe 0
     4:
       0          setreading Luefter stufe 3
     5:
       0          setreading Luefter stufe 0
     6:
       0          setreading Luefter stufe [Luefter:stufe]
     7:
       0          setreading Luefter stufe 2
   helper:
     DEVFILTER  ^global$|^Luefter$|^Wetter$|^Sensor_BAD_OG$|^myHOMEMODE$|^Sensor_aussen$|^EnO_4BS_018C3E21$
     NOTIFYDEV  global|Luefter|Wetter|Sensor_BAD_OG|myHOMEMODE|Sensor_aussen|EnO_4BS_018C3E21
     event      temperature: 3.0 C,motion: closed,CleanTemp: 3.0
     globalinit 1
     last_timer 0
     sleepdevice Luefter
     sleepsubtimer -1
     sleeptimer -1
     timerdev   Sensor_aussen
     timerevent temperature: 3.0 C,motion: closed,CleanTemp: 3.0
     triggerDev Sensor_aussen
     timerevents:
       temperature: 3.0 C
       motion: closed
       CleanTemp: 3.0
     timereventsState:
       temperature: 3.0 C
       motion: closed
       CleanTemp: 3.0
     triggerEvents:
       temperature: 3.0 C
       motion: closed
       CleanTemp: 3.0
     triggerEventsState:
       temperature: 3.0 C
       motion: closed
       CleanTemp: 3.0
   internals:
   powerMap:
   readings:
     all         Luefter:state Sensor_BAD_OG:humidity myHOMEMODE:season Wetter:windchill Wetter:wind EnO_4BS_018C3E21:CleanTemp Sensor_aussen:CleanTemp
   readingsDesc:
     energy:
       rtype      whr
     power:
       rtype      w
   trigger:
   uiState:
   uiTable:
Attributes:
   event-on-change-reading 1
   event-on-update-reading 1
   room       Luefter
   wait       0:0:0:0:0:0:0:60


Gruß
Eisix

rih

Hast Du schon
... and [Luefter:stufe] = 2) ...
probiert?

amenomade

Zitat von: rih am 19 Januar 2020, 19:28:36
Hast Du schon
... and [Luefter:stufe] = 2) ...
probiert?
Dann mit ==
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Eisix

Hallo,

beide Schreibweisen verändern nichts an dem Problem.

Es tritt auf wenn ich ausschalte (Lüfter geht dann auf off uns Stufe auf 0) und dann wieder auf Automatik wechsele.

Gruß
Eisix

amenomade

Hmmm zwei DOIFs, die stufe schalten...

Luefter auf off bedeutet
- laut Steuerung.Luefter stufe 2
- laut Program.Luefter stufe 0

Es wäre interessant, die Reihenfolge von den Events aus dem Eventmonitor zu sehen
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Eisix

Hallo,

Schalten von FTUI aus auf off und dann zurück auf auto

2020-01-21 07:57:33.560 DOIF Program.Luefter cmd_nr: 5
2020-01-21 07:57:33.560 DOIF Program.Luefter cmd: 5
2020-01-21 07:57:33.560 DOIF Program.Luefter cmd_event: Luefter
2020-01-21 07:57:33.560 DOIF Program.Luefter cmd_5
2020-01-21 07:57:33.570 dummy Luefter off
2020-01-21 07:57:33.570 dummy Luefter stufe: 0
2020-01-21 07:58:08.637 dummy Luefter auto
2020-01-21 07:58:08.652 DOIF Steuerung.Luefter checkall



Hier die Kommandos von FTUI

                <li><div data-type="push" data-fhem-cmd="set Luefter off" data-icon="fa-power-off" data-off-color="#21a000" data-off-background-color="blue"></div></li>
                <li><div data-type="push" data-fhem-cmd="set Luefter man;setreading Luefter stufe 1" data-icon="" data-off-background-color="blue"><font color="#21a000">1</font></div></li>
                <li><div data-type="push" data-fhem-cmd="set Luefter man;setreading Luefter stufe 2" data-icon="" data-off-background-color="blue"><font color="#21a000">2</font></div></li>
                <li><div data-type="push" data-fhem-cmd="set Luefter man;setreading Luefter stufe 3" data-icon="" data-off-background-color="blue"><font color="#21a000">3</font></div></li>
                <li><div data-type="push" data-fhem-cmd="set Luefter man;setreading Luefter stufe 4" data-icon="" data-off-background-color="blue"><font color="#21a000">4</font></div></li>
                <li><div data-type="push" data-fhem-cmd="set Luefter auto; set Steuerung.Luefter checkall" data-icon="oa-vent_ventilation_level_automatic" data-off-color="#21a000" data-off-background-color="blue"></div></li>



Erst wenn ich im manuellen Modus auf stufe 1-4 schalte und dann wieder auf Automatik gehe funktioniert es wieder. Also Modus auto und stufe 0 triggert nicht Steuerung.Luefter welches zu stufe 2 (doelse) führen sollte wenn keine der doif Bedingungen erfüllt ist.
Und das obwohl in FTUI ein checkall ausgeführt wird (data-fhem-cmd="set Luefter auto; set Steuerung.Luefter checkall" )

Gruß
Eisix

amenomade

Auf Grund von
   event-on-change-reading 1
   event-on-update-reading 1

sieht man kein Event von Steuerung.Luefter im Eventmonitor.

Also, machen wir es anders. Kannst Du wieder ein "list" von beiden DOIFs und vom Luefter posten, wenn Modus auto und stufe 0 Steuerung.Luefter nicht geschaltet haben? Also... wenn es deiner Meinung nach falsch ist.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Und ich glaube, ich habe verstanden, was nicht geht. Wenn Du auf off schaltest, geht Steurung.Luefter auf cmd_8 und Program.Luefter auf cmd_5

Luefter ist jetzt off und stufe 0

Wenn Du jetzt wieder auf auto schaltest, machst Du set Luefter auto; set Steuerung.Luefter checkall
und es passiert nichts:
- Steuerung.Luefter ist schon auf cmd_8 und sieht keinen Grund, es zu ändern  (ich gehe davon aus, dass die andere Bedingungen winter, wind usw falsch sind). Es bleibt auf cmd_8 und kein Befehl wird ausgeführt
- Program.Luefter sieht immer noch stufe 0 und bleibt deswegen auf cmd_5
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Eisix

Hallo,

ja das von dir beschrieben Verhalten ist korrekt.
Zitat
- Steuerung.Luefter ist schon auf cmd_8 und sieht keinen Grund, es zu ändern  (ich gehe davon aus, dass die andere Bedingungen winter, wind usw falsch sind). Es bleibt auf cmd_8 und kein Befehl wird ausgeführt
Das bedeutet also das checkall Steuerung.Luefter nicht das komplette doif durchläuft und dann somit wenn nichts anderes passt cmd_8 ausführt und stufe auf 2 setzt, was wiederum Program.Luefter zum einschalten des Lüfters auf Stufe 2 führt.!?

Meine Erwartung/Verständnis ist das beim checkall der komplette doif Entscheidungsbaum durchlaufen wird und eine Stufe gesetzt wird. Wo liegt da mein Fehler und wie kann ich ihn beheben?

Gruß
Eisix


amenomade

Zitat von: Eisix am 22 Januar 2020, 13:52:41
.Das bedeutet also das checkall Steuerung.Luefter nicht das komplette doif durchläuft und dann somit wenn nichts anderes passt cmd_8 ausführt und stufe auf 2 setzt, was wiederum Program.Luefter zum einschalten des Lüfters auf Stufe 2 führt.!?
Er geht schon duch das komplette DOIF, prüft alle Bedingungen, egal ob die Device getriggert haben oder nicht. Aber wenn der Zustand schon cmd_8 war, und er feststellt, dass die Bedingungen wiederum auf cmd_8 landen, dann wird kein neuer Befehl ausgeführt. Es sei denn, Du hast "do always" gesetzt.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Per

   event-on-change-reading 1
   event-on-update-reading 1

Gibt nur Events, wenn es beim Reading "1" eine Änderung/Update gibt. Gibt es ein Reading Namens "1"?

Eisix

Hallo,

danke an alle für die Tips. Es funktioniert jetzt wie es soll.
Wenn es jemanden interessiert kann ich den code einstellen.

Gruß
Eisix