package Power::Outlet::Config; use strict; use warnings; use base qw{Package::New Package::Role::ini}; use Power::Outlet; our $VERSION = '0.50'; our $PACKAGE = __PACKAGE__; =head1 NAME Power::Outlet::Config - Control and query a Power::Outlet device from Configuration file =head1 SYNOPSIS my $outlet = Power::Outlet::Config->new(section=>"My Section"); print $outlet->query, "\n"; print $outlet->on, "\n"; print $outlet->off, "\n"; =head1 DESCRIPTION Power::Outlet::Config is a package for controlling and querying Power::Outlet devices registered in an INI file. =head1 USAGE Configuration /etc/power-outliet.ini [My Tasmota] type=Tasmota host=light-hostname relay=POWER [My SonoffDiy] type=SonoffDiy host=switch=hostname Script use Power::Outlet::Config; my $outlet = Power::Outlet::Config->new(section=>"My Section"); print $outlet->on, "\n"; Command Line /usr/bin/power-outlet Config ON section "My Tasmota" /usr/bin/power-outlet Config ON section "My Section" ini_file ./my.ini =head1 CONSTRUCTOR =head2 new my $outlet = Power::Outlet->new(type=>"Config", section=>"My Section"); my $outlet = Power::Outlet::Config->new(section=>"My Section"); =cut sub new { my $class = shift; my $self = $class->SUPER::new(@_); #isa Power::Outlet::Config die(sprintf(qq{Error: Package: $PACKAGE: Cannot Read Config File "%s".\n}, $self->ini_file)) unless -r $self->ini_file; my $hash = $self->hash; #isa HASH return Power::Outlet->new(%$hash); #isa Power::Outlet::XXX } =head1 PROPERTIES =head2 section =cut sub section { my $self = shift; $self->{'section'} = shift if @_; die(qq{Error: Package: $PACKAGE: Object property "section" required.\n}) unless $self->{'section'}; die(sprintf(qq{Error: Package: $PACKAGE: Section "%s" does not exist in file "%s". Expected one of %s.\n}, $self->{'section'}, $self->ini_file, join(", ", map {qq{"$_"}} $self->ini->Sections))) unless $self->ini->SectionExists($self->{'section'}); return $self->{'section'}; } =head2 hash =cut sub hash { my $self = shift; my %hash = (); my $section = $self->section; my @parameters = $self->ini->Parameters($section); foreach my $parameter (@parameters) { my $value = $self->ini->val($section, $parameter, ''); $hash{$parameter} = $value; } return \%hash; } =head1 OBJECT ACCESSORS =head2 ini Returns a L<Config::IniFiles> for the power-outlet.ini file. =head2 ini_file Default: /etc/power-outlet.ini or C:\Windows\power-outlet.ini =cut =head2 ini_file_default Default: power-outlet.ini =cut sub ini_file_default {"power-outlet.ini"}; =head1 BUGS Please log on RT and send an email to the author. =head1 SUPPORT DavisNetworks.com supports all Perl applications including this package. =head1 AUTHOR Michael R. Davis CPAN ID: MRDVT DavisNetworks.com =head1 COPYRIGHT Copyright (c) 2020 Michael R. Davis This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The full text of the license can be found in the LICENSE file included with this module. =head1 SEE ALSO =cut 1;