From 9264a1c8d41cceab21e9cfbab8f2283b58b57fad Mon Sep 17 00:00:00 2001 From: fichtennadel Date: Wed, 7 May 2025 15:41:09 +0000 Subject: [PATCH] 98_fronius.pm: V0.5: keep (inverted) sign on PowerFlow_Site_P_Load (https://forum.fhem.de/index.php?topic=138356.msg1341014#msg1341014) git-svn-id: https://svn.fhem.de/fhem/trunk@29936 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/contrib/98_fronius.pm | 49 ++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/fhem/contrib/98_fronius.pm b/fhem/contrib/98_fronius.pm index edc40ddab..fbc086d62 100755 --- a/fhem/contrib/98_fronius.pm +++ b/fhem/contrib/98_fronius.pm @@ -2,6 +2,11 @@ # ############################################## # +# 2025.05.07 - fichtennadel v0.5 +# - CHANGE: +# - keep (inverted) sign on PowerFlow_Site_P_Load (https://forum.fhem.de/index.php?topic=138356.msg1341014#msg1341014) +# - lower limit interval to 4s (Fronius Solar API V1 Doku - "Up to 2 realtime requests are allowed to be performed in parallel with keeping a timeout of 4 seconds between two consecutive calls.") +# # 2025.03.24 - fichtennadel v0.4 # - CHANGE: # - change in Fronius API, make https configurable (https://forum.fhem.de/index.php?topic=138356.msg1337761#msg1337761) @@ -124,7 +129,7 @@ use Date::Parse; use Time::Piece; use lib ('./FHEM/lib', './lib'); -my $ModulVersion = "0.4"; +my $ModulVersion = "0.5"; ############################################################################## sub fronius_Initialize($) { @@ -233,9 +238,9 @@ sub fronius_StartUp($) { # Internaltimer Realtime Daten InternalTimer(gettimeofday() + 10, "fronius_GetPowerFlowRealtimeData", $hash, 0) if AttrVal( $name, "IntervalPowerFlowRealtimeData", AttrVal( $name, "IntervalRealtimeData", 60 ) ) > 0; - InternalTimer(gettimeofday() + 12, "fronius_GetStorageRealtimeData", $hash, 0) if AttrVal( $name, "IntervalStorageRealtimeData" , AttrVal( $name, "IntervalRealtimeData", 60 ) ) > 0; - InternalTimer(gettimeofday() + 14, "fronius_GetMeterRealtimeData", $hash, 0) if AttrVal( $name, "IntervalMeterRealtimeData" , AttrVal( $name, "IntervalRealtimeData", 60 ) ) > 0; - InternalTimer(gettimeofday() + 16, "fronius_GetInverterRealtimeData", $hash, 0) if AttrVal( $name, "IntervalInverterRealtimeData" , AttrVal( $name, "IntervalRealtimeData", 60 ) ) > 0; + InternalTimer(gettimeofday() + 15, "fronius_GetStorageRealtimeData", $hash, 0) if AttrVal( $name, "IntervalStorageRealtimeData" , AttrVal( $name, "IntervalRealtimeData", 60 ) ) > 0; + InternalTimer(gettimeofday() + 20, "fronius_GetMeterRealtimeData", $hash, 0) if AttrVal( $name, "IntervalMeterRealtimeData" , AttrVal( $name, "IntervalRealtimeData", 60 ) ) > 0; + InternalTimer(gettimeofday() + 25, "fronius_GetInverterRealtimeData", $hash, 0) if AttrVal( $name, "IntervalInverterRealtimeData" , AttrVal( $name, "IntervalRealtimeData", 60 ) ) > 0; Log3 $name, 4, "[$name] [fronius_StartUp] InternalTimer Realtime Daten"; # align GetArchiveData on 5min intervals @@ -430,6 +435,9 @@ sub fronius_GetPowerFlowRealtimeData($) { fronius_SendCommand($hash,"GetPowerFlowRealtimeData",""); if ($interval > 0) { + # Fronius Solar API V1 Doku - "Up to 2 realtime requests are allowed to be performed in parallel with keeping a timeout of 4 seconds between two consecutive calls." + $interval = $interval < 4 ? 4 : $interval; + InternalTimer(gettimeofday() + $interval, "fronius_GetPowerFlowRealtimeData", $hash, 0); Log3 $name, 4, "[$name] [fronius_GetPowerFlowRealtimeData] Timer $interval"; } else { @@ -499,6 +507,9 @@ sub fronius_GetStorageRealtimeData($) { } if ($interval > 0) { + # Fronius Solar API V1 Doku - "Up to 2 realtime requests are allowed to be performed in parallel with keeping a timeout of 4 seconds between two consecutive calls." + $interval = $interval < 4 ? 4 : $interval; + InternalTimer(gettimeofday() + $interval, "fronius_GetStorageRealtimeData", $hash, 0); Log3 $name, 4, "[$name] [fronius_GetStorageRealtimeData] Timer $interval"; } else { @@ -539,6 +550,10 @@ sub fronius_GetMeterRealtimeData($) { } if ($interval > 0) { + + # Fronius Solar API V1 Doku - "Up to 2 realtime requests are allowed to be performed in parallel with keeping a timeout of 4 seconds between two consecutive calls." + $interval = $interval < 4 ? 4 : $interval; + InternalTimer(gettimeofday() + $interval, "fronius_GetMeterRealtimeData", $hash, 0); Log3 $name, 4, "[$name] [fronius_GetMeterRealtimeData] Timer $interval"; } else { @@ -584,6 +599,10 @@ sub fronius_GetInverterRealtimeData($) { } if ($interval > 0) { + + # Fronius Solar API V1 Doku - "Up to 2 realtime requests are allowed to be performed in parallel with keeping a timeout of 4 seconds between two consecutive calls." + $interval = $interval < 4 ? 4 : $interval; + InternalTimer(gettimeofday() + $interval, "fronius_GetInverterRealtimeData", $hash, 0); Log3 $name, 4, "[$name] [fronius_GetInverterRealtimeData] Timer $interval"; } else { @@ -824,7 +843,7 @@ sub fronius_expandJSON($$$$;$$) { if ($reading eq "PowerFlow_Site_P_Load") { if ( $value + 0 eq $value) { - if ($value < 0) {$value = $value * -1} + $value = $value * -1; } } @@ -907,7 +926,7 @@ sub fronius_setState($$) { =item summary Fronius =begin html - +

fronius