mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-30 12:07:09 +00:00
SMUtils.pm: update to version 1.10.0
git-svn-id: https://svn.fhem.de/fhem/trunk@22858 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
bd20984b32
commit
8a7d2b4077
@ -40,13 +40,16 @@ use FHEM::SynoModules::ErrCodes qw(:all); # Erro
|
|||||||
use GPUtils qw( GP_Import GP_Export );
|
use GPUtils qw( GP_Import GP_Export );
|
||||||
use Carp qw(croak carp);
|
use Carp qw(croak carp);
|
||||||
|
|
||||||
use version; our $VERSION = version->declare('1.9.0');
|
use version; our $VERSION = version->declare('1.10.0');
|
||||||
|
|
||||||
use Exporter ('import');
|
use Exporter ('import');
|
||||||
our @EXPORT_OK = qw(
|
our @EXPORT_OK = qw(
|
||||||
getClHash
|
getClHash
|
||||||
|
delClHash
|
||||||
trim
|
trim
|
||||||
|
moduleVersion
|
||||||
sortVersion
|
sortVersion
|
||||||
|
showModuleInfo
|
||||||
jboolmap
|
jboolmap
|
||||||
setCredentials
|
setCredentials
|
||||||
getCredentials
|
getCredentials
|
||||||
@ -58,6 +61,7 @@ our @EXPORT_OK = qw(
|
|||||||
delCallParts
|
delCallParts
|
||||||
setReadingErrorNone
|
setReadingErrorNone
|
||||||
setReadingErrorState
|
setReadingErrorState
|
||||||
|
addSendqueueEntry
|
||||||
listSendqueue
|
listSendqueue
|
||||||
purgeSendqueue
|
purgeSendqueue
|
||||||
updQueueLength
|
updQueueLength
|
||||||
@ -77,6 +81,7 @@ BEGIN {
|
|||||||
modules
|
modules
|
||||||
CancelDelayedShutdown
|
CancelDelayedShutdown
|
||||||
devspec2array
|
devspec2array
|
||||||
|
FmtDateTime
|
||||||
setKeyValue
|
setKeyValue
|
||||||
getKeyValue
|
getKeyValue
|
||||||
readingsSingleUpdate
|
readingsSingleUpdate
|
||||||
@ -89,12 +94,18 @@ BEGIN {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Standardvariablen
|
||||||
|
my $carpnohash = "got no hash value";
|
||||||
|
my $carpnoname = "got no name value";
|
||||||
|
my $carpnoctyp = "got no credentials type";
|
||||||
|
my $carpnoapir = "got no API reference";
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Clienthash übernehmen oder zusammenstellen
|
# Clienthash übernehmen oder zusammenstellen
|
||||||
# Identifikation ob über FHEMWEB ausgelöst oder nicht -> erstellen $hash->CL
|
# Identifikation ob über FHEMWEB ausgelöst oder nicht -> erstellen $hash->CL
|
||||||
###############################################################################
|
###############################################################################
|
||||||
sub getClHash {
|
sub getClHash {
|
||||||
my $hash = shift // carp "got no hash value" && return;
|
my $hash = shift // carp $carpnohash && return;
|
||||||
my $nobgd = shift;
|
my $nobgd = shift;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
my $ret;
|
my $ret;
|
||||||
@ -108,16 +119,16 @@ sub getClHash {
|
|||||||
my $outdev;
|
my $outdev;
|
||||||
my @webdvs = devspec2array("TYPE=FHEMWEB:FILTER=canAsyncOutput=1:FILTER=STATE=Connected");
|
my @webdvs = devspec2array("TYPE=FHEMWEB:FILTER=canAsyncOutput=1:FILTER=STATE=Connected");
|
||||||
my $i = 1;
|
my $i = 1;
|
||||||
for (@webdvs) {
|
|
||||||
$outdev = $_;
|
for my $outdev (@webdvs) {
|
||||||
next if(!$defs{$outdev});
|
next if(!$defs{$outdev});
|
||||||
$hash->{HELPER}{CL}{$i}->{NAME} = $defs{$outdev}{NAME};
|
$hash->{HELPER}{CL}{$i}->{NAME} = $defs{$outdev}{NAME};
|
||||||
$hash->{HELPER}{CL}{$i}->{NR} = $defs{$outdev}{NR};
|
$hash->{HELPER}{CL}{$i}->{NR} = $defs{$outdev}{NR};
|
||||||
$hash->{HELPER}{CL}{$i}->{COMP} = 1;
|
$hash->{HELPER}{CL}{$i}->{COMP} = 1;
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else { # übergebenen CL-Hash in Helper eintragen
|
else { # übergebenen CL-Hash in Helper eintragen
|
||||||
$hash->{HELPER}{CL}{1} = $hash->{CL};
|
$hash->{HELPER}{CL}{1} = $hash->{CL};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,8 +140,8 @@ sub getClHash {
|
|||||||
Log3 ($name, 4, "$name - Clienthash: $key -> $val");
|
Log3 ($name, 4, "$name - Clienthash: $key -> $val");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
else {
|
||||||
Log3 ($name, 2, "$name - Clienthash was neither delivered nor created !");
|
Log3 ($name, 2, "$name - Clienthash was neither delivered nor created !");
|
||||||
$ret = "Clienthash was neither delivered nor created. Can't use asynchronous output for function.";
|
$ret = "Clienthash was neither delivered nor created. Can't use asynchronous output for function.";
|
||||||
}
|
}
|
||||||
@ -138,6 +149,18 @@ sub getClHash {
|
|||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
####################################################################################
|
||||||
|
# Clienthash löschen
|
||||||
|
####################################################################################
|
||||||
|
sub delClHash {
|
||||||
|
my $name = shift;
|
||||||
|
my $hash = $defs{$name};
|
||||||
|
|
||||||
|
delete($hash->{HELPER}{CL});
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Leerzeichen am Anfang / Ende eines strings entfernen
|
# Leerzeichen am Anfang / Ende eines strings entfernen
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -148,6 +171,58 @@ sub trim {
|
|||||||
return $str;
|
return $str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#############################################################################################
|
||||||
|
# liefert die Versionierung des Moduls zurück
|
||||||
|
# Verwendung mit Packages: use version 0.77; our $VERSION = moduleVersion ($params)
|
||||||
|
# Verwendung ohne Packages: moduleVersion ($params)
|
||||||
|
#
|
||||||
|
# Die Verwendung von Meta.pm und Packages wird berücksichtigt
|
||||||
|
#
|
||||||
|
# Variablen $useAPI, $useSMUtils, $useErrCodes enthalten die Versionen von SynoModules
|
||||||
|
# wenn verwendet und sind in diesem Fall zu übergeben.
|
||||||
|
#############################################################################################
|
||||||
|
sub moduleVersion {
|
||||||
|
my $paref = shift;
|
||||||
|
my $hash = $paref->{hash} // carp $carpnohash && return;
|
||||||
|
my $notes = $paref->{notes} // carp "got no reference of a version hash" && return;
|
||||||
|
my $useAPI = $paref->{useAPI};
|
||||||
|
my $useSMUtils = $paref->{useSMUtils};
|
||||||
|
my $useErrCodes = $paref->{useErrCodes};
|
||||||
|
|
||||||
|
my $type = $hash->{TYPE};
|
||||||
|
my $package = (caller)[0]; # das PACKAGE des aufrufenden Moduls
|
||||||
|
|
||||||
|
$hash->{HELPER}{VERSION_API} = $useAPI ? FHEM::SynoModules::API->VERSION() : "unused";
|
||||||
|
$hash->{HELPER}{VERSION_SMUtils} = $useSMUtils ? FHEM::SynoModules::SMUtils->VERSION() : "unused";
|
||||||
|
$hash->{HELPER}{VERSION_ErrCodes} = $useErrCodes ? FHEM::SynoModules::ErrCodes->VERSION() : "unused";
|
||||||
|
|
||||||
|
my $v = (sortVersion("desc",keys %{$notes}))[0]; # die Modulversion aus Versionshash selektieren
|
||||||
|
$hash->{HELPER}{VERSION} = $v;
|
||||||
|
$hash->{HELPER}{PACKAGE} = $package;
|
||||||
|
|
||||||
|
if($modules{$type}{META}{x_prereqs_src} && !$hash->{HELPER}{MODMETAABSENT}) { # META-Daten sind vorhanden
|
||||||
|
$modules{$type}{META}{version} = "v".$v; # Version aus META.json überschreiben, Anzeige mit {Dumper $modules{<TYPE>}{META}}
|
||||||
|
|
||||||
|
if($modules{$type}{META}{x_version}) { # {x_version} nur gesetzt wenn $Id$ im Kopf komplett! vorhanden
|
||||||
|
$modules{$type}{META}{x_version} =~ s/1\.1\.1/$v/gx;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$modules{$type}{META}{x_version} = $v;
|
||||||
|
}
|
||||||
|
|
||||||
|
FHEM::Meta::SetInternals($hash); # FVERSION wird gesetzt ( nur gesetzt wenn $Id$ im Kopf komplett! vorhanden )
|
||||||
|
}
|
||||||
|
else { # herkömmliche Modulstruktur
|
||||||
|
$hash->{VERSION} = $v; # Internal VERSION setzen
|
||||||
|
}
|
||||||
|
|
||||||
|
if($package =~ /FHEM::$type/x || $package eq $type) { # es wird mit Packages gearbeitet -> mit {<Modul>->VERSION()} im FHEMWEB kann Modulversion abgefragt werden
|
||||||
|
return $v;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
################################################################
|
################################################################
|
||||||
# sortiert eine Liste von Versionsnummern x.x.x
|
# sortiert eine Liste von Versionsnummern x.x.x
|
||||||
# Schwartzian Transform and the GRT transform
|
# Schwartzian Transform and the GRT transform
|
||||||
@ -171,6 +246,106 @@ sub sortVersion {
|
|||||||
return @sorted;
|
return @sorted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#############################################################################################
|
||||||
|
# gibt die angeforderten Hinweise / Release Notes als
|
||||||
|
# HTML-Tabelle zurück
|
||||||
|
#############################################################################################
|
||||||
|
sub showModuleInfo {
|
||||||
|
my $paref = shift;
|
||||||
|
my $arg = $paref->{arg};
|
||||||
|
my $vHintsExt_de = $paref->{hintextde}; # Referenz zum deutschen Hinweis-Hash
|
||||||
|
my $vHintsExt_en = $paref->{hintexten}; # Referenz zum englischen Hinweis-Hash
|
||||||
|
my $vNotesExtern = $paref->{notesext}; # Referenz zum Hash der Modul Release Notes
|
||||||
|
|
||||||
|
my $header = "<b>Module release information</b><br>";
|
||||||
|
my $header1 = "<b>Helpful hints</b><br>";
|
||||||
|
my $ret = "";
|
||||||
|
|
||||||
|
my (%hs,$val0,$val1,$i);
|
||||||
|
|
||||||
|
$ret = "<html>";
|
||||||
|
|
||||||
|
# Hints
|
||||||
|
if(!$arg || $arg =~ /hints/x || $arg =~ /[\d]+/x) {
|
||||||
|
$ret .= sprintf("<div class=\"makeTable wide\"; style=\"text-align:left\">$header1 <br>");
|
||||||
|
$ret .= "<table class=\"block wide internals\">";
|
||||||
|
$ret .= "<tbody>";
|
||||||
|
$ret .= "<tr class=\"even\">";
|
||||||
|
|
||||||
|
if($arg && $arg =~ /[\d]+/x) {
|
||||||
|
my @hints = split ",", $arg;
|
||||||
|
|
||||||
|
for my $hint (@hints) {
|
||||||
|
if(AttrVal("global","language","EN") eq "DE") {
|
||||||
|
$hs{$hint} = $vHintsExt_de->{$hint};
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$hs{$hint} = $vHintsExt_en->{$hint};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(AttrVal("global","language","EN") eq "DE") {
|
||||||
|
%hs = %{$vHintsExt_de};
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
%hs = %{$vHintsExt_en};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
|
for my $key (sortVersion("desc",keys %hs)) {
|
||||||
|
$val0 = $hs{$key};
|
||||||
|
$ret .= sprintf("<td style=\"vertical-align:top\"><b>$key</b> </td><td style=\"vertical-align:top\">$val0</td>" );
|
||||||
|
$ret .= "</tr>";
|
||||||
|
$i++;
|
||||||
|
|
||||||
|
if ($i & 1) { # $i ist ungerade
|
||||||
|
$ret .= "<tr class=\"odd\">";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$ret .= "<tr class=\"even\">";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$ret .= "</tr>";
|
||||||
|
$ret .= "</tbody>";
|
||||||
|
$ret .= "</table>";
|
||||||
|
$ret .= "</div>";
|
||||||
|
}
|
||||||
|
|
||||||
|
# Notes
|
||||||
|
if(!$arg || $arg =~ /rel/x) {
|
||||||
|
$ret .= sprintf("<div class=\"makeTable wide\"; style=\"text-align:left\">$header <br>");
|
||||||
|
$ret .= "<table class=\"block wide internals\">";
|
||||||
|
$ret .= "<tbody>";
|
||||||
|
$ret .= "<tr class=\"even\">";
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
|
for my $key (sortVersion("desc", keys %{$vNotesExtern})) {
|
||||||
|
($val0,$val1) = split /\s/x, $vNotesExtern->{$key}, 2;
|
||||||
|
$ret .= sprintf("<td style=\"vertical-align:top\"><b>$key</b> </td><td style=\"vertical-align:top\">$val0 </td><td>$val1</td>" );
|
||||||
|
$ret .= "</tr>";
|
||||||
|
$i++;
|
||||||
|
|
||||||
|
if ($i & 1) { # $i ist ungerade
|
||||||
|
$ret .= "<tr class=\"odd\">";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$ret .= "<tr class=\"even\">";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$ret .= "</tr>";
|
||||||
|
$ret .= "</tbody>";
|
||||||
|
$ret .= "</table>";
|
||||||
|
$ret .= "</div>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$ret .= "</html>";
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# JSON Boolean Test und Mapping
|
# JSON Boolean Test und Mapping
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -192,10 +367,10 @@ return $bool;
|
|||||||
# $ao = "SMTPcredentials" -> Credentials für Mailversand
|
# $ao = "SMTPcredentials" -> Credentials für Mailversand
|
||||||
######################################################################################
|
######################################################################################
|
||||||
sub setCredentials {
|
sub setCredentials {
|
||||||
my $hash = shift // carp "got no hash value" && return;
|
my $hash = shift // carp $carpnohash && return;
|
||||||
my $ao = shift // carp "got no credentials type" && return;
|
my $ao = shift // carp $carpnoctyp && return;
|
||||||
my $user = shift // carp "got no user name" && return;
|
my $user = shift // carp "got no user name" && return;
|
||||||
my $pass = shift // carp "got no password" && return;
|
my $pass = shift // carp "got no password" && return;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
my $success;
|
my $success;
|
||||||
@ -215,8 +390,8 @@ sub setCredentials {
|
|||||||
if ($retcode) {
|
if ($retcode) {
|
||||||
Log3($name, 2, "$name - Error while saving the Credentials - $retcode");
|
Log3($name, 2, "$name - Error while saving the Credentials - $retcode");
|
||||||
$success = 0;
|
$success = 0;
|
||||||
|
}
|
||||||
} else {
|
else {
|
||||||
getCredentials($hash,1,$ao); # Credentials nach Speicherung lesen und in RAM laden ($boot=1), $ao = credentials oder SMTPcredentials
|
getCredentials($hash,1,$ao); # Credentials nach Speicherung lesen und in RAM laden ($boot=1), $ao = credentials oder SMTPcredentials
|
||||||
$success = 1;
|
$success = 1;
|
||||||
}
|
}
|
||||||
@ -230,9 +405,9 @@ return ($success);
|
|||||||
# $ao = "SMTPcredentials" -> Credentials für Mailversand
|
# $ao = "SMTPcredentials" -> Credentials für Mailversand
|
||||||
######################################################################################
|
######################################################################################
|
||||||
sub getCredentials {
|
sub getCredentials {
|
||||||
my $hash = shift // carp "got no hash value" && return;
|
my $hash = shift // carp $carpnohash && return;
|
||||||
my $boot = shift;
|
my $boot = shift;
|
||||||
my $ao = shift // carp "got no credentials type" && return;
|
my $ao = shift // carp $carpnoctyp && return;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
my ($success, $username, $passwd, $index, $retcode, $credstr);
|
my ($success, $username, $passwd, $index, $retcode, $credstr);
|
||||||
my (@key,$len,$i);
|
my (@key,$len,$i);
|
||||||
@ -260,8 +435,8 @@ sub getCredentials {
|
|||||||
$success = 1;
|
$success = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else { # boot = 0 -> Credentials aus RAM lesen, decoden und zurückgeben
|
else { # boot = 0 -> Credentials aus RAM lesen, decoden und zurückgeben
|
||||||
if ($ao eq "credentials") {
|
if ($ao eq "credentials") {
|
||||||
$credstr = $hash->{HELPER}{CREDENTIALS};
|
$credstr = $hash->{HELPER}{CREDENTIALS};
|
||||||
$pp = q{};
|
$pp = q{};
|
||||||
@ -285,8 +460,8 @@ sub getCredentials {
|
|||||||
my $logpw = AttrVal($name, "showPassInLog", 0) ? $passwd : "********";
|
my $logpw = AttrVal($name, "showPassInLog", 0) ? $passwd : "********";
|
||||||
|
|
||||||
Log3($name, 4, "$name - ".$pp."Credentials read from RAM: $username $logpw");
|
Log3($name, 4, "$name - ".$pp."Credentials read from RAM: $username $logpw");
|
||||||
|
}
|
||||||
} else {
|
else {
|
||||||
Log3($name, 2, "$name - ".$pp."Credentials not set in RAM !");
|
Log3($name, 2, "$name - ".$pp."Credentials not set in RAM !");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,7 +476,7 @@ return ($success, $username, $passwd);
|
|||||||
# Test ob JSON-String vorliegt
|
# Test ob JSON-String vorliegt
|
||||||
###############################################################################
|
###############################################################################
|
||||||
sub evaljson {
|
sub evaljson {
|
||||||
my $hash = shift // carp "got no hash value" && return;
|
my $hash = shift // carp $carpnohash && return;
|
||||||
my $myjson = shift // carp "got no string for JSON test" && return;
|
my $myjson = shift // carp "got no string for JSON test" && return;
|
||||||
my $OpMode = $hash->{OPMODE};
|
my $OpMode = $hash->{OPMODE};
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
@ -318,12 +493,13 @@ sub evaljson {
|
|||||||
if( ($hash->{HELPER}{RUNVIEW} && $hash->{HELPER}{RUNVIEW} =~ m/^live_.*hls$/x) ||
|
if( ($hash->{HELPER}{RUNVIEW} && $hash->{HELPER}{RUNVIEW} =~ m/^live_.*hls$/x) ||
|
||||||
$OpMode =~ m/^.*_hls$/x ) { # SSCam: HLS aktivate/deaktivate bringt kein JSON wenn bereits aktiviert/deaktiviert
|
$OpMode =~ m/^.*_hls$/x ) { # SSCam: HLS aktivate/deaktivate bringt kein JSON wenn bereits aktiviert/deaktiviert
|
||||||
Log3($name, 5, "$name - HLS-activation data return: $myjson");
|
Log3($name, 5, "$name - HLS-activation data return: $myjson");
|
||||||
|
|
||||||
if ($myjson =~ m/{"success":true}/x) {
|
if ($myjson =~ m/{"success":true}/x) {
|
||||||
$success = 1;
|
$success = 1;
|
||||||
$myjson = '{"success":true}';
|
$myjson = '{"success":true}';
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
else {
|
||||||
$success = 0;
|
$success = 0;
|
||||||
|
|
||||||
readingsBeginUpdate ($hash);
|
readingsBeginUpdate ($hash);
|
||||||
@ -342,8 +518,8 @@ return ($success,$myjson);
|
|||||||
# $fret = Rückkehrfunktion nach erfolgreichen Login
|
# $fret = Rückkehrfunktion nach erfolgreichen Login
|
||||||
####################################################################################
|
####################################################################################
|
||||||
sub login {
|
sub login {
|
||||||
my $hash = shift // carp "got no hash value" && return;
|
my $hash = shift // carp $carpnohash && return;
|
||||||
my $apiref = shift // carp "got no API reference" && return;
|
my $apiref = shift // carp $carpnoapir && return;
|
||||||
my $fret = shift // carp "got no return function reference" && return;
|
my $fret = shift // carp "got no return function reference" && return;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
my $serveraddr = $hash->{SERVERADDR};
|
my $serveraddr = $hash->{SERVERADDR};
|
||||||
@ -386,8 +562,8 @@ sub login {
|
|||||||
if (AttrVal($name,"session","DSM") eq "DSM") {
|
if (AttrVal($name,"session","DSM") eq "DSM") {
|
||||||
$url = "$proto://$serveraddr:$serverport/webapi/$apiauthpath?api=$apiauth&version=$apiauthver&method=Login&account=$username&passwd=$password&format=$sid";
|
$url = "$proto://$serveraddr:$serverport/webapi/$apiauthpath?api=$apiauth&version=$apiauthver&method=Login&account=$username&passwd=$password&format=$sid";
|
||||||
$urlwopw = "$proto://$serveraddr:$serverport/webapi/$apiauthpath?api=$apiauth&version=$apiauthver&method=Login&account=$username&passwd=*****&format=$sid";
|
$urlwopw = "$proto://$serveraddr:$serverport/webapi/$apiauthpath?api=$apiauth&version=$apiauthver&method=Login&account=$username&passwd=*****&format=$sid";
|
||||||
|
}
|
||||||
} else {
|
else {
|
||||||
$url = "$proto://$serveraddr:$serverport/webapi/$apiauthpath?api=$apiauth&version=$apiauthver&method=Login&account=$username&passwd=$password&session=SurveillanceStation&format=$sid";
|
$url = "$proto://$serveraddr:$serverport/webapi/$apiauthpath?api=$apiauth&version=$apiauthver&method=Login&account=$username&passwd=$password&session=SurveillanceStation&format=$sid";
|
||||||
$urlwopw = "$proto://$serveraddr:$serverport/webapi/$apiauthpath?api=$apiauth&version=$apiauthver&method=Login&account=$username&passwd=*****&session=SurveillanceStation&format=$sid";
|
$urlwopw = "$proto://$serveraddr:$serverport/webapi/$apiauthpath?api=$apiauth&version=$apiauthver&method=Login&account=$username&passwd=*****&session=SurveillanceStation&format=$sid";
|
||||||
}
|
}
|
||||||
@ -461,8 +637,8 @@ sub loginReturn {
|
|||||||
Log3($name, 4, "$name - Login of User $username successful - SID: $sid");
|
Log3($name, 4, "$name - Login of User $username successful - SID: $sid");
|
||||||
|
|
||||||
return &$fret($hash);
|
return &$fret($hash);
|
||||||
|
}
|
||||||
} else {
|
else {
|
||||||
my $errorcode = $data->{'error'}->{'code'}; # Errorcode aus JSON ermitteln
|
my $errorcode = $data->{'error'}->{'code'}; # Errorcode aus JSON ermitteln
|
||||||
my $error = expErrorsAuth($hash,$errorcode); # Fehlertext zum Errorcode ermitteln
|
my $error = expErrorsAuth($hash,$errorcode); # Fehlertext zum Errorcode ermitteln
|
||||||
|
|
||||||
@ -484,8 +660,8 @@ return login($hash,$apiref,$fret);
|
|||||||
# Funktion logout
|
# Funktion logout
|
||||||
###################################################################################
|
###################################################################################
|
||||||
sub logout {
|
sub logout {
|
||||||
my $hash = shift // carp "got no hash value" && return;
|
my $hash = shift // carp $carpnohash && return;
|
||||||
my $apiref = shift // carp "got no API reference" && return;
|
my $apiref = shift // carp $carpnoapir && return;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
my $serveraddr = $hash->{SERVERADDR};
|
my $serveraddr = $hash->{SERVERADDR};
|
||||||
my $serverport = $hash->{SERVERPORT};
|
my $serverport = $hash->{SERVERPORT};
|
||||||
@ -504,8 +680,8 @@ sub logout {
|
|||||||
|
|
||||||
if (AttrVal($name,"session","DSM") eq "DSM") {
|
if (AttrVal($name,"session","DSM") eq "DSM") {
|
||||||
$url = "$proto://$serveraddr:$serverport/webapi/$apiauthpath?api=$apiauth&version=$apiauthver&method=Logout&_sid=$sid";
|
$url = "$proto://$serveraddr:$serverport/webapi/$apiauthpath?api=$apiauth&version=$apiauthver&method=Logout&_sid=$sid";
|
||||||
|
}
|
||||||
} else {
|
else {
|
||||||
$url = "$proto://$serveraddr:$serverport/webapi/$apiauthpath?api=$apiauth&version=$apiauthver&method=Logout&session=SurveillanceStation&_sid=$sid";
|
$url = "$proto://$serveraddr:$serverport/webapi/$apiauthpath?api=$apiauth&version=$apiauthver&method=Logout&session=SurveillanceStation&_sid=$sid";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -557,8 +733,8 @@ sub logoutReturn {
|
|||||||
|
|
||||||
if ($success) { # die Logout-URL konnte erfolgreich aufgerufen werden
|
if ($success) { # die Logout-URL konnte erfolgreich aufgerufen werden
|
||||||
Log3($name, 2, "$name - Session of User \"$username\" terminated - session ID \"$sid\" deleted");
|
Log3($name, 2, "$name - Session of User \"$username\" terminated - session ID \"$sid\" deleted");
|
||||||
|
}
|
||||||
} else {
|
else {
|
||||||
my $errorcode = $data->{'error'}->{'code'}; # Errorcode aus JSON ermitteln
|
my $errorcode = $data->{'error'}->{'code'}; # Errorcode aus JSON ermitteln
|
||||||
my $error = expErrorsAuth($hash,$errorcode); # Fehlertext zum Errorcode ermitteln
|
my $error = expErrorsAuth($hash,$errorcode); # Fehlertext zum Errorcode ermitteln
|
||||||
|
|
||||||
@ -579,7 +755,7 @@ return;
|
|||||||
# Token setzen
|
# Token setzen
|
||||||
#############################################################################################
|
#############################################################################################
|
||||||
sub setActiveToken {
|
sub setActiveToken {
|
||||||
my $hash = shift // carp "got no hash value" && return;
|
my $hash = shift // carp $carpnohash && return;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
$hash->{HELPER}{ACTIVE} = "on";
|
$hash->{HELPER}{ACTIVE} = "on";
|
||||||
@ -595,7 +771,7 @@ return;
|
|||||||
# Token freigeben
|
# Token freigeben
|
||||||
#############################################################################################
|
#############################################################################################
|
||||||
sub delActiveToken {
|
sub delActiveToken {
|
||||||
my $hash = shift // carp "got no hash value" && return;
|
my $hash = shift // carp $carpnohash && return;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
$hash->{HELPER}{ACTIVE} = "off";
|
$hash->{HELPER}{ACTIVE} = "off";
|
||||||
@ -628,7 +804,7 @@ return;
|
|||||||
# $evt: 1 -> Event, 0/nicht gesetzt -> kein Event
|
# $evt: 1 -> Event, 0/nicht gesetzt -> kein Event
|
||||||
#############################################################################################
|
#############################################################################################
|
||||||
sub setReadingErrorNone {
|
sub setReadingErrorNone {
|
||||||
my $hash = shift // carp "got no hash value" && return;
|
my $hash = shift // carp $carpnohash && return;
|
||||||
my $evt = shift;
|
my $evt = shift;
|
||||||
|
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
@ -645,7 +821,7 @@ return;
|
|||||||
# $errcode = Fehlercode
|
# $errcode = Fehlercode
|
||||||
####################################################################################
|
####################################################################################
|
||||||
sub setReadingErrorState {
|
sub setReadingErrorState {
|
||||||
my $hash = shift // carp "got no hash value" && return;
|
my $hash = shift // carp $carpnohash && return;
|
||||||
my $error = shift;
|
my $error = shift;
|
||||||
my $errcode = shift // "none";
|
my $errcode = shift // "none";
|
||||||
|
|
||||||
@ -658,13 +834,35 @@ sub setReadingErrorState {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#############################################################################################
|
||||||
|
# fügt den Eintrag $entry zur Sendequeue hinzu
|
||||||
|
#############################################################################################
|
||||||
|
sub addSendqueueEntry {
|
||||||
|
my $hash = shift // carp $carpnohash && return;
|
||||||
|
my $entry = shift // carp "got no entry for adding to send queue" && return;
|
||||||
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
|
my $type = $hash->{TYPE};
|
||||||
|
|
||||||
|
$data{$type}{$name}{sendqueue}{index}++;
|
||||||
|
my $index = $data{$type}{$name}{sendqueue}{index};
|
||||||
|
|
||||||
|
Log3($name, 5, "$name - Add Item to queue - Index $index: \n".Dumper $entry);
|
||||||
|
|
||||||
|
$data{$type}{$name}{sendqueue}{entries}{$index} = $entry;
|
||||||
|
|
||||||
|
updQueueLength ($hash); # update Länge der Sendequeue
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
#############################################################################################
|
#############################################################################################
|
||||||
# liefert aktuelle Einträge der Sendequeue zurück
|
# liefert aktuelle Einträge der Sendequeue zurück
|
||||||
#############################################################################################
|
#############################################################################################
|
||||||
sub listSendqueue {
|
sub listSendqueue {
|
||||||
my $paref = shift;
|
my $paref = shift;
|
||||||
my $hash = $paref->{hash} // carp "got no hash value" && return;
|
my $hash = $paref->{hash} // carp $carpnohash && return;
|
||||||
my $name = $paref->{name} // carp "got no name value" && return;
|
my $name = $paref->{name} // carp $carpnoname && return;
|
||||||
|
|
||||||
my $type = $hash->{TYPE};
|
my $type = $hash->{TYPE};
|
||||||
|
|
||||||
@ -695,8 +893,8 @@ return $sq;
|
|||||||
#############################################################################################
|
#############################################################################################
|
||||||
sub purgeSendqueue {
|
sub purgeSendqueue {
|
||||||
my $paref = shift;
|
my $paref = shift;
|
||||||
my $hash = $paref->{hash} // carp "got no hash value" && return;
|
my $hash = $paref->{hash} // carp $carpnohash && return;
|
||||||
my $name = $paref->{name} // carp "got no name value" && return;
|
my $name = $paref->{name} // carp $carpnoname && return;
|
||||||
my $prop = $paref->{prop} // carp "got no purgeSendqueue argument" && return;
|
my $prop = $paref->{prop} // carp "got no purgeSendqueue argument" && return;
|
||||||
|
|
||||||
my $type = $hash->{TYPE};
|
my $type = $hash->{TYPE};
|
||||||
@ -726,7 +924,7 @@ return;
|
|||||||
# Länge Senedequeue updaten
|
# Länge Senedequeue updaten
|
||||||
#############################################################################################
|
#############################################################################################
|
||||||
sub updQueueLength {
|
sub updQueueLength {
|
||||||
my $hash = shift // carp "got no hash value" && return;
|
my $hash = shift // carp $carpnohash && return;
|
||||||
my $rst = shift;
|
my $rst = shift;
|
||||||
|
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user