2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-01-31 06:39:11 +00:00

49_IPCAM: added POST for custom commands cmd01-cmd15

git-svn-id: https://svn.fhem.de/fhem/trunk@23921 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
delmar 2021-03-10 21:39:11 +00:00
parent dd2dc10e58
commit 4bde2ba0fe
2 changed files with 25 additions and 14 deletions

View File

@ -1,5 +1,6 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it.
- new: 49_IPCAM: added POST for custom commands cmd01-cmd15
- new: 49_IPCAM: imageWithCallback now also interprets [device:reading]
- bugfix: 49_IPCAM: fixed imageWithCallback using previous image
- change: 49_IPCAM: added 'get imageWithCallback'

View File

@ -44,6 +44,8 @@ IPCAM_Initialize($$)
"cmdPos09 cmdPos10 cmdPos11 cmdPos12 cmdPos13 cmdPos14 cmdPos15 cmdPosHome ".
"cmd01 cmd02 cmd03 cmd04 cmd05 cmd06 cmd07 cmd08 ".
"cmd09 cmd10 cmd11 cmd12 cmd13 cmd14 cmd15 ".
"cmd01data cmd02data cmd03data cmd04data cmd05data cmd06data cmd07data ".
"cmd08data cmd09data cmd10data cmd11data cmd12data cmd13data cmd14data cmd15data ".
"model do_not_notify:1,0 showtime:1,0 scheme:http,https ".
"disable:0,1 ".
$readingFnAttributes;
@ -144,6 +146,7 @@ Set($$$@) {
return AttrTemplate_Set($hash, $list, $name, $cmd, @args)
if(!defined($sets{$cmd}));
my $arg;
if($cmd eq "pan" || $cmd eq "tilt") {
# check syntax
@ -177,7 +180,7 @@ Set($$$@) {
return "Wrong argument $args[0], only digits from 1 to 15 or home are allowed"
if(defined($args[0]) && $args[0] !~ /^([1-9]|1[0-5])$/ && $args[0] ne "home");
my $arg = ($args[0] =~ /\d+/) ? sprintf("cmdPos%02d",$args[0]) : "cmdPosHome";
$arg = ($args[0] =~ /\d+/) ? sprintf("cmdPos%02d",$args[0]) : "cmdPosHome";
return "Command for '$cmd $args[0]' is not defined. Please add this attribute first: " .
"'attr $name $arg <your_camera_command>'"
if(!defined(AttrVal($name,$arg,undef)));
@ -193,7 +196,7 @@ Set($$$@) {
return "Wrong argument $args[0], only digits from 1 to 15 are allowed"
if(defined($args[0]) && $args[0] !~ /^([1-9]|1[0-5])$/);
my $arg = sprintf("cmd%02d",$args[0]);
$arg = sprintf("cmd%02d",$args[0]);
return "Command for '$cmd $args[0]' is not defined. Please add this attribute first: " .
"'attr $name $arg <your_camera_command>'"
if(!defined(AttrVal($name,$arg,undef)));
@ -206,7 +209,7 @@ Set($$$@) {
return "argument is missing for $cmd"
if(int(@args) < 1);
my $arg = "@args";
$arg = "@args";
push(@camCmd,$arg);
}
@ -264,7 +267,7 @@ Set($$$@) {
Log3 $name, 4, "IPCAM ($name) - set $cmd requesting $camURI";
#my $camret = GetFileFromURLQuiet($camURI);
SendCommand( $hash, $camURI );
SendCommand( $hash, $camURI, $arg );
#Log3 $name, 5, "IPCAM ($name) - return:$camret";
}
@ -272,16 +275,25 @@ Set($$$@) {
}
sub SendCommand {
my ($hash, $camUrl) = @_;
my ($hash, $camUrl, $commandId) = @_;
my $name = $hash->{NAME};
Log3 $name, 3, "IPCAM ($name) - sending command: $camUrl";
my $apiParam = {
url => $camUrl,
method => "GET",
callback => \&IPCAM::SendCommand_Callback,
hash => $hash
};
Log3 $name, 3, "IPCAM ($name) - sending command $commandId: $camUrl";
my $postData = AttrVal($name, $commandId.'data', undef);
if (defined $postData) {
$apiParam->{data} = $postData;
$apiParam->{method} = 'POST';
Log3 $name, 3, "IPCAM ($name) - post data for $commandId: $postData";
}
HttpUtils_NonblockingGet($apiParam);
return undef;
@ -296,7 +308,7 @@ sub SendCommand_Callback {
Log3 $name, 0, "IPCAM ($name) - error while sending command ".$param->{url}." - $err";
} elsif($data ne "") {
Log3 $name, 3, "IPCAM ($name) - command response: $data";
Log3 $name, 4, "IPCAM ($name) - command response: $data";
}
}
@ -449,13 +461,6 @@ createSnapshotUrl($) {
# Log3 $name, 3, "IPCAM ($name) - found reading: $1";
# }
# if (defined $skipRequest) {
# return $camURI;
# } else {
# RequestSnapshot($hash, $camURI);
# }
# Log3 $name, 5, "IPCAM ($name) - getSnapshot snapshot: $snapshot";
return $camURI;
}
@ -834,6 +839,11 @@ DetailFn {
<code>attr ipcam cmd01 led_mode=0</code><br>
<code>attr ipcam cmd02 resolution=8</code><br>
</li>
cmd01data, cmd02data, ...<br>
You can define the POST data that is to be sent with the according cmd.<br>
If this is defined, the request will be POST instead of GET.<br>
Example:<br>
<code>attr ipcam cmd01data [{"cmd":"Login"},{"cmd":"SetOSD"}]</code>
<li>
cmdPanLeft, cmdPanRight, cmdTiltUp, cmdTiltDown, cmdStep<br>
Depending of the camera model, are different commands necessary.<br>