76_SMAPortal: contrib 1.4.0

git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@18987 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2019-03-21 21:39:30 +00:00
parent d258712d7b
commit 9c9c1c1cca

View File

@ -49,24 +49,25 @@ use FHEM::Meta;
sub SMAPortal_Initialize($) { sub SMAPortal_Initialize($) {
my ($hash) = @_; my ($hash) = @_;
$hash->{DefFn} = "FHEM::SMAPortal::Define"; $hash->{DefFn} = "FHEM::SMAPortal::Define";
$hash->{UndefFn} = "FHEM::SMAPortal::Undefine"; $hash->{UndefFn} = "FHEM::SMAPortal::Undefine";
$hash->{DeleteFn} = "FHEM::SMAPortal::Delete"; $hash->{DeleteFn} = "FHEM::SMAPortal::Delete";
$hash->{AttrFn} = "FHEM::SMAPortal::Attr"; $hash->{AttrFn} = "FHEM::SMAPortal::Attr";
$hash->{SetFn} = "FHEM::SMAPortal::Set"; $hash->{SetFn} = "FHEM::SMAPortal::Set";
$hash->{GetFn} = "FHEM::SMAPortal::Get"; $hash->{GetFn} = "FHEM::SMAPortal::Get";
$hash->{AttrList} = "cookieLocation ". $hash->{DbLog_splitFn} = "FHEM::SMAPortal::DbLog_split";
"cookielifetime ". $hash->{AttrList} = "cookieLocation ".
"detailLevel:1,2,3,4 ". "cookielifetime ".
"disable:0,1 ". "detailLevel:1,2,3,4 ".
"getDataRetries:1,2,3,4,5,6,7,8,9,10 ". "disable:0,1 ".
"interval ". "getDataRetries:1,2,3,4,5,6,7,8,9,10 ".
"showPassInLog:1,0 ". "interval ".
"timeout ". "showPassInLog:1,0 ".
"userAgent ". "timeout ".
$readingFnAttributes; "userAgent ".
$readingFnAttributes;
FHEM::Meta::InitMod( __FILE__, $hash ); # für Meta.pm (https://forum.fhem.de/index.php/topic,97589.0.html) # FHEM::Meta::InitMod( __FILE__, $hash ); # für Meta.pm (https://forum.fhem.de/index.php/topic,97589.0.html)
return; return;
} }
@ -138,6 +139,7 @@ BEGIN {
# Versions History intern # Versions History intern
our %vNotesIntern = ( our %vNotesIntern = (
"1.4.0" => "18.03.2019 add function extractPlantData, DbLog_split ",
"1.3.0" => "18.03.2019 change module to use package FHEM::SMAPortal and use Meta.pm, new sub setVersionInfo", "1.3.0" => "18.03.2019 change module to use package FHEM::SMAPortal and use Meta.pm, new sub setVersionInfo",
"1.2.3" => "12.03.2019 make ready for 98_Installer.pm ", "1.2.3" => "12.03.2019 make ready for 98_Installer.pm ",
"1.2.2" => "11.03.2019 new Errormessage analyze added, make ready for Meta.pm ", "1.2.2" => "11.03.2019 new Errormessage analyze added, make ready for Meta.pm ",
@ -236,6 +238,30 @@ sub Set($@) {
return; return;
} }
###############################################################
# SMAPortal DbLog_splitFn
###############################################################
sub DbLog_split($$) {
my ($event, $device) = @_;
my $devhash = $defs{$device};
my ($reading, $value, $unit);
if($event =~ m/L2_PlantPeakPower/) {
$event =~ /^L2_PlantPeakPower:\s(.*)\s(.*)/;
$reading = "L2_PlantPeakPower";
$value = $1;
$unit = $2;
}
if($event =~ m/L1_.*_Temperature/) {
$event =~ /^L1_(.*)_Temperature:\s(.*)\s(.*)/;
$reading = "L1_$1_Temperature";
$value = $2;
$unit = $3;
}
return ($reading, $value, $unit);
}
###################################################################################### ######################################################################################
# Username / Paßwort speichern # Username / Paßwort speichern
###################################################################################### ######################################################################################
@ -508,7 +534,7 @@ sub GetData($) {
if ($forecast_page->content =~ m/ForecastChartDataPoint/i) { if ($forecast_page->content =~ m/ForecastChartDataPoint/i) {
$forecast_content = $forecast_page->content; $forecast_content = $forecast_page->content;
Log3 $name, 5, "$name - Forecast Data received:\n".$forecast_content; Log3 $name, 5, "$name - Forecast Data received:\n".Dumper decode_json($forecast_content);
} }
} }
@ -650,6 +676,7 @@ sub ParseData($) {
if ($forecast_content && $forecast_content !~ m/undefined/i) { if ($forecast_content && $forecast_content !~ m/undefined/i) {
# Auswertung der Forecast Daten # Auswertung der Forecast Daten
extractForecastData($hash,$forecast_content); extractForecastData($hash,$forecast_content);
extractPlantData($hash,$forecast_content);
} }
if ($weatherdata_content && $weatherdata_content !~ m/undefined/i) { if ($weatherdata_content && $weatherdata_content !~ m/undefined/i) {
@ -664,7 +691,7 @@ sub ParseData($) {
if(!$hash->{HELPER}{RETRIES} && !$pv && !$fi && !$gc) { if(!$hash->{HELPER}{RETRIES} && !$pv && !$fi && !$gc) {
# keine Anlagendaten vorhanden # keine Anlagendaten vorhanden
$state = "Data can't be retrieved from SMA-Portal. It will be reread at next scheduled cycle."; $state = "Data can't be retrieved from SMA-Portal. Reread at next scheduled cycle.";
Log3 $name, 2, "$name - $state"; Log3 $name, 2, "$name - $state";
} }
@ -865,6 +892,7 @@ return;
sub extractWeatherData($$) { sub extractWeatherData($$) {
my ($hash,$weather) = @_; my ($hash,$weather) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my ($tsymbol,$ttoday,$ttomorrow);
my $dl = AttrVal($name, "detailLevel", 1); my $dl = AttrVal($name, "detailLevel", 1);
@ -889,8 +917,21 @@ sub extractWeatherData($$) {
$new_val = $hd0; $new_val = $hd0;
if ($new_val) { if ($new_val) {
$new_val =~ s/.*}([A-Z]).*/°$1/ if($i =~ /^TemperatureSymbol$/); if($i =~ /^TemperatureSymbol$/) {
$new_val = sprintf("%.1f",$new_val) if($i =~ /^Temperature$/); $new_val =~ s/.*}([A-Z]).*/°$1/;
$tsymbol = $new_val;
next;
}
if($i =~ /^Temperature$/) {
if($k =~ /^today$/) {
$ttoday = sprintf("%.1f",$new_val);
}
if($k =~ /^tomorrow$/) {
$ttomorrow = sprintf("%.1f",$new_val);
}
next;
}
Log3 $name, 4, "$name -> ${k}_${i} - $new_val"; Log3 $name, 4, "$name -> ${k}_${i} - $new_val";
readingsBulkUpdate($hash, "L1_${k}_${i}", $new_val); readingsBulkUpdate($hash, "L1_${k}_${i}", $new_val);
} }
@ -899,11 +940,44 @@ sub extractWeatherData($$) {
} }
} }
readingsBulkUpdate($hash, "L1_today_Temperature", "$ttoday $tsymbol") if($ttoday && $tsymbol);
readingsBulkUpdate($hash, "L1_tomorrow_Temperature", "$ttomorrow $tsymbol") if($ttomorrow && $tsymbol);
readingsEndUpdate($hash, 1); readingsEndUpdate($hash, 1);
return; return;
} }
################################################################
## Auswertung Anlagendaten
################################################################
sub extractPlantData($$) {
my ($hash,$forecast) = @_;
my $name = $hash->{NAME};
my ($amount,$unit);
my $dl = AttrVal($name, "detailLevel", 1);
if($dl <= 1) {
return;
}
readingsBeginUpdate($hash);
my $ppp = $forecast->{'PlantPeakPower'};
if($ppp && $dl >= 2) {
$amount = $forecast->{'PlantPeakPower'}{'Amount'};
$unit = $forecast->{'PlantPeakPower'}{'StandardUnit'}{'Symbol'};
Log3 $name, 4, "$name - Plantdata HASH content \"PlantPeakPower Amount\": $amount";
Log3 $name, 4, "$name - Plantdata HASH content \"PlantPeakPower Symbol\": $unit";
}
readingsBulkUpdate($hash, "L2_PlantPeakPower", "$amount $unit");
readingsEndUpdate($hash, 1);
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