From 8e1602cb15c66fc6cfb3486e773dd8f58ec7c8a6 Mon Sep 17 00:00:00 2001 From: KRKeegan Date: Fri, 11 Oct 2013 18:48:41 -0700 Subject: [PATCH] Insteon: Add Is Deaf Routine for Battery Devices Closed #279 --- lib/Insteon/AllLinkDatabase.pm | 8 ++++---- lib/Insteon/BaseInsteon.pm | 18 ++++++++++++++++++ lib/Insteon/Controller.pm | 1 + lib/Insteon/Security.pm | 2 ++ 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/lib/Insteon/AllLinkDatabase.pm b/lib/Insteon/AllLinkDatabase.pm index aa47c807b..8d2ff2926 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 (!$self->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 (!$self->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 (!$self->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..9c6250448 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 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; }