From 8f0ebf699f0cba4bf8c1833e43ec85e1b990600b Mon Sep 17 00:00:00 2001 From: MadMax Date: Tue, 20 Jun 2023 15:39:23 +0000 Subject: [PATCH] 76_SMAInverter.pm:Bugfix DC-Power 2.0 git-svn-id: https://svn.fhem.de/fhem/trunk@27695 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/76_SMAInverter.pm | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/fhem/FHEM/76_SMAInverter.pm b/fhem/FHEM/76_SMAInverter.pm index 52a41a162..de614bd28 100644 --- a/fhem/FHEM/76_SMAInverter.pm +++ b/fhem/FHEM/76_SMAInverter.pm @@ -32,6 +32,7 @@ eval "use FHEM::Meta;1" or my $modMetaAbsent = 1; # Versions History by DS_Starter our %SMAInverter_vNotesIntern = ( + "2.23.4" => "20.06.2023 buxfix DC-Power 2.0", "2.23.3" => "19.06.2023 buxfix DC-Power", "2.23.2" => "20.05.2023 add new SMAInverter_StatusText", "2.23.1" => "19.05.2023 add String 3 (only STP X Inverter)", @@ -2168,12 +2169,20 @@ sub SMAInverter_SMAcommand($$$$$) { if($data_ID eq 0x251E) { $inv_SPOT_PDC1 = unpack("l*", substr $data, 62, 4); - if($size < 90) {$inv_SPOT_PDC2 = "-"; } else {$inv_SPOT_PDC2 = unpack("l*", substr $data, 90, 4); } # catch short response, in case PDC2 not supported - if($size < 118) {$inv_SPOT_PDC3 = "-"; } else {$inv_SPOT_PDC3 = unpack("l*", substr $data, 118, 4); } # catch short response, in case PDC3 not supported + #$inv_SPOT_PDC1 = (abs($inv_SPOT_PDC1) eq 2147483648) ? 0 : $inv_SPOT_PDC1; + if(($inv_SPOT_PDC1 eq -2147483648) || ($inv_SPOT_PDC1 eq 0xFFFFFFFF)) {$inv_SPOT_PDC1 = "-"; } + + if($size < 90) {$inv_SPOT_PDC2 = "-"; } else { + $inv_SPOT_PDC2 = unpack("l*", substr $data, 90, 4); + #$inv_SPOT_PDC2 = (abs($inv_SPOT_PDC2) eq 2147483648) ? 0 : $inv_SPOT_PDC2; + if(($inv_SPOT_PDC2 eq -2147483648) || ($inv_SPOT_PDC2 eq 0xFFFFFFFF)) {$inv_SPOT_PDC2 = "-"; } + } # catch short response, in case PDC2 not supported + if($size < 118) {$inv_SPOT_PDC3 = "-"; } else { + $inv_SPOT_PDC3 = unpack("l*", substr $data, 118, 4); + #$inv_SPOT_PDC3 = (abs($inv_SPOT_PDC3) eq 2147483648) ? 0 : $inv_SPOT_PDC3; + if(($inv_SPOT_PDC3 eq -2147483648) || ($inv_SPOT_PDC3 eq 0xFFFFFFFF)) {$inv_SPOT_PDC3 = "-"; } + } # catch short response, in case PDC3 not supported - $inv_SPOT_PDC1 = (abs($inv_SPOT_PDC1) eq 2147483648) ? 0 : $inv_SPOT_PDC1; - $inv_SPOT_PDC2 = (abs($inv_SPOT_PDC2) eq 2147483648) ? 0 : $inv_SPOT_PDC2; - $inv_SPOT_PDC3 = (abs($inv_SPOT_PDC3) eq 2147483648) ? 0 : $inv_SPOT_PDC3; Log3 $name, 5, "$name - Found Data SPOT_PDC1=$inv_SPOT_PDC1, SPOT_PDC2=$inv_SPOT_PDC2 and SPOT_PDC3=$inv_SPOT_PDC3"; return (1,$inv_SPOT_PDC1,$inv_SPOT_PDC2,$inv_SPOT_PDC3,$inv_susyid,$inv_serial); }