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:
parent
8865178572
commit
0cca634438
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user