HM-CC-RT-DN dauernd CMDs_pending

Begonnen von oelidoc, 31 März 2023, 18:52:02

Vorheriges Thema - Nächstes Thema

noansi

#30
Hallo Frank,

Zitatproblem erkannt, müsste also nur noch jemand den code aufmotzen.

Da ich unabhängig von diesem Thread auf das gleiche Problem gestoßen bin, hier ein Ansatz:
    my ($teamC, $teamDN, $teamDH);
    my @teamList = ( CUL_HM_name2Id($name)                            # myself
                    ,CUL_HM_getPeers(CUL_HM_id2Name($dst.'05'),'IDs') # peers of RT team
                    ,CUL_HM_getPeers(CUL_HM_id2Name($dst.'02'),'IDs') # peers RT/TC team
                    );
    foreach my $tId (@teamList){
      $teamC = CUL_HM_id2Name($tId);
      next if (!defined $defs{$teamC} );
      $tId = substr($tId,0,6);
      $teamDN = CUL_HM_id2Name($tId);
      $teamDH = $defs{$teamDN};
      next if (!defined $teamDH);       
      CUL_HM_UpdtReadSingle($defs{$teamC},'controlMode','set_'.$mode,1);
      CUL_HM_PushCmdStack($teamDH,'++'.$flag.'11'.$id.$tId.$msg);
      if ($tId ne $dst) {
        my $rxType = CUL_HM_getRxType($teamDH);
        if    ($rxType & 0x01) { #always
          CUL_HM_ProcessCmdStack($teamDH);
        }
        elsif ($teamDH->{helper}{prt}{sProc} != 1) { #noansi: not processing
          if    ($rxType & 0x02) { # burst device - we need to send immediately
            CUL_HM_SndCmd($teamDH,'++B112'.$id.$tId); # noansi: B112 supported by thermostat. ToDo: send to team one by one, not to wake them all at once with no use
          }
          elsif (   $rxType & 0x80                                         #noansi: burstConditional, receive on burst if enabled in device?
                 && !(   defined($teamDH->{helper}{prt}{awake})            #noansi: prevent A112/B112 at same time
                      && $teamDH->{helper}{prt}{awake} == 1)               #noansi: not if wuPrep is scheduled
                 && CUL_HM_getAttrInt($teamDN,'burstAccess')                #noansi: burstConditional - have a try
                 && CUL_HM_ReadingsVal($teamDN,'R-burstRx','on') eq 'on') { #noansi: burstRx enabled
            CUL_HM_SndCmd($teamDH,'++B112'.$id.$tId);                      #noansi: B112 supported by thermostat. ToDo: send to team one by one, not to wake them all at once with no use
          }
          elsif (   $rxType & 0x18                               #noansi: wu or lazy device
                 && !(   defined($teamDH->{helper}{io}{flgs})
                      && $teamDH->{helper}{io}{flgs} & 0x02) ) { #noansi: wuPrep is not active
            CUL_HM_assignIO($teamDH); #noansi: chance to reassign, as we can't disturb with reception of wakeup triggering message
            CUL_HM_hmInitMsgUpdt($teamDH, 1); #noansi: prepare io
          }
        }
      }
    }
Und meine CUL_HM_ReadingsVal:
sub CUL_HM_ReadingsVal($$$){#return reading or hidden '.' reading
  my ($name,$reading,$default) = @_;
  if (defined($name)) {
    my $d = $defs{$name};
    if (defined($d)) {
      if (   defined($d)
          && defined($d->{READINGS})) {
        my $r = $d->{READINGS}{$reading};
        if (   defined($r)
            && defined($r->{VAL})) {
          return $r->{VAL};
        }
        $r = $d->{READINGS}{'.'.$reading};
        if (   defined($r)
            && defined($r->{VAL})) {
          return $r->{VAL};
        }
      }
    }
  }
  return $default;
}

desired-temp leidet unter dem gleichen Problem für ein Team.

Mit B112 das ganze Team auf einmal aufzuwecken ist damit weiterhin "suboptimal", weil sich die angestoßenen Kommunikationen im Anschluss gegenseitig auf die Füße treten.

Gruß, Ansgar.

oelidoc

Hallo,

würde gerne mal nachfragen, ob es zu dem Problem mal eine Lösung z.B. per update geben wird? Wer wär für sowas der richtige Anprechpartner?

Gruß

oelidoc

oelidoc

Hallo,
die Heizperiode hat begonnen und ich erlaube mir, den Thread noch mal hochzuholen.
Das Problem besteht in meiner Konfiguration leider immer noch.
Besteht noch Hoffnung auf ein Update oder ist Homematic unter FHEM schon eine Auslaufmodell  ::) ?

Viele Grüße

oelidoc