| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- #####################################################################
- # #
- # SecvestIP.pm written by Peter J. Flathmann #
- # Version 0.3, 2012-09-15 #
- # SecvestIP firmware version 2.3.4 #
- # #
- # ----------------------------------------------------------------- #
- # #
- # Usage: #
- # #
- # define <name> SecvestIP <hostname> <user> <password> #
- # set <name> <Set|PartSet|Unset> #
- # #
- # Example: #
- # #
- # define EMA SecvestIP secvestip admin geheimesKennwort #
- # attr EMA webCmd state #
- # set EMA Set #
- # #
- # ----------------------------------------------------------------- #
- # #
- # Possible states: #
- # #
- # Set: activated #
- # PartSet: internally activated #
- # Unset: deactivated #
- # #
- #####################################################################
- package main;
- use strict;
- use warnings;
- use POSIX;
- use LWP::UserAgent;
- use HTTP::Cookies;
- sub SecvestIP_Initialize($) {
- my ($hash) = @_;
- $hash->{DefFn} = "SecvestIP_Define";
- $hash->{SetFn} = "SecvestIP_Set";
- $hash->{GetFn} = "SecvestIP_Get";
- return undef;
- }
- sub SecvestIP_Get($) {
- my ($hash) = @_;
- my $url = 'http://'.$hash->{HOST}.'/';
- my $agent = LWP::UserAgent->new(
- cookie_jar => HTTP::Cookies->new,
- requests_redirectable => [ 'GET', 'HEAD', 'POST' ]
- );
- # Login
- my $response = $agent->post( $url."login.cgi", {
- Language => 'deutsch',
- UserName => $hash->{USER},
- Password => $hash->{PASSWORD}}
- );
- # Get SecvestIP state
- $response = $agent->get ($url.'getMode.cgi?ts='.time().'&Action=AudioAlarm&Source=Webpage');
- my @pairs = split(/\s+/,$response->content);
- my @state = split('=',$pairs[0]);
- $hash->{STATE} = $state[1];
-
- return undef;
- }
- sub SecvestIP_Set($$$) {
- my ($hash, $name ,$cmd) = @_;
-
- # Get current SecvestIP state
- SecvestIP_Get($hash);
-
- return "Unknown argument $cmd, choose one of state:Set,Unset,PartSet" if ($cmd eq "?");
- Log 1, "SecvestIP: Set $name $cmd";
- my $url = 'http://'.$hash->{HOST}.'/';
- my $agent = LWP::UserAgent->new(
- cookie_jar => HTTP::Cookies->new,
- requests_redirectable => [ 'GET', 'HEAD', 'POST' ]
- );
- # Login
- my $response = $agent->post( $url."login.cgi", {
- Language => 'deutsch',
- UserName => $hash->{USER},
- Password => $hash->{PASSWORD}}
- );
-
- # switching between internal and full activation or vice versa requires Unset first
- if ($cmd eq "Set" and $hash->{STATE} eq "PartSet" or $cmd eq "PartSet" and $hash->{STATE} eq "Set") {
- Log 1, "SecvestIP: switching from $hash->{STATE} to $cmd";
- $response = $agent->get ($url.'setMode.cgi?Mode=Unset&Source=Webpage&ts='.time() );
- sleep(2); # wait a moment to avoid confusing SecvestIP's web interface
- }
-
- $response = $agent->get ($url.'setMode.cgi?Mode='.$cmd.'&Source=Webpage&ts='.time() );
- SecvestIP_Get($hash);
- return undef;
- }
- sub SecvestIP_Define($$) {
- my ($hash, $def) = @_;
-
- Log 1, "SecvestIP: define $def";
-
- my @a = split("[ \t][ \t]*", $def);
- return "syntax: define <name> SecvestIP <hostname> <user> <password>" if (int(@a) != 5);
- $hash->{STATE} = "Initialized";
- $hash->{NAME} = $a[0];
- $hash->{HOST} = $a[2];
- $hash->{USER} = $a[3];
- $hash->{PASSWORD} = $a[4];
- SecvestIP_Get($hash);
- return undef;
- }
- 1;
|