Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Hardware
  4. IOBroker Anbindung an einen Kostal Plenticore

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    528

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.6k

IOBroker Anbindung an einen Kostal Plenticore

Geplant Angeheftet Gesperrt Verschoben Hardware
1.3k Beiträge 83 Kommentatoren 467.8k Aufrufe 72 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • StrathColeS StrathCole

    @diginix denke nicht. Vermute, dass es an irgendetwas anderem liegt. Muss ich näher untersuchen, kann aber noch nicht sagen, wann ich dazu komme. Im Moment ist Arbeitsstress hoch drei.

    lemonbiterL Offline
    lemonbiterL Offline
    lemonbiter
    schrieb am zuletzt editiert von lemonbiter
    #918

    @strathcole

    Ich muss mich leider anschließen, habe auch das Problem, dass mein Log mit Warnings vollläuft. Wäre wunderbar, wenn Du Dir das anschauen würdest. Vielen lieben Dank

    LEM

    Das "Desaster" fing bei mir erst ab . 08:16 an - vorher war keine Meldung im LOG dazu - und ab da dann bis jetzt ununterbrochen:

    2021-01-27 08:16:49.942 - info: plenticore.0 (28897) Read forecast data before calcMinSoC.
    2021-01-27 08:16:50.082 - info: plenticore.0 (28897) calcMinSoC for day 1.
    2021-01-27 08:16:50.082 - info: plenticore.0 (28897) Using forecast of day 1 for MinSoC calculation.
    2021-01-27 08:16:50.155 - info: plenticore.0 (28897) calcMinSoC for day 2.
    2021-01-27 08:17:09.132 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
    2021-01-27 08:17:09.133 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
    2021-01-27 08:17:09.133 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
    2021-01-27 08:17:19.842 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
    2021-01-27 08:17:19.843 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
    2021-01-27 08:17:19.843 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
    2021-01-27 08:17:30.553 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
    2021-01-27 08:17:30.554 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
    2021-01-27 08:17:30.554 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
    2021-01-27 08:17:41.043 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
    2021-01-27 08:17:41.091 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
    
    DiginixD 1 Antwort Letzte Antwort
    0
    • lemonbiterL lemonbiter

      @strathcole

      Ich muss mich leider anschließen, habe auch das Problem, dass mein Log mit Warnings vollläuft. Wäre wunderbar, wenn Du Dir das anschauen würdest. Vielen lieben Dank

      LEM

      Das "Desaster" fing bei mir erst ab . 08:16 an - vorher war keine Meldung im LOG dazu - und ab da dann bis jetzt ununterbrochen:

      2021-01-27 08:16:49.942 - info: plenticore.0 (28897) Read forecast data before calcMinSoC.
      2021-01-27 08:16:50.082 - info: plenticore.0 (28897) calcMinSoC for day 1.
      2021-01-27 08:16:50.082 - info: plenticore.0 (28897) Using forecast of day 1 for MinSoC calculation.
      2021-01-27 08:16:50.155 - info: plenticore.0 (28897) calcMinSoC for day 2.
      2021-01-27 08:17:09.132 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
      2021-01-27 08:17:09.133 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
      2021-01-27 08:17:09.133 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
      2021-01-27 08:17:19.842 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
      2021-01-27 08:17:19.843 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
      2021-01-27 08:17:19.843 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
      2021-01-27 08:17:30.553 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
      2021-01-27 08:17:30.554 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
      2021-01-27 08:17:30.554 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
      2021-01-27 08:17:41.043 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
      2021-01-27 08:17:41.091 - warn: plenticore.0 (28897) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
      
      DiginixD Offline
      DiginixD Offline
      Diginix
      schrieb am zuletzt editiert von
      #919

      @lemonbiter Stell den Loglevel einfach erstmal auf "error" dann wird alles was nur info oder warn ist nicht mehr ins Log geschrieben. Nicht ideal aber ansonsten explodiert das Log ab sofort dauerhaft.

      ..:: So long! Tom ::..

      NUC7i3 (Ubuntu Proxmox VM) | Echo Dots 2+3. Gen | Xiaomi Sensoren | Mi Robot 1S | Yeelight | Sonoff | Shelly | H801 RGB | Gosund SP1 | NodeMCU+ESP32 | Kostal Plenticore PV+BYD | openWB

      lemonbiterL 1 Antwort Letzte Antwort
      1
      • DiginixD Diginix

        @lemonbiter Stell den Loglevel einfach erstmal auf "error" dann wird alles was nur info oder warn ist nicht mehr ins Log geschrieben. Nicht ideal aber ansonsten explodiert das Log ab sofort dauerhaft.

        lemonbiterL Offline
        lemonbiterL Offline
        lemonbiter
        schrieb am zuletzt editiert von lemonbiter
        #920

        @diginix sagte in IOBroker Anbindung an einen Kostal Plenticore:

        @lemonbiter Stell den Loglevel einfach erstmal auf "error" dann wird alles was nur info oder warn ist nicht mehr ins Log geschrieben. Nicht ideal aber ansonsten explodiert das Log ab sofort dauerhaft.

        Dank Deines vorherigen Eintrags längst erledigt :-) Ist das bei Dir auch erst morgens losgegangen?

        DiginixD 1 Antwort Letzte Antwort
        0
        • lemonbiterL lemonbiter

          @diginix sagte in IOBroker Anbindung an einen Kostal Plenticore:

          @lemonbiter Stell den Loglevel einfach erstmal auf "error" dann wird alles was nur info oder warn ist nicht mehr ins Log geschrieben. Nicht ideal aber ansonsten explodiert das Log ab sofort dauerhaft.

          Dank Deines vorherigen Eintrags längst erledigt :-) Ist das bei Dir auch erst morgens losgegangen?

          DiginixD Offline
          DiginixD Offline
          Diginix
          schrieb am zuletzt editiert von
          #921

          @lemonbiter Das beginnt ab der Uhrzeit wo "generated" nicht mehr existiert. Wahrs. löscht der Adapter zu Tagesbeginn bzw. ab Sonnenaufgang die Objekte vom Vortag. Bei mir fing es am 2021-01-24 08:04:26 an und am 23.01. abends hatte ich den JS-Controller aktualisiert. Sonnenaufgang ist bei mir zZt kurz vor 8 Uhr. Passt also kausal zusammen.

          ..:: So long! Tom ::..

          NUC7i3 (Ubuntu Proxmox VM) | Echo Dots 2+3. Gen | Xiaomi Sensoren | Mi Robot 1S | Yeelight | Sonoff | Shelly | H801 RGB | Gosund SP1 | NodeMCU+ESP32 | Kostal Plenticore PV+BYD | openWB

          A 1 Antwort Letzte Antwort
          1
          • DiginixD Diginix

            @lemonbiter Das beginnt ab der Uhrzeit wo "generated" nicht mehr existiert. Wahrs. löscht der Adapter zu Tagesbeginn bzw. ab Sonnenaufgang die Objekte vom Vortag. Bei mir fing es am 2021-01-24 08:04:26 an und am 23.01. abends hatte ich den JS-Controller aktualisiert. Sonnenaufgang ist bei mir zZt kurz vor 8 Uhr. Passt also kausal zusammen.

            A Offline
            A Offline
            ak1
            schrieb am zuletzt editiert von
            #922

            @diginix sagte in IOBroker Anbindung an einen Kostal Plenticore:

            @lemonbiter Das beginnt ab der Uhrzeit wo "generated" nicht mehr existiert. Wahrs. löscht der Adapter zu Tagesbeginn bzw. ab Sonnenaufgang die Objekte vom Vortag. Bei mir fing es am 2021-01-24 08:04:26 an und am 23.01. abends hatte ich den JS-Controller aktualisiert. Sonnenaufgang ist bei mir zZt kurz vor 8 Uhr. Passt also kausal zusammen.

            Was wir hier sehen, hängt mit dem js-controller 3.2.x im Latest zusammen. Gefixt muss es allerdings in den jeweiligen Adaptern werden.
            Siehe z.B. hier im Forum

            DiginixD 1 Antwort Letzte Antwort
            0
            • J joefarm

              @tom57 Danke für die Info. Ich bin zwar einen Schritt weiter, hilft mir aber leider nicht. Ich habe meinen Byd jetzt einmal an einen separaten Router gesteckt, der Netzwerkadressen unter 192.168.1.* vergibt. Da komme ich problemlos auf die Byd. Es liegt also definitiv daran, dass mein Heimnetz unter 192.168.5.* unterwegs ist und die WLAN-Adresse auf 192.168.5.1 fest eingestellt ist. Da gibt es irgendwie einen Konflikt. Ich hab aber keine Lust, mein Heimnetz zu ändern. Da sind hunderte von IP Adressen unterwegs, viele davon fest und einige meiner Anwendungen einschließlich iobroker verwenden IP-Adressen unter dem Segment. Leider lässt sich die wlan0-Adresse im Byd nicht ändern...hab auch schon nachgefragt.

              U Offline
              U Offline
              ukl-PV
              schrieb am zuletzt editiert von
              #923

              @joefarm da Dein Heimnetz den Bereich 192.168.5.* hat und der BYD 192.168.1.* brauchst Du nur im Router die subnet Einstellungen auf 255.255.0.0 ändern. Default ist normalerweise 255.255.255.0,
              Dann geht alles, d.h Dein Rechner kann auf alles zugreifen was im Bereich 192.168.. ist.
              Der Bereich muss aber frei sein, manche Router vergeben dort auch GAST LAN/WLAN IP adress Bereiche

              J 1 Antwort Letzte Antwort
              0
              • U ukl-PV

                @joefarm da Dein Heimnetz den Bereich 192.168.5.* hat und der BYD 192.168.1.* brauchst Du nur im Router die subnet Einstellungen auf 255.255.0.0 ändern. Default ist normalerweise 255.255.255.0,
                Dann geht alles, d.h Dein Rechner kann auf alles zugreifen was im Bereich 192.168.. ist.
                Der Bereich muss aber frei sein, manche Router vergeben dort auch GAST LAN/WLAN IP adress Bereiche

                J Offline
                J Offline
                joefarm
                schrieb am zuletzt editiert von
                #924

                @ukl-pv Sorry hab mich falsch ausgedrückt. Ja das ist mir klar, wie ich von einem Subnetz ins andere komme. Das mit dem 1.x Netz hab ich nur zum testen gemacht, ich habe das normalerweise nicht installiert. Ich hab alle meine Geräte im 5.x Netz und das kollidiert mit der WLAN-IP des Byd, aus welchen Gründen auch immer. Eine Lösung ist, einen Router dazwischenzuschalten, das die Byd über LAN ein anderes Subnetz als 5.x routet, nur wollte ich nicht einen Router extra nur für diesen Zweck betreiben. Wenn es aber nicht anders geht, mache ich es vielleicht trotzdem...

                Vielen Dank jedenfalls für die Ideen.

                1 Antwort Letzte Antwort
                0
                • A ak1

                  @diginix sagte in IOBroker Anbindung an einen Kostal Plenticore:

                  @lemonbiter Das beginnt ab der Uhrzeit wo "generated" nicht mehr existiert. Wahrs. löscht der Adapter zu Tagesbeginn bzw. ab Sonnenaufgang die Objekte vom Vortag. Bei mir fing es am 2021-01-24 08:04:26 an und am 23.01. abends hatte ich den JS-Controller aktualisiert. Sonnenaufgang ist bei mir zZt kurz vor 8 Uhr. Passt also kausal zusammen.

                  Was wir hier sehen, hängt mit dem js-controller 3.2.x im Latest zusammen. Gefixt muss es allerdings in den jeweiligen Adaptern werden.
                  Siehe z.B. hier im Forum

                  DiginixD Offline
                  DiginixD Offline
                  Diginix
                  schrieb am zuletzt editiert von
                  #925

                  @ak1 Ist bekannt und von mir so auch schon hier geschrieben und ebenfalls von @StrathCole schon als todo bestätigt.

                  ..:: So long! Tom ::..

                  NUC7i3 (Ubuntu Proxmox VM) | Echo Dots 2+3. Gen | Xiaomi Sensoren | Mi Robot 1S | Yeelight | Sonoff | Shelly | H801 RGB | Gosund SP1 | NodeMCU+ESP32 | Kostal Plenticore PV+BYD | openWB

                  1 Antwort Letzte Antwort
                  0
                  • T tp1de

                    @joefarm Ich habe verstanden, dass Du per WLAN auf die BYD HV-Box kommst. Hat der Router denn eine IP-Adresse aus dem DHCP Bereich für eth0 vergeben?

                    Bei mir sieht das unter Device Information so aus:
                    f5c02ece-7ca6-4b22-b764-5a02068b270a-grafik.png

                    Ein redirect erfolgt bei der eigenen IP nicht.

                    J Offline
                    J Offline
                    joefarm
                    schrieb am zuletzt editiert von
                    #926

                    @tom57 said in IOBroker Anbindung an einen Kostal Plenticore:

                    @joefarm Ich habe verstanden, dass Du per WLAN auf die BYD HV-Box kommst. Hat der Router denn eine IP-Adresse aus dem DHCP Bereich für eth0 vergeben?

                    Bei mir sieht das unter Device Information so aus:
                    f5c02ece-7ca6-4b22-b764-5a02068b270a-grafik.png

                    Ein redirect erfolgt bei der eigenen IP nicht.

                    Doch noch eine Frage: hat es schon jemand geschafft, über eth0:2, d.h. 192.168.6.1 auf die Weboberfläche zu kommen? Oder wofür ist diese Adresse gut?

                    U 1 Antwort Letzte Antwort
                    0
                    • J joefarm

                      @tom57 said in IOBroker Anbindung an einen Kostal Plenticore:

                      @joefarm Ich habe verstanden, dass Du per WLAN auf die BYD HV-Box kommst. Hat der Router denn eine IP-Adresse aus dem DHCP Bereich für eth0 vergeben?

                      Bei mir sieht das unter Device Information so aus:
                      f5c02ece-7ca6-4b22-b764-5a02068b270a-grafik.png

                      Ein redirect erfolgt bei der eigenen IP nicht.

                      Doch noch eine Frage: hat es schon jemand geschafft, über eth0:2, d.h. 192.168.6.1 auf die Weboberfläche zu kommen? Oder wofür ist diese Adresse gut?

                      U Offline
                      U Offline
                      ukl-PV
                      schrieb am zuletzt editiert von
                      #927

                      @joefarm es gibt bei dem HVS Speichern keine Weboberfläche mehr, dafür aber das tool "Be Connect Plus (BCP) V1.4" um auf die Batterie zuzugreifen. Zu finden hier: https://www.eft-systems.de/de/downloads.
                      Das tool findet die BYD alleine (oder auch nicht), nachdem man auf connect gedrückt hat

                      J 1 Antwort Letzte Antwort
                      0
                      • U ukl-PV

                        @joefarm es gibt bei dem HVS Speichern keine Weboberfläche mehr, dafür aber das tool "Be Connect Plus (BCP) V1.4" um auf die Batterie zuzugreifen. Zu finden hier: https://www.eft-systems.de/de/downloads.
                        Das tool findet die BYD alleine (oder auch nicht), nachdem man auf connect gedrückt hat

                        J Offline
                        J Offline
                        joefarm
                        schrieb am zuletzt editiert von
                        #928

                        @ukl-pv Danke, aber es geht um die HV, nicht die HVS. Die ist nur über eine Weboberfläche zu erreichen.

                        J 1 Antwort Letzte Antwort
                        0
                        • J joefarm

                          @ukl-pv Danke, aber es geht um die HV, nicht die HVS. Die ist nur über eine Weboberfläche zu erreichen.

                          J Offline
                          J Offline
                          joefarm
                          schrieb am zuletzt editiert von
                          #929

                          Zur Info, falls es noch nicht bekannt ist:
                          @arteck hat einen Adapter für die Byd geschrieben (Vielen Dank!!), der schon einmal einige Werte aus der HV-Box ausliest, v.a. die Zustände der einzelnen Zellen. Leider fehlen noch die Daten von der Seite "Statistics Information", die ich speziell interessant finde, weil man dann z.B. "Total Charge" und "Total Discharge" sehen kann.
                          Leider sind meine Programmierkenntnisse nicht so großartig, sonst würde ich beim Implementieren mitmachen. Vielleicht kommt es ja noch...

                          Verwendet den Adapter sonst schon jemand?

                          HALH DiginixD 2 Antworten Letzte Antwort
                          0
                          • DiginixD Offline
                            DiginixD Offline
                            Diginix
                            schrieb am zuletzt editiert von Diginix
                            #930

                            Neue Firware vom 29.01.2021 "UI: 01.18.05255 / MC: 01.46 / IOC: 01.45"

                            Changelog:

                            Änderungen
                            Die Funktion AutoUpdate ist nun verfügbar. Es kann gewählt werden zwischen „manuellem Update per Dateiupload“ / „über verfügbare Updates informieren“ / „Updates automatisch durchführen“.
                            Ändern Sie hierzu nach erfolgter Softwareaktualisierung im Updatemenü des Webservers die Updatemethode.

                            ..:: So long! Tom ::..

                            NUC7i3 (Ubuntu Proxmox VM) | Echo Dots 2+3. Gen | Xiaomi Sensoren | Mi Robot 1S | Yeelight | Sonoff | Shelly | H801 RGB | Gosund SP1 | NodeMCU+ESP32 | Kostal Plenticore PV+BYD | openWB

                            1 Antwort Letzte Antwort
                            0
                            • J joefarm

                              Zur Info, falls es noch nicht bekannt ist:
                              @arteck hat einen Adapter für die Byd geschrieben (Vielen Dank!!), der schon einmal einige Werte aus der HV-Box ausliest, v.a. die Zustände der einzelnen Zellen. Leider fehlen noch die Daten von der Seite "Statistics Information", die ich speziell interessant finde, weil man dann z.B. "Total Charge" und "Total Discharge" sehen kann.
                              Leider sind meine Programmierkenntnisse nicht so großartig, sonst würde ich beim Implementieren mitmachen. Vielleicht kommt es ja noch...

                              Verwendet den Adapter sonst schon jemand?

                              HALH Offline
                              HALH Offline
                              HAL
                              schrieb am zuletzt editiert von HAL
                              #931

                              @joefarm Mich würde ein Adapter für BYD HVS interessieren. Bisher klappt damit nur das Windows Programm "Be Connect Plus-V1.4.exe" und abgespeckt die "Be Connect App". Es soll wohl auch mittels pearl Script gehen, aber auf meinem Tinkerboard kriege ich das nicht zum laufen .

                              readBYD.pl

                              #!/usr/bin/perl
                              #
                              # readBYD.pl
                              #
                              # This program reads some current values from a BYD HVS/HVM Premium Battery Box.
                              # There is NO WARRANTY
                              #
                              #
                              # If you find this program useful send me some greetings to forenandi73@kabelmail.de
                              #
                              # redirect STDERR to nul (Windows) or /dev/null (UNIX) if you are not interested in the debugging output
                              
                              use strict;
                              use IO::Socket;
                              use Digest::CRC;
                              
                              # connect to BYD HVS/HVM Premium device, adjust PeerAddr to match your IP
                              my $sock = IO::Socket::INET->new(PeerAddr => '192.168.178.78', PeerPort => '8080', Proto => 'tcp') or die;
                              
                              # commands to be sent to BYD
                              my $tobyd1="\x01\x03\x00\x00\x00\x13\x04\x07";
                              my $tobyd2="\x01\x03\x05\x00\x00\x19\x84\xcc";
                              
                              # unbuffer output on socket, stdout, stderr
                              my $old=select($sock); $|=1; 
                              select(STDOUT);$|=1;
                              select(STDERR);$|=1;
                              select($old);
                              
                              # always read one byte from stream
                              $/=\1;
                              
                              # create empty hash for results
                              my %rh=();
                              
                              # send first command to BYD
                              print $sock $tobyd1;
                              print STDERR "Data1 sent!\n";
                              
                              # read 3 bytes
                              my $b11=<$sock>;	# 0x01
                              my $b12=<$sock>; 	# 0x03
                              my $b13=<$sock>; 	# length of data
                              
                              my $dl1=ord($b13);	# data length
                              printf STDERR "data length=%d\n",$dl1;
                              
                              # read payload
                              my $pl1=$b13;	
                              for (my $i=0;$i<$dl1;$i++)
                              {
                              	$pl1.=<$sock>;
                              }
                              
                              # read checksum bytes
                              my $c11=<$sock>;	# checksum LSB
                              my $c12=<$sock>;	# checksum MSB
                              
                              # get overall checksum from data
                              my $crc1=ord($c12)*256 + ord($c11);
                              
                              # calculate checksum from actual data
                              my $ctx1 = Digest::CRC->new(width=>16, init=>0x0284, xorout=>0x0000, refout=>1, poly=>0x8005, refin=>1, cont=>0);
                              $ctx1->add($pl1);
                              my $digest1=$ctx1->digest;
                              
                              printf STDERR "Payload length: %d, Checksum=%04X, Digest=%04X\n",length($pl1),$crc1,$digest1;
                              
                              if ($b11 ne "\x01" || $b12 ne "\x03" || $crc1 != $digest1)
                              {
                              	die "illegal/unexpected data received";
                              }
                              
                              # print received bytes
                              my $num1=0;
                              for (my $i=0;$i<length($pl1);$i++)
                              {
                              	my $c=substr($pl1,$i,1);
                              	$num1++;
                              	my $o=ord($c);
                              	$c=".";
                              	if ($o > 31 && $o < 127) { $c=chr($o); }
                              
                              	printf STDERR "%03d: %03d %02X %s\n",$num1,$o,$o,$c;
                              }
                              
                              # extract the values from the payload
                              &getvals1(\%rh,$pl1);
                              
                              # send second command
                              print $sock $tobyd2;
                              print STDERR "Data2 sent!\n";
                              
                              # read 3 bytes from response
                              my $b21=<$sock>;	#0x01
                              my $b22=<$sock>; 	#0x03
                              my $b23=<$sock>; 	# length of data
                              
                              my $dl2=ord($b23);	# data length
                              printf STDERR "data length=%d\n",$dl2;
                              
                              # read the payload
                              my $pl2=$b23;		# payload
                              for (my $i=0;$i<$dl2;$i++)
                              {
                              	$pl2.=<$sock>;
                              }
                              
                              # read checksum bytes
                              my $c21=<$sock>;	# checksum LSB
                              my $c22=<$sock>;	# checksum MSB
                              
                              # get overall checksum from data
                              my $crc2=ord($c22)*256 + ord($c21);
                              
                              # calculate checksum from actual payload
                              my $ctx2 = Digest::CRC->new(width=>16, init=>0x0284, xorout=>0x0000, refout=>1, poly=>0x8005, refin=>1, cont=>0);
                              $ctx2->add($pl2);
                              my $digest2=$ctx2->digest;
                              
                              printf STDERR "Payload length: %d, Checksum=%04X, Digest=%04X\n",length($pl2),$crc2,$digest2;
                              
                              if ($b21 ne "\x01" || $b22 ne "\x03" || $crc2 != $digest2)
                              {
                              	die "illegal/unexpected data received";
                              }
                              
                              # print payload bytes
                              my $num2=0;
                              for (my $i=0;$i<length($pl2);$i++)
                              {
                              	my $c=substr($pl2,$i,1);
                              	$num2++;
                              	my $o=ord($c);
                              	$c=".";
                              	if ($o > 31 && $o < 127) { $c=chr($o); }
                              
                              	printf STDERR "%03d: %03d %02X %s\n",$num2,$o,$o,$c;
                              }
                              
                              # extract the values from the payload
                              &getvals2(\%rh,$pl2);
                              
                              # finally print the accumulated results
                              foreach my $k (sort keys %rh)
                              {
                              	printf STDOUT "%s = %s\n",$k,$rh{$k};
                              }
                              
                              $sock->close();
                              print STDERR "End.\n";
                              exit(0);
                              
                              sub getvals1
                              {
                              	my $h=shift @_;
                              	my $pl=shift @_;
                              
                              	$$h{SerialNo}=substr($pl,1,19);
                              	$$h{"BMU-A"}=getvers(substr($pl,25,2));
                              	$$h{"BMU-B"}=getvers(substr($pl,27,2));
                              	$$h{BMS}=getvers(substr($pl,29,2));
                              }
                              
                              sub getvals2
                              {
                              	my $h=shift @_;
                              	my $pl=shift @_;
                              
                              	$$h{SoC}=getshort(substr($pl,1,2));
                              	$$h{CellVhigh}=getshort(substr($pl,3,2))/100;
                              	$$h{CellVlow}=getshort(substr($pl,5,2))/100;
                              	$$h{SoH}=getshort(substr($pl,7,2));
                              	$$h{Vbatt}=getshort(substr($pl,11,2))/100;
                              	$$h{CellTempHigh}=getshort(substr($pl,13,2));
                              	$$h{CellTempLow}=getshort(substr($pl,15,2));
                              	$$h{Vout}=getshort(substr($pl,33,2))/100;
                              
                              	my $currval=getshort(substr($pl,9,2));
                              	
                              	if ($currval < 32768)
                              	{
                              		$$h{Current}=$currval/10;
                              	}
                              	else
                              	{
                              		$$h{Current}=($currval-2**16)/10;
                              	}
                              }
                              
                              sub getshort
                              {
                              	my $v=shift @_;
                              	return(
                              		ord(substr($v,0,1))*256 + ord(substr($v,1,1))
                              	);
                              }
                              
                              sub getvers
                              {
                              	my $v=shift @_;
                              	return(
                              		ord(substr($v,0,1)) . "." .  ord(substr($v,1,1))
                              	);
                              }
                              
                              
                              

                              Alle Raspberry ( 5 ) gegen NUC (N100, 16GB Ram und 500GB M2 SSD, extern 2TB SSD ) mit Proxmox 8.3.3 gewechselt. Läuft absolut super !
                              (Iobroker, Grafana, Teslalogger, Nextcloud, go2rtc, PiHole, IOB-VIS2, Teslamate, homeassistant nur als test)

                              J T 2 Antworten Letzte Antwort
                              0
                              • HALH HAL

                                @joefarm Mich würde ein Adapter für BYD HVS interessieren. Bisher klappt damit nur das Windows Programm "Be Connect Plus-V1.4.exe" und abgespeckt die "Be Connect App". Es soll wohl auch mittels pearl Script gehen, aber auf meinem Tinkerboard kriege ich das nicht zum laufen .

                                readBYD.pl

                                #!/usr/bin/perl
                                #
                                # readBYD.pl
                                #
                                # This program reads some current values from a BYD HVS/HVM Premium Battery Box.
                                # There is NO WARRANTY
                                #
                                #
                                # If you find this program useful send me some greetings to forenandi73@kabelmail.de
                                #
                                # redirect STDERR to nul (Windows) or /dev/null (UNIX) if you are not interested in the debugging output
                                
                                use strict;
                                use IO::Socket;
                                use Digest::CRC;
                                
                                # connect to BYD HVS/HVM Premium device, adjust PeerAddr to match your IP
                                my $sock = IO::Socket::INET->new(PeerAddr => '192.168.178.78', PeerPort => '8080', Proto => 'tcp') or die;
                                
                                # commands to be sent to BYD
                                my $tobyd1="\x01\x03\x00\x00\x00\x13\x04\x07";
                                my $tobyd2="\x01\x03\x05\x00\x00\x19\x84\xcc";
                                
                                # unbuffer output on socket, stdout, stderr
                                my $old=select($sock); $|=1; 
                                select(STDOUT);$|=1;
                                select(STDERR);$|=1;
                                select($old);
                                
                                # always read one byte from stream
                                $/=\1;
                                
                                # create empty hash for results
                                my %rh=();
                                
                                # send first command to BYD
                                print $sock $tobyd1;
                                print STDERR "Data1 sent!\n";
                                
                                # read 3 bytes
                                my $b11=<$sock>;	# 0x01
                                my $b12=<$sock>; 	# 0x03
                                my $b13=<$sock>; 	# length of data
                                
                                my $dl1=ord($b13);	# data length
                                printf STDERR "data length=%d\n",$dl1;
                                
                                # read payload
                                my $pl1=$b13;	
                                for (my $i=0;$i<$dl1;$i++)
                                {
                                	$pl1.=<$sock>;
                                }
                                
                                # read checksum bytes
                                my $c11=<$sock>;	# checksum LSB
                                my $c12=<$sock>;	# checksum MSB
                                
                                # get overall checksum from data
                                my $crc1=ord($c12)*256 + ord($c11);
                                
                                # calculate checksum from actual data
                                my $ctx1 = Digest::CRC->new(width=>16, init=>0x0284, xorout=>0x0000, refout=>1, poly=>0x8005, refin=>1, cont=>0);
                                $ctx1->add($pl1);
                                my $digest1=$ctx1->digest;
                                
                                printf STDERR "Payload length: %d, Checksum=%04X, Digest=%04X\n",length($pl1),$crc1,$digest1;
                                
                                if ($b11 ne "\x01" || $b12 ne "\x03" || $crc1 != $digest1)
                                {
                                	die "illegal/unexpected data received";
                                }
                                
                                # print received bytes
                                my $num1=0;
                                for (my $i=0;$i<length($pl1);$i++)
                                {
                                	my $c=substr($pl1,$i,1);
                                	$num1++;
                                	my $o=ord($c);
                                	$c=".";
                                	if ($o > 31 && $o < 127) { $c=chr($o); }
                                
                                	printf STDERR "%03d: %03d %02X %s\n",$num1,$o,$o,$c;
                                }
                                
                                # extract the values from the payload
                                &getvals1(\%rh,$pl1);
                                
                                # send second command
                                print $sock $tobyd2;
                                print STDERR "Data2 sent!\n";
                                
                                # read 3 bytes from response
                                my $b21=<$sock>;	#0x01
                                my $b22=<$sock>; 	#0x03
                                my $b23=<$sock>; 	# length of data
                                
                                my $dl2=ord($b23);	# data length
                                printf STDERR "data length=%d\n",$dl2;
                                
                                # read the payload
                                my $pl2=$b23;		# payload
                                for (my $i=0;$i<$dl2;$i++)
                                {
                                	$pl2.=<$sock>;
                                }
                                
                                # read checksum bytes
                                my $c21=<$sock>;	# checksum LSB
                                my $c22=<$sock>;	# checksum MSB
                                
                                # get overall checksum from data
                                my $crc2=ord($c22)*256 + ord($c21);
                                
                                # calculate checksum from actual payload
                                my $ctx2 = Digest::CRC->new(width=>16, init=>0x0284, xorout=>0x0000, refout=>1, poly=>0x8005, refin=>1, cont=>0);
                                $ctx2->add($pl2);
                                my $digest2=$ctx2->digest;
                                
                                printf STDERR "Payload length: %d, Checksum=%04X, Digest=%04X\n",length($pl2),$crc2,$digest2;
                                
                                if ($b21 ne "\x01" || $b22 ne "\x03" || $crc2 != $digest2)
                                {
                                	die "illegal/unexpected data received";
                                }
                                
                                # print payload bytes
                                my $num2=0;
                                for (my $i=0;$i<length($pl2);$i++)
                                {
                                	my $c=substr($pl2,$i,1);
                                	$num2++;
                                	my $o=ord($c);
                                	$c=".";
                                	if ($o > 31 && $o < 127) { $c=chr($o); }
                                
                                	printf STDERR "%03d: %03d %02X %s\n",$num2,$o,$o,$c;
                                }
                                
                                # extract the values from the payload
                                &getvals2(\%rh,$pl2);
                                
                                # finally print the accumulated results
                                foreach my $k (sort keys %rh)
                                {
                                	printf STDOUT "%s = %s\n",$k,$rh{$k};
                                }
                                
                                $sock->close();
                                print STDERR "End.\n";
                                exit(0);
                                
                                sub getvals1
                                {
                                	my $h=shift @_;
                                	my $pl=shift @_;
                                
                                	$$h{SerialNo}=substr($pl,1,19);
                                	$$h{"BMU-A"}=getvers(substr($pl,25,2));
                                	$$h{"BMU-B"}=getvers(substr($pl,27,2));
                                	$$h{BMS}=getvers(substr($pl,29,2));
                                }
                                
                                sub getvals2
                                {
                                	my $h=shift @_;
                                	my $pl=shift @_;
                                
                                	$$h{SoC}=getshort(substr($pl,1,2));
                                	$$h{CellVhigh}=getshort(substr($pl,3,2))/100;
                                	$$h{CellVlow}=getshort(substr($pl,5,2))/100;
                                	$$h{SoH}=getshort(substr($pl,7,2));
                                	$$h{Vbatt}=getshort(substr($pl,11,2))/100;
                                	$$h{CellTempHigh}=getshort(substr($pl,13,2));
                                	$$h{CellTempLow}=getshort(substr($pl,15,2));
                                	$$h{Vout}=getshort(substr($pl,33,2))/100;
                                
                                	my $currval=getshort(substr($pl,9,2));
                                	
                                	if ($currval < 32768)
                                	{
                                		$$h{Current}=$currval/10;
                                	}
                                	else
                                	{
                                		$$h{Current}=($currval-2**16)/10;
                                	}
                                }
                                
                                sub getshort
                                {
                                	my $v=shift @_;
                                	return(
                                		ord(substr($v,0,1))*256 + ord(substr($v,1,1))
                                	);
                                }
                                
                                sub getvers
                                {
                                	my $v=shift @_;
                                	return(
                                		ord(substr($v,0,1)) . "." .  ord(substr($v,1,1))
                                	);
                                }
                                
                                
                                
                                J Offline
                                J Offline
                                joefarm
                                schrieb am zuletzt editiert von
                                #932

                                @hal Mit dem HVS kann ich leider nicht helfen, da ich einen HV habe. Und bei der Adapterprogrammierung muss ich leider auch passen.
                                Ich habs zumindest per Javascript und einen request geschafft, einzelne Werte aus der Statistik Info der BYD HV auszulesen, als Info, die @arteck noch nicht implementiert hat. Ging mir erst mal nur um Total Charge und Total Discharge Energy. Noch ziemlich rudimentär...

                                var request = require("request");
                                var username = "user";
                                var pass = "user";
                                var url = "http://" + username + ":" + pass + "@192.168.6.1/asp/StatisticInformation.asp";
                                var cronStr = "3-58/5 * * * *"; // run every 5 minutes starting at 3
                                
                                createState('Solar.BydTotalChargeEnergy', 0, 
                                        {type: 'number',unit: 'kWh',role: 'value', name: 'BydTotalChargeEnergy',desc: 'Byd Gesamte Ladeleistung'});
                                createState('Solar.BydTotalDischargeEnergy', 0, 
                                        {type: 'number',unit: 'kWh',role: 'value', name: 'BydTotalDischargeEnergy',desc: 'Byd Gesamte Entladeleistung'});
                                createState('Solar.BydBatteryEfficiency', 0, 
                                        {type: 'number',unit: '%',role: 'value', name: 'BydBatteryEfficiency',desc: 'Byd Batterieeffizienz'});
                                
                                function readBattStatistic() {
                                    request(url, function(err, state, body) {
                                        if (body) {
                                            //console.log(body);
                                            var match;
                                            var myRegexp = /Charge Energy:[\s\S]+?>(\d{3,5}\.\d{1,3})[\s\S]+?Discharge Energy:[\s\S]+?(\d{3,5}\.\d{1,3})/m;
                                            if ((match = body.match(myRegexp)) !== null) {
                                                //console.log(match);
                                                var charge = parseFloat(match[1]);
                                                //console.log(charge);
                                                setState('Solar.BydTotalChargeEnergy', charge, true);
                                                var discharge = parseFloat(match[2]);
                                                //console.log(discharge);
                                                setState('Solar.BydTotalDischargeEnergy', discharge, true);
                                                setState('Solar.BydBatteryEfficiency', discharge / charge * 100, true);
                                            }
                                            else console.log("not matched");
                                        }
                                    });
                                };
                                
                                schedule(cronStr, readBattStatistic);
                                
                                1 Antwort Letzte Antwort
                                0
                                • BostilB Offline
                                  BostilB Offline
                                  Bostil
                                  schrieb am zuletzt editiert von
                                  #933

                                  Hallo zusammen,

                                  hoffe hier auf Plenticore-Leidgenossen zu treffen, die auch gerne versch. Infos visualisieren möchten.

                                  Würde gerne in einer Wochenansicht (Mo - So) den Hausverbrauch + Erzeugung PV auf Tagesebene nachvollziehen können. Wenn möglich gerne als klassisches Säulendiagramm.

                                  Hat von euch jemand dies schon bewerkstelligt bekommen? Denke, dass @Scrounger material design bar chart von Hilfe sein könnte. Aber hier habe ich so meine Probleme dies zu über ein JSON zu realisieren.

                                  Jemand eine Idee?? DANKE.

                                  Das sind die Datensätze, die die Meisten kennen werden:

                                  fccc25bf-4ef4-4fe8-b156-f26271acbe9a-image.png

                                  StrathColeS 1 Antwort Letzte Antwort
                                  0
                                  • BostilB Bostil

                                    Hallo zusammen,

                                    hoffe hier auf Plenticore-Leidgenossen zu treffen, die auch gerne versch. Infos visualisieren möchten.

                                    Würde gerne in einer Wochenansicht (Mo - So) den Hausverbrauch + Erzeugung PV auf Tagesebene nachvollziehen können. Wenn möglich gerne als klassisches Säulendiagramm.

                                    Hat von euch jemand dies schon bewerkstelligt bekommen? Denke, dass @Scrounger material design bar chart von Hilfe sein könnte. Aber hier habe ich so meine Probleme dies zu über ein JSON zu realisieren.

                                    Jemand eine Idee?? DANKE.

                                    Das sind die Datensätze, die die Meisten kennen werden:

                                    fccc25bf-4ef4-4fe8-b156-f26271acbe9a-image.png

                                    StrathColeS Offline
                                    StrathColeS Offline
                                    StrathCole
                                    schrieb am zuletzt editiert von StrathCole
                                    #934

                                    @bostil Ich nutze Influxdb für die Sammlung (also statt history Adapter) und habe dann Grafana installiert, das auf Influx zugreift.

                                    Mein Graph sieht so aus:

                                    Bildschirmfoto von 2021-02-03 21-51-20.png

                                    So sieht es dann mit der Einstellung 6 Monate aus

                                    Bildschirmfoto von 2021-02-03 22-11-30.png

                                    Und so mit der von dir genannten Woche

                                    Bildschirmfoto von 2021-02-03 22-12-12.png

                                    SolarWatt-Anlage mit 9,6 kWp – KOSTAL Plenticore Plus 10 – BYD B-Box HV 8,96 – Viessmann Vitocal 333g – Zehnder ComfoD 350 (Comfoair 350) mit RS232-Ethernet-Konverter

                                    1 Antwort Letzte Antwort
                                    1
                                    • DiginixD Diginix

                                      @strathcole Ok, na ich hab einfach mal den loglevel vom Adapter auf "error" gestellt, damit das Log nicht explodiert und ich eventuelle Probleme anderer Adapter überhaupt noch sehe.

                                      StrathColeS Offline
                                      StrathColeS Offline
                                      StrathCole
                                      schrieb am zuletzt editiert von StrathCole
                                      #935

                                      @diginix

                                      Kannst du mal bitte folgendes testen:

                                      In der Datei /opt/iobroker/node_modules/iobroker.plenticore/node_modules/@strathcole/iob-lib/lib/iob-lib.js
                                      Zeile 111:
                                      delete objectStates[id];
                                      direkt dahinter noch eine Zeile einfügen:
                                      delete stateStates[id];

                                      Dann Adapter neu starten und nach dem nächsten Löschen der States (also Tageswechsel) den Logmodus wieder umstellen

                                      Danke.

                                      SolarWatt-Anlage mit 9,6 kWp – KOSTAL Plenticore Plus 10 – BYD B-Box HV 8,96 – Viessmann Vitocal 333g – Zehnder ComfoD 350 (Comfoair 350) mit RS232-Ethernet-Konverter

                                      DiginixD 1 Antwort Letzte Antwort
                                      1
                                      • StrathColeS StrathCole

                                        @diginix

                                        Kannst du mal bitte folgendes testen:

                                        In der Datei /opt/iobroker/node_modules/iobroker.plenticore/node_modules/@strathcole/iob-lib/lib/iob-lib.js
                                        Zeile 111:
                                        delete objectStates[id];
                                        direkt dahinter noch eine Zeile einfügen:
                                        delete stateStates[id];

                                        Dann Adapter neu starten und nach dem nächsten Löschen der States (also Tageswechsel) den Logmodus wieder umstellen

                                        Danke.

                                        DiginixD Offline
                                        DiginixD Offline
                                        Diginix
                                        schrieb am zuletzt editiert von
                                        #936

                                        @strathcole In Version 2.1.6 gibt es die Ordnerstruktur so nicht. Ich finde nicht mal eine Datei mit "delete objectStates[id];" unterhalb von /opt/iobroker/node_modules/iobroker.plenticore/
                                        Ich vermute dass es bei dieser Ver. noch in /opt/iobroker/node_modules/iobroker.plenticore/lib/plenticore.js ist?

                                        ..:: So long! Tom ::..

                                        NUC7i3 (Ubuntu Proxmox VM) | Echo Dots 2+3. Gen | Xiaomi Sensoren | Mi Robot 1S | Yeelight | Sonoff | Shelly | H801 RGB | Gosund SP1 | NodeMCU+ESP32 | Kostal Plenticore PV+BYD | openWB

                                        StrathColeS 1 Antwort Letzte Antwort
                                        0
                                        • DiginixD Diginix

                                          @strathcole In Version 2.1.6 gibt es die Ordnerstruktur so nicht. Ich finde nicht mal eine Datei mit "delete objectStates[id];" unterhalb von /opt/iobroker/node_modules/iobroker.plenticore/
                                          Ich vermute dass es bei dieser Ver. noch in /opt/iobroker/node_modules/iobroker.plenticore/lib/plenticore.js ist?

                                          StrathColeS Offline
                                          StrathColeS Offline
                                          StrathCole
                                          schrieb am zuletzt editiert von
                                          #937

                                          @diginix vielleicht hat er das iob-lib direkt im Hauptverzeichnis node_modules installiert. Sollte es schon länger geben.

                                          SolarWatt-Anlage mit 9,6 kWp – KOSTAL Plenticore Plus 10 – BYD B-Box HV 8,96 – Viessmann Vitocal 333g – Zehnder ComfoD 350 (Comfoair 350) mit RS232-Ethernet-Konverter

                                          DiginixD 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          856

                                          Online

                                          32.5k

                                          Benutzer

                                          81.8k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe