HiPi

 view release on metacpan or  search on metacpan

lib/HiPi/Energenie/Command.pm  view on Meta::CPAN

    ERROR_ADAPTER_NAME_NOT_FOUND  => 'ERROR_ADAPTER_NAME_NOT_FOUND',
    ERROR_ADAPTER_FAILED          => 'ERROR_ADAPTER_FAILED',
    
    ERROR_MONITOR_INVALID_OPTIONS => 'ERROR_MONITOR_INVALID_OPTIONS',
    ERROR_MONITOR_NAME_NOT_FOUND  => 'ERROR_MONITOR_NAME_NOT_FOUND',
    ERROR_MONITOR_FAILED          => 'ERROR_MONITOR_FAILED',
    
};

my $commandopts = {
    help     => {
        template => undef,
        defaults => {},
    },
    version  => {
        template => undef,
        defaults => {},
    },
    config  => {
        template => [ 'help|h!', 'list|l!', 'device|d:s', 'board|b:s', 'reset|r:s' ],
        defaults => { help => 0, list => 0, device => undef, board => undef, reset => undef },
    },
    group   => {
        template => [ 'help|h!', 'create|c:s', 'delete|d:s', 'rename|r:s', 'group|g:o', 'newname|n:s', 'list|l!',],
        defaults => { },
    },
    pair    => {
        template => [ 'help|h!', 'list|l', 'groupname|g:s', 'switch|s:i', 'name|n:s', ],
        defaults => { groupname => undef, switch => 0, },
    },
    switch  => {
        template => [ 'help|h!', 'list|l!', 'groupname|g:s', 'switch|s:i', 'name|n:s', 'on|1!', 'off|0!', 'all!' ],
        defaults => { help => 0, list => 0, groupname => undef, switch => undef, on => 0, off => 0, all => 0, } ,
    },
    alias  => {
        template => [ 'help|h!', 'list|l!', 'groupname|g:s', 'switch|s:i', 'name|n:s', ],
        defaults => { help => 0, list => 0, } ,
    },
    join    => {
        template => [ 'help|h!', 'list|l!', 'name|n:s', 'delete|d:s', 'rename|r:s', 'timeout|t:i' ],
        defaults => { help => 0, list => 0, name => '', delete  => '', rename => '', timeout => 60 },
    },
    adapter => {
        template => [ 'help|h!', 'list|l!', 'name|n:s', 'query|q!', 'on|1!', 'off|0!', 'timeout|t:i' ],
        defaults => { name => undef, query => 0, on => 0, off => 0, list => 0, help => 0, timeout => 60 },
    },
    monitor => {
        template => [ 'help|h!', 'list|l!', 'name|n:s', 'timeout|t:i' ],
        defaults => { name => undef, list => 0, help => 0,  timeout => 60 } ,
    },
};


sub new {
    my($class, %userparams ) = @_;
    
    my %params = (
        display => 'usage',
        mode    => 'console',
        pretty  => 0,
        user    => getpwuid($>),
        console_display_message => '',
        result  => {
            success   => 0,
            command   => 'unknown',
            option    => '',
            error     => 'unknown error',
            errorcode => ERROR_UNKNOWN,
            data      => {},
        },
    );
    
    foreach my $key (sort keys(%userparams)) {
        $params{$key} = $userparams{$key};
    }
    
    $params{config} = HiPi::Utils::Config->new(
        configclass => 'scripts/energenie',
        default     => {
            version    => $VERSION,
            board      => 'ENER314_RT',
            spi_device => '/dev/spidev0.1',
            reset_gpio => RPI_PIN_22,
            led_red_gpio => 0,
            led_green_gpio => 0,
            groups     => {},
            adapters   => {},
            monitors   => {},
            switches   => {},
        },
    );
    
    my $self = $class->SUPER::new( %params );
    return $self;
}

sub conf { $_[0]->config->config(); }

sub valid_command {
    my( $self, $command) = @_;
    return 0 if( length($command) > 40 || $command !~ /^[a-z]+$/ );
    return ( exists($commandopts->{$command}) ) ? 1 : 0;
}
    
sub handle_command {
    my $self = shift;
    my @commandargs = @ARGV;
    
    $self->handle_command_arguments( @commandargs );
}

sub handle_command_arguments {
    my ($self, @inputargs) = @_;
    
    my @commandargs = ();
    
    my $result = try {
    
        for my $arg ( @inputargs ) {
            if( lc($arg) eq '--json' ) {
                $self->mode('json');



( run in 0.861 second using v1.01-cache-2.11-cpan-df04353d9ac )