From 9c45cdb11b2f46b7fc1becb728ea9ddd15e3a1a2 Mon Sep 17 00:00:00 2001 From: jpawlowski Date: Tue, 24 May 2016 08:37:21 +0000 Subject: [PATCH] 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 --- fhem/FHEM/70_ONKYO_AVR.pm | 12 ++++++------ fhem/FHEM/71_ONKYO_AVR_ZONE.pm | 14 ++++++++------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/fhem/FHEM/70_ONKYO_AVR.pm b/fhem/FHEM/70_ONKYO_AVR.pm index bc283670b..9bd0856cd 100644 --- a/fhem/FHEM/70_ONKYO_AVR.pm +++ b/fhem/FHEM/70_ONKYO_AVR.pm @@ -154,8 +154,8 @@ sub ONKYO_AVR_DevInit($) { my $name = $hash->{NAME}; my $return; my $definedZones = 0; - $definedZones = scalar keys %{ $modules{ONKYO_AVR_ZONE}{defptr} } - if ( defined( $modules{ONKYO_AVR_ZONE}{defptr} ) ); + $definedZones = scalar keys %{ $modules{ONKYO_AVR_ZONE}{defptr}{$name} } + if ( defined( $modules{ONKYO_AVR_ZONE}{defptr}{$name} ) ); Log3 $name, 5, "ONKYO_AVR $name: called function ONKYO_AVR_DevInit()"; @@ -221,8 +221,8 @@ sub ONKYO_AVR_Notify($$) { my $name = $hash->{NAME}; my $devName = $dev->{NAME}; my $definedZones = 0; - $definedZones = scalar keys %{ $modules{ONKYO_AVR_ZONE}{defptr} } - if ( defined( $modules{ONKYO_AVR_ZONE}{defptr} ) ); + $definedZones = scalar keys %{ $modules{ONKYO_AVR_ZONE}{defptr}{$name} } + if ( defined( $modules{ONKYO_AVR_ZONE}{defptr}{$name} ) ); return if ( !$dev->{CHANGED} ); # Some previous notify deleted the array. @@ -324,8 +324,8 @@ sub ONKYO_AVR_Read($) { my $state = ReadingsVal( $name, "power", "off" ); my $zone = 0; my $definedZones = 0; - $definedZones = scalar keys %{ $modules{ONKYO_AVR_ZONE}{defptr} } - if ( defined( $modules{ONKYO_AVR_ZONE}{defptr} ) ); + $definedZones = scalar keys %{ $modules{ONKYO_AVR_ZONE}{defptr}{$name} } + if ( defined( $modules{ONKYO_AVR_ZONE}{defptr}{$name} ) ); # read from serial device my $buf = DevIo_SimpleRead($hash); diff --git a/fhem/FHEM/71_ONKYO_AVR_ZONE.pm b/fhem/FHEM/71_ONKYO_AVR_ZONE.pm index 4580e4f3d..4a5db302b 100644 --- a/fhem/FHEM/71_ONKYO_AVR_ZONE.pm +++ b/fhem/FHEM/71_ONKYO_AVR_ZONE.pm @@ -108,9 +108,9 @@ sub ONKYO_AVR_ZONE_Define($$$) { my $IOname = $IOhash->{NAME}; 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 " - . $modules{ONKYO_AVR_ZONE}{defptr}{$zone}{NAME}; + . $modules{ONKYO_AVR_ZONE}{defptr}{$IOname}{$zone}{NAME}; } elsif ( !defined($IOhash) ) { return "No matching I/O device found"; @@ -126,7 +126,7 @@ sub ONKYO_AVR_ZONE_Define($$$) { } $hash->{INPUT} = ""; - $modules{ONKYO_AVR_ZONE}{defptr}{$zone} = $hash; + $modules{ONKYO_AVR_ZONE}{defptr}{$IOname}{$zone} = $hash; # set default settings on first define if ($init_done) { @@ -153,13 +153,15 @@ sub ONKYO_AVR_ZONE_Define($$$) { ################################### sub ONKYO_AVR_ZONE_Undefine($$) { my ( $hash, $name ) = @_; - my $zone = $hash->{ZONE}; + my $zone = $hash->{ZONE}; + my $IOhash = $hash->{IODev}; + my $IOname = $IOhash->{NAME}; Log3 $name, 5, "ONKYO_AVR_ZONE $name: called function ONKYO_AVR_ZONE_Undefine()"; - delete $modules{ONKYO_AVR_ZONE}{defptr}{$zone} - if ( defined( $modules{ONKYO_AVR_ZONE}{defptr}{$zone} ) ); + delete $modules{ONKYO_AVR_ZONE}{defptr}{$IOname}{$zone} + if ( defined( $modules{ONKYO_AVR_ZONE}{defptr}{$IOname}{$zone} ) ); # Disconnect from device DevIo_CloseDev($hash);