From 53df807ebde7e5f476ccfb4102c0eb0e4735246b Mon Sep 17 00:00:00 2001 From: nasseeder1 Date: Thu, 22 Aug 2024 19:49:28 +0000 Subject: [PATCH] 70_PylonLowVoltage: extend battery addresses up to 16 git-svn-id: https://svn.fhem.de/fhem/trunk@29092 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/70_PylonLowVoltage.pm | 56 +++++++++++++++++++++++++++------ 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index 3c0d349c9..62f47ea7a 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # 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 + - feature: 70_PylonLowVoltage: extend battery addresses up to 16 - change: 76_SolarForecast: attr ctrlWeatherDevX to setupWeatherDevX, - bufgix: 76_SMAInverter: fix PW Lengs Bug - bugfix: 10_KNX: prevent set/get-cmd during fhem start diff --git a/fhem/FHEM/70_PylonLowVoltage.pm b/fhem/FHEM/70_PylonLowVoltage.pm index 3ee9cc196..ccfa6c3bf 100644 --- a/fhem/FHEM/70_PylonLowVoltage.pm +++ b/fhem/FHEM/70_PylonLowVoltage.pm @@ -120,6 +120,7 @@ BEGIN { # Versions History intern (Versions history by Heiko Maaz) my %vNotesIntern = ( + "0.3.0" => "22.08.2024 extend battery addresses up to 16 ", "0.2.6" => "25.05.2024 replace Smartmatch Forum:#137776 ", "0.2.5" => "02.04.2024 _callAnalogValue / _callAlarmInfo: integrate a Cell and Temperature Position counter ". "add specific Alarm readings ", @@ -210,7 +211,11 @@ my %halm = ( # # # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # ~ 20 0A 46 93 E0 02 0A FD 0F -# 7E 32 30 30 41 34 36 39 33 45 30 30 32 30 41 +# 7E 32 30 30 41 34 36 39 33 45 30 30 32 30 41 +# ~ 20 10 46 93 E0 02 10 +# 7E 32 30 31 30 34 36 39 33 45 30 30 32 31 30 = 02D1H -> bitweise invert = 1111 1101 0010 1110 -> +1 = 1111 1101 0010 1111 -> FD2FH +# ~ 20 11 46 93 E0 02 11 +# 7E 32 30 31 31 34 36 39 33 45 30 30 32 31 31 = 02D3H -> bitweise invert = 1111 1101 0010 1100 -> +1 = 1111 1101 0010 1101 -> FD2DH # my %hrsnb = ( # Codierung Abruf serialNumber, mlen = Mindestlänge Antwortstring 1 => { cmd => "~20024693E00202FD2D\x{0d}", mlen => 52 }, @@ -227,7 +232,8 @@ my %hrsnb = ( # Codierung 12 => { cmd => "~200D4693E0020DFD09\x{0d}", mlen => 52 }, 13 => { cmd => "~200E4693E0020EFD07\x{0d}", mlen => 52 }, 14 => { cmd => "~200F4693E0020FFD05\x{0d}", mlen => 52 }, - + 15 => { cmd => "~20104693E00210FD2F\x{0d}", mlen => 52 }, + 16 => { cmd => "~20114693E00211FD2D\x{0d}", mlen => 52 }, ); # ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02 @@ -240,7 +246,11 @@ my %hrsnb = ( # Codierung # # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # ~ 20 0A 46 51 00 00 empty FD 9D -# 7E 32 30 30 41 34 36 35 31 30 30 30 30 - - +# 7E 32 30 30 41 34 36 35 31 30 30 30 30 - - +# ~ 20 10 46 51 00 00 empty +# 7E 32 20 31 30 34 36 35 31 30 30 30 30 - - FD BD = 0243H -> bitweise invert = 1111 1101 1011 1100 -> +1 = 1111 1101 1011 1101 = FDBDH +# ~ 20 11 46 51 00 00 empty +# 7E 32 20 31 31 34 36 35 31 30 30 30 30 - - FD BC # my %hrmfi = ( # Codierung Abruf manufacturerInfo, mlen = Mindestlänge Antwortstring 1 => { cmd => "~200246510000FDAC\x{0d}", mlen => 82 }, @@ -257,6 +267,8 @@ my %hrmfi = ( # Codierung 12 => { cmd => "~200D46510000FD9A\x{0d}", mlen => 82 }, 13 => { cmd => "~200E46510000FD8F\x{0d}", mlen => 82 }, 14 => { cmd => "~200F46510000FD8E\x{0d}", mlen => 82 }, + 15 => { cmd => "~201046510000FDBD\x{0d}", mlen => 82 }, + 16 => { cmd => "~201146510000FDBC\x{0d}", mlen => 82 }, ); # ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02 @@ -269,7 +281,11 @@ my %hrmfi = ( # Codierung # # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # ~ 00 0A 46 4F 00 00 empty FD 8B -# 7E 30 30 30 41 34 36 34 46 30 30 30 30 - - +# 7E 30 30 30 41 34 36 34 46 30 30 30 30 - - +# ~ 00 10 46 4F 00 00 empty +# 7E 30 30 31 30 34 36 34 46 30 30 30 30 - - FD AB 1111 1101 1010 1011 +# ~ 00 11 46 4F 00 00 empty +# 7E 30 30 31 31 34 36 34 46 30 30 30 30 - - FD 9A 1111 1101 1001 1001 # my %hrprt = ( # Codierung Abruf protocolVersion, mlen = Mindestlänge Antwortstring 1 => { cmd => "~0002464F0000FD9A\x{0d}", mlen => 18 }, @@ -286,6 +302,8 @@ my %hrprt = ( # Codierung 12 => { cmd => "~000D464F0000FD88\x{0d}", mlen => 18 }, 13 => { cmd => "~000E464F0000FD87\x{0d}", mlen => 18 }, 14 => { cmd => "~000F464F0000FD86\x{0d}", mlen => 18 }, + 15 => { cmd => "~0010464F0000FDAB\x{0d}", mlen => 18 }, + 16 => { cmd => "~0011464F0000FD9A\x{0d}", mlen => 18 }, ); # CHKSUM (als HEX! addieren): 32+30+30+41+34+36+39+36+45+30+30+32+30+41 = 02F4H -> modulo 65536 = 02F4H -> bitweise invert = 1111 1101 0000 1011 -> +1 1111 1101 0000 1100 = FD0CH @@ -293,6 +311,8 @@ my %hrprt = ( # Codierung # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # ~ 20 0A 46 96 E0 02 0A FD 0C # 7E 32 30 30 41 34 36 39 36 45 30 30 32 30 41 +# ~ 20 11 46 96 E0 02 11 FD 2A 1111 1101 0010 1001 +# 7E 32 30 31 31 34 36 39 36 45 30 30 32 31 31 # my %hrswv = ( # Codierung Abruf softwareVersion @@ -310,13 +330,17 @@ my %hrswv = ( # Codierung 12 => { cmd => "~200D4696E0020DFD06\x{0d}", mlen => 30 }, 13 => { cmd => "~200E4696E0020EFD04\x{0d}", mlen => 30 }, 14 => { cmd => "~200F4696E0020FFD02\x{0d}", mlen => 30 }, + 15 => { cmd => "~20104696E00210FD2C\x{0d}", mlen => 30 }, + 16 => { cmd => "~20114696E00211FD2A\x{0d}", mlen => 30 }, ); # CHKSUM (als HEX! addieren): 32+30+30+41+34+36+34+34+45+30+30+32+30+41 = 02EDH -> modulo 65536 = 02EDH -> bitweise invert = 1111 1101 0001 0010 -> +1 1111 1101 0001 0011 = FD13H # # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # ~ 20 0A 46 44 E0 02 0A FD 13 -# 7E 32 30 30 41 34 36 34 34 45 30 30 32 30 41 +# 7E 32 30 30 41 34 36 34 34 45 30 30 32 30 41 +# ~ 20 10 46 44 E0 02 10 FD 33 +# 7E 32 30 31 30 34 36 34 34 45 30 30 32 31 30 1111 1101 0011 0010 # my %hralm = ( # Codierung Abruf alarmInfo @@ -334,6 +358,8 @@ my %hralm = ( # Codierung 12 => { cmd => "~200D4644E0020DFD0D\x{0d}", mlen => 82 }, 13 => { cmd => "~200E4644E0020EFD0B\x{0d}", mlen => 82 }, 14 => { cmd => "~200F4644E0020FFCFE\x{0d}", mlen => 82 }, + 15 => { cmd => "~20104644E00210FD33\x{0d}", mlen => 82 }, + 16 => { cmd => "~20114644E00211FD31\x{0d}", mlen => 82 }, ); # CHKSUM (als HEX! addieren): 32+30+30+41+34+36+34+37+45+30+30+32+30+41 = 02F0H -> modulo 65536 = 02F0H -> bitweise invert = 1111 1101 0000 1111 -> +1 1111 1101 0001 0000 = FD10H @@ -341,6 +367,8 @@ my %hralm = ( # Codierung # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # ~ 20 0A 46 47 E0 02 0A FD 10 # 7E 32 30 30 41 34 36 34 37 45 30 30 32 30 41 +# ~ 20 10 46 47 E0 02 10 FD 30 +# 7E 32 30 31 30 34 36 34 37 45 30 30 32 31 30 1111 1101 0010 1111 # my %hrspm = ( # Codierung Abruf Systemparameter @@ -358,6 +386,8 @@ my %hrspm = ( # Codierung 12 => { cmd => "~200D4647E0020DFD0A\x{0d}", mlen => 68 }, 13 => { cmd => "~200E4647E0020EFD08\x{0d}", mlen => 68 }, 14 => { cmd => "~200F4647E0020FFD06\x{0d}", mlen => 68 }, + 15 => { cmd => "~20104647E00210FD30\x{0d}", mlen => 68 }, + 16 => { cmd => "~20114647E00211FD2E\x{0d}", mlen => 68 }, ); # CHKSUM (als HEX! addieren): 32+30+30+41+34+36+39+32+45+30+30+32+30+41 = 02F0H -> modulo 65536 = 02F0H -> bitweise invert = 1111 1101 0000 1111 -> +1 1111 1101 0001 0000 = FD10H @@ -382,6 +412,8 @@ my %hrcmi = ( # Codierung 12 => { cmd => "~200D4692E0020DFD0A\x{0d}", mlen => 38 }, 13 => { cmd => "~200E4692E0020EFD08\x{0d}", mlen => 38 }, 14 => { cmd => "~200F4692E0020FFD06\x{0d}", mlen => 38 }, + 15 => { cmd => "~20104692E00210FD30\x{0d}", mlen => 38 }, + 16 => { cmd => "~20114692E00211FD2E\x{0d}", mlen => 38 }, ); # ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02 @@ -394,7 +426,9 @@ my %hrcmi = ( # Codierung # # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # ~ 20 0A 46 42 E0 02 0A FD 15 -# 7E 32 30 30 41 34 36 34 32 45 30 30 32 30 41 +# 7E 32 30 30 41 34 36 34 32 45 30 30 32 30 41 +# ~ 20 10 46 42 E0 02 10 FD 35 1111 1101 0011 0100 +# 7E 32 30 31 30 34 36 34 32 45 30 30 32 31 30 # my %hrcmn = ( # Codierung Abruf analogValue 1 => { cmd => "~20024642E00202FD33\x{0d}", mlen => 128 }, @@ -411,6 +445,8 @@ my %hrcmn = ( # Codierung 12 => { cmd => "~200D4642E0020DFD0F\x{0d}", mlen => 128 }, 13 => { cmd => "~200E4642E0020EFD0D\x{0d}", mlen => 128 }, 14 => { cmd => "~200F4642E0020FFD0B\x{0d}", mlen => 128 }, + 15 => { cmd => "~20104642E0020EFD35\x{0d}", mlen => 128 }, + 16 => { cmd => "~20114642E0020FFD33\x{0d}", mlen => 128 }, ); @@ -466,8 +502,8 @@ sub Define { ($hash->{HOST}, $hash->{PORT}) = split ":", $args[2]; $hash->{BATADDRESS} = $args[3] // 1; - if ($hash->{BATADDRESS} !~ /^([1-9]{1}|1[0-4])$/xs) { - return "Define: bataddress must be a value between 1 and 14"; + if ($hash->{BATADDRESS} !~ /^([1-9]{1}|1[0-6])$/xs) { + return "Define: bataddress must be a value between 1 and 16"; } my $params = { @@ -1658,7 +1694,7 @@ return; Limitations
- The module currently supports a maximum of 14 batteries (master + 13 slaves) in one group. + The module currently supports a maximum of 16 batteries (1 master + 15 slaves) in one group.

@@ -1883,7 +1919,7 @@ return; Einschränkungen
- Das Modul unterstützt zur Zeit maximal 14 Batterien (Master + 13 Slaves) in einer Gruppe. + Das Modul unterstützt zur Zeit maximal 16 Batterien (1 Master + 15 Slaves) in einer Gruppe.