aktualisieren von Readings

Begonnen von rallye, 12 April 2021, 12:33:06

Vorheriges Thema - Nächstes Thema

rallye

Ich habe ein DOIF namens Balkon.DOIF welches mir ein Reading und den Status in einem Dummy namens LueftenDummy setzt auf dessen Statusänderung ein notify reagieren soll.
fhem ("set LueftenDummy keep_closed; setreading LueftenDummy RC 5")
Das notify wird auch wie gewünscht ausgeführt wenn sich sein Status ändert. Was sich NICHT gleichzeitig mit dem Status ändert ist der RC, der erst nach einem Refresh der Bildschirmseite im Browser updated wird. Dass Notify liest aber den RC und soll eine entsprechende Meldung ausgeben. In meinem Fall ist der RC jedoch "veraltet" wenn das Notify angestossen wird.

Frage: wie kann ich RC gleichzeitig mit dem Status updaten ?
RaspiPi v4, HM-LGW, 6x HM-TC-IT-WM-W-EU, 11x HM-CC-RT-DN, 1x HUE Bridge, 4x HUE-RC, 5x HUE White&Color, 15xHUE White, 3xHM-LC-SW1-FM, 1xHM-LC-SW2-FM, 1x ConBeeII, 15x Shelly1, 5xShellyplug, Aquara: 2x Temp-Sensor, 1x Vibrationssensor, 2x Lichtsensor, 19x Tür/Fenstersensor

Otto123

Hi,

die Anzeige des Browsers und die Aktualität für das notify sind aber zwei Dinge. Zeig mal  das notify

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

Beta-User

Mal ab von allem anderen: "Gleichzeitig" gibt es bei FHEM eigentlich nicht, und als User wäre es auch eher ungewöhnlich, wenn du "bulkUpdate" durchführen würdest.

Aber was spricht dagegen, die Reihenfolge der Befehle einfach unzudrehen?
fhem ("setreading LueftenDummy RC 5; set LueftenDummy keep_closed")
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

rallye

Gerne !
defmod Telegram.Lueften notify (LueftenDummy:(open|close)) {\
   my $currentRoom = ReadingsVal("$NAME", "currentRoom", "-1");;\
   my $chng_event = ReadingsVal("$NAME", "state", "-1");;\
   my $temperature = ReadingsVal("$NAME", "temperature", "-1");;\
   my $Room = "unbekannt";;\
   if ($currentRoom eq "DG") {\
      $Room = "Lernzimmer"\
      }\
      elsif ($currentRoom eq "SO") {\
         $Room = "Gästezimmer"\
         }\
         elsif ($currentRoom eq "SW") {\
            $Room = "Alexanderzimmer"\
            }\
            elsif ($currentRoom eq "NO") {\
               $Room = "Ankleidezimmer"\
               }\
               elsif ($currentRoom eq "BD") {\
                  $Room = "Badezimmer"\
                     }\
                     elsif ($currentRoom eq "EZ") {\
                        $Room = "Esszimmer"\
                        }\
                        elsif ($currentRoom eq "WZ") {\
                           $Room = "Wohnzimmer"\
                           }\
                           elsif ($currentRoom eq "SZ") {\
                              $Room = "Schlafzimmer"\
                              }\
                              elsif ($currentRoom eq "KE") {\
                                 $Room = "Keller"\
                                    };;\
   if ($RC == 6) {\
      $msg = "herinnen zu feucht."\
      }\
      elsif ($RC == 7) {\
         $msg = "herinnen zu feucht doch draußen noch feuchter !"\
         }\
         elsif ($RC == 9) {\
            $msg = "herinnen zu trocken, durch öffnen der Fenster Innenluft befeuchten."\
            }\
            elsif ($RC == 12) {\
               $msg = "herinnen zu trocken, durch schließen der Fenster noch trockenere Luft von draußen vermeiden."\
               };;\
  if ($chng_event eq "open") {fhem ("set TelegramBot message Bitte $Room lüften ! $RC $msg")}\
      elsif ($chng_event eq "close") {fhem ("set TelegramBot message Bitte Fenster bzw. Türen im $Room schließen ! $RC $msg")}}
attr Telegram.Lueften group Lüften
attr Telegram.Lueften icon telegram
attr Telegram.Lueften room Development

setstate Telegram.Lueften 2021-04-12 12:57:52
setstate Telegram.Lueften 2021-04-12 10:43:53 state active



Das Problem ist, dass immer der "alte" Status (RC) ausgegeben wird. Ich hab's auch mit einem "sleep(5)" versucht - hat auch nichts gebracht.
RaspiPi v4, HM-LGW, 6x HM-TC-IT-WM-W-EU, 11x HM-CC-RT-DN, 1x HUE Bridge, 4x HUE-RC, 5x HUE White&Color, 15xHUE White, 3xHM-LC-SW1-FM, 1xHM-LC-SW2-FM, 1x ConBeeII, 15x Shelly1, 5xShellyplug, Aquara: 2x Temp-Sensor, 1x Vibrationssensor, 2x Lichtsensor, 19x Tür/Fenstersensor

Otto123

Aber diese notify reagiert mMn nicht auf Deine Befehle aus dem ersten Post!
Vermutung das löst an völlig andere Stelle aus!

Das Suchmuster besser so machen:
LueftenDummy:open|LueftenDummy:close
Das ist effizienter und bringt weniger Last.
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

rallye

Zitat von: Beta-User am 12 April 2021, 13:00:49
Mal ab von allem anderen: "Gleichzeitig" gibt es bei FHEM eigentlich nicht, und als User wäre es auch eher ungewöhnlich, wenn du "bulkUpdate" durchführen würdest.

Aber was spricht dagegen, die Reihenfolge der Befehle einfach unzudrehen?
fhem ("setreading LueftenDummy RC 5; set LueftenDummy keep_closed")
Habe ich soeben ausprobiert - ändert nicht. State springt sofort um, RC bleibt unverändert. Wenn ich allerdings RawDefinition aufrufe ist RC verändert (auf dem erwarteten Wert).
RaspiPi v4, HM-LGW, 6x HM-TC-IT-WM-W-EU, 11x HM-CC-RT-DN, 1x HUE Bridge, 4x HUE-RC, 5x HUE White&Color, 15xHUE White, 3xHM-LC-SW1-FM, 1xHM-LC-SW2-FM, 1x ConBeeII, 15x Shelly1, 5xShellyplug, Aquara: 2x Temp-Sensor, 1x Vibrationssensor, 2x Lichtsensor, 19x Tür/Fenstersensor

Otto123

ZitatState springt sofort um, RC bleibt unverändert.
hab ich ja schon gesagt. In der Anzeige von FHEMWEB werden nicht alle Werte in der Anzeige vom Browser sofort aktualisiert, das hat aber nichts mit dem Wert an sich zu tun!
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

Beta-User

Zitat von: Otto123 am 12 April 2021, 13:09:38
Aber diese notify reagiert mMn nicht auf Deine Befehle aus dem ersten Post!
...und die Variable $RC wird nirgendwo eingeführt, oder übersehe ich was? Müßte eigentlich Fehler ins log schreiben...?

Wenn das notify nicht losläuft, ist auch die Reihenfolge egal.

Ansonsten: Diese elsif-Kaskaden kann man durch Hash-lookups hübscher machen, und ob es überhaupt Sinn macht, einen dummy dazwischenzuschalten, wäre auch noch so eine Frage; der scheint ja eigentlich nur dazu da zu sein, irgendwelche  Parameter zwischenzuspeichern, die man auch anderswie übergeben könnte...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

rallye

ok ich liste hier mal meine 3 Definitionen:
defmod LueftenDOIF DOIF { if ([Tuere.Balkon.EZ:"(open|closed)"]) {\
  my $currentRoom = "EZ";;\
#  my $temperature = ReadingsVal("Therm.EZ_Climate", "measured-temp", "-1");;\
#  my $abs_humidity = ::sub_luft($temperature,ReadingsVal("Therm.EZ_Climate","humidity","-1"),"humidity");;\
#  my $dewpoint = ::sub_luft($temperature,ReadingsVal("Therm.EZ_Climate","humidity","-1"),"dewpoint");;\
  my $device = "Therm.";;\
  my $channel = "_Climate";;\
  my $temperature = ReadingsVal("$device$currentRoom$channel", "measured-temp", "-1");;\
  my $abs_humidity = ::sub_luft($temperature,ReadingsVal("$device$currentRoom$channel","humidity","-1"),"humidity");;\
  my $dewpoint = ::sub_luft($temperature,ReadingsVal("$device$currentRoom$channel","humidity","-1"),"dewpoint");;\
  my $temperature_outdoor = ReadingsVal("TempsensorEingang", "temperature", "-1");;\
  my $abs_humidity_outdoor = ::sub_luft($temperature_outdoor,ReadingsVal("HumsensorEingang","humidity","-1"),"humidity");;\
  my $dewpoint_outdoor = ReadingsVal("TaupunktAussen", "dewpoint", "-1");;\
  my $fenster = ReadingsVal("Tuere.Balkon.EZ", "state", "undefined");;\
  my $drinnenZuFeucht = ($dewpoint > 60);;\
  my $drinnenZuTrocken = ($dewpoint < 40);;\
  my $drinnenFeuchterAlsDraussen = ($abs_humidity_outdoor < $abs_humidity);;\
  {fhem ("\
          setreading LueftenDummy currentRoom $currentRoom;;\
        ")};;\
#  my $innenzufeucht = "nicht zu feucht";;\
#  my $innenzutrocken = "nicht zu trocken";;\
#  if ($drinnenZuFeucht) {($innenzufeucht = "zu feucht")};;\
#  if ($drinnenZuTrocken) {($innenzutrocken = "zu trocken")};;\
#  {fhem ("\
#          setreading LueftenDummy fenster $fenster;;\
#          setreading LueftenDummy drinnenZuFeucht $innenzufeucht;;\
#          setreading LueftenDummy drinnenZuTrocken $innenzutrocken;;\
#          setreading LueftenDummy abs_humidity $abs_humidity;;\
#          setreading LueftenDummy abs_humidity_outdoor $abs_humidity_outdoor;;\
#         ")};;\
#\
#\
# Entscheidungstabelle für bestimmte Zustände\
# -------------+---------+----------+---------+---------+----------------------------------------------------+-------#\
#              |         | drinnen  |       |         |                                                    |       #\
#              |         | feuchter | drinnen | drinnen |                                                    |       #\
#              | Fenster | als      | zu      | zu      |                                                    |       #\
#  Aktion      | Status  | draussen | feucht  | trocken |                                                    | Zeile #\
# -------------+---------+----------+---------+---------+----------------------------------------------------+-------#\
# bleibt zu    | zu      | nein     | nein    |  nein   | wenn drinnen rH ok, dann bleibt fenster wie es ist |   1   # \
# bleibt zu    | zu      | ja       | nein    |  nein   | wenn drinnen rH ok, dann bleibt fenster wie es ist |   2   #\
# bleibt offen | offen   | nein     | nein    |  nein   | wenn drinnen rH ok, dann bleibt fenster wie es ist |   3   # \
# bleibt offen | offen   | ja       | nein    |  nein   | wenn drinnen rH ok, dann bleibt fenster wie es ist |   4   #\
# bleibt zu    | zu      | nein     | ja      | [nein]  | Alarm: zu lassen & Luftentfeuchter einsetzen       |   5   #\
# öffnen       | zu      | ja       | ja      | [nein]  | Feuchtigkeit innen durch öffnen der Fenster raus   |   6   #\
# schliessen   | offen   | nein     | ja      | [nein]  | Alarm: zu machen & Luftentfeuchter einsetzen       |   7   #\
# bleibt offen | offen   | ja       | ja      | [nein]  | Feuchtigkeit innen durch öffnen der Fenster raus   |   8   #\
# öffnen       | zu      | nein     | [nein]  | ja      | Fenster öffnen um feuchte Luft herein zu lassen    |   9   #\
# bleibt zu    | zu      | ja       | [nein]  | ja      | Fenster zu um noch trockenere Luft zu vermeiden    |  10   #\
# bleibt offen | offen   | nein     | [nein]  | ja      | Fenster bleibt offen um Feuchte herein zu lassen   |  11   #\
# schliessen   | offen   | ja       | [nein]  | ja      | Fenster zu um noch trockenere Luft zu vermeiden    |  12   #\
# -------------+---------+----------+---------+---------+----------------------------------------------------+-------#\
#\
# Fenster sind geschlossen und es ist drinnen nicht zu feucht und nicht zu trocken\
# <drinnen trockener/feuchter als draussen spielt hier keine Rolle, da das Raumklima ok> (Z1 & Z2)\
if ($fenster eq "closed" && not($drinnenZuTrocken) && not($drinnenZuFeucht)) {\
    fhem ("set LueftenDummy keep_closed;; setreading LueftenDummy RC 1")\
    }\
# Fenster sind offen und es ist drinnen nicht zu feucht und nicht zu trocken\
# <drinnen trockener/feuchter als draussen spielt hier keine Rolle, da das Raumklima ok> (Z3 & Z4)\
    elsif ($fenster eq "closed" && $drinnenFeuchterAlsDraussen && not($drinnenZuTrocken)) {\
       fhem ("set LueftenDummy keep_open;; setreading LueftenDummy RC 3")\
       }\
# Fenster sind geschlossen und es ist drinnen nicht feuchter als draußen und drinnen die Feuchtigkeit über der\
# high-water-mark ist <es kann nicht gleichzeitig zu trocken und zu feucht sein, daher enfällt die Abfrage> (Z5)\
          elsif ($fenster eq "closed" && not($drinnenFeuchterAlsDraussen) && $drinnenZuFeucht) {\
             fhem ("set LueftenDummy keep_closed;; setreading LueftenDummy RC 5")\
             }\
# Fenster sind geschlossen und es ist drinnen feuchter als draußen und es drinnen zu feucht\
# <es kann nicht gleichzeitig zu trocken und zu feucht sein, daher entfällt die Abfrage> (Z6)\
                elsif ($fenster eq "closed" && $drinnenFeuchterAlsDraussen && $drinnenZuFeucht) {\
                   fhem ("set LueftenDummy open;; setreading LueftenDummy RC 6")\
                   }\
# Fenster sind offen und es ist drinnen nicht feuchter als draußen und es drinnen zu feucht\
# <es kann nicht gleichzeitig zu trocken und zu feucht sein, daher entfällt die Abfrage> (Z7)\
                      elsif ($fenster eq "open" && not($drinnenFeuchterAlsDraussen) && $drinnenZuFeucht) {\
                         fhem ("set LueftenDummy close;; setreading LueftenDummy RC 7")\
                            }\
# Fenster sind offen und es ist drinnen feuchter als draußen und es drinnen zu feucht\
# <es kann nicht gleichzeitig zu trocken und zu feucht sein, daher entfällt die Abfrage> (Z8)\
                               elsif ($fenster eq "open" && $drinnenFeuchterAlsDraussen && $drinnenZuFeucht) {\
                                  fhem ("set LueftenDummy keep_open;; setreading LueftenDummy RC 8")\
                                  }\
# Fenster sind geschlossen und es ist drinnen nicht feuchter als draußen und es ist drinnen zu trocken\
# <es kann nicht gleichzeitig zu trocken und zu feucht sein, daher enfällt die Abfrage> (Z9)\
                               elsif ($fenster eq "closed" && not($drinnenFeuchterAlsDraussen) && $drinnenZuTrocken) {\
                                  fhem ("set LueftenDummy open;; setreading LueftenDummy RC 9")\
                                  }\
# Fenster sind geschlossen und es ist drinnen feuchter als draußen und es ist drinnen zu trocken\
# <es kann nicht gleichzeitig zu trocken und zu feucht sein, daher enfällt die Abfrage> (Z10)\
                               elsif ($fenster eq "closed" && $drinnenFeuchterAlsDraussen && $drinnenZuTrocken) {\
                                  fhem ("setreading LueftenDummy RC 10;; set LueftenDummy keep_closed")\
                                  }\
# Fenster sind offen und es ist drinnen nicht feuchter als draußen und es ist drinnen zu trocken\
# <es kann nicht gleichzeitig zu trocken und zu feucht sein, daher enfällt die Abfrage> (Z11)\
                               elsif ($fenster eq "open" && not($drinnenFeuchterAlsDraussen) && $drinnenZuTrocken) {\
                                  fhem ("set LueftenDummy keep_open;; setreading LueftenDummy RC 11")\
                                  }\
# Fenster sind offen und es ist drinnen feuchter als draußen und es ist drinnen zu trocken\
# <es kann nicht gleichzeitig zu trocken und zu feucht sein, daher enfällt die Abfrage> (Z12)\
                               elsif ($fenster eq "open" && $drinnenFeuchterAlsDraussen && $drinnenZuTrocken) {\
                                  fhem ("setreading LueftenDummy RC 12;; set LueftenDummy close")\
                                  }\
                                     else {\
                                        fhem ("set LueftenDummy kA;; setreading LueftenDummy RC err")\
                                        }\
}\
}
attr LueftenDOIF group Lüften
attr LueftenDOIF icon Ventilator_fett
attr LueftenDOIF room Development

setstate LueftenDOIF initialized
setstate LueftenDOIF 2021-04-12 13:07:49 Device Tuere.Balkon.EZ
setstate LueftenDOIF 2021-04-12 13:07:49 block_01 executed
setstate LueftenDOIF 2021-04-12 13:07:49 e_Tuere.Balkon.EZ_events open
setstate LueftenDOIF 2021-04-12 13:07:19 mode enabled
setstate LueftenDOIF 2021-04-12 13:07:19 state initialized



defmod LueftenDummy dummy
attr LueftenDummy comment -->open        - Fenster sollte geöffnet werden\
-->keep_open   - Fenster kann geöffnet bleiben\
-->close       - Fenster sollte geschlossen werden\
-->keep_closed - Fenster kann geschlossen bleiben\
\
Die Readings haben folgende Bedeutung und werden von xyLueften\
       (xy ist das Raumkürzel) gesetzt:\
\
currentRoom: Raum (Zimmer) für welchen die u.a. Werte gelten\
state: status des Moduls (siehe oben)\
RC ist die Zeilennummer aus der Entscheidungstabelle für offen|zu\
  und indiziert den Grund für öffnen|schließen. Wird für die Telegram-\
  Nachricht benötigt.
attr LueftenDummy devStateIcon open:fts_window_1w@red keep_open:fts_window_1w_open@green close:fts_window_1w_open@red keep_closed:fts_window_1w@green
attr LueftenDummy event-on-change-reading state
attr LueftenDummy group Lüften
attr LueftenDummy icon Ventilator_wind
attr LueftenDummy room Development
attr LueftenDummy webCmd keep_open:open:close:keep_closed

setstate LueftenDummy close
setstate LueftenDummy 2021-04-12 13:07:49 RC 12
setstate LueftenDummy 2021-04-12 13:07:49 currentRoom EZ
setstate LueftenDummy 2021-04-12 13:07:49 state close


und
defmod Telegram.Lueften notify (LueftenDummy:(open|close)) {\
   my $currentRoom = ReadingsVal("$NAME", "currentRoom", "-1");;\
   my $chng_event = ReadingsVal("$NAME", "state", "-1");;\
   my $temperature = ReadingsVal("$NAME", "temperature", "-1");;\
   my $Room = "unbekannt";;\
   if ($currentRoom eq "DG") {\
      $Room = "Lernzimmer"\
      }\
      elsif ($currentRoom eq "SO") {\
         $Room = "Gästezimmer"\
         }\
         elsif ($currentRoom eq "SW") {\
            $Room = "Alexanderzimmer"\
            }\
            elsif ($currentRoom eq "NO") {\
               $Room = "Ankleidezimmer"\
               }\
               elsif ($currentRoom eq "BD") {\
                  $Room = "Badezimmer"\
                     }\
                     elsif ($currentRoom eq "EZ") {\
                        $Room = "Esszimmer"\
                        }\
                        elsif ($currentRoom eq "WZ") {\
                           $Room = "Wohnzimmer"\
                           }\
                           elsif ($currentRoom eq "SZ") {\
                              $Room = "Schlafzimmer"\
                              }\
                              elsif ($currentRoom eq "KE") {\
                                 $Room = "Keller"\
                                    };;\
   if ($RC == 6) {\
      $msg = "herinnen zu feucht."\
      }\
      elsif ($RC == 7) {\
         $msg = "herinnen zu feucht doch draußen noch feuchter !"\
         }\
         elsif ($RC == 9) {\
            $msg = "herinnen zu trocken, durch öffnen der Fenster Innenluft befeuchten."\
            }\
            elsif ($RC == 12) {\
               $msg = "herinnen zu trocken, durch schließen der Fenster noch trockenere Luft von draußen vermeiden."\
               };;\
   if ($chng_event eq "open") {fhem ("set TelegramBot message Bitte $Room lüften ! $msg $RC")}\
      elsif ($chng_event eq "close") {fhem ("set TelegramBot message Bitte Fenster bzw. Türen im $Room schließen ! $msg $RC")}}
attr Telegram.Lueften group Lüften
attr Telegram.Lueften icon telegram
attr Telegram.Lueften room Development

setstate Telegram.Lueften 2021-04-12 13:07:49
setstate Telegram.Lueften 2021-04-12 10:43:53 state active


Wie gesagt: ich bekomme immer einen "alten" RC
RaspiPi v4, HM-LGW, 6x HM-TC-IT-WM-W-EU, 11x HM-CC-RT-DN, 1x HUE Bridge, 4x HUE-RC, 5x HUE White&Color, 15xHUE White, 3xHM-LC-SW1-FM, 1xHM-LC-SW2-FM, 1x ConBeeII, 15x Shelly1, 5xShellyplug, Aquara: 2x Temp-Sensor, 1x Vibrationssensor, 2x Lichtsensor, 19x Tür/Fenstersensor

Otto123

#9
Ok nehmen wir den Teil:
fhem ("set LueftenDummy close;; setreading LueftenDummy RC 7")\
Event close
notify löst aus und springt dazwischen -> RC alter Wert
danach setzen RC neuer Wert - Der Zug ist aber gerade vorbei gefahren  ;D ;D ;D

Also entweder hilft schon das:
fhem ("setreading LueftenDummy RC 7;;set LueftenDummy close")\
Oder so:
fhem ("setreading LueftenDummy RC 7;;sleep 0.1;;set LueftenDummy close")\

Und ich widerhole mich: auf keep_closed löst dieses notify nicht aus!
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

Beta-User

Boah, diese Art der DOIF-Konstruktion ist (ganz abgesehen vom Modul selbst) einfach nur grausam...

Sowas kann man doch generalisieren, und dann schreibt man eine myUtils dazu und ruft die bei ALLEN Fenstern bzw. Türen auf, die relevant sind. Und mAn. braucht man auch keine Werte groß irgendwo "zwischenlagern" bzw. wenn, dann in einer Art "room"-dummy (für diesen einen Room).

Jedenfalls schreibt nicht das notify den Wert in den dummy, sondern (falls meine sehr bescheidenen Kenntnisse des DOIF-Moduls nicht komplett falsch sind) das DOIF.
(z.B. hier):
elsif ($fenster eq "closed" && $drinnenFeuchterAlsDraussen && not($drinnenZuTrocken)) {\
       fhem ("set LueftenDummy keep_open;; setreading LueftenDummy RC 3")\
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

rallye

Zitat von: Beta-User am 12 April 2021, 13:15:05

Ansonsten: Diese elsif-Kaskaden kann man durch Hash-lookups hübscher machen, und ob es überhaupt Sinn macht, einen dummy dazwischenzuschalten, wäre auch noch so eine Frage; der scheint ja eigentlich nur dazu da zu sein, irgendwelche  Parameter zwischenzuspeichern, die man auch anderswie übergeben könnte...

Ich muss noch dazusagen, dass ich das "LueftenDOIF" von Perl auf FHEM umschreiben möchte um dann ein "wait" einzuführen, damit Telegram nicht sofort losläuft sondern wenn die Türe gleich (30") wieder geschlossen wird keine Nachricht kommt.

Weiters ist das o.a. für mich zum Testen - das soll später generisch für alle Räume eingesetzt werden und die "Raumkürzel" (z.B. EZ, WZ, DG, ...) zur Unterscheidung herangezogen werden.

Mir persönlich gefallen diese if-elsif Kaskaden auch nicht, mit Hash-lookups habe ich mich noch nicht beschäftigt. Aber danke für den Hinweis !
RaspiPi v4, HM-LGW, 6x HM-TC-IT-WM-W-EU, 11x HM-CC-RT-DN, 1x HUE Bridge, 4x HUE-RC, 5x HUE White&Color, 15xHUE White, 3xHM-LC-SW1-FM, 1xHM-LC-SW2-FM, 1x ConBeeII, 15x Shelly1, 5xShellyplug, Aquara: 2x Temp-Sensor, 1x Vibrationssensor, 2x Lichtsensor, 19x Tür/Fenstersensor

rallye

Zitat von: Otto123 am 12 April 2021, 13:27:12
Ok nehmen wir den Teil:
fhem ("set LueftenDummy close;; setreading LueftenDummy RC 7")\
Event close
notify löst aus und springt dazwischen -> RC alter Wert
danach setzen RC neuer Wert - Der Zug ist aber gerade vorbei gefahren  ;D ;D ;D

Also entweder hilft schon das:
fhem ("setreading LueftenDummy RC 7;;set LueftenDummy close")\
Oder so:
fhem ("setreading LueftenDummy RC 7;;sleep 0.1;;set LueftenDummy close")\

Und ich widerhole mich: auf keep_closed löst dieses notify nicht aus!

Danke, werde ich ausprobieren.

Und: RC 7 - du hast Recht. Ich habe das Problem derzeit mit RC 10 & RC12 (RC 7 war ein gnerisches aber schlecht gewähltes Beispiel)
RaspiPi v4, HM-LGW, 6x HM-TC-IT-WM-W-EU, 11x HM-CC-RT-DN, 1x HUE Bridge, 4x HUE-RC, 5x HUE White&Color, 15xHUE White, 3xHM-LC-SW1-FM, 1xHM-LC-SW2-FM, 1x ConBeeII, 15x Shelly1, 5xShellyplug, Aquara: 2x Temp-Sensor, 1x Vibrationssensor, 2x Lichtsensor, 19x Tür/Fenstersensor

Beta-User

Ich kann DOIF nicht, aber Damian empiehlt immer, DOIF auf Perl-Modus umzustellen, wenn man was komplexeres machen will... Von daher würde ich behaupten, der Gedanke, das in die umgekehrte Richtung zu versuchen ist kontraproduktiv.

Aber wenn sowieso dann eigentlich nur Perl-Code aufgerufen wird, stellt sich mir die Frage, warum dann nicht ein einfaches notify den Job tun darf.

Verzögern ist auch da kein Problem, man setzt halt einen InternalTimer (oder ein benanntes sleep) und checkt die Rahmenbedingungen später (ob sie noch erfüllt sind). Siehe Benni's globale Tür- und Fenster-Lösung (zu finden über den myUtils-Artikel im Wiki). Ich mach' das für Heizkörper ähnlich, da wird bei Öffnen auch erst gewartet, bis eine (virtuelle) Fenster-offen-Meldung rausgeht (zu finden über "FHEMWEB aufhübschen" (oder so, Thread von mir irgendwo in Homematic oder Codeschnipsel)).

Und nochmal: DAS NOTIFY wird gar nicht getriggert, da ist die Reihenfolge erst mal schnurz!
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

rallye

#14
Zitat von: Beta-User am 12 April 2021, 13:30:05
Boah, diese Art der DOIF-Konstruktion ist (ganz abgesehen vom Modul selbst) einfach nur grausam...

Sowas kann man doch generalisieren, und dann schreibt man eine myUtils dazu und ruft die bei ALLEN Fenstern bzw. Türen auf, die relevant sind. Und mAn. braucht man auch keine Werte groß irgendwo "zwischenlagern" bzw. wenn, dann in einer Art "room"-dummy (für diesen einen Room).

Jedenfalls schreibt nicht das notify den Wert in den dummy, sondern (falls meine sehr bescheidenen Kenntnisse des DOIF-Moduls nicht komplett falsch sind) das DOIF.
(z.B. hier):
elsif ($fenster eq "closed" && $drinnenFeuchterAlsDraussen && not($drinnenZuTrocken)) {\
       fhem ("set LueftenDummy keep_open;; setreading LueftenDummy RC 3")\


Dass das nicht hübsch ist, ist mir schon klar und das sind meine ersten Versuche etwas "abgekupfertes" in mein Environment zu bringen. Für EIN Zimmer funktioniert es auch und ich bin gerade dabei es zu "generalisieren", wobei ich auf diese Probleme stosse. Es ist definitiv meine Absicht das Zeugs sukzezive professioneller zu gestalten und die 99_myUtils zu verwenden!

und ja das DOIF schreibt den RC in den Dummy, der dann das Notify auslöst
RaspiPi v4, HM-LGW, 6x HM-TC-IT-WM-W-EU, 11x HM-CC-RT-DN, 1x HUE Bridge, 4x HUE-RC, 5x HUE White&Color, 15xHUE White, 3xHM-LC-SW1-FM, 1xHM-LC-SW2-FM, 1x ConBeeII, 15x Shelly1, 5xShellyplug, Aquara: 2x Temp-Sensor, 1x Vibrationssensor, 2x Lichtsensor, 19x Tür/Fenstersensor