Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. IOBroker Anbindung an einen Kostal Plenticore

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    IOBroker Anbindung an einen Kostal Plenticore

    This topic has been deleted. Only users with topic management privileges can see it.
    • Diginix
      Diginix @ak1 last edited by

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

      1 Reply Last reply Reply Quote 0
      • J
        joefarm @tp1de last edited by

        @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 Reply Last reply Reply Quote 0
        • U
          ukl-PV @joefarm last edited by

          @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 Reply Last reply Reply Quote 0
          • J
            joefarm @ukl-PV last edited by

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

            J 1 Reply Last reply Reply Quote 0
            • J
              joefarm @joefarm last edited by

              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?

              HAL Diginix 2 Replies Last reply Reply Quote 0
              • Diginix
                Diginix last edited by Diginix

                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.

                1 Reply Last reply Reply Quote 0
                • HAL
                  HAL @joefarm last edited by 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 T 2 Replies Last reply Reply Quote 0
                  • J
                    joefarm @HAL last edited by

                    @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 Reply Last reply Reply Quote 0
                    • Bostil
                      Bostil last edited by

                      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

                      StrathCole 1 Reply Last reply Reply Quote 0
                      • StrathCole
                        StrathCole @Bostil last edited by StrathCole

                        @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

                        1 Reply Last reply Reply Quote 1
                        • StrathCole
                          StrathCole @Diginix last edited by 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.

                          Diginix 1 Reply Last reply Reply Quote 1
                          • Diginix
                            Diginix @StrathCole last edited by

                            @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?

                            StrathCole 1 Reply Last reply Reply Quote 0
                            • StrathCole
                              StrathCole @Diginix last edited by

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

                              Diginix 1 Reply Last reply Reply Quote 0
                              • Diginix
                                Diginix @StrathCole last edited by

                                @strathcole Stimmt, da liegt die Datei.

                                Sieht nun so aus. Den Loglevel aber erst morgen früh von error zurück nehmen?
                                2da12073-9dab-4e2c-8274-b0a523b25f9a-image.png

                                StrathCole 1 Reply Last reply Reply Quote 0
                                • StrathCole
                                  StrathCole @Diginix last edited by

                                  @diginix kannst du auch jetzt schon

                                  Diginix 2 Replies Last reply Reply Quote 0
                                  • Diginix
                                    Diginix @StrathCole last edited by

                                    @strathcole Ok, erledigt. Ich werde berichten.

                                    1 Reply Last reply Reply Quote 1
                                    • Diginix
                                      Diginix @StrathCole last edited by

                                      @strathcole Die Anpassung hat leider keine Besserung gebracht:

                                      2021-02-04 07:48:47.262 - warn: plenticore.0 (1512441) State "plenticore.0.forecast.day1.power.1h.generated" has no existing object, this might lead to an error in future versions
                                      

                                      Ich habe aber eben noch mal ein "adapter upload" gemacht und somit die Instanz neu gestartet. In den 10 Minuten seit dem sind keine Meldungen mehr gekommen.

                                      StrathCole 1 Reply Last reply Reply Quote 0
                                      • StrathCole
                                        StrathCole @Diginix last edited by

                                        @diginix Hm, ich glaub aber auch die Meldungen kommen immer nur nach Mitternacht, wenn man nicht neu startet, oder? Nach einem Neustart müssten sie ja immer bis zum nächsten Tageswechsel weg sein?

                                        Diginix 1 Reply Last reply Reply Quote 0
                                        • Diginix
                                          Diginix @StrathCole last edited by

                                          @strathcole Das kann natürlich auch sein. Dann würde es morgen trotz der Anpassung wieder losgehen.
                                          Ich dachte nur, dass die gepatchte javascript Datei vllt nicht direkt verarbeitet wird und deswegen hab ich das "upload" getriggert. Was aber eben auch den Neustart der Instanz bedeutet und dadurch nur vermeintlich Ruhe herrscht.

                                          Fazit: Höchstwahrscheinlich hilft dieser Patch noch nicht. Genau wissen wir es aber erst morgen kurz vor 8 Uhr.

                                          StrathCole 1 Reply Last reply Reply Quote 0
                                          • StrathCole
                                            StrathCole @Diginix last edited by

                                            @diginix Interessant ist allerdings: Ich habe gestern extra mal den jscontroller aus dem latest installiert, also 3.2 – und bei mir tritt es nicht auf, habe allerdings auch nicht ohne den Patch getestet.

                                            Diginix 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            900
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            83
                                            1302
                                            391458
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo