Hilfe bei Fronthem Converter SonosGroup

Begonnen von Keule_09, 05 Februar 2022, 16:43:42

Vorheriges Thema - Nächstes Thema

Keule_09

Hallo Zusammen,


bin gerade dabei das Sonoswidget von ddtlabs an Smartvisu 3.1 anzupassen.
Habe einen Converter für Sonos Gruppen geschrieben.
Allerdings habe ich jetzt bei dem Converter das Problem, daß die Gruppen im Sonosmodul erst nach ca 1 Sekunden aktuell sind.
Hat jemand eine Idee wie ich das Problem gelöst bekomme, daß sich der Converter nach 1 Sekunde nochmal aktualisiert ?


Sub für die Gruppen holen:


sub sv_SonosGetGroupState()
{
my ($hash) = @_;
my $GetGroup = $hash->{GetGroup};

my $cName = "sv_SonosGetGroupState: ";
# holt die aktuellen Gruppen von Sonos
$GetGroup = CommandGet(undef, main::SONOS_getSonosPlayerByName(undef)->{NAME}. ' Groups');
# Aufbereitung der Gruppen zum vergleichen
$GetGroup =~ s/\], \[/\|/g;
$GetGroup =~ s/[\[]|[\]]//g;
return $GetGroup ;
}



Hier der Converter:


sub SonosGroupState(@)
{
  my ($param) = @_;
  my $cmd = $param->{cmd};
  my $gad = $param->{gad};
  my $gadval = $param->{gadval};


  my $device = $param->{device};
  my $reading = $param->{reading};
  my $event = $param->{event};
 
  #my @args = @{$param->{args}};
  my $cache = $param->{cache};
 
  # who am I ?
  my $cName = "fronthem converter (SonosGroupState): ";
 
  # other variable


 
  if ($param->{cmd} eq 'get') 
  {
    $event = ($reading eq 'state')?main::Value($device):main::ReadingsVal($device, $reading, '');
$param->{cmd} = 'send';
  }
 
  if ($param->{cmd} eq 'send')
 
  {
  if ($reading eq "MasterPlayer")

{ my $newDevice =  join(' ',',',$device);
my $GetGroup = main::sv_SonosGetGroupState();
#Gruppen aufteilen
my @GetGroupsSp = split /\|/, $GetGroup;
if ( grep {($_ =~ /^$event/) && ($_ =~ $newDevice)}@GetGroupsSp)
{
#main::Log3 undef, 1, $cName . "event:" . $event . " / device:" . $newDevice;
$param->{gad} = $gad;
$param->{gadval} = 1;
$param->{gads} = [];
return undef;
}
else
{
#main::Log3 undef, 1, $cName . "event:" . $event . " / device:" . $device;
$param->{gad} = $gad;
$param->{gadval} = 0;
$param->{gads} = [];
return undef;
}
}
}

   elsif ($param->{cmd} eq 'rcv')
  {
    # other readings...
main::Log3 undef, 1, $cName . "SonosGroupState converter should only be used for reading MasterPlayer";
main::Log3 undef, 1, $cName . "but was used for: set " . $device . " " . $reading . " " . $gadval;
$param->{results} = [];
return undef;

  }
  elsif ($param->{cmd} eq '?')
  {
    return 'usage: SonosGroupState';
  }

 
  return undef;
 
}



Gruß Marco