Fritzbox: improved assignment of handset data

git-svn-id: svn://svn.code.sf.net/p/fhem/code/trunk@8458 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
tpoitzsch
2015-04-20 15:49:02 +00:00
parent 3b6d8ca3d4
commit 4c8c575732

View File

@@ -645,6 +645,7 @@ sub FRITZBOX_Readout_Run($)
my @readoutCmdArray; my @readoutCmdArray;
my $resultArray; my $resultArray;
my @readoutReadings; my @readoutReadings;
my %dectFonID;
my $i; my $i;
my $startTime = time(); my $startTime = time();
@@ -672,6 +673,7 @@ sub FRITZBOX_Readout_Run($)
# Init and Counters # Init and Counters
push @readoutCmdArray, ["", "ctlmgr_ctl r telcfg settings/Foncontrol" ]; push @readoutCmdArray, ["", "ctlmgr_ctl r telcfg settings/Foncontrol" ];
push @readoutCmdArray, ["", "ctlmgr_ctl r telcfg settings/Foncontrol/User/count" ]; push @readoutCmdArray, ["", "ctlmgr_ctl r telcfg settings/Foncontrol/User/count" ];
push @readoutCmdArray, ["", "ctlmgr_ctl r dect settings/Handset/count" ];
push @readoutCmdArray, ["fhem->radioCount", "ctlmgr_ctl r configd settings/WEBRADIO/count" ]; push @readoutCmdArray, ["fhem->radioCount", "ctlmgr_ctl r configd settings/WEBRADIO/count" ];
push @readoutCmdArray, ["", "ctlmgr_ctl r user settings/user/count" ]; push @readoutCmdArray, ["", "ctlmgr_ctl r user settings/user/count" ];
push @readoutCmdArray, ["", 'echo $CONFIG_AB_COUNT']; push @readoutCmdArray, ["", 'echo $CONFIG_AB_COUNT'];
@@ -698,14 +700,18 @@ sub FRITZBOX_Readout_Run($)
unless defined $resultArray; unless defined $resultArray;
my $dectCount = $resultArray->[1]; my $dectCount = $resultArray->[1];
$dectCount = 0 unless $dectCount=~ /\d/; $dectCount = 1 unless $dectCount=~ /\d/;
my $radioCount = $resultArray->[2]; $dectCount--;
my $handsetCount = $resultArray->[2];
$handsetCount = 1 unless $dectCount=~ /\d/;
$handsetCount--;
my $radioCount = $resultArray->[3];
$radioCount = 0 unless $radioCount=~ /\d/; $radioCount = 0 unless $radioCount=~ /\d/;
my $userCount = $resultArray->[3]; my $userCount = $resultArray->[4];
my $fonCount = $resultArray->[4]; my $fonCount = $resultArray->[5];
my $lanDeviceCount = $resultArray->[5]; my $lanDeviceCount = $resultArray->[6];
my $tamCount = $resultArray->[6]; my $tamCount = $resultArray->[7];
my $divCount = $resultArray->[8]; my $divCount = $resultArray->[9];
# Internetradioliste erzeugen # Internetradioliste erzeugen
@@ -751,58 +757,77 @@ sub FRITZBOX_Readout_Run($)
} }
} }
# Dect Telefonnummern bestimmen
for (1..$dectCount) for (1..$dectCount)
{ {
# 0 Dect-Interne Nummer # 0 Dect-Interne Nummer
push @readoutCmdArray, [ "dect".$_."_intern", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/Intern" ]; push @readoutCmdArray, [ "dect".$_."_intern", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/Intern" ];
# 1 Dect-Telefonname # 1 Dect-Telefonname
push @readoutCmdArray, [ "dect".$_, "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/Name" ]; push @readoutCmdArray, [ "dect".$_, "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/Name" ];
# 2 Handset manufacturer # 2 Internal Ring Tone Name
push @readoutCmdArray, [ "", "ctlmgr_ctl r dect settings/Handset".($_-1)."/Manufacturer" ];
# 3 Internal Ring Tone Name
push @readoutCmdArray, [ "dect".$_."_intRingTone", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/IntRingTone", "ringtone" ]; push @readoutCmdArray, [ "dect".$_."_intRingTone", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/IntRingTone", "ringtone" ];
# 4 Alarm Ring Tone Name # 3 Alarm Ring Tone Name
push @readoutCmdArray, [ "dect".$_."_alarmRingTone", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/AlarmRingTone0", "ringtone" ]; push @readoutCmdArray, [ "dect".$_."_alarmRingTone", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/AlarmRingTone0", "ringtone" ];
# 5 Radio Name # 4 Radio Name
push @readoutCmdArray, [ "dect".$_."_radio", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/RadioRingID", "radio" ]; push @readoutCmdArray, [ "dect".$_."_radio", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/RadioRingID", "radio" ];
# 6 Background image # 5 Background image
push @readoutCmdArray, [ "dect".$_."_imagePath", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/ImagePath" ]; push @readoutCmdArray, [ "dect".$_."_imagePath", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/ImagePath" ];
# 7 Customer Ring Tone # 6 Customer Ring Tone
push @readoutCmdArray, [ "dect".$_."_custRingTone", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/G722RingTone" ]; push @readoutCmdArray, [ "dect".$_."_custRingTone", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/G722RingTone" ];
# 8 Customer Ring Tone Name # 7 Customer Ring Tone Name
push @readoutCmdArray, [ "dect".$_."_custRingToneName", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/G722RingToneName" ]; push @readoutCmdArray, [ "dect".$_."_custRingToneName", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/G722RingToneName" ];
# 9 Firmware Version # 8 UserID
push @readoutCmdArray, [ "", "ctlmgr_ctl r dect settings/Handset".($_-1)."/FWVersion" ]; push @readoutCmdArray, [ "", "ctlmgr_ctl r telcfg settings/Foncontrol/User".$_."/Id" ];
# 10 Phone Model
push @readoutCmdArray, [ "", "ctlmgr_ctl r dect settings/Handset".($_-1)."/Model" ];
# 11 Handset FonUser
push @readoutCmdArray, [ "", "ctlmgr_ctl r dect settings/Handset".($_-1)."/User", "" ];
} }
$resultArray = FRITZBOX_Readout_Query( $hash, \@readoutCmdArray, \@readoutReadings ); $resultArray = FRITZBOX_Readout_Query( $hash, \@readoutCmdArray, \@readoutReadings );
# Handset and DECT user can be in different orders but should have the same maximum number for (1..$dectCount)
for (0..$dectCount-1)
{ {
my $offset = $_ * 12; my $offset = $_ * 9 - 9;
my $intern = $resultArray->[ $offset]; my $intern = $resultArray->[$offset];
push @readoutReadings, "fhem->$intern->name|" . $resultArray->[ $offset + 1 ] my $ID = $resultArray->[ $offset + 8 ];
if $intern; if ($intern)
my $handsetUser = $resultArray->[ $offset + 11];
my $handsetIntern = $resultArray->[ ($handsetUser-1) * 12 ];
if ( $handsetUser )
{ {
push @readoutReadings, "dect".$handsetUser."_manufacturer|" . $resultArray->[ $offset + 2 ]; push @readoutReadings, "fhem->$intern->name|" . $resultArray->[ $offset + 1 ];
push @readoutReadings, "dect".$handsetUser."_fwVersion|" . $resultArray->[ $offset + 9 ]; $dectFonID{$ID}{User} = $_;
push @readoutReadings, "dect".$handsetUser."_model|" . FRITZBOX_Readout_Format($hash, "model", $resultArray->[ $offset + 10 ] ); $dectFonID{$ID}{Intern} = $intern;
}
if ( $handsetIntern )
{
push @readoutReadings, "fhem->$intern->brand|" . $resultArray->[ $offset + 2 ];
push @readoutReadings, "fhem->$intern->model|" . FRITZBOX_Readout_Format($hash, "model", $resultArray->[ $offset + 10 ] );
} }
} }
# Assign data of DECT handset to DECT numbers
for (0..$handsetCount)
{
# 0 Handset FonUser
push @readoutCmdArray, [ "", "ctlmgr_ctl r dect settings/Handset".$_."/User", "" ];
# 1 Handset manufacturer
push @readoutCmdArray, [ "", "ctlmgr_ctl r dect settings/Handset".$_."/Manufacturer" ];
# 2 Phone Model
push @readoutCmdArray, [ "", "ctlmgr_ctl r dect settings/Handset".$_."/Model", "model" ];
# 3 Firmware Version
push @readoutCmdArray, [ "", "ctlmgr_ctl r dect settings/Handset".$_."/FWVersion" ];
}
$resultArray = FRITZBOX_Readout_Query( $hash, \@readoutCmdArray, \@readoutReadings );
# Handset and DECT user can be in different orders
for (0..$handsetCount)
{
my $offset = $_ * 4;
my $dectUserID = $resultArray->[$offset];
if ($dectUserID)
{
my $dectUser = $dectFonID{$dectUserID}{User};
push @readoutReadings, "dect".$dectUser."_manufacturer|" . $resultArray->[ $offset + 1 ];
FRITZBOX_Log $hash, 5, "dect".$dectUser."_manufacturer: " . $resultArray->[ $offset + 1 ];
push @readoutReadings, "dect".$dectUser."_model|" . $resultArray->[ $offset + 2 ];
FRITZBOX_Log $hash, 5, "dect".$dectUser."_model: " . $resultArray->[ $offset + 2 ];
push @readoutReadings, "dect".$dectUser."_fwVersion|" . $resultArray->[ $offset + 3 ];
FRITZBOX_Log $hash, 5, "dect".$dectUser."_fwVersion: " . $resultArray->[ $offset + 3 ];
my $intern = $dectFonID{$dectUserID}{Intern};
push @readoutReadings, "fhem->$intern->brand|" . $resultArray->[ $offset + 1 ];
push @readoutReadings, "fhem->$intern->model|" . $resultArray->[ $offset + 2 ];;
}
}
# Analog Fons Name # Analog Fons Name
for (1..$fonCount) for (1..$fonCount)
{ {