File Coverage

blib/lib/Power/Outlet/iBootBar.pm
Criterion Covered Total %
statement 19 47 40.4
branch 4 8 50.0
condition 0 3 0.0
subroutine 7 16 43.7
pod 5 5 100.0
total 35 79 44.3


line stmt bran cond sub pod time code
1             package Power::Outlet::iBootBar;
2 3     3   207549 use strict;
  3         24  
  3         84  
3 3     3   50 use warnings;
  3         5  
  3         84  
4 3     3   16 use base qw{Power::Outlet::Common::IP::SNMP};
  3         6  
  3         1022  
5 3     3   27 use Time::HiRes qw{sleep};
  3         8  
  3         19  
6              
7             our $VERSION = '0.50';
8             our $_oid_outletEntry = '1.3.6.1.4.1.1418.4.3.1'; #enterprises.dataprobe.iBootBarAgent.outletTable.outletEntry
9              
10             =head1 NAME
11              
12             Power::Outlet::iBootBar - Control and query a Dataprobe iBootBar power outlet
13              
14             =head1 SYNOPSIS
15              
16             my $outlet=Power::Outlet::iBootBar->new(
17             host => "mybar",
18             outlet => 1,
19             community => "private",
20             );
21             print $outlet->query, "\n";
22             print $outlet->on, "\n";
23             print $outlet->off, "\n";
24              
25             =head1 DESCRIPTION
26            
27             Power::Outlet::iBootBar is a package for controlling and querying an outlet on a Dataprobe iBootBar network attached power outlet.
28              
29             =head1 USAGE
30              
31             use Power::Outlet::iBootBar;
32             use DateTime;
33             my $lamp=Power::Outlet::iBootBar->new(host=>"mybar", outlet=>1);
34             my $hour=DateTime->now->hour;
35             my $night=$hour > 20 ? 1 : $hour < 06 ? 1 : 0;
36             if ($night) {
37             print $lamp->on, "\n";
38             } else {
39             print $lamp->off, "\n";
40             }
41              
42             =head1 CONSTRUCTOR
43              
44             =head2 new
45              
46             my $outlet=Power::Outlet->new(type=>"iBootBar", "host=>"mylamp");
47             my $outlet=Power::Outlet::iBootBar->new(host=>"mylamp");
48              
49             =head1 PROPERTIES
50              
51             =head2 host
52              
53             Sets and returns the hostname or IP address.
54              
55             Manufacturer Default: 192.168.0.254
56              
57             Note: Set IP address via telnet User Name: admin, Password: admin then "help network"
58              
59             set ipmode dhcp
60              
61             OR
62              
63             set ipmode static
64             set ipaddress 192.168.0.254
65             set subnet 255.255.255.0
66             set gateway 192.168.0.1
67              
68             =cut
69              
70 2     2   5 sub _host_default {"192.168.0.254"};
71              
72             =head2 community
73              
74             Sets and returns the SNMP community.
75              
76             my $community=$outlet->community("private"); #read/write
77             my $community=$outlet->community("public"); #read only features
78              
79             Note: Set SNMP community via telnet User Name: admin, Password: admin then "help snmp"
80              
81             set snmp writecommunity private
82             set snmp readcommunity public
83             set snmp 1 enable yes
84              
85             =cut
86              
87 2     2   6 sub _community_default {"private"};
88              
89             =head2 outlet
90              
91             Sets and returns the outlet number as labeled on the back of the device.
92              
93             Default: 1
94              
95             =cut
96              
97             sub outlet {
98 4     4 1 10 my $self=shift;
99 4 50       15 $self->{"outlet"}=shift if @_;
100 4 100       13 $self->{"outlet"}=1 unless defined $self->{"outlet"};
101 4 50       19 die("Error: outlet property must be set from 1 to 8.") unless $self->{"outlet"} =~ m/\A[1-8]\Z/;
102 4         17 return $self->{"outlet"};
103             }
104              
105 0     0     sub _outletIndex {shift->outlet - 1};
106              
107             sub _oid_outletStatus {
108 0     0     my $self=shift;
109 0           return join(".", $_oid_outletEntry, "3", $self->_outletIndex); #oids so MIB is not required
110             }
111              
112             sub _oid_outletCommand {
113 0     0     my $self=shift;
114 0           return join(".", $_oid_outletEntry, "4", $self->_outletIndex); #oids so MIB is not required
115             }
116              
117             sub _oid_outletName {
118 0     0     my $self=shift;
119 0           return join(".", $_oid_outletEntry, "2", $self->_outletIndex); #oids so MIB is not required
120             }
121              
122             =head2 name
123              
124             Returns the name from the iBootBar outletName via SNMP
125              
126             $ telnet iBootBar
127              
128             iBootBar Rev 1.5d.275
129              
130             User Name: admin
131             Password: *****
132              
133             iBootBar > help outlet
134             ...
135             set outlet <1-8> name
136             ...
137              
138             iBootBar > set outlet 1 name "Bar 1"
139              
140             =cut
141              
142             sub _name_default {
143 0     0     my $self=shift;
144 0           my $value=$self->snmp_get($self->_oid_outletName); #this value is cached in the super class
145 0           return $value;
146             }
147              
148             =head1 METHODS
149              
150             =head2 query
151              
152             Sends a TCP/IP message to the iBootBar device to query the current state
153              
154             =cut
155              
156             sub query {
157 0     0 1   my $self=shift;
158 0 0         if (defined wantarray) { #scalar and list context
159 0           my %status=(0 => "OFF", 1 => "ON", 2 => "REBOOT", 3 => "CYCLE", 4 => "ONPENDING", 5 => "CYCLEPENDING");
160 0           my $value=$self->snmp_get($self->_oid_outletStatus);
161 0   0       return $status{$value} || "UNKNOWN($value)";
162             } else { #void context
163 0           return;
164             }
165             }
166              
167             =head2 on
168              
169             Sends a TCP/IP message to the iBoot device to Turn Power ON
170              
171             =cut
172              
173             sub on {
174 0     0 1   my $self=shift;
175 0           $self->snmp_set($self->_oid_outletCommand, 1);
176 0           sleep 0.1;
177 0           return $self->query;
178             }
179              
180             =head2 off
181              
182             Sends a TCP/IP message to the iBoot device to Turn Power OFF
183              
184             =cut
185              
186             sub off {
187 0     0 1   my $self=shift;
188 0           $self->snmp_set($self->_oid_outletCommand, 0);
189 0           sleep 0.1;
190 0           return $self->query;
191             }
192              
193              
194             =head2 switch
195              
196             Queries the device for the current status and then requests the opposite.
197              
198             =cut
199              
200             #see Power::Outlet::Common->switch
201              
202             =head2 cycle
203              
204             Sends a TCP/IP message to the iBoot device to Cycle Power (ON-OFF-ON or OFF-ON-OFF). Cycle time is determined by Setup.
205              
206             Manufacturer Default Cycle Period: 10 seconds
207              
208             =cut
209              
210             sub cycle {
211 0     0 1   my $self=shift;
212 0           $self->snmp_set($self->_oid_outletCommand, 2);
213 0           sleep 0.1;
214 0           return $self->query;
215              
216             }
217              
218             =head1 BUGS
219              
220             Please log on RT and send an email to the author.
221              
222             =head1 SUPPORT
223              
224             DavisNetworks.com supports all Perl applications including this package.
225              
226             =head1 AUTHOR
227              
228             Michael R. Davis
229             CPAN ID: MRDVT
230             DavisNetworks.com
231              
232             =head1 COPYRIGHT
233              
234             This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
235              
236             The full text of the license can be found in the LICENSE file included with this module.
237              
238             =head1 SEE ALSO
239              
240             =cut
241              
242             1;