mirror of
https://github.com/fhem/fhem-mirror.git
synced 2024-11-22 02:59:49 +00:00
c6d0d3b21b
git-svn-id: https://svn.fhem.de/fhem/trunk@1884 2b470e98-0d58-463d-a4d8-8e2adae1ed80
137 lines
4.4 KiB
Perl
137 lines
4.4 KiB
Perl
#####################################################################
|
|
# #
|
|
# 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;
|