From d39bf78827925258a7f63e0ff738e2c0273b0c41 Mon Sep 17 00:00:00 2001 From: nasseeder1 Date: Mon, 1 Apr 2024 21:04:49 +0000 Subject: [PATCH] 70_PylonLowVoltage: contrib 0.2.5 git-svn-id: https://svn.fhem.de/fhem/trunk@28732 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/contrib/DS_Starter/70_PylonLowVoltage.pm | 518 ++++++++++-------- 1 file changed, 296 insertions(+), 222 deletions(-) diff --git a/fhem/contrib/DS_Starter/70_PylonLowVoltage.pm b/fhem/contrib/DS_Starter/70_PylonLowVoltage.pm index 652c8002d..b06a1a39b 100644 --- a/fhem/contrib/DS_Starter/70_PylonLowVoltage.pm +++ b/fhem/contrib/DS_Starter/70_PylonLowVoltage.pm @@ -122,6 +122,10 @@ BEGIN { # Versions History intern (Versions history by Heiko Maaz) my %vNotesIntern = ( + "0.2.5" => "01.04.2024 _callAnalogValue: more than 5 temperature positions (US5000) ", + "0.2.4" => "29.03.2024 avoid possible Illegal division by zero at line 1438 ", + "0.2.3" => "19.03.2024 edit commandref ", + "0.2.2" => "20.02.2024 correct commandref ", "0.2.1" => "18.02.2024 doOnError: print out faulty response, Forum:https://forum.fhem.de/index.php?msg=1303912 ", "0.2.0" => "15.12.2023 extend possible number of batteries up to 14 ", "0.1.11" => "28.10.2023 add needed data format to commandref ", @@ -1152,11 +1156,11 @@ sub _callAnalogValue { for my $z (1..$pcc) { my $fz = sprintf "%02d", $z; # formatierter Zähler - $readings->{'cellVoltage_'.$fz} = sprintf "%.3f", hex(substr($res, $bpos, 4)) / 1000; # Pos 19 - 75 bei 15 Zellen + $readings->{'cellVoltage_'.$fz} = sprintf "%.3f", hex(substr($res, $bpos, 4)) / 1000; # Pos 19 -> 75 bei 15 Zellen $bpos += 4; # letzter Durchlauf: Pos 79 bei 15 Zellen, Pos 83 bei 16 Zellen } - - $readings->{numberTempPos} = hex(substr($res, $bpos, 2)); # Anzahl der jetzt folgenden Teperaturpositionen -> 5 + + $readings->{numberTempPos} = hex(substr($res, $bpos, 2)); # Anzahl der jetzt folgenden Temperaturpositionen -> 5 oder mehr (US5000: 6) $bpos += 2; $readings->{bmsTemperature} = (hex (substr($res, $bpos, 4)) - 2731) / 10; # Pos 81 bei 15 Zellen @@ -1174,7 +1178,13 @@ sub _callAnalogValue { $readings->{'cellTemperature_13'.$pcc} = (hex (substr($res, $bpos, 4)) - 2731) / 10; # Pos 97 $bpos += 4; - my $current = hex (substr($res, $bpos, 4)); # Pos 101 + for my $t (6..$readings->{numberTempPos}) { + $t = 'add'.sprintf "%02d", $t; + $readings->{'cellTemperature_'.$t} = (hex (substr($res, $bpos, 4)) - 2731) / 10; # mehr als 5 Temperaturpositionen (z.B. US5000) + $bpos += 4; + } + + my $current = hex (substr($res, $bpos, 4)); # Pos 101 (bei 5 Temperaturpositionen) $bpos += 4; $readings->{packVolt} = sprintf "%.3f", hex (substr($res, $bpos, 4)) / 1000; # Pos 105 @@ -1432,8 +1442,8 @@ sub additionalReadings { my ($vmax, $vmin); - $readings->{averageCellVolt} = sprintf "%.3f", $readings->{packVolt} / $readings->{packCellcount} if(defined $readings->{packCellcount}); - $readings->{packSOC} = sprintf "%.2f", ($readings->{packCapacityRemain} / $readings->{packCapacity} * 100) if(defined $readings->{packCapacity}); + $readings->{averageCellVolt} = sprintf "%.3f", $readings->{packVolt} / $readings->{packCellcount} if($readings->{packCellcount}); + $readings->{packSOC} = sprintf "%.2f", ($readings->{packCapacityRemain} / $readings->{packCapacity} * 100) if($readings->{packCapacity}); $readings->{packPower} = sprintf "%.2f", $readings->{packCurrent} * $readings->{packVolt}; for (my $i=1; $i <= $readings->{packCellcount}; $i++) { @@ -1503,41 +1513,41 @@ return; =begin html - -

PylonLowVoltage

-
-Module for integration of low voltage batteries with battery management system (BMS) of the manufacturer Pylontech via -RS485/Ethernet gateway. Communication to the RS485 gateway takes place exclusively via an Ethernet connection.
-The module has been successfully used so far with Pylontech batteries of the following types:
+ +

PylonLowVoltage

+
+ Module for integration of low voltage batteries with battery management system (BMS) of the manufacturer Pylontech via + RS485/Ethernet gateway. Communication to the RS485 gateway takes place exclusively via an Ethernet connection.
+ The module has been successfully used so far with Pylontech batteries of the following types:
- + -The following devices have been successfully used as RS485 Ethernet gateways to date:
- + The following devices have been successfully used as RS485 Ethernet gateways to date:
+ -In principle, any other RS485/Ethernet gateway should also be compatible. -

+ In principle, any other RS485/Ethernet gateway should also be compatible. +

-Requirements -

-This module requires the Perl modules: - -The data format must be set on the RS485 gateway as follows: -
+ The data format must be set on the RS485 gateway as follows: +

+ + Example configuration of a Waveshare RS485 to Ethernet converter +

+ The converter's web interface offers several pages with settings. The relevant settings are shown below + as an example. The assignment of a fixed IP address is assumed in advance. +
-Limitations -
-The module currently supports a maximum of 14 batteries (master + 13 slaves) in one group. -

+ +
- -Definition - -Mode of operation - + Mode of operation + - -Get -
- - -Attributes - - - -Readings - +

=end html =begin html_DE - -

PylonLowVoltage

-
-Modul zur Einbindung von Niedervolt-Batterien mit Batteriemanagmentsystem (BMS) des Herstellers Pylontech über RS485 via -RS485/Ethernet-Gateway. Die Kommunikation zum RS485-Gateway erfolgt ausschließlich über eine Ethernet-Verbindung.
-Das Modul wurde bisher erfolgreich mit Pylontech Batterien folgender Typen eingesetzt:
+ +

PylonLowVoltage

+
+ Modul zur Einbindung von Niedervolt-Batterien mit Batteriemanagmentsystem (BMS) des Herstellers Pylontech über RS485 via + RS485/Ethernet-Gateway. Die Kommunikation zum RS485-Gateway erfolgt ausschließlich über eine Ethernet-Verbindung.
+ Das Modul wurde bisher erfolgreich mit Pylontech Batterien folgender Typen eingesetzt:
- + -Als RS485-Ethernet-Gateways wurden bisher folgende Geräte erfolgreich eingesetzt:
- + Als RS485-Ethernet-Gateways wurden bisher folgende Geräte erfolgreich eingesetzt:
+ -Prinzipiell sollte auch jedes andere RS485/Ethernet-Gateway kompatibel sein. -

+ Prinzipiell sollte auch jedes andere RS485/Ethernet-Gateway kompatibel sein. +

-Voraussetzungen -

-Dieses Modul benötigt die Perl-Module: - -Das Datenformat muß auf dem RS485 Gateway wie folgt eingestellt werden: -
+ Das Datenformat muß auf dem RS485 Gateway wie folgt eingestellt werden: +

+ + Beispielkonfiguration eines Waveshare RS485 to Ethernet Converters +

+ Das Webinterface des Konverters bietet mehrere Seiten mit Einstellungen an. Die relevanten Einstellungen sind nachfolgend + beispielhaft gezeigt. Die Zuweisung einer festen IP-Adresse wird vorab vorausgesetzt. +
-Einschränkungen -
-Das Modul unterstützt zur Zeit maximal 14 Batterien (Master + 13 Slaves) in einer Gruppe. -

+ +
- -Definition - -Arbeitsweise - + Arbeitsweise + - -Get -
- - -Attribute - -
    + + Attribute + +
    • disable 0|1
      Aktiviert/deaktiviert die Gerätedefinition. @@ -1822,66 +1896,66 @@ Batteriemanagementsystem über die RS485-Schnittstelle zur Verfügung stellt. Der automatisch ermittelte Batterietyp (Reading batteryType) wird durch die angegebene Zeichenfolge ersetzt.

    • -
    +
- -Readings -
    -
  • averageCellVolt
    mittlere Zellenspannung (V)
  • -
  • bmsTemperature
    Temperatur (°C) des Batteriemanagementsystems
  • -
  • cellTemperature_0104
    Temperatur (°C) der Zellenpacks 1 bis 4
  • -
  • cellTemperature_0508
    Temperatur (°C) der Zellenpacks 5 bis 8
  • -
  • cellTemperature_0912
    Temperatur (°C) der Zellenpacks 9 bis 12
  • -
  • cellTemperature_1315
    Temperatur (°C) der Zellenpacks 13 bis 15
  • -
  • cellVoltage_XX
    Zellenspannung (V) des Zellenpacks XX. In dem Batteriemodul sind "packCellcount" - Zellenpacks in Serie geschaltet verbaut. Jedes Zellenpack besteht aus parallel - geschalten Einzelzellen.
  • -
  • chargeCurrentLimit
    aktueller Grenzwert für den Ladestrom (A)
  • -
  • chargeEnable
    aktuelles Flag Laden erlaubt
  • -
  • chargeFullRequest
    aktuelles Flag Batteriemodul voll laden (notfalls aus dem Netz)
  • -
  • chargeImmediatelySOCXX
    aktuelles Flag Batteriemodul sofort laden - (05: SOC Grenze 5-9%, 09: SOC Grenze 9-13%)
  • -
  • chargeVoltageLimit
    aktuelle Ladespannungsgrenze (V) des Batteriemoduls
  • -
  • dischargeCurrentLimit
    aktueller Grenzwert für den Entladestrom (A)
  • -
  • dischargeEnable
    aktuelles Flag Entladen erlaubt
  • -
  • dischargeVoltageLimit
    aktuelle Entladespannungsgrenze (V) des Batteriemoduls
  • + + Readings +
      +
    • averageCellVolt
      mittlere Zellenspannung (V)
    • +
    • bmsTemperature
      Temperatur (°C) des Batteriemanagementsystems
    • +
    • cellTemperature_0104
      Temperatur (°C) der Zellenpacks 1 bis 4
    • +
    • cellTemperature_0508
      Temperatur (°C) der Zellenpacks 5 bis 8
    • +
    • cellTemperature_0912
      Temperatur (°C) der Zellenpacks 9 bis 12
    • +
    • cellTemperature_1315
      Temperatur (°C) der Zellenpacks 13 bis 15
    • +
    • cellVoltage_XX
      Zellenspannung (V) des Zellenpacks XX. In dem Batteriemodul sind "packCellcount" + Zellenpacks in Serie geschaltet verbaut. Jedes Zellenpack besteht aus parallel + geschalten Einzelzellen.
    • +
    • chargeCurrentLimit
      aktueller Grenzwert für den Ladestrom (A)
    • +
    • chargeEnable
      aktuelles Flag Laden erlaubt
    • +
    • chargeFullRequest
      aktuelles Flag Batteriemodul voll laden (notfalls aus dem Netz)
    • +
    • chargeImmediatelySOCXX
      aktuelles Flag Batteriemodul sofort laden + (05: SOC Grenze 5-9%, 09: SOC Grenze 9-13%)
    • +
    • chargeVoltageLimit
      aktuelle Ladespannungsgrenze (V) des Batteriemoduls
    • +
    • dischargeCurrentLimit
      aktueller Grenzwert für den Entladestrom (A)
    • +
    • dischargeEnable
      aktuelles Flag Entladen erlaubt
    • +
    • dischargeVoltageLimit
      aktuelle Entladespannungsgrenze (V) des Batteriemoduls
    • -
    • moduleSoftwareVersion_manufacture
      Firmware Version des Batteriemoduls
    • +
    • moduleSoftwareVersion_manufacture
      Firmware Version des Batteriemoduls
    • -
    • packAlarmInfo
      Alarmstatus (ok - Batterienmodul ist in Ordnung, failure - im Batteriemodul liegt - eine Störung vor)
    • -
    • packCapacity
      nominale Kapazität (Ah) des Batteriemoduls
    • -
    • packCapacityRemain
      aktuelle Kapazität (Ah) des Batteriemoduls
    • -
    • packCellcount
      Anzahl der Zellenpacks im Batteriemodul
    • -
    • packCurrent
      aktueller Ladestrom (+) bzw. Entladstrom (-) des Batteriemoduls (A)
    • -
    • packCycles
      Anzahl der Vollzyklen - Die Anzahl der Zyklen ist in gewisserweise ein Maß für den - Verschleiß der Batterie. Eine komplettes Laden und Entladen wird als ein Zyklus - gewertet. Wird die Batterie 50% entladen und wieder aufgeladen, zählt das nur als ein - halber Zyklus. Pylontech gibt eine Lebensdauer von mehreren 1000 Zyklen an - (siehe Datenblatt).
    • -
    • packImbalance
      aktuelles Ungleichgewicht der Spannung zwischen den Einzelzellen des - Batteriemoduls (%)
    • -
    • packPower
      aktuell bezogene (+) bzw. gelieferte (-) Leistung (W) des Batteriemoduls
    • -
    • packSOC
      Ladezustand (%) des Batteriemoduls
    • -
    • packState
      aktueller Arbeitsstatus des Batteriemoduls
    • -
    • packVolt
      aktuelle Spannung (V) des Batteriemoduls
    • +
    • packAlarmInfo
      Alarmstatus (ok - Batterienmodul ist in Ordnung, failure - im Batteriemodul liegt + eine Störung vor)
    • +
    • packCapacity
      nominale Kapazität (Ah) des Batteriemoduls
    • +
    • packCapacityRemain
      aktuelle Kapazität (Ah) des Batteriemoduls
    • +
    • packCellcount
      Anzahl der Zellenpacks im Batteriemodul
    • +
    • packCurrent
      aktueller Ladestrom (+) bzw. Entladstrom (-) des Batteriemoduls (A)
    • +
    • packCycles
      Anzahl der Vollzyklen - Die Anzahl der Zyklen ist in gewisserweise ein Maß für den + Verschleiß der Batterie. Eine komplettes Laden und Entladen wird als ein Zyklus + gewertet. Wird die Batterie 50% entladen und wieder aufgeladen, zählt das nur als ein + halber Zyklus. Pylontech gibt eine Lebensdauer von mehreren 1000 Zyklen an + (siehe Datenblatt).
    • +
    • packImbalance
      aktuelles Ungleichgewicht der Spannung zwischen den Einzelzellen des + Batteriemoduls (%)
    • +
    • packPower
      aktuell bezogene (+) bzw. gelieferte (-) Leistung (W) des Batteriemoduls
    • +
    • packSOC
      Ladezustand (%) des Batteriemoduls
    • +
    • packState
      aktueller Arbeitsstatus des Batteriemoduls
    • +
    • packVolt
      aktuelle Spannung (V) des Batteriemoduls
    • -
    • paramCellHighVoltLimit
      Systemparameter obere Spannungsgrenze (V) einer Zelle
    • -
    • paramCellLowVoltLimit
      Systemparameter untere Spannungsgrenze (V) einer Zelle (Alarmgrenze)
    • -
    • paramCellUnderVoltLimit
      Systemparameter Unterspannungsgrenze (V) einer Zelle (Schutzgrenze)
    • -
    • paramChargeCurrentLimit
      Systemparameter Ladestromgrenze (A) des Batteriemoduls
    • -
    • paramChargeHighTempLimit
      Systemparameter obere Temperaturgrenze (°C) bis zu der die Batterie lädt
    • -
    • paramChargeLowTempLimit
      Systemparameter untere Temperaturgrenze (°C) bis zu der die Batterie lädt
    • -
    • paramDischargeCurrentLimit
      Systemparameter Entladestromgrenze (A) des Batteriemoduls
    • -
    • paramDischargeHighTempLimit
      Systemparameter obere Temperaturgrenze (°C) bis zu der die Batterie entlädt
    • -
    • paramDischargeLowTempLimit
      Systemparameter untere Temperaturgrenze (°C) bis zu der die Batterie entlädt
    • -
    • paramModuleHighVoltLimit
      Systemparameter obere Spannungsgrenze (V) des Batteriemoduls
    • -
    • paramModuleLowVoltLimit
      Systemparameter untere Spannungsgrenze (V) des Batteriemoduls (Alarmgrenze)
    • -
    • paramModuleUnderVoltLimit
      Systemparameter Unterspannungsgrenze (V) des Batteriemoduls (Schutzgrenze)
    • -
    • protocolVersion
      PYLON low voltage RS485 Prokollversion
    • -
    • serialNumber
      Seriennummer
    • -
    -

    +
  • paramCellHighVoltLimit
    Systemparameter obere Spannungsgrenze (V) einer Zelle
  • +
  • paramCellLowVoltLimit
    Systemparameter untere Spannungsgrenze (V) einer Zelle (Alarmgrenze)
  • +
  • paramCellUnderVoltLimit
    Systemparameter Unterspannungsgrenze (V) einer Zelle (Schutzgrenze)
  • +
  • paramChargeCurrentLimit
    Systemparameter Ladestromgrenze (A) des Batteriemoduls
  • +
  • paramChargeHighTempLimit
    Systemparameter obere Temperaturgrenze (°C) bis zu der die Batterie lädt
  • +
  • paramChargeLowTempLimit
    Systemparameter untere Temperaturgrenze (°C) bis zu der die Batterie lädt
  • +
  • paramDischargeCurrentLimit
    Systemparameter Entladestromgrenze (A) des Batteriemoduls
  • +
  • paramDischargeHighTempLimit
    Systemparameter obere Temperaturgrenze (°C) bis zu der die Batterie entlädt
  • +
  • paramDischargeLowTempLimit
    Systemparameter untere Temperaturgrenze (°C) bis zu der die Batterie entlädt
  • +
  • paramModuleHighVoltLimit
    Systemparameter obere Spannungsgrenze (V) des Batteriemoduls
  • +
  • paramModuleLowVoltLimit
    Systemparameter untere Spannungsgrenze (V) des Batteriemoduls (Alarmgrenze)
  • +
  • paramModuleUnderVoltLimit
    Systemparameter Unterspannungsgrenze (V) des Batteriemoduls (Schutzgrenze)
  • +
  • protocolVersion
    PYLON low voltage RS485 Prokollversion
  • +
  • serialNumber
    Seriennummer
  • +
+

=end html_DE