mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-04 22:19:38 +00:00
49_SSCam: contrib 8.13.5
git-svn-id: https://svn.fhem.de/fhem/trunk@19444 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
db03bd0d08
commit
7c94793ea7
@ -4362,21 +4362,17 @@ sub SSCam_getcamid_parse ($) {
|
|||||||
# Ist der gesuchte Kameraname im Hash enhalten (in SVS eingerichtet ?)
|
# Ist der gesuchte Kameraname im Hash enhalten (in SVS eingerichtet ?)
|
||||||
if (exists($allcams{$camname})) {
|
if (exists($allcams{$camname})) {
|
||||||
$camid = $allcams{$camname};
|
$camid = $allcams{$camname};
|
||||||
# in hash eintragen
|
|
||||||
$hash->{CAMID} = $camid;
|
$hash->{CAMID} = $camid;
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
Log3($name, 4, "$name - Detection Camid successful - $camname ID: $camid");
|
Log3($name, 4, "$name - Detection Camid successful - $camname ID: $camid");
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
# Kameraname nicht gefunden, id = ""
|
# Kameraname nicht gefunden, id = ""
|
||||||
# Setreading
|
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
readingsBulkUpdate($hash,"Errorcode","none");
|
readingsBulkUpdate($hash,"Errorcode","none");
|
||||||
readingsBulkUpdate($hash,"Error","Camera(ID) not found in Surveillance Station");
|
readingsBulkUpdate($hash,"Error","Camera(ID) not found in Surveillance Station");
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
Log3($name, 2, "$name - ERROR - Cameraname $camname wasn't found in Surveillance Station. Check Userrights, Cameraname and Spelling");
|
Log3($name, 2, "$name - ERROR - Cameraname $camname wasn't found in Surveillance Station. Check Userrights, Cameraname and Spelling");
|
||||||
SSCam_delActiveToken($hash);
|
SSCam_delActiveToken($hash);
|
||||||
return;
|
return;
|
||||||
@ -4495,7 +4491,6 @@ sub SSCam_camop ($) {
|
|||||||
# ein Schnappschuß wird ausgelöst
|
# ein Schnappschuß wird ausgelöst
|
||||||
$url = "$proto://$serveraddr:$serverport/webapi/$apitakesnappath?api=\"$apitakesnap\"&dsId=\"0\"&method=\"TakeSnapshot\"&version=\"$apitakesnapmaxver\"&camId=\"$camid\"&blSave=\"true\"&_sid=\"$sid\"";
|
$url = "$proto://$serveraddr:$serverport/webapi/$apitakesnappath?api=\"$apitakesnap\"&dsId=\"0\"&method=\"TakeSnapshot\"&version=\"$apitakesnapmaxver\"&camId=\"$camid\"&blSave=\"true\"&_sid=\"$sid\"";
|
||||||
readingsSingleUpdate($hash,"state", "snap", 1);
|
readingsSingleUpdate($hash,"state", "snap", 1);
|
||||||
#readingsSingleUpdate($hash, "LastSnapId", "", 0);
|
|
||||||
|
|
||||||
} elsif ($OpMode eq "SaveRec" || $OpMode eq "GetRec") {
|
} elsif ($OpMode eq "SaveRec" || $OpMode eq "GetRec") {
|
||||||
# eine Aufnahme soll in lokalem File (.mp4) gespeichert werden
|
# eine Aufnahme soll in lokalem File (.mp4) gespeichert werden
|
||||||
@ -5145,7 +5140,7 @@ sub SSCam_camop_parse ($) {
|
|||||||
my $pname = delete($hash->{HELPER}{PNAME});
|
my $pname = delete($hash->{HELPER}{PNAME});
|
||||||
my $pspeed = delete($hash->{HELPER}{PSPEED});
|
my $pspeed = delete($hash->{HELPER}{PSPEED});
|
||||||
$pspeed = $pspeed?$pspeed:"not set";
|
$pspeed = $pspeed?$pspeed:"not set";
|
||||||
# Logausgabe
|
|
||||||
Log3($name, 3, "$name - Camera \"$camname\" preset \"$pname\" was saved to number $pnumber with speed $pspeed");
|
Log3($name, 3, "$name - Camera \"$camname\" preset \"$pname\" was saved to number $pnumber with speed $pspeed");
|
||||||
SSCam_getptzlistpreset($hash);
|
SSCam_getptzlistpreset($hash);
|
||||||
|
|
||||||
@ -5166,7 +5161,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
readingsBulkUpdate($hash,"Error","none");
|
readingsBulkUpdate($hash,"Error","none");
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
my $piract = ($hash->{HELPER}{PIRACT} == 0)?"activated":"deactivated";
|
my $piract = ($hash->{HELPER}{PIRACT} == 0)?"activated":"deactivated";
|
||||||
Log3($name, 3, "$name - PIR sensor $piract");
|
Log3($name, 3, "$name - PIR sensor $piract");
|
||||||
|
|
||||||
@ -5207,7 +5201,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
readingsBulkUpdate($hash,"Error","none");
|
readingsBulkUpdate($hash,"Error","none");
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
my $sensitivity;
|
my $sensitivity;
|
||||||
if ($hash->{HELPER}{MOTDETSC} eq "SVS" && keys %{$hash->{HELPER}{MOTDETOPTIONS}}) {
|
if ($hash->{HELPER}{MOTDETSC} eq "SVS" && keys %{$hash->{HELPER}{MOTDETOPTIONS}}) {
|
||||||
# Optionen für "SVS" sind gesetzt
|
# Optionen für "SVS" sind gesetzt
|
||||||
@ -5529,7 +5522,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
readingsBulkUpdate($hash,"LastSnapFilename", $data->{'data'}{'data'}[0]{'fileName'});
|
readingsBulkUpdate($hash,"LastSnapFilename", $data->{'data'}{'data'}[0]{'fileName'});
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
Log3($name, 4, "$name - Filename of Snap-ID $snapid is \"$data->{'data'}{'data'}[0]{'fileName'}\"") if($data->{'data'}{'data'}[0]{'fileName'});
|
Log3($name, 4, "$name - Filename of Snap-ID $snapid is \"$data->{'data'}{'data'}[0]{'fileName'}\"") if($data->{'data'}{'data'}[0]{'fileName'});
|
||||||
|
|
||||||
} elsif ($OpMode eq "getstreamformat") {
|
} elsif ($OpMode eq "getstreamformat") {
|
||||||
@ -5569,7 +5561,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
readingsBulkUpdate($hash,"Error","none");
|
readingsBulkUpdate($hash,"Error","none");
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
Log3($name, 3, "$name - Patrol \"$hash->{HELPER}{GOPATROLNAME}\" of camera $camname has been started successfully");
|
Log3($name, 3, "$name - Patrol \"$hash->{HELPER}{GOPATROLNAME}\" of camera $camname has been started successfully");
|
||||||
|
|
||||||
} elsif ($OpMode eq "goabsptz") {
|
} elsif ($OpMode eq "goabsptz") {
|
||||||
@ -5584,7 +5575,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
readingsBulkUpdate($hash,"Error","none");
|
readingsBulkUpdate($hash,"Error","none");
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
Log3($name, 3, "$name - Camera $camname has been moved to absolute position \"posX=$hash->{HELPER}{GOPTZPOSX}\" and \"posY=$hash->{HELPER}{GOPTZPOSY}\"");
|
Log3($name, 3, "$name - Camera $camname has been moved to absolute position \"posX=$hash->{HELPER}{GOPTZPOSX}\" and \"posY=$hash->{HELPER}{GOPTZPOSY}\"");
|
||||||
|
|
||||||
} elsif ($OpMode eq "startTrack") {
|
} elsif ($OpMode eq "startTrack") {
|
||||||
@ -5595,7 +5585,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
readingsBulkUpdate($hash,"Error","none");
|
readingsBulkUpdate($hash,"Error","none");
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
Log3($name, 3, "$name - Object tracking of Camera $camname has been switched on");
|
Log3($name, 3, "$name - Object tracking of Camera $camname has been switched on");
|
||||||
|
|
||||||
} elsif ($OpMode eq "stopTrack") {
|
} elsif ($OpMode eq "stopTrack") {
|
||||||
@ -5606,7 +5595,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
readingsBulkUpdate($hash,"Error","none");
|
readingsBulkUpdate($hash,"Error","none");
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
Log3($name, 3, "$name - Object tracking of Camera $camname has been stopped");
|
Log3($name, 3, "$name - Object tracking of Camera $camname has been stopped");
|
||||||
|
|
||||||
} elsif ($OpMode eq "movestart") {
|
} elsif ($OpMode eq "movestart") {
|
||||||
@ -5617,7 +5605,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
readingsBulkUpdate($hash,"Error","none");
|
readingsBulkUpdate($hash,"Error","none");
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
Log3($name, 3, "$name - Camera $camname started move to direction \"$hash->{HELPER}{GOMOVEDIR}\" with duration of $hash->{HELPER}{GOMOVETIME} s");
|
Log3($name, 3, "$name - Camera $camname started move to direction \"$hash->{HELPER}{GOMOVEDIR}\" with duration of $hash->{HELPER}{GOMOVETIME} s");
|
||||||
|
|
||||||
RemoveInternalTimer($hash, "SSCam_movestop");
|
RemoveInternalTimer($hash, "SSCam_movestop");
|
||||||
@ -5660,7 +5647,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
readingsBulkUpdate($hash,"Error","none");
|
readingsBulkUpdate($hash,"Error","none");
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
Log3($name, 3, "$name - Camera $camname has been disabled successfully");
|
Log3($name, 3, "$name - Camera $camname has been disabled successfully");
|
||||||
|
|
||||||
} elsif ($OpMode eq "getsvsinfo") {
|
} elsif ($OpMode eq "getsvsinfo") {
|
||||||
@ -5799,7 +5785,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
readingsBulkUpdate($hash,"Error","none");
|
readingsBulkUpdate($hash,"Error","none");
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
Log3($name, $verbose, "$name - Stream-URLs of camera $camname retrieved");
|
Log3($name, $verbose, "$name - Stream-URLs of camera $camname retrieved");
|
||||||
|
|
||||||
} elsif ($OpMode eq "Getcaminfo") {
|
} elsif ($OpMode eq "Getcaminfo") {
|
||||||
@ -5984,7 +5969,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
readingsBulkUpdate($hash,"Error","none");
|
readingsBulkUpdate($hash,"Error","none");
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
Log3($name, $verbose, "$name - Query eventlist of camera $camname retrieved");
|
Log3($name, $verbose, "$name - Query eventlist of camera $camname retrieved");
|
||||||
|
|
||||||
# Versand Aufnahme initiieren
|
# Versand Aufnahme initiieren
|
||||||
@ -6056,7 +6040,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
readingsBulkUpdate($hash,"Error","none");
|
readingsBulkUpdate($hash,"Error","none");
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
Log3($name, $verbose, "$name - Enumerate motion detection parameters of camera $camname retrieved");
|
Log3($name, $verbose, "$name - Enumerate motion detection parameters of camera $camname retrieved");
|
||||||
|
|
||||||
} elsif ($OpMode eq "Getcapabilities") {
|
} elsif ($OpMode eq "Getcapabilities") {
|
||||||
@ -6142,7 +6125,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
readingsBulkUpdate($hash,"Error","none");
|
readingsBulkUpdate($hash,"Error","none");
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
Log3($name, $verbose, "$name - Capabilities of camera $camname retrieved");
|
Log3($name, $verbose, "$name - Capabilities of camera $camname retrieved");
|
||||||
|
|
||||||
} elsif ($OpMode eq "Getptzlistpreset") {
|
} elsif ($OpMode eq "Getptzlistpreset") {
|
||||||
@ -6167,7 +6149,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
my @preskeys = sort(keys(%{$hash->{HELPER}{ALLPRESETS}}));
|
my @preskeys = sort(keys(%{$hash->{HELPER}{ALLPRESETS}}));
|
||||||
my $presetlist = join(",",@preskeys);
|
my $presetlist = join(",",@preskeys);
|
||||||
|
|
||||||
# Setreading
|
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
readingsBulkUpdate($hash,"Presets",$presetlist);
|
readingsBulkUpdate($hash,"Presets",$presetlist);
|
||||||
readingsBulkUpdate($hash,"PresetHome",$home);
|
readingsBulkUpdate($hash,"PresetHome",$home);
|
||||||
@ -6178,7 +6159,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
# spezifische Attribute für PTZ-Cams verfügbar machen
|
# spezifische Attribute für PTZ-Cams verfügbar machen
|
||||||
SSCam_addptzattr($name);
|
SSCam_addptzattr($name);
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
Log3($name, $verbose, "$name - PTZ Presets of camera $camname retrieved");
|
Log3($name, $verbose, "$name - PTZ Presets of camera $camname retrieved");
|
||||||
|
|
||||||
} elsif ($OpMode eq "Getptzlistpatrol") {
|
} elsif ($OpMode eq "Getptzlistpatrol") {
|
||||||
@ -6204,7 +6184,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
readingsBulkUpdate($hash,"Error","none");
|
readingsBulkUpdate($hash,"Error","none");
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
Log3($name, $verbose, "$name - PTZ Patrols of camera $camname retrieved");
|
Log3($name, $verbose, "$name - PTZ Patrols of camera $camname retrieved");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6216,7 +6195,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
# Fehlertext zum Errorcode ermitteln
|
# Fehlertext zum Errorcode ermitteln
|
||||||
$error = SSCam_experror($hash,$errorcode);
|
$error = SSCam_experror($hash,$errorcode);
|
||||||
|
|
||||||
# Setreading
|
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
readingsBulkUpdate($hash,"Errorcode",$errorcode);
|
readingsBulkUpdate($hash,"Errorcode",$errorcode);
|
||||||
readingsBulkUpdate($hash,"Error",$error);
|
readingsBulkUpdate($hash,"Error",$error);
|
||||||
@ -6227,7 +6205,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
return SSCam_login($hash,'SSCam_getapisites');
|
return SSCam_login($hash,'SSCam_getapisites');
|
||||||
}
|
}
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
Log3($name, 2, "$name - ERROR - Operation $OpMode of Camera $camname was not successful. Errorcode: $errorcode - $error");
|
Log3($name, 2, "$name - ERROR - Operation $OpMode of Camera $camname was not successful. Errorcode: $errorcode - $error");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -6353,13 +6330,11 @@ sub SSCam_login_return ($) {
|
|||||||
# Session ID in hash eintragen
|
# Session ID in hash eintragen
|
||||||
$hash->{HELPER}{SID} = $sid;
|
$hash->{HELPER}{SID} = $sid;
|
||||||
|
|
||||||
# Setreading
|
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
readingsBulkUpdate($hash,"Errorcode","none");
|
readingsBulkUpdate($hash,"Errorcode","none");
|
||||||
readingsBulkUpdate($hash,"Error","none");
|
readingsBulkUpdate($hash,"Error","none");
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
Log3($name, 4, "$name - Login of User $username successful - SID: $sid");
|
Log3($name, 4, "$name - Login of User $username successful - SID: $sid");
|
||||||
|
|
||||||
return &$subref($hash);
|
return &$subref($hash);
|
||||||
@ -6371,13 +6346,11 @@ sub SSCam_login_return ($) {
|
|||||||
# Fehlertext zum Errorcode ermitteln
|
# Fehlertext zum Errorcode ermitteln
|
||||||
my $error = SSCam_experrorauth($hash,$errorcode);
|
my $error = SSCam_experrorauth($hash,$errorcode);
|
||||||
|
|
||||||
# Setreading
|
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
readingsBulkUpdate($hash,"Errorcode",$errorcode);
|
readingsBulkUpdate($hash,"Errorcode",$errorcode);
|
||||||
readingsBulkUpdate($hash,"Error",$error);
|
readingsBulkUpdate($hash,"Error",$error);
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
|
|
||||||
# Logausgabe
|
|
||||||
Log3($name, 3, "$name - Login of User $username unsuccessful. Code: $errorcode - $error - try again");
|
Log3($name, 3, "$name - Login of User $username unsuccessful. Code: $errorcode - $error - try again");
|
||||||
|
|
||||||
return SSCam_login($hash,$fret);
|
return SSCam_login($hash,$fret);
|
||||||
@ -6529,9 +6502,8 @@ sub SSCam_Autocreate ($$) {
|
|||||||
if($success) {
|
if($success) {
|
||||||
CommandSet(undef, "$camname credentials $username $password");
|
CommandSet(undef, "$camname credentials $username $password");
|
||||||
}
|
}
|
||||||
|
|
||||||
#InternalTimer(gettimeofday()+1.8, "SSCam_addptzattr", "$name", 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Log3($name, 4, "$name - Autocreate - SVS camera \"$sn\" already defined by \"$dcn\" ");
|
Log3($name, 4, "$name - Autocreate - SVS camera \"$sn\" already defined by \"$dcn\" ");
|
||||||
$camname = "";
|
$camname = "";
|
||||||
@ -6560,7 +6532,7 @@ sub SSCam_evaljson($$) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$success = 0;
|
$success = 0;
|
||||||
# Setreading
|
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
readingsBulkUpdate($hash,"Errorcode","none");
|
readingsBulkUpdate($hash,"Errorcode","none");
|
||||||
readingsBulkUpdate($hash,"Error","malformed JSON string received");
|
readingsBulkUpdate($hash,"Error","malformed JSON string received");
|
||||||
@ -6818,13 +6790,6 @@ sub SSCam_ptzpanel($;$$) {
|
|||||||
my $ptz_ret;
|
my $ptz_ret;
|
||||||
my $row;
|
my $row;
|
||||||
|
|
||||||
#my @vl = split (/\.|-/,ReadingsVal($name, "SVSversion", ""));
|
|
||||||
#if(@vl) {
|
|
||||||
# my $actvs = $vl[0];
|
|
||||||
# $actvs .= $vl[1];
|
|
||||||
# return "" if($actvs <= 71);
|
|
||||||
#}
|
|
||||||
|
|
||||||
return "" if(SSCam_myVersion($hash) <= 71);
|
return "" if(SSCam_myVersion($hash) <= 71);
|
||||||
|
|
||||||
$ptz_ret = "<div class=\"ptzpanel\">";
|
$ptz_ret = "<div class=\"ptzpanel\">";
|
||||||
@ -7593,9 +7558,9 @@ return $htmlCode;
|
|||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Auflösung Errorcodes bei Login / Logout
|
# Auflösung Errorcodes bei Login / Logout
|
||||||
|
# Übernahmewerte sind $hash, $errorcode
|
||||||
##############################################################################
|
##############################################################################
|
||||||
sub SSCam_experrorauth ($$) {
|
sub SSCam_experrorauth ($$) {
|
||||||
# Übernahmewerte sind $hash, $errorcode
|
|
||||||
my ($hash,$errorcode) = @_;
|
my ($hash,$errorcode) = @_;
|
||||||
my $device = $hash->{NAME};
|
my $device = $hash->{NAME};
|
||||||
my $error;
|
my $error;
|
||||||
@ -7610,9 +7575,9 @@ return ($error);
|
|||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Auflösung Errorcodes SVS API
|
# Auflösung Errorcodes SVS API
|
||||||
|
# Übernahmewerte sind $hash, $errorcode
|
||||||
##############################################################################
|
##############################################################################
|
||||||
sub SSCam_experror ($$) {
|
sub SSCam_experror ($$) {
|
||||||
# Übernahmewerte sind $hash, $errorcode
|
|
||||||
my ($hash,$errorcode) = @_;
|
my ($hash,$errorcode) = @_;
|
||||||
my $device = $hash->{NAME};
|
my $device = $hash->{NAME};
|
||||||
my $error;
|
my $error;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user