2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 03:06:37 +00:00

76_SMAPortal(SPG): change to package config, improve cookie management, decouple switch consumers from livedata retrieval, some improvements according to PBP

git-svn-id: https://svn.fhem.de/fhem/trunk@21735 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2020-04-20 20:53:24 +00:00
parent 447e70fbfc
commit 81f653e2f2
3 changed files with 655 additions and 563 deletions

View File

@ -1,5 +1,9 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # 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. # Do not insert empty lines here, update check depends on it.
- change: 76_SMAPortal(SPG): change to package config, improve cookie
management, decouple switch consumers from
livedata retrieval, some improvements according
to PBP
- feature: 37_echodevice.pm - feature: 37_echodevice.pm
CHANGE: Keepalive aktiviert (cookielogin6) CHANGE: Keepalive aktiviert (cookielogin6)
- change: 74_GardenaDevice: change timer slider to minutes, - change: 74_GardenaDevice: change timer slider to minutes,

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@
######################################################################################################################### #########################################################################################################################
# 76_SMAPortalSPG.pm # 76_SMAPortalSPG.pm
# #
# (c) 2019 by Heiko Maaz e-mail: Heiko dot Maaz at t-online dot de # (c) 2019-2020 by Heiko Maaz e-mail: Heiko dot Maaz at t-online dot de
# #
# This Module is used by module 76_SMAPortal to create graphic devices. # This Module is used by module 76_SMAPortal to create graphic devices.
# It can't be used standalone without any SMAPortal-Device. # It can't be used standalone without any SMAPortal-Device.
@ -24,16 +24,81 @@
# along with fhem. If not, see <http://www.gnu.org/licenses/>. # along with fhem. If not, see <http://www.gnu.org/licenses/>.
# #
######################################################################################################################### #########################################################################################################################
package FHEM::SMAPortalSPG; ## no critic 'package'
package main;
use strict; use strict;
use warnings; use warnings;
use GPUtils qw(GP_Import GP_Export); # wird für den Import der FHEM Funktionen aus der fhem.pl benötigt
use Time::HiRes qw(gettimeofday); use Time::HiRes qw(gettimeofday);
eval "use FHEM::Meta;1" or my $modMetaAbsent = 1; eval "use FHEM::Meta;1" or my $modMetaAbsent = 1; ## no critic 'eval'
# Run before module compilation
BEGIN {
# Import from main::
GP_Import(
qw(
AnalyzePerlCommand
AttrVal
AttrNum
defs
delFromDevAttrList
delFromAttrList
devspec2array
deviceEvents
Debug
FmtDateTime
FmtTime
FW_makeImage
fhemTimeGm
getKeyValue
gettimeofday
genUUID
init_done
InternalTimer
IsDisabled
Log
Log3
makeReadingName
modules
readingsSingleUpdate
readingsBulkUpdate
readingsBulkUpdateIfChanged
readingsBeginUpdate
readingsDelete
readingsEndUpdate
ReadingsNum
ReadingsTimestamp
ReadingsVal
RemoveInternalTimer
readingFnAttributes
setKeyValue
sortTopicNum
TimeNow
Value
json2nameValue
FW_directNotify
)
);
# Export to main context with different name
# my $pkg = caller(0);
# my $main = $pkg;
# $main =~ s/^(?:.+::)?([^:]+)$/main::$1\_/g;
# foreach (@_) {
# *{ $main . $_ } = *{ $pkg . '::' . $_ };
# }
GP_Export(
qw(
Initialize
pageAsHtml
)
);
}
# Versions History intern # Versions History intern
our %SMAPortalSPG_vNotesIntern = ( my %vNotesIntern = (
"1.6.0" => "19.04.2020 switch to pachages, some improvements according to PBP ",
"1.5.0" => "07.07.2019 new attributes headerAlignment, headerDetail ", "1.5.0" => "07.07.2019 new attributes headerAlignment, headerDetail ",
"1.4.0" => "26.06.2019 support for FTUI-Widget ", "1.4.0" => "26.06.2019 support for FTUI-Widget ",
"1.3.0" => "24.06.2019 replace suggestIcon by consumerAdviceIcon ", "1.3.0" => "24.06.2019 replace suggestIcon by consumerAdviceIcon ",
@ -43,13 +108,18 @@ our %SMAPortalSPG_vNotesIntern = (
); );
################################################################ ################################################################
sub SMAPortalSPG_Initialize($) { sub Initialize {
my ($hash) = @_; my ($hash) = @_;
my $fwd = join(",",devspec2array("TYPE=FHEMWEB:FILTER=STATE=Initialized")); my $fwd = join(",",devspec2array("TYPE=FHEMWEB:FILTER=STATE=Initialized"));
$hash->{DefFn} = "SMAPortalSPG_Define"; $hash->{DefFn} = \&Define;
$hash->{GetFn} = "SMAPortalSPG_Get"; $hash->{GetFn} = \&Get;
$hash->{RenameFn} = \&Rename;
$hash->{CopyFn} = \&Copy;
$hash->{FW_summaryFn} = \&FwFn;
$hash->{FW_detailFn} = \&FwFn;
$hash->{AttrFn} = \&Attr;
$hash->{AttrList} = "autoRefresh:selectnumbers,120,0.2,1800,0,log10 ". $hash->{AttrList} = "autoRefresh:selectnumbers,120,0.2,1800,0,log10 ".
"autoRefreshFW:$fwd ". "autoRefreshFW:$fwd ".
"beamColor:colorpicker,RGB ". "beamColor:colorpicker,RGB ".
@ -78,11 +148,7 @@ sub SMAPortalSPG_Initialize($) {
"Wh/kWh:Wh,kWh ". "Wh/kWh:Wh,kWh ".
"weatherColor:colorpicker,RGB ". "weatherColor:colorpicker,RGB ".
$readingFnAttributes; $readingFnAttributes;
$hash->{RenameFn} = "SMAPortalSPG_Rename";
$hash->{CopyFn} = "SMAPortalSPG_Copy";
$hash->{FW_summaryFn} = "SMAPortalSPG_FwFn";
$hash->{FW_detailFn} = "SMAPortalSPG_FwFn";
$hash->{AttrFn} = "SMAPortalSPG_Attr";
$hash->{FW_hideDisplayName} = 1; # Forum 88667 $hash->{FW_hideDisplayName} = 1; # Forum 88667
# $hash->{FW_addDetailToSummary} = 1; # $hash->{FW_addDetailToSummary} = 1;
@ -96,7 +162,7 @@ return;
############################################################### ###############################################################
# SMAPortalSPG Define # SMAPortalSPG Define
############################################################### ###############################################################
sub SMAPortalSPG_Define($$) { sub Define {
my ($hash, $def) = @_; my ($hash, $def) = @_;
my ($name, $type, $link) = split("[ \t]+", $def, 3); my ($name, $type, $link) = split("[ \t]+", $def, 3);
@ -111,36 +177,39 @@ sub SMAPortalSPG_Define($$) {
$hash->{LINK} = $link; $hash->{LINK} = $link;
# Versionsinformationen setzen # Versionsinformationen setzen
SMAPortalSPG_setVersionInfo($hash); setVersionInfo($hash);
readingsSingleUpdate($hash,"state", "initialized", 1); # Init für "state" readingsSingleUpdate($hash,"state", "initialized", 1); # Init für "state"
return undef; return;
} }
############################################################### ###############################################################
# SMAPortalSPG Get # SMAPortalSPG Get
############################################################### ###############################################################
sub SMAPortalSPG_Get($@) { sub Get {
my ($hash, @a) = @_; my ($hash, @a) = @_;
return "\"get X\" needs at least an argument" if ( @a < 2 ); return "\"get X\" needs at least an argument" if ( @a < 2 );
my $name = shift @a; my $name = shift @a;
my $cmd = shift @a; my $cmd = shift @a;
my $getlist = "Unknown argument $cmd, choose one of ".
"html:noArg ".
"ftui:noArg ";
if ($cmd eq "html") { if ($cmd eq "html") {
return SMAPortalSPG_AsHtml($hash); return pageAsHtml($hash);
} }
if ($cmd eq "ftui") { if ($cmd eq "ftui") {
return SMAPortalSPG_AsHtml($hash,"ftui"); return pageAsHtml($hash,"ftui");
} }
return undef; return;
return "Unknown argument $cmd, choose one of html:noArg";
} }
################################################################ ################################################################
sub SMAPortalSPG_Rename($$) { sub Rename {
my ($new_name,$old_name) = @_; my ($new_name,$old_name) = @_;
my $hash = $defs{$new_name}; my $hash = $defs{$new_name};
@ -151,7 +220,7 @@ return;
} }
################################################################ ################################################################
sub SMAPortalSPG_Copy($$) { sub Copy {
my ($old_name,$new_name) = @_; my ($old_name,$new_name) = @_;
my $hash = $defs{$new_name}; my $hash = $defs{$new_name};
@ -162,7 +231,7 @@ return;
} }
################################################################ ################################################################
sub SMAPortalSPG_Attr($$$$) { sub Attr {
my ($cmd,$name,$aName,$aVal) = @_; my ($cmd,$name,$aName,$aVal) = @_;
my $hash = $defs{$name}; my $hash = $defs{$name};
my ($do,$val); my ($do,$val);
@ -191,11 +260,11 @@ sub SMAPortalSPG_Attr($$$$) {
$_[2] = "consumerAdviceIcon"; $_[2] = "consumerAdviceIcon";
} }
return undef; return;
} }
################################################################ ################################################################
sub SMAPortalSPG_FwFn($;$$$) { sub FwFn {
my ($FW_wname, $d, $room, $pageHash) = @_; # pageHash is set for summaryFn. my ($FW_wname, $d, $room, $pageHash) = @_; # pageHash is set for summaryFn.
my $hash = $defs{$d}; my $hash = $defs{$d};
my $link = $hash->{LINK}; my $link = $hash->{LINK};
@ -227,7 +296,7 @@ sub SMAPortalSPG_FwFn($;$$$) {
# Autorefresh nur des aufrufenden FHEMWEB-Devices # Autorefresh nur des aufrufenden FHEMWEB-Devices
my $al = AttrVal($d, "autoRefresh", 0); my $al = AttrVal($d, "autoRefresh", 0);
if($al) { if($al) {
InternalTimer(gettimeofday()+$al, "SMAPortalSPG_refresh", $hash, 0); InternalTimer(gettimeofday()+$al, \&pageRefresh, $hash, 0);
Log3($d, 5, "$d - next start of autoRefresh: ".FmtDateTime(gettimeofday()+$al)); Log3($d, 5, "$d - next start of autoRefresh: ".FmtDateTime(gettimeofday()+$al));
} }
@ -235,7 +304,7 @@ return $ret;
} }
################################################################ ################################################################
sub SMAPortalSPG_refresh($) { sub pageRefresh {
my ($hash) = @_; my ($hash) = @_;
my $d = $hash->{NAME}; my $d = $hash->{NAME};
@ -245,7 +314,7 @@ sub SMAPortalSPG_refresh($) {
my $al = AttrVal($d, "autoRefresh", 0); my $al = AttrVal($d, "autoRefresh", 0);
if($al) { if($al) {
InternalTimer(gettimeofday()+$al, "SMAPortalSPG_refresh", $hash, 0); InternalTimer(gettimeofday()+$al, \&pageRefresh, $hash, 0);
Log3($d, 5, "$d - next start of autoRefresh: ".FmtDateTime(gettimeofday()+$al)); Log3($d, 5, "$d - next start of autoRefresh: ".FmtDateTime(gettimeofday()+$al));
} else { } else {
RemoveInternalTimer($hash); RemoveInternalTimer($hash);
@ -258,11 +327,11 @@ return;
# Versionierungen des Moduls setzen # Versionierungen des Moduls setzen
# Die Verwendung von Meta.pm und Packages wird berücksichtigt # Die Verwendung von Meta.pm und Packages wird berücksichtigt
############################################################################################# #############################################################################################
sub SMAPortalSPG_setVersionInfo($) { sub setVersionInfo {
my ($hash) = @_; my ($hash) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $v = (sortTopicNum("desc",keys %SMAPortalSPG_vNotesIntern))[0]; my $v = (sortTopicNum("desc",keys %vNotesIntern))[0];
my $type = $hash->{TYPE}; my $type = $hash->{TYPE};
$hash->{HELPER}{PACKAGE} = __PACKAGE__; $hash->{HELPER}{PACKAGE} = __PACKAGE__;
$hash->{HELPER}{VERSION} = $v; $hash->{HELPER}{VERSION} = $v;
@ -292,14 +361,13 @@ return;
################################################################ ################################################################
# Grafik als HTML zurück liefern (z.B. für Widget) # Grafik als HTML zurück liefern (z.B. für Widget)
################################################################ ################################################################
sub SMAPortalSPG_AsHtml($;$) { sub pageAsHtml {
my ($hash,$ftui) = @_; my ($hash,$ftui) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $link = $hash->{LINK}; my $link = $hash->{LINK};
my $height; my $height;
if ($ftui && $ftui eq "ftui") { if ($ftui && $ftui eq "ftui") { # Aufruf aus TabletUI -> FW_cmd ersetzen gemäß FTUI Syntax
# Aufruf aus TabletUI -> FW_cmd ersetzen gemäß FTUI Syntax
my $s = substr($link,0,length($link)-2); my $s = substr($link,0,length($link)-2);
$link = $s.",'$ftui')}"; $link = $s.",'$ftui')}";
} }