mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-22 08:11:44 +00:00
76_SMAPortal: contrib 3.7.0
git-svn-id: https://svn.fhem.de/fhem/trunk@23204 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
5a4a666f0b
commit
78119a8208
@ -137,7 +137,7 @@ BEGIN {
|
|||||||
|
|
||||||
# Versions History intern
|
# Versions History intern
|
||||||
my %vNotesIntern = (
|
my %vNotesIntern = (
|
||||||
"3.7.0" => "19.11.2020 add new consumer management for switched sockets and EVCharger ",
|
"3.7.0" => "21.11.2020 add new consumer management for switched sockets and SMA EV Charger ",
|
||||||
"3.6.5" => "12.11.2020 verbose5data switchConsumer, more preselected user agents ",
|
"3.6.5" => "12.11.2020 verbose5data switchConsumer, more preselected user agents ",
|
||||||
"3.6.4" => "11.11.2020 preselect the user agent randomly, set min. interval to 180 s ",
|
"3.6.4" => "11.11.2020 preselect the user agent randomly, set min. interval to 180 s ",
|
||||||
"3.6.3" => "05.11.2020 fix only four consumer are shown in set command drop down list ",
|
"3.6.3" => "05.11.2020 fix only four consumer are shown in set command drop down list ",
|
||||||
@ -1205,7 +1205,7 @@ return 0;
|
|||||||
}
|
}
|
||||||
|
|
||||||
################################################################
|
################################################################
|
||||||
# Consumer schalten
|
# Consumer schalten
|
||||||
################################################################
|
################################################################
|
||||||
sub _switchConsumer {
|
sub _switchConsumer {
|
||||||
my $paref = shift;
|
my $paref = shift;
|
||||||
@ -1452,16 +1452,36 @@ sub _getConsumerCurrData { ## no critic "not used"
|
|||||||
|
|
||||||
my ($reread,$retry,$errstate) = (0,0,0);
|
my ($reread,$retry,$errstate) = (0,0,0);
|
||||||
|
|
||||||
($errstate,$state) = __dispatchGet ({ name => $name,
|
# einfache Verbraucher (z.B Schaltsteckdosen) abfragen
|
||||||
ua => $ua,
|
($errstate,$state) = __dispatchGet ({ name => $name,
|
||||||
call => 'https://www.sunnyportal.com/Homan/ConsumerBalance/GetLiveProxyValues',
|
ua => $ua,
|
||||||
tag => "consumerCurrentdata",
|
call => 'https://www.sunnyportal.com/Homan/ConsumerBalance/GetLiveProxyValues',
|
||||||
state => $state,
|
tag => "consumerCurrentdata",
|
||||||
fnaref => [ qw( extractConsumerCurrentdata ) ],
|
state => $state,
|
||||||
addon => "",
|
fnaref => [ qw( extractConsumerCurrentdata ) ],
|
||||||
daref => $daref
|
addon => "",
|
||||||
|
daref => $daref
|
||||||
});
|
});
|
||||||
|
|
||||||
|
return ($errstate,$state,$reread,$retry) if($errstate);
|
||||||
|
|
||||||
|
# Verbraucher mit Energymanagement (z.B. SMA EV Charger SUSyID=315 abfragen)
|
||||||
|
my $hash = $defs{$name};
|
||||||
|
|
||||||
|
for my $key (keys %{$hash->{HELPER}{CONSUMER}}) {
|
||||||
|
my $susyid = $hash->{HELPER}{CONSUMER}{$key}{SUSyID};
|
||||||
|
next if($susyid != 315); # nur Auswertung SMA EV Charger
|
||||||
|
|
||||||
|
my $oid = $hash->{HELPER}{CONSUMER}{$key}{ConsumerOid};
|
||||||
|
my $d = $hash->{HELPER}{CONSUMER}{$key}{DeviceName};
|
||||||
|
|
||||||
|
$paref->{state} = $state;
|
||||||
|
$paref->{oid} = $oid;
|
||||||
|
$paref->{addon} = "$d:noJSONdata"; # das gemanagte Device in addon mitgeben, noJSONdata -> kein no JSON Fehler auswerten !!
|
||||||
|
|
||||||
|
($errstate,$state) = _getConsumerEnergySetting ($paref);
|
||||||
|
}
|
||||||
|
|
||||||
return ($errstate,$state,$reread,$retry);
|
return ($errstate,$state,$reread,$retry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1474,6 +1494,7 @@ sub _getConsumerDayData { ## no critic "not used"
|
|||||||
my $ua = $paref->{ua}; # LWP Useragent
|
my $ua = $paref->{ua}; # LWP Useragent
|
||||||
my $state = $paref->{state};
|
my $state = $paref->{state};
|
||||||
my $daref = $paref->{daref}; # Referenz zum Datenarray
|
my $daref = $paref->{daref}; # Referenz zum Datenarray
|
||||||
|
|
||||||
my $hash = $defs{$name};
|
my $hash = $defs{$name};
|
||||||
|
|
||||||
my ($reread,$retry,$errstate) = (0,0,0);
|
my ($reread,$retry,$errstate) = (0,0,0);
|
||||||
@ -2044,29 +2065,21 @@ return ($errstate,$state,$reread,$retry);
|
|||||||
sub __dispatchGet {
|
sub __dispatchGet {
|
||||||
my $paref = shift;
|
my $paref = shift;
|
||||||
my $name = $paref->{name};
|
my $name = $paref->{name};
|
||||||
my $ua = $paref->{ua}; # LWP Useragent
|
|
||||||
my $call = $paref->{call}; # Seitenaufruf zur Datenquelle
|
|
||||||
my $tag = $paref->{tag}; # Kennzeichen der abzurufenen Daten
|
|
||||||
my $state = $paref->{state};
|
my $state = $paref->{state};
|
||||||
my $fnref = $paref->{fnaref}; # Referenz zu Array der aufzurufenden Funktion(en) zur Datenextraktion
|
my $fnref = $paref->{fnaref}; # Referenz zu Array der aufzurufenden Funktion(en) zur Datenextraktion
|
||||||
my $addon = $paref->{addon}; # optionales Addon für aufzurufende Funktion oder spezielle Steuerungen
|
my $addon = $paref->{addon}; # optionales Addon für aufzurufende Funktion oder spezielle Steuerungen
|
||||||
my $daref = $paref->{daref}; # Referenz zum Datenarray
|
my $daref = $paref->{daref}; # Referenz zum Datenarray
|
||||||
|
|
||||||
my $hash = $defs{$name};
|
my $hash = $defs{$name};
|
||||||
|
|
||||||
my ($reread,$retry,$errstate) = (0,0,0);
|
my ($reread,$retry,$errstate) = (0,0,0);
|
||||||
|
|
||||||
my ($data,$data_cont) = ___getData ({ name => $name,
|
my ($data,$data_cont) = ___getData ($paref);
|
||||||
ua => $ua,
|
|
||||||
call => $call,
|
|
||||||
tag => $tag
|
|
||||||
});
|
|
||||||
|
|
||||||
($reread,$retry,$errstate,$state) = ___analyzeData ({ name => $name,
|
$paref->{data} = $data;
|
||||||
errstate => $errstate,
|
$paref->{errstate} = $errstate;
|
||||||
state => $state,
|
|
||||||
data => $data,
|
($reread,$retry,$errstate,$state) = ___analyzeData ($paref);
|
||||||
addon => $addon
|
|
||||||
});
|
|
||||||
|
|
||||||
return ($errstate,$state,$reread,$retry) if($errstate || $reread || $retry);
|
return ($errstate,$state,$reread,$retry) if($errstate || $reread || $retry);
|
||||||
|
|
||||||
@ -2089,33 +2102,22 @@ sub __dispatchPost {
|
|||||||
my $paref = shift;
|
my $paref = shift;
|
||||||
my $name = $paref->{name};
|
my $name = $paref->{name};
|
||||||
my $ua = $paref->{ua}; # LWP Useragent
|
my $ua = $paref->{ua}; # LWP Useragent
|
||||||
my $call = $paref->{call}; # Seitenaufruf zur Datenquelle
|
|
||||||
my $tag = $paref->{tag}; # Kennzeichen der abzurufenen Daten
|
my $tag = $paref->{tag}; # Kennzeichen der abzurufenen Daten
|
||||||
my $state = $paref->{state};
|
my $state = $paref->{state};
|
||||||
my $fnref = $paref->{fnaref}; # Referenz zu Array der aufzurufenden Funktion(en) zur Datenextraktion
|
my $fnref = $paref->{fnaref}; # Referenz zu Array der aufzurufenden Funktion(en) zur Datenextraktion
|
||||||
my $fields = $paref->{fields}; # Referenz zum Hash der zu übertragenden PUSH Header
|
|
||||||
my $cont = $paref->{content}; # Content Daten für PUSH (String)
|
|
||||||
my $addon = $paref->{addon}; # optionales Addon für aufzurufende Funktion
|
my $addon = $paref->{addon}; # optionales Addon für aufzurufende Funktion
|
||||||
my $daref = $paref->{daref}; # Referenz zum Datenarray
|
my $daref = $paref->{daref}; # Referenz zum Datenarray
|
||||||
|
|
||||||
my $hash = $defs{$name};
|
my $hash = $defs{$name};
|
||||||
|
|
||||||
my ($reread,$retry,$errstate) = (0,0,0);
|
my ($reread,$retry,$errstate) = (0,0,0);
|
||||||
|
|
||||||
my ($data,$data_cont) = ___postData ({ name => $name,
|
my ($data,$data_cont) = ___postData ($paref);
|
||||||
ua => $ua,
|
|
||||||
call => $call,
|
|
||||||
tag => $tag,
|
|
||||||
fields => $fields,
|
|
||||||
content => $cont
|
|
||||||
});
|
|
||||||
|
|
||||||
($reread,$retry,$errstate,$state) = ___analyzeData ({ name => $name,
|
$paref->{data} = $data;
|
||||||
ua => $ua,
|
$paref->{errstate} = $errstate;
|
||||||
errstate => $errstate,
|
|
||||||
state => $state,
|
($reread,$retry,$errstate,$state) = ___analyzeData ($paref);
|
||||||
data => $data,
|
|
||||||
addon => $addon
|
|
||||||
});
|
|
||||||
|
|
||||||
return ($errstate,$state) if($errstate);
|
return ($errstate,$state) if($errstate);
|
||||||
|
|
||||||
@ -2146,11 +2148,11 @@ return ($errstate,$state,$reread,$retry);
|
|||||||
# Standard Abruf Daten GET
|
# Standard Abruf Daten GET
|
||||||
################################################################
|
################################################################
|
||||||
sub ___getData {
|
sub ___getData {
|
||||||
my $paref = shift;
|
my $paref = shift;
|
||||||
my $name = $paref->{name};
|
my $name = $paref->{name};
|
||||||
my $ua = $paref->{ua};
|
my $ua = $paref->{ua}; # LWP Useragent
|
||||||
my $call = $paref->{call};
|
my $call = $paref->{call}; # Seitenaufruf zur Datenquelle
|
||||||
my $tag = $paref->{tag};
|
my $tag = $paref->{tag}; # Kennzeichen der abzurufenen Daten
|
||||||
|
|
||||||
my $v5d = AttrVal($name, "verbose5Data", "none");
|
my $v5d = AttrVal($name, "verbose5Data", "none");
|
||||||
my $verbose = AttrVal($name, "verbose", 3);
|
my $verbose = AttrVal($name, "verbose", 3);
|
||||||
@ -2166,8 +2168,7 @@ sub ___getData {
|
|||||||
|
|
||||||
my $data = $ua->get( $call );
|
my $data = $ua->get( $call );
|
||||||
my $dcont = $data->content;
|
my $dcont = $data->content;
|
||||||
|
$cont = eval{decode_json($dcont)} or do { $cont = $dcont }; # Test JSON dekodieren und anzeigen
|
||||||
$cont = eval{decode_json($dcont)} or do { $cont = $dcont };
|
|
||||||
|
|
||||||
if($v5d =~ /$tag/x) {
|
if($v5d =~ /$tag/x) {
|
||||||
Log3 ($name, 5, "$name - Return Code: ".$data->code);
|
Log3 ($name, 5, "$name - Return Code: ".$data->code);
|
||||||
@ -2188,8 +2189,8 @@ sub ___postData {
|
|||||||
my $name = $paref->{name};
|
my $name = $paref->{name};
|
||||||
my $ua = $paref->{ua};
|
my $ua = $paref->{ua};
|
||||||
my $call = $paref->{call};
|
my $call = $paref->{call};
|
||||||
my $fields = $paref->{fields};
|
my $fields = $paref->{fields}; # Referenz zum Hash der zu übertragenden PUSH Header
|
||||||
my $content = $paref->{content};
|
my $content = $paref->{content}; # Content Daten für PUSH (String)
|
||||||
my $tag = $paref->{tag};
|
my $tag = $paref->{tag};
|
||||||
|
|
||||||
my $v5d = AttrVal($name, "verbose5Data", "none");
|
my $v5d = AttrVal($name, "verbose5Data", "none");
|
||||||
@ -2206,8 +2207,7 @@ sub ___postData {
|
|||||||
|
|
||||||
my $data = $ua->post( $call, %$fields, Content => $content );
|
my $data = $ua->post( $call, %$fields, Content => $content );
|
||||||
my $dcont = $data->decoded_content;
|
my $dcont = $data->decoded_content;
|
||||||
|
$cont = eval{decode_json($dcont)} or do { $cont = $dcont }; # Test JSON dekodieren und anzeigen
|
||||||
$cont = eval{decode_json($dcont)} or do { $cont = $dcont };
|
|
||||||
|
|
||||||
if($v5d =~ /$tag/x) {
|
if($v5d =~ /$tag/x) {
|
||||||
Log3 ($name, 5, "$name - Return Code: ".$data->code);
|
Log3 ($name, 5, "$name - Return Code: ".$data->code);
|
||||||
@ -2329,7 +2329,7 @@ sub ___analyzeData { ## no critic 'complexity'
|
|||||||
|
|
||||||
$njdat = encode("utf8", $ad->decoded_content);
|
$njdat = encode("utf8", $ad->decoded_content);
|
||||||
Log3 ($name, 5, "$name - No JSON Data received:\n ".$njdat);
|
Log3 ($name, 5, "$name - No JSON Data received:\n ".$njdat);
|
||||||
Log3 ($name, 1, "$name - ADDON: ".$addon);
|
|
||||||
if($rescode != 302 && $addon !~ /noJSONdata/x) { # 302 -> HTTP-Antwort liefert zusätzlich eine URL im Header-Feld Location. Es soll eine zweite, ansonsten identische Anfrage an die in Location angegebene neue URL gestellt werden.
|
if($rescode != 302 && $addon !~ /noJSONdata/x) { # 302 -> HTTP-Antwort liefert zusätzlich eine URL im Header-Feld Location. Es soll eine zweite, ansonsten identische Anfrage an die in Location angegebene neue URL gestellt werden.
|
||||||
$errstate = 1;
|
$errstate = 1;
|
||||||
$state = "ERROR - see logfile for further information";
|
$state = "ERROR - see logfile for further information";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user