martiby / ess Goto Github PK
View Code? Open in Web Editor NEWEnergy Storage System, Multiplus-II in ESS Mode 3 with Pylontech US2000
Energy Storage System, Multiplus-II in ESS Mode 3 with Pylontech US2000
Hallo Martin,
ich baue gerade das System mit einer Pylontech US5000 nach. Als Energiezähler wird ein EVU Smartmeter Lesekopf verwendet, dieser ist auch schon in Meterhub intergriert. (Rest Schnittstelle)
Folgendes ist mir bisher aufgefallen:
Die Installation von "pip install pyserial" ist nicht erwähnt, das log Verzeichnis habe ich manuell anlegen müssen und die Angabe der IP:Port des Webservice sollte im conifg.py definiert werden.
Das BMS der US5000 liefert nach
TX: b'~20024642E00202FD33\r'
nur
RX: b'\x00\x00\x00\x00'
zurück. Ich habe auch noch 9600Baud probiert, gleiches Verhalten.
Hast du dazu eine Doku oder einen Vorschlag, was ich probieren könnte?
Danke,
Gerhard
Hallo Martin,
danke fürs Teilen des tollen Projekts. Mein ESS mit zwei Pylontech US5000 läuft schon ca ein halbes Jahr.
Folgendes ist mir nun aufgefallen:
Geht die Batteriespannung auf ca 47V (hohe Last, SOC 15%), dann blinkt die rote "Low battery" LED am Multiplus II.
Der State im EES Webinterface wird aber falsch mit "temperature" angezeigt.
Lt Doku Technical-Information-Interfacing-with-VE-Bus-products-MK2-Protocol-3-14.pdf ist der Status der Leds korrekt abgefragt.
lg Gerhard
Hallo,
Use RAM ID 128 and higher. Every RAM ID is a word (2 bytes)
The assistant RAM will be filled from ID 128 with ‘assistant RAM records’. Each record starts with a word that contains the AssistantID and the size of the record, and then a number of AssistantRAM words.
RAM ID | contents |
---|---|
128 | ID_Size (1st Assistant) |
129 | 1st AssistantRAM0 |
130 | 1st AssistantRAM1 |
… | … |
RAMn | 1st AssistantRAMn |
RAMn+1 | ID_Size (2nd Assistant in this VE.Bus device, if any) |
RAMn+2 | 2nd AssistantRAM0 |
RAMn+3 | 2nd AssistantRAM1 |
etcetera |
The ID_Size word contains 0xZZZY, where:
So you have to scan the Assistant RAM records by looking at each ID_size record.
The RAM ids of the ESS Assistant are:
Above information is an addendum to the 'Interfacing with VE.Bus products' document. Available from our whitepapers.
Use RAM ID 128 and higher. Every RAM ID is a word (2 bytes)
The assistant RAM will be filled from ID 128 with ‘assistant RAM records’. Each record starts with a word that contains the AssistantID and the size of the record, and then a number of AssistantRAM words.
RAM ID contents
128 ID_Size (1st Assistant)
129 1st AssistantRAM0
130 1st AssistantRAM1
… …
RAMn 1st AssistantRAMn
RAMn+1 ID_Size (2nd Assistant in this VE.Bus device, if any)
RAMn+2 2nd AssistantRAM0
RAMn+3 2nd AssistantRAM1
etcetera
The ID_Size word contains 0xZZZY, where:
ZZZ = the Assistant ID. This is where you can recognize the function of the assistant (ESS ID = 5)
Y = the number of ramIDs that will follow after the ID_Size. At the moment of writing this is 2 for the ESS Assistant version. This can be increased in future releases if more parameters become available.
So you have to scan the Assistant RAM records by looking at each ID_size record.
3.6.3 ESS Assistant RAM IDs
The RAM ids of the ESS Assistant are:
AssistantRAM0: AC-in setpoint in Watts (positive for charge, negative for discharge)
AssistantRAM1-bit 0: 'disable charge'-flag
AssistantRAM1-bit 1: 'disable feed-in'-flag
Above information is an addendum to the 'Interfacing with VE.Bus products' document. Available from our whitepapers.
Ich habe etwas ähnliches in C++ implementiert aber noch nicht veröffentlicht. Bei mir sieht die Ermittlung des richtigen Registers so aus:
// ermittelt die Adresse der Ram Variable für die
// ESS SetPoint Funktion
bool Mk2::CheckEssAssistent()
{
uEssSetPointRamVar=0;
uint16_t nRv=128;
for (int n=0; n<8; n++)
{
uint16_t u=GetRamVar(nRv);
if (u==0)
return false;
// der ESS Assistent hat die Id 5
// der ESS Vorgänger HUB4 die Id 3
if ((u & 0xfff0)==0x0050 || (u & 0xfff0)==0x0030)
{
uEssSetPointRamVar=nRv+1;
return true;
}
nRv+=1 + (u & 0x0f);
}
return false;
}
Hallo Martin,
der MP2 zeit den gemessen SOC verdoppelt an. Um in der Software den richtigen Wert zu erhalten muss hier noch halbiert werden.
Ich habe dies in vebus.py Zeile 220 erledigt.
'soc': soc}
geändert in 'soc':soc / 2}
Gruß Martin
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.