rename von Channel in VCCU funktionert nicht fürs anlegen eines virtuellen Fenst

Begonnen von Ruggy, 26 Januar 2023, 17:52:45

Vorheriges Thema - Nächstes Thema

Ruggy

Habe es jetzt u.a. mit der Heizung im Kinderzimmer versucht. Dort sind zwei HM-CC-RT-DN, ein Fenster mit Xiaomi-Öffner und ein Xiaomi-Temperatur Sensor

Das mit dem Fenster funktioniert meiner Meinung nach. Beim Öffnen des Fensters wird durch beide HM-CC-RT-DN das Öffnen sofort erkannt.

Das mit der Temperatur funktioniert anscheinend nicht bzw. nicht so richtig.
Die _Weather beider Thermostate werden nicht mit der selben Temperatur gleichzeitig aktualisiert;
wenn sich die Temperatur am Xiaomi Sensor ändert, dauert es ein paar Minuten, bis sich an dem _Weather etwas ändert. Hierbei ist nicht unbedingt gesagt, dass beide die selbe Temperatur haben.
Das virtuelle Device ändert ziemlich zügig die Temperaturänderungen.

Ich habe "virt_Hauptdevice" angelegt und dieses mit zwei Kanälen (für Fenster und Temperatur); das virt. Fenster mit dem Fenstersensor gepeert und der virt. Temperatursensor mit den _Weather der zwei HM-CC-RT-DN gepeert.
Wenn ich es richtig verstanden habe sollte das gehen?

Durch den Befehl set hm peerXref wird folgendes angezeigt
(kann das so stimmen? Insbesondere wegen den Abschnitt mit "undef":

peerXref done:
x-ref list
  actor
       BAD_HEIZUNG_WindowRec  =>  BAD_virt_Fenster
       KIND_HEIZUNG_1_WindowRec  =>  KIND_virt_Fenster
       KIND_HEIZUNG_2_WindowRec  =>  KIND_virt_Fenster
       KUECHE_HEIZUNG_WindowRec  =>  KUECHE_virt_Fenster
       SCHLAFZIMMER_HEIZUNG_WindowRec  =>  SCHLAFZIMMER_virt_Fenster
  receive
       BAD_HEIZUNG_Weather   =>  BAD_virt_Temperatur
       KIND_HEIZUNG_1_Weather  =>  KIND_virt_Temperatur
       KIND_HEIZUNG_2_Weather  =>  KIND_virt_Temperatur
       KUECHE_HEIZUNG_Weather  =>  KUECHE_virt_Temperatur
       SCHLAFZIMMER_HEIZUNG_Weather  =>  SCHLAFZIMMER_virt_Temperatur
       WOH_HEIZUNG_1_Weather  =>  WOH_virt_Temperatur_Sensor1
       WOH_HEIZUNG_2_Weather  =>  WOH_virt_Temperatur_2_Sensor1
       WOH_HEIZUNG_3_Weather  =>  WOH_virt_Temperatur_3_Sensor1
  undef
       BAD_virt_Fenster      =>  BAD_HEIZUNG_WindowRec
       BAD_virt_Temperatur   =>  BAD_HEIZUNG_Weather
       KIND_virt_Fenster     =>  KIND_HEIZUNG_1_WindowRec KIND_HEIZUNG_2_WindowRec
       KIND_virt_Temperatur  =>  KIND_HEIZUNG_1_Weather KIND_HEIZUNG_2_Weather
       KUECHE_virt_Fenster   =>  KUECHE_HEIZUNG_WindowRec
       KUECHE_virt_Temperatur  =>  KUECHE_HEIZUNG_Weather
       SCHLAFZIMMER_virt_Fenster  =>  SCHLAFZIMMER_HEIZUNG_WindowRec
       SCHLAFZIMMER_virt_Temperatur  =>  SCHLAFZIMMER_HEIZUNG_Weather
       WOH_virt_Temperatur_2_Sensor1  =>  WOH_HEIZUNG_2_Weather
       WOH_virt_Temperatur_3_Sensor1  =>  WOH_HEIZUNG_3_Weather
       WOH_virt_Temperatur_Sensor1  =>  WOH_HEIZUNG_1_Weather



Hier der gesamte Vorgang, wie ich es eingerichtet habe:

define KIND_virt_Sensoren CUL_HM F54AB1
attr KIND_virt_Sensoren model VIRTUAL

- (Neustart von FHEM damit nächste Befehle verfügbar werden) shutdown restart

set KIND_virt_Sensoren virtual 1
set KIND_virt_Sensoren virtual 2

rename KIND_virt_Sensoren_Btn1 KIND_virt_Fenster
rename KIND_virt_Sensoren_Btn2 KIND_virt_Temperatur

- (Neustart von FHEM falls Btn nicht umbenannt wurden) shutdown restart

attr KIND_virt_Fenster webCmd postEvent open:postEvent closed

set KIND_virt_Fenster peerChan 0 KIND_HEIZUNG_1_WindowRec single set
set KIND_virt_Fenster peerChan 0 KIND_HEIZUNG_2_WindowRec single set

set KIND_HEIZUNG_1_WindowRec regSet winOpnTemp 5 KIND_virt_Fenster
set KIND_HEIZUNG_2_WindowRec regSet winOpnTemp 5 KIND_virt_Fenster

set KIND_HEIZUNG_1_Clima regSet winOpnMode off
set KIND_HEIZUNG_2_Clima regSet winOpnMode off


set KIND_virt_Temperatur peerChan 0 KIND_HEIZUNG_1_Weather single set
set KIND_virt_Temperatur peerChan 0 KIND_HEIZUNG_2_Weather single set

define notify_KIND_virt_Fenster notify KINDERZIMMER_FENSTER_L:(open|closed) set KIND_virt_Fenster postEvent $EVENT

define notify_KIND_virt_Temperatur notify KIND_LUFTFEUCHTE:temperature:.* set KIND_virt_Temperatur virtTemp $EVTPART1


Hier das List vom virt. Hauptdevice:

Internals:
   DEF        F54AB102
   FUUID      63dc2376-f33f-194f-8b0a-8ab94765f6c24a87
   NAME       KIND_virt_Temperatur
   NR         770
   NTFY_ORDER 48-KIND_virt_Temperatur
   STATE      set_virtTemp 20.26
   TYPE       CUL_HM
   chanNo     02
   device     KIND_virt_Sensoren
   disableNotifyFn 1
   eventCount 482
   peerList   KIND_HEIZUNG_1_Weather,KIND_HEIZUNG_2_Weather
   Helper:
     DBLOG:
       state:
         DbLog:
           TIME       1675375276.38491
           VALUE      set_virtTemp 20.26
       temperature:
         DbLog:
           TIME       1675375276.35092
           VALUE      20.26
   READINGS:
     2023-02-02 23:01:50   commState       CMDs_done
     2023-02-02 22:18:47   peerList        KIND_HEIZUNG_1_Weather,KIND_HEIZUNG_2_Weather
     2023-02-02 23:01:16   state           set_virtTemp 20.26
     2023-02-02 23:01:16   temperature     20.26
   helper:
     fkt        virtThSens
     peerFriend peerSens,peerAct
     peerIDsState incomplete
     peerOpt    -:virtual
     regLst     
     virtTC     00
     bm:
       CUL_HM_Get:
         cnt        15
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        02.02. 22:58:01
         max        0.00111293792724609
         tot        0.00801229476928711
         mAr:
           HASH(0x5c43a90)
           KIND_virt_Temperatur
           ?
       CUL_HM_Set:
         cnt        803
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        02.02. 22:42:18
         max        0.166764974594116
         tot        31.9938004016876
         mAr:
           HASH(0x5c43a90)
           KIND_virt_Temperatur
           virtTemp
           24.25
     cmds:
       TmplKey    KIND_HEIZUNG_1_Weather,KIND_HEIZUNG_2_Weather:no:1675371555.31676
       TmplTs     1675371555.31676
       cmdKey     1:0:1:virtThSens:KIND_virt_Sensoren:FFF1:02:KIND_HEIZUNG_1_Weather,KIND_HEIZUNG_2_Weather
       cmdLst:
         peerChan   -btnNumber- -actChn- [({single}|dual|reverse)] [({set}|unset)] [(actor|remote|{both})]
         peerSmart  -peerOpt-
         postEvent  -condition-
         press      [(long|{short})] [(-peer-|{all})] [(noBurst|{Burst})] [(-repCount-|{0})] [(-repDelay-|{0.25})]
         pressL     [(-peer-|{all})]
         pressS     [(-peer-|{all})]
         tplSet_0   -tplChan-
         tplSet_KIND_HEIZUNG_1_Weather -tplPeer-
         tplSet_KIND_HEIZUNG_2_Weather -tplPeer-
         virtHum    (off|0.0..99.0;0.1)
         virtTemp   (off|-20.0..50.0;0.1)
       lst:
         condition  slider,0,1,255
         peer       KIND_HEIZUNG_1_Weather,KIND_HEIZUNG_2_Weather
         peerOpt    remove_KIND_HEIZUNG_1_Weather,remove_KIND_HEIZUNG_2_Weather,BAD_HEIZUNG_WindowRec,BAD_HEIZUNG_remote,GONG_FLUR,HM_70FFF4_Rain,KIND_HEIZUNG_1_WindowRec,KIND_HEIZUNG_1_remote,KIND_HEIZUNG_2_WindowRec,KIND_HEIZUNG_2_remote,KUECHE_HEIZUNG_WindowRec,KUECHE_HEIZUNG_remote,SCHLAFZIMMER_HEIZUNG_WindowRec,SCHLAFZIMMER_HEIZUNG_remote,Steckdose_PC,WOH_HEIZUNG_1_WindowRec,WOH_HEIZUNG_1_remote,WOH_HEIZUNG_2_WindowRec,WOH_HEIZUNG_2_remote,WOH_HEIZUNG_3_WindowRec,WOH_HEIZUNG_3_remote,WOH_SCHALTER_1_Btn_01,WOH_SCHALTER_1_Btn_02
         tplChan   
         tplDel     
         tplPeer   
       rtrvLst:
         cmdList    [({short}|long)]
         deviceInfo [({short}|long)]
         list       [({normal}|full)]
         param      -param-
     expert:
       def        1
       det        0
       raw        0
       tpl        0
     peerIDsH:
       62FAC801   KIND_HEIZUNG_2_Weather
       62FB6A01   KIND_HEIZUNG_1_Weather
     role:
       chn        1
       vrt        1
     tmpl:
     vd:
       ackT       
       cmd        8470F54AB1000000
       idh        1485698
       idl        45312
       miss       0
       msgCnt     17
       msgRed     0
       next       1675375488.06729
       nextM      1675375488.06729
       typ        2
       val        00CA
       vin        20.26
Attributes:
   model      VIRTUAL
   peerIDs    62FAC801,62FB6A01
   webCmd     press short:press long

Beta-User

Zitat von: Ruggy am 02 Februar 2023, 23:03:12
Das mit der Temperatur funktioniert anscheinend nicht bzw. nicht so richtig.
Die _Weather beider Thermostate werden nicht mit der selben Temperatur gleichzeitig aktualisiert;
wenn sich die Temperatur am Xiaomi Sensor ändert, dauert es ein paar Minuten, bis sich an dem _Weather etwas ändert. Hierbei ist nicht unbedingt gesagt, dass beide die selbe Temperatur haben.
Wo genau siehst du das Problem?

Die "Ist-Temperatur" aus dem virtuellen Kanal wird nur jeweils alle 2,5 Minuten oder so an den RT versandt, dabei hat jeder RT "seinen" slot, wann er empfangsbereit ist. Versendet wird dabei jeweils das, was halt grade "da" ist.

Daher kommt auch die Empfehlung aus dem Wiki, den Wert zu LÖSCHEN, wenn er veraltet ist. Besser der RT arbeitet mit dem intern gemessenen Wert wie mit einem veralteten ;) ...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Ruggy

Nach Deiner Erklärung sehe ich jetzt hierbei kein Problem mehr.  :)
Es ist somit normal und wie es sein soll.

Ich würde es gerne bei einem Fenster (bzw. ist eigentlich in dem Fall eine Balkontüre) so einstellen, dass das Öffnen erst nach z.B. 5 Minuten an das Thermostat gemeldet wird. Wenn ich das Fenster in der Zwischenzeit wieder geschlossen wird, soll das Thermostat unverändert weiter heizen.

Könnte das notify folgendermaßen funktionieren. Habe in einem anderen Thread gelesen, dass das sleep u.U. FHEM blockieren könnte.

define notify_WOHNZIMMER_virt_Fenster notify WOH_TUERSENSOR:(open|closed) sleep 5;;{fhem(,,set WOHNZIMMER_virt_Fenster postEvent $EVENT")}

Falls dies so grundsätzlich funktioniert.
Was passiert, wenn ich das Fenster innerhalb der sleep-Zeit wieder schließe. Erfolgt dann trotzdem die Meldung nach 5 Minuten?

Beta-User

Zitat von: Ruggy am 03 Februar 2023, 13:01:41
Nach Deiner Erklärung sehe ich jetzt hierbei kein Problem mehr.  :)
Es ist somit normal und wie es sein soll.
:)

ZitatIch würde es gerne bei einem Fenster (bzw. ist eigentlich in dem Fall eine Balkontüre) so einstellen, dass das Öffnen erst nach z.B. 5 Minuten an das Thermostat gemeldet wird. Wenn ich das Fenster in der Zwischenzeit wieder geschlossen wird, soll das Thermostat unverändert weiter heizen.

Könnte das notify folgendermaßen funktionieren. Habe in einem anderen Thread gelesen, dass das sleep u.U. FHEM blockieren könnte.

define notify_WOHNZIMMER_virt_Fenster notify WOH_TUERSENSOR:(open|closed) sleep 5;;{fhem(,,set WOHNZIMMER_virt_Fenster postEvent $EVENT")}

Falls dies so grundsätzlich funktioniert.
Was passiert, wenn ich das Fenster innerhalb der sleep-Zeit wieder schließe. Erfolgt dann trotzdem die Meldung nach 5 Minuten?
Das sleep ist nicht das Problem, das ist ein "FHEM-sleep", das einfach einen "InternalTimer" anlegt.
Das Problem ist letzteres, das muss eigentlich auch wieder gelöscht werden, sonst kommen beide Events verzögert am RT an. Eine mögliche Lösung für das Problem sollte eigentlich hier in diesem Thread bereits stehen ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files