70_ONKYO_AVR.pm,71_ONKYO_AVR_ZONE.pm: improved zone handling when using more than one receiver within the same Fhem instance

git-svn-id: https://svn.fhem.de/fhem/trunk@11509 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
jpawlowski 2016-05-24 08:37:21 +00:00
parent 7b1e5ed85e
commit 9c45cdb11b
2 changed files with 14 additions and 12 deletions

View File

@ -154,8 +154,8 @@ sub ONKYO_AVR_DevInit($) {
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $return; my $return;
my $definedZones = 0; my $definedZones = 0;
$definedZones = scalar keys %{ $modules{ONKYO_AVR_ZONE}{defptr} } $definedZones = scalar keys %{ $modules{ONKYO_AVR_ZONE}{defptr}{$name} }
if ( defined( $modules{ONKYO_AVR_ZONE}{defptr} ) ); if ( defined( $modules{ONKYO_AVR_ZONE}{defptr}{$name} ) );
Log3 $name, 5, "ONKYO_AVR $name: called function ONKYO_AVR_DevInit()"; Log3 $name, 5, "ONKYO_AVR $name: called function ONKYO_AVR_DevInit()";
@ -221,8 +221,8 @@ sub ONKYO_AVR_Notify($$) {
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $devName = $dev->{NAME}; my $devName = $dev->{NAME};
my $definedZones = 0; my $definedZones = 0;
$definedZones = scalar keys %{ $modules{ONKYO_AVR_ZONE}{defptr} } $definedZones = scalar keys %{ $modules{ONKYO_AVR_ZONE}{defptr}{$name} }
if ( defined( $modules{ONKYO_AVR_ZONE}{defptr} ) ); if ( defined( $modules{ONKYO_AVR_ZONE}{defptr}{$name} ) );
return return
if ( !$dev->{CHANGED} ); # Some previous notify deleted the array. if ( !$dev->{CHANGED} ); # Some previous notify deleted the array.
@ -324,8 +324,8 @@ sub ONKYO_AVR_Read($) {
my $state = ReadingsVal( $name, "power", "off" ); my $state = ReadingsVal( $name, "power", "off" );
my $zone = 0; my $zone = 0;
my $definedZones = 0; my $definedZones = 0;
$definedZones = scalar keys %{ $modules{ONKYO_AVR_ZONE}{defptr} } $definedZones = scalar keys %{ $modules{ONKYO_AVR_ZONE}{defptr}{$name} }
if ( defined( $modules{ONKYO_AVR_ZONE}{defptr} ) ); if ( defined( $modules{ONKYO_AVR_ZONE}{defptr}{$name} ) );
# read from serial device # read from serial device
my $buf = DevIo_SimpleRead($hash); my $buf = DevIo_SimpleRead($hash);

View File

@ -108,9 +108,9 @@ sub ONKYO_AVR_ZONE_Define($$$) {
my $IOname = $IOhash->{NAME}; my $IOname = $IOhash->{NAME};
my $zone = @$a[2] || "2"; my $zone = @$a[2] || "2";
if ( defined( $modules{ONKYO_AVR_ZONE}{defptr}{$zone} ) ) { if ( defined( $modules{ONKYO_AVR_ZONE}{defptr}{$IOname}{$zone} ) ) {
return "Zone already defined in " return "Zone already defined in "
. $modules{ONKYO_AVR_ZONE}{defptr}{$zone}{NAME}; . $modules{ONKYO_AVR_ZONE}{defptr}{$IOname}{$zone}{NAME};
} }
elsif ( !defined($IOhash) ) { elsif ( !defined($IOhash) ) {
return "No matching I/O device found"; return "No matching I/O device found";
@ -126,7 +126,7 @@ sub ONKYO_AVR_ZONE_Define($$$) {
} }
$hash->{INPUT} = ""; $hash->{INPUT} = "";
$modules{ONKYO_AVR_ZONE}{defptr}{$zone} = $hash; $modules{ONKYO_AVR_ZONE}{defptr}{$IOname}{$zone} = $hash;
# set default settings on first define # set default settings on first define
if ($init_done) { if ($init_done) {
@ -153,13 +153,15 @@ sub ONKYO_AVR_ZONE_Define($$$) {
################################### ###################################
sub ONKYO_AVR_ZONE_Undefine($$) { sub ONKYO_AVR_ZONE_Undefine($$) {
my ( $hash, $name ) = @_; my ( $hash, $name ) = @_;
my $zone = $hash->{ZONE}; my $zone = $hash->{ZONE};
my $IOhash = $hash->{IODev};
my $IOname = $IOhash->{NAME};
Log3 $name, 5, Log3 $name, 5,
"ONKYO_AVR_ZONE $name: called function ONKYO_AVR_ZONE_Undefine()"; "ONKYO_AVR_ZONE $name: called function ONKYO_AVR_ZONE_Undefine()";
delete $modules{ONKYO_AVR_ZONE}{defptr}{$zone} delete $modules{ONKYO_AVR_ZONE}{defptr}{$IOname}{$zone}
if ( defined( $modules{ONKYO_AVR_ZONE}{defptr}{$zone} ) ); if ( defined( $modules{ONKYO_AVR_ZONE}{defptr}{$IOname}{$zone} ) );
# Disconnect from device # Disconnect from device
DevIo_CloseDev($hash); DevIo_CloseDev($hash);