diff --git a/lib/Insteon.pm b/lib/Insteon.pm index fa01d60d6..e55ee7961 100755 --- a/lib/Insteon.pm +++ b/lib/Insteon.pm @@ -400,9 +400,8 @@ sub scan_all_linktables { my $candidate_object = $_; if ($candidate_object->is_root and - !($candidate_object->isa('Insteon::RemoteLinc') - or $candidate_object->isa('Insteon::InterfaceController') - or $candidate_object->isa('Insteon::MotionSensor'))) + !($candidate_object->is_deaf + or $candidate_object->isa('Insteon::InterfaceController'))) { push @_scan_devices, $candidate_object; &main::print_log("[Scan all linktables] INFO1: " @@ -511,7 +510,7 @@ sub sync_all_links # iterate over all registered objects and compare whether the link tables match defined scene linkages in known Insteon_Links for my $obj (&Insteon::find_members('Insteon::BaseController')) { - if ($obj->isa('Insteon::RemoteLinc') or $obj->isa('Insteon::MotionSensor')) + if ($obj->is_deaf) { &main::print_log("[Sync all links] Ignoring links from 'deaf' device: " . $obj->get_object_name); } diff --git a/lib/Insteon/AllLinkDatabase.pm b/lib/Insteon/AllLinkDatabase.pm index aa47c807b..003db8636 100644 --- a/lib/Insteon/AllLinkDatabase.pm +++ b/lib/Insteon/AllLinkDatabase.pm @@ -421,7 +421,7 @@ sub delete_orphan_links # first, make sure that the health of ALDB is ok if ($self->health ne 'good') { - if ($$self{device}->isa('Insteon::RemoteLinc') or $$self{device}->isa('Insteon::MotionSensor')) + if ($self->is_deaf) { &::print_log("[Insteon::AllLinkDatabase] Delete orphan links: ignoring link from deaf device: $selfname"); @@ -588,7 +588,7 @@ sub delete_orphan_links } else # is a non-PLM device { - if ($linked_device->isa('Insteon::RemoteLinc') or $linked_device->isa('Insteon::MotionSensor')) + if ($linked_device->is_deaf) { &::print_log("[Insteon::AllLinkDatabase] Delete orphan links: ignoring link from $selfname to 'deaf' device: " . $linked_device->get_object_name); } @@ -754,7 +754,7 @@ sub delete_orphan_links { $member = $member->get_root; } - if ($member->isa('Insteon::RemoteLinc') or $member->isa('Insteon::MotionSensor')) + if ($member->is_deaf) { &::print_log("[Insteon::AllLinkDatabase] ignoring link from " . $link->get_object_name . " to " . $member->get_object_name); @@ -2830,7 +2830,7 @@ sub delete_orphan_links } if ($member->isa('Insteon::BaseDevice')) { - if ($member->isa('Insteon::RemoteLinc') or $member->isa('Insteon::MotionSensor')) + if ($member->is_deaf) { &::print_log("[Insteon::ALDB_PLM] ignoring link from PLM to " . $member->get_object_name); diff --git a/lib/Insteon/BaseInsteon.pm b/lib/Insteon/BaseInsteon.pm index 43717c4ca..18c5e18f5 100644 --- a/lib/Insteon/BaseInsteon.pm +++ b/lib/Insteon/BaseInsteon.pm @@ -1260,6 +1260,7 @@ sub new $$self{hops_left_count} = 0; $$self{max_hops_count} = 0; $$self{outgoing_hop_count} = 0; + $$self{is_deaf} = 0; return $self; } @@ -1308,6 +1309,23 @@ sub set_receive $self->SUPER::set_receive($p_state, $p_setby, $p_response); } +=item C + +Returns true if the device must be awake in order to respond to messages. Most +devices are not deaf, currently devices that are deaf are battery operated +devices such as the Motion Sensor, RemoteLinc and TriggerLinc. + +At the BaseObject level all devices are defined as not deaf. Objects which +inherit BaseObject should redefine is_deaf as necessary. + +=cut + +sub is_deaf +{ + my ($self) = @_; + return $$self{is_deaf}; +} + =item C Returns true if the device is a controller. diff --git a/lib/Insteon/Controller.pm b/lib/Insteon/Controller.pm index 871ed28b6..1d2e18299 100644 --- a/lib/Insteon/Controller.pm +++ b/lib/Insteon/Controller.pm @@ -79,6 +79,7 @@ sub new $$self{queue_timer} = new Timer; } bless $self,$class; + $$self{is_deaf} = 1; return $self; } diff --git a/lib/Insteon/Security.pm b/lib/Insteon/Security.pm index fe97e4014..65f4d3484 100644 --- a/lib/Insteon/Security.pm +++ b/lib/Insteon/Security.pm @@ -126,6 +126,7 @@ sub new $$self{queue_timer} = new Timer; } bless $self,$class; + $$self{is_deaf} = 1; return $self; } @@ -775,6 +776,7 @@ sub new my $self = new Insteon::BaseDevice($p_deviceid,$p_interface); $$self{message_types} = \%message_types; bless $self,$class; + $$self{is_deaf} = 1; return $self; }