2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-25 16:05:19 +00:00

70_PylonLowVoltage: new attr waitTimeBetweenRS485Cmd

git-svn-id: https://svn.fhem.de/fhem/trunk@29105 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2024-08-25 20:22:04 +00:00
parent 8865178572
commit 0cca634438
2 changed files with 142 additions and 138 deletions

View File

@ -177,18 +177,15 @@ my %hrtnc = ( # RTN Codes
'99' => { desc => 'invalid data received ... discarded' }, '99' => { desc => 'invalid data received ... discarded' },
); );
my %fns1 = ( # Abrufklasse statische Werte: my %fncls = ( # Funktionsklassen
1 => { fn => \&_callSerialNumber }, # serialNumber 1 => { class => 'sta', fn => \&_callSerialNumber }, # statisch - serialNumber
2 => { fn => \&_callManufacturerInfo }, # manufacturerInfo 2 => { class => 'sta', fn => \&_callManufacturerInfo }, # statisch - manufacturerInfo
3 => { fn => \&_callProtocolVersion }, # protocolVersion 3 => { class => 'sta', fn => \&_callProtocolVersion }, # statisch - protocolVersion
4 => { fn => \&_callSoftwareVersion }, # softwareVersion 4 => { class => 'sta', fn => \&_callSoftwareVersion }, # statisch - softwareVersion
5 => { fn => \&_callSystemParameters }, # systemParameters 5 => { class => 'sta', fn => \&_callSystemParameters }, # statisch - systemParameters
); 6 => { class => 'dyn', fn => \&_callAnalogValue }, # dynamisch - analogValue
7 => { class => 'dyn', fn => \&_callAlarmInfo }, # dynamisch - alarmInfo
my %fns2 = ( # Abrufklasse dynamische Werte: 8 => { class => 'dyn', fn => \&_callChargeManagmentInfo }, # dynamisch - chargeManagmentInfo
1 => { fn => \&_callAnalogValue }, # analogValue
2 => { fn => \&_callAlarmInfo }, # alarmInfo
3 => { fn => \&_callChargeManagmentInfo }, # chargeManagmentInfo
); );
my %halm = ( # Codierung Alarme my %halm = ( # Codierung Alarme
@ -210,7 +207,7 @@ my %halm = ( #
# #
# '--' -> Platzhalter für Batterieadresse, wird ersetzt durch berechnete Adresse (Bat + Group in _composeAddr) # '--' -> Platzhalter für Batterieadresse, wird ersetzt durch berechnete Adresse (Bat + Group in _composeAddr)
################################################################################################################################################################## ##################################################################################################################################################################
# # Codierung Abruf serialNumber, mlen = Mindestlänge Antwortstring
# ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02 # ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02
# CID1: Kommando spezifisch, hier 46H # CID1: Kommando spezifisch, hier 46H
# CID2: Kommando spezifisch, hier 93H # CID2: Kommando spezifisch, hier 93H
@ -221,11 +218,13 @@ my %halm = ( #
# SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM
# ~ 20 10 46 93 E0 02 10 # ~ 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 # 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
##################################################################################################################################################################
my %hrsnb = ( # Codierung Abruf serialNumber, mlen = Mindestlänge Antwortstring my %hrsnb = (
1 => { cmd => "20--4693E002--", mlen => 52 }, 1 => { cmd => '20--4693E002--', fnclsnr => 1, fn => 'serialNumber', mlen => 52 },
); );
##################################################################################################################################################################
# Codierung Abruf manufacturerInfo, mlen = Mindestlänge Antwortstring
# ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02 # ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02
# CID1: Kommando spezifisch, hier 46H # CID1: Kommando spezifisch, hier 46H
# CID2: Kommando spezifisch, hier 51H # CID2: Kommando spezifisch, hier 51H
@ -237,11 +236,13 @@ my %hrsnb = ( # Codierung
# SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM
# ~ 20 10 46 51 00 00 empty # ~ 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 # 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
##################################################################################################################################################################
my %hrmfi = ( # Codierung Abruf manufacturerInfo, mlen = Mindestlänge Antwortstring my %hrmfi = (
1 => { cmd => "20--46510000", mlen => 82 }, 1 => { cmd => '20--46510000', fnclsnr => 2, fn => 'manufacturerInfo', mlen => 82 },
); );
##################################################################################################################################################################
# Codierung Abruf protocolVersion, mlen = Mindestlänge Antwortstring
# ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02 # ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02
# CID1: Kommando spezifisch, hier 46H # CID1: Kommando spezifisch, hier 46H
# CID2: Kommando spezifisch, hier 4FH # CID2: Kommando spezifisch, hier 4FH
@ -252,51 +253,37 @@ my %hrmfi = ( # Codierung
# #
# SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM
# ~ 00 0A 46 4F 00 00 empty # ~ 00 0A 46 4F 00 00 empty
##################################################################################################################################################################
my %hrprt = ( # Codierung Abruf protocolVersion, mlen = Mindestlänge Antwortstring my %hrprt = (
1 => { cmd => "00--464F0000", mlen => 18 }, 1 => { cmd => '00--464F0000', fnclsnr => 3, fn => 'protocolVersion', mlen => 18 },
); );
##################################################################################################################################################################
# Codierung Abruf softwareVersion
# 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 # 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
# #
# SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM
# ~ 20 11 46 96 E0 02 11 # ~ 20 11 46 96 E0 02 11
# 7E 32 30 31 31 34 36 39 36 45 30 30 32 31 31 # 7E 32 30 31 31 34 36 39 36 45 30 30 32 31 31
##################################################################################################################################################################
my %hrswv = ( # Codierung Abruf softwareVersion my %hrswv = (
1 => { cmd => "20--4696E002--", mlen => 30 }, 1 => { cmd => '20--4696E002--', fnclsnr => 4, fn => 'softwareVersion', 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 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
1 => { cmd => "20--4644E002--", mlen => 82 },
); );
##################################################################################################################################################################
# Codierung Abruf Systemparameter
# 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 # 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
# #
# SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM
# ~ 20 0A 46 47 E0 02 0A FD 10 # ~ 20 0A 46 47 E0 02 0A FD 10
# 7E 32 30 30 41 34 36 34 37 45 30 30 32 30 41 # 7E 32 30 30 41 34 36 34 37 45 30 30 32 30 41
##################################################################################################################################################################
my %hrspm = ( # Codierung Abruf Systemparameter my %hrspm = (
1 => { cmd => "20--4647E002--", mlen => 68 }, 1 => { cmd => '20--4647E002--', fnclsnr => 5, fn => 'systemParameter', 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
#
# SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM
# ~ 20 0A 46 92 E0 02 0A FD 10
# 7E 32 30 30 41 34 36 39 32 45 30 30 32 30 41
my %hrcmi = ( # Codierung Abruf chargeManagmentInfo
1 => { cmd => "20--4692E002--", mlen => 38 },
); );
##################################################################################################################################################################
# Codierung Abruf analogValue
# ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02 # ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02
# CID1: Kommando spezifisch, hier 46H # CID1: Kommando spezifisch, hier 46H
# CID2: Kommando spezifisch, hier 42H LCHK| LENID # CID2: Kommando spezifisch, hier 42H LCHK| LENID
@ -308,11 +295,37 @@ my %hrcmi = ( # Codierung
# SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM
# ~ 20 10 46 42 E0 02 10 # ~ 20 10 46 42 E0 02 10
# 7E 32 30 31 30 34 36 34 32 45 30 30 32 31 30 # 7E 32 30 31 30 34 36 34 32 45 30 30 32 31 30
##################################################################################################################################################################
my %hrcmn = ( # Codierung Abruf analogValue my %hrcmn = (
1 => { cmd => "20--4642E002--", mlen => 128 }, 1 => { cmd => '20--4642E002--', fnclsnr => 6, fn => 'analogValue', mlen => 128 },
); );
##################################################################################################################################################################
# Codierung Abruf alarmInfo
# 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 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 = (
1 => { cmd => '20--4644E002--', fnclsnr => 7, fn => 'alarmInfo', mlen => 82 },
);
##################################################################################################################################################################
# Codierung Abruf chargeManagmentInfo
# 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
#
# SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM
# ~ 20 0A 46 92 E0 02 0A FD 10
# 7E 32 30 30 41 34 36 39 32 45 30 30 32 30 41
##################################################################################################################################################################
my %hrcmi = (
1 => { cmd => '20--4692E002--', fnclsnr => 8, fn => 'chargeManagmentInfo', mlen => 38 },
);
############################################################### ###############################################################
# PylonLowVoltage Initialize # PylonLowVoltage Initialize
############################################################### ###############################################################
@ -381,6 +394,7 @@ sub Define {
$hash->{BATADDRESS} = $$a[3] // 1; $hash->{BATADDRESS} = $$a[3] // 1;
$hash->{GROUP} = $h->{group} // 0; $hash->{GROUP} = $h->{group} // 0;
$hash->{HELPER}{AGE1} = 0;
my $params = { my $params = {
hash => $hash, hash => $hash,
@ -601,24 +615,12 @@ sub startUpdate {
local $SIG{ALRM} = sub { croak 'batterytimeout' }; local $SIG{ALRM} = sub { croak 'batterytimeout' };
if (ReadingsAge ($name, "serialNumber", 6000) >= $age1) { # Abrufklasse statische Werte for my $idx (sort keys %fncls) {
next if($fncls{$idx}{class} eq 'sta' && ReadingsAge ($name, "serialNumber", 6000) < $age1); # Funktionsklasse statische Werte seltener abrufen
ualarm ($uat); ualarm ($uat);
for my $idx (sort keys %fns1) { if (&{$fncls{$idx}{fn}} ($hash, $socket, $readings)) {
if (&{$fns1{$idx}{fn}} ($hash, $socket, $readings)) {
$serial = encode_base64 (Serialize ( {name => $name, readings => $readings} ), "");
$block ? return ($serial) : return \&finishUpdate ($serial);
}
}
ualarm(0);
sleep $wtb if($block);
}
for my $idx (sort keys %fns2) { # Abrufklasse dynamische Werte
ualarm ($uat);
if (&{$fns2{$idx}{fn}} ($hash, $socket, $readings)) {
$serial = encode_base64 (Serialize ( {name => $name, readings => $readings} ), ""); $serial = encode_base64 (Serialize ( {name => $name, readings => $readings} ), "");
$block ? return ($serial) : return \&finishUpdate ($serial); $block ? return ($serial) : return \&finishUpdate ($serial);
} }

View File

@ -177,18 +177,15 @@ my %hrtnc = ( # RTN Codes
'99' => { desc => 'invalid data received ... discarded' }, '99' => { desc => 'invalid data received ... discarded' },
); );
my %fns1 = ( # Abrufklasse statische Werte: my %fncls = ( # Funktionsklassen
1 => { fn => \&_callSerialNumber }, # serialNumber 1 => { class => 'sta', fn => \&_callSerialNumber }, # statisch - serialNumber
2 => { fn => \&_callManufacturerInfo }, # manufacturerInfo 2 => { class => 'sta', fn => \&_callManufacturerInfo }, # statisch - manufacturerInfo
3 => { fn => \&_callProtocolVersion }, # protocolVersion 3 => { class => 'sta', fn => \&_callProtocolVersion }, # statisch - protocolVersion
4 => { fn => \&_callSoftwareVersion }, # softwareVersion 4 => { class => 'sta', fn => \&_callSoftwareVersion }, # statisch - softwareVersion
5 => { fn => \&_callSystemParameters }, # systemParameters 5 => { class => 'sta', fn => \&_callSystemParameters }, # statisch - systemParameters
); 6 => { class => 'dyn', fn => \&_callAnalogValue }, # dynamisch - analogValue
7 => { class => 'dyn', fn => \&_callAlarmInfo }, # dynamisch - alarmInfo
my %fns2 = ( # Abrufklasse dynamische Werte: 8 => { class => 'dyn', fn => \&_callChargeManagmentInfo }, # dynamisch - chargeManagmentInfo
1 => { fn => \&_callAnalogValue }, # analogValue
2 => { fn => \&_callAlarmInfo }, # alarmInfo
3 => { fn => \&_callChargeManagmentInfo }, # chargeManagmentInfo
); );
my %halm = ( # Codierung Alarme my %halm = ( # Codierung Alarme
@ -210,7 +207,7 @@ my %halm = ( #
# #
# '--' -> Platzhalter für Batterieadresse, wird ersetzt durch berechnete Adresse (Bat + Group in _composeAddr) # '--' -> Platzhalter für Batterieadresse, wird ersetzt durch berechnete Adresse (Bat + Group in _composeAddr)
################################################################################################################################################################## ##################################################################################################################################################################
# # Codierung Abruf serialNumber, mlen = Mindestlänge Antwortstring
# ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02 # ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02
# CID1: Kommando spezifisch, hier 46H # CID1: Kommando spezifisch, hier 46H
# CID2: Kommando spezifisch, hier 93H # CID2: Kommando spezifisch, hier 93H
@ -221,11 +218,13 @@ my %halm = ( #
# SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM
# ~ 20 10 46 93 E0 02 10 # ~ 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 # 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
##################################################################################################################################################################
my %hrsnb = ( # Codierung Abruf serialNumber, mlen = Mindestlänge Antwortstring my %hrsnb = (
1 => { cmd => "20--4693E002--", mlen => 52 }, 1 => { cmd => '20--4693E002--', fnclsnr => 1, fn => 'serialNumber', mlen => 52 },
); );
##################################################################################################################################################################
# Codierung Abruf manufacturerInfo, mlen = Mindestlänge Antwortstring
# ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02 # ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02
# CID1: Kommando spezifisch, hier 46H # CID1: Kommando spezifisch, hier 46H
# CID2: Kommando spezifisch, hier 51H # CID2: Kommando spezifisch, hier 51H
@ -237,11 +236,13 @@ my %hrsnb = ( # Codierung
# SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM
# ~ 20 10 46 51 00 00 empty # ~ 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 # 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
##################################################################################################################################################################
my %hrmfi = ( # Codierung Abruf manufacturerInfo, mlen = Mindestlänge Antwortstring my %hrmfi = (
1 => { cmd => "20--46510000", mlen => 82 }, 1 => { cmd => '20--46510000', fnclsnr => 2, fn => 'manufacturerInfo', mlen => 82 },
); );
##################################################################################################################################################################
# Codierung Abruf protocolVersion, mlen = Mindestlänge Antwortstring
# ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02 # ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02
# CID1: Kommando spezifisch, hier 46H # CID1: Kommando spezifisch, hier 46H
# CID2: Kommando spezifisch, hier 4FH # CID2: Kommando spezifisch, hier 4FH
@ -252,51 +253,37 @@ my %hrmfi = ( # Codierung
# #
# SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM
# ~ 00 0A 46 4F 00 00 empty # ~ 00 0A 46 4F 00 00 empty
##################################################################################################################################################################
my %hrprt = ( # Codierung Abruf protocolVersion, mlen = Mindestlänge Antwortstring my %hrprt = (
1 => { cmd => "00--464F0000", mlen => 18 }, 1 => { cmd => '00--464F0000', fnclsnr => 3, fn => 'protocolVersion', mlen => 18 },
); );
##################################################################################################################################################################
# Codierung Abruf softwareVersion
# 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 # 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
# #
# SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM
# ~ 20 11 46 96 E0 02 11 # ~ 20 11 46 96 E0 02 11
# 7E 32 30 31 31 34 36 39 36 45 30 30 32 31 31 # 7E 32 30 31 31 34 36 39 36 45 30 30 32 31 31
##################################################################################################################################################################
my %hrswv = ( # Codierung Abruf softwareVersion my %hrswv = (
1 => { cmd => "20--4696E002--", mlen => 30 }, 1 => { cmd => '20--4696E002--', fnclsnr => 4, fn => 'softwareVersion', 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 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
1 => { cmd => "20--4644E002--", mlen => 82 },
); );
##################################################################################################################################################################
# Codierung Abruf Systemparameter
# 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 # 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
# #
# SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM
# ~ 20 0A 46 47 E0 02 0A FD 10 # ~ 20 0A 46 47 E0 02 0A FD 10
# 7E 32 30 30 41 34 36 34 37 45 30 30 32 30 41 # 7E 32 30 30 41 34 36 34 37 45 30 30 32 30 41
##################################################################################################################################################################
my %hrspm = ( # Codierung Abruf Systemparameter my %hrspm = (
1 => { cmd => "20--4647E002--", mlen => 68 }, 1 => { cmd => '20--4647E002--', fnclsnr => 5, fn => 'systemParameter', 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
#
# SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM
# ~ 20 0A 46 92 E0 02 0A FD 10
# 7E 32 30 30 41 34 36 39 32 45 30 30 32 30 41
my %hrcmi = ( # Codierung Abruf chargeManagmentInfo
1 => { cmd => "20--4692E002--", mlen => 38 },
); );
##################################################################################################################################################################
# Codierung Abruf analogValue
# ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02 # ADR: n=Batterienummer (2-x), m=Group Nr. (0-8), ADR = 0x0n + (0x10 * m) -> f. Batterie 1 = 0x02 + (0x10 * 0) = 0x02
# CID1: Kommando spezifisch, hier 46H # CID1: Kommando spezifisch, hier 46H
# CID2: Kommando spezifisch, hier 42H LCHK| LENID # CID2: Kommando spezifisch, hier 42H LCHK| LENID
@ -308,11 +295,37 @@ my %hrcmi = ( # Codierung
# SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM # SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM
# ~ 20 10 46 42 E0 02 10 # ~ 20 10 46 42 E0 02 10
# 7E 32 30 31 30 34 36 34 32 45 30 30 32 31 30 # 7E 32 30 31 30 34 36 34 32 45 30 30 32 31 30
##################################################################################################################################################################
my %hrcmn = ( # Codierung Abruf analogValue my %hrcmn = (
1 => { cmd => "20--4642E002--", mlen => 128 }, 1 => { cmd => '20--4642E002--', fnclsnr => 6, fn => 'analogValue', mlen => 128 },
); );
##################################################################################################################################################################
# Codierung Abruf alarmInfo
# 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 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 = (
1 => { cmd => '20--4644E002--', fnclsnr => 7, fn => 'alarmInfo', mlen => 82 },
);
##################################################################################################################################################################
# Codierung Abruf chargeManagmentInfo
# 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
#
# SOI VER ADR CID1 CID2 LENGTH INFO CHKSUM
# ~ 20 0A 46 92 E0 02 0A FD 10
# 7E 32 30 30 41 34 36 39 32 45 30 30 32 30 41
##################################################################################################################################################################
my %hrcmi = (
1 => { cmd => '20--4692E002--', fnclsnr => 8, fn => 'chargeManagmentInfo', mlen => 38 },
);
############################################################### ###############################################################
# PylonLowVoltage Initialize # PylonLowVoltage Initialize
############################################################### ###############################################################
@ -381,6 +394,7 @@ sub Define {
$hash->{BATADDRESS} = $$a[3] // 1; $hash->{BATADDRESS} = $$a[3] // 1;
$hash->{GROUP} = $h->{group} // 0; $hash->{GROUP} = $h->{group} // 0;
$hash->{HELPER}{AGE1} = 0;
my $params = { my $params = {
hash => $hash, hash => $hash,
@ -601,24 +615,12 @@ sub startUpdate {
local $SIG{ALRM} = sub { croak 'batterytimeout' }; local $SIG{ALRM} = sub { croak 'batterytimeout' };
if (ReadingsAge ($name, "serialNumber", 6000) >= $age1) { # Abrufklasse statische Werte for my $idx (sort keys %fncls) {
next if($fncls{$idx}{class} eq 'sta' && ReadingsAge ($name, "serialNumber", 6000) < $age1); # Funktionsklasse statische Werte seltener abrufen
ualarm ($uat); ualarm ($uat);
for my $idx (sort keys %fns1) { if (&{$fncls{$idx}{fn}} ($hash, $socket, $readings)) {
if (&{$fns1{$idx}{fn}} ($hash, $socket, $readings)) {
$serial = encode_base64 (Serialize ( {name => $name, readings => $readings} ), "");
$block ? return ($serial) : return \&finishUpdate ($serial);
}
}
ualarm(0);
sleep $wtb if($block);
}
for my $idx (sort keys %fns2) { # Abrufklasse dynamische Werte
ualarm ($uat);
if (&{$fns2{$idx}{fn}} ($hash, $socket, $readings)) {
$serial = encode_base64 (Serialize ( {name => $name, readings => $readings} ), ""); $serial = encode_base64 (Serialize ( {name => $name, readings => $readings} ), "");
$block ? return ($serial) : return \&finishUpdate ($serial); $block ? return ($serial) : return \&finishUpdate ($serial);
} }