Sledování Epeveru pomocí ESP 32
Home Assistant, Arduino, SDS, Raspberry, Linux, vzdálený dohled, automatizace, měření, opensource, closedsource, hotová řešení, DIY, stavebnice, komponenty, software, postupy, návody, schémata, rady, zkušenosti ...
-
- Příspěvky: 406
- Registrován: čtv dub 21, 2022 7:15 pm
- Lokalita: Poblíž Hradce Králové
- Systémové napětí: 48V
Sledování Epeveru pomocí ESP 32
Ahoj měl bych prosbu,
není tu někdo s funkční komunikací rs485 mezi ESP 32 a regulátorem Epever Tracer AN či měničem IPower, kdo by byl ochoten se podělit o binarku ?
Nějak se v tom plácám a nemůžu se hnout z místa.
Předem děkuji.
Pěkný den všem.
není tu někdo s funkční komunikací rs485 mezi ESP 32 a regulátorem Epever Tracer AN či měničem IPower, kdo by byl ochoten se podělit o binarku ?
Nějak se v tom plácám a nemůžu se hnout z místa.
Předem děkuji.
Pěkný den všem.
16 panelů DHM-72L9-450 Wp = 7200Wp jih, sklon 17°
2 regulátory EPever Tracer 6415 AN = 6000W
Paralelní adaptér PAL-ADP-50AN
Hlavní měniče Multiplus2 5000VA v sérii 4 + 4kW
Měniče EPever IP+ pro vytěžování 5, 3 a 2kW
135 + 135 + 230 = 500Ah LiFePo na 48V
3* BMS a Balancer Seplos
2 regulátory EPever Tracer 6415 AN = 6000W
Paralelní adaptér PAL-ADP-50AN
Hlavní měniče Multiplus2 5000VA v sérii 4 + 4kW
Měniče EPever IP+ pro vytěžování 5, 3 a 2kW
135 + 135 + 230 = 500Ah LiFePo na 48V
3* BMS a Balancer Seplos
-
- Příspěvky: 3934
- Registrován: pon úno 07, 2022 10:11 pm
- Lokalita: Zlaté Hory / Olomouc
- Systémové napětí: 24V
- Výkon panelů [Wp]: 3600
- Kapacita baterie [kWh]: 16
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Zlaté Hory
Re: Sledování Epeveru pomocí ESP 32
Tak pokud ti to pomůže měl jsem ESP32 s převodníčkem na RS485 ovšem vyčítání příkazů je pro RTU modbus mustu.
Kód: Vybrat vše
// github link: https://github.com/4-20ma/ModbusMaster
#include <ModbusMaster.h>
#include <WiFi.h>
//#include <WiFiClient.h>
#include <WebServer.h>
//#include <ESPmDNS.h>
#include <Update.h>
#include <NTPClient.h>
#define VERZE "v2.6"
#define NAZEV_1 "Menič č.1 (horní)"
#define NAZEV_2 "Menič č.2 (dolní)"
#define MENIC_1 5016248
#define MENIC_2 6171960
#define LEDPIN 2
#define NTP_SERVER "0.cz.pool.ntp.org"
#define LETNI_CAS 0
// části www stránek
#define WWW_UVOD "<!doctype html><div style=\"text-align: center\">\n"
#define WWW_ODDELOVAC "<hr align=\"center\" width=\"95%\">\n"
#define WWW_PATICKA "<p><table style=\"margin: auto;\"><tr><td><form action=\"/\"><input style=\"color: green; font-size: large;\" type=\"submit\" value=\"Data\"/></form></td><td><form action=\"/config\"><input style=\"color: green; font-size: large;\" type=\"submit\" value=\"Config\"/></form></td><td><form action=\"/setup\"><input style=\"color: green; font-size: large;\" type=\"submit\" value=\"Setup\"/></form></td></tr></table></p>\n" WWW_ODDELOVAC "<p>© " __DATE__ " Petr Šobáň " VERZE " (" __TIME__ ") <a href=\"/help\">pomoc</a></p></div>"
#define SERVERFIRMWARE WWW_UVOD"<p>Upgrade firmware!</p><p style=\"color: red\">Update špatného souboru může znefunkčnit zařízení!!!!</p>"WWW_ODDELOVAC"<form method='POST' action='/update' enctype='multipart/form-data'><input style='color: green; font-size: large' type='file' name='update'> <input style='color: red; font-size: large' type='submit' value='Update'></form>"WWW_ODDELOVAC WWW_PATICKA
#define RESTART "<p style=\"color: red\">......Restart......</p>"
// Podprogramy pro NTP
#ifdef LETNI_CAS
const long utcOffsetInSeconds = 7200; //posunuti casove zony 2h
#else
const long utcOffsetInSeconds = 3600; //posunuti casove zony 1h
#endif
const char daysOfTheWeek[7][16] = {"Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota"};
// Define NTP Client to get time
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, NTP_SERVER, utcOffsetInSeconds);
// konec NTP
// Replace the next variables with your SSID/Password combination
const char* ssid = "ssid";
const char* password = "heslo";
//WiFiClient espClient;
// reconect wifi
unsigned long previousMillis = 0;
unsigned long interval = 30000;
// incializace webserveru na portu 80
WebServer server(80);
// Nazev měniče
/* The true ESP32 chip ID is essentially its MAC address.
This sketch provides an alternate chip ID that matches
the output of the ESP.getChipId() function on ESP8266
(i.e. a 32-bit integer matching the last 3 bytes of
the MAC address. This is less unique than the
MAC address chip ID, but is helpful when you need
an identifier that can be no more than a 32-bit integer
(like for switch...case).
created 2020-06-07 by cweinhofer
with help from Cicicok */
String nazev_menice(void) {
uint32_t chipId = 0;
String message;
for(int i=0; i<17; i=i+8) {
chipId |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;
}
switch (chipId) {
case MENIC_1:
message = NAZEV_1;
break;
case MENIC_2:
message = NAZEV_2;
break;
default:
message = "Měnič č. ";
message += String(chipId);
break;
}
return message;
}
// wifi
void reconnect_wifi() {
unsigned long currentMillis = millis();
// if WiFi is down, try reconnecting every CHECK_WIFI_TIME seconds
if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {
Serial.print(millis());
Serial.println("Reconnecting to WiFi...");
WiFi.disconnect();
WiFi.reconnect();
previousMillis = currentMillis;
}
}
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
/* Modbus stuff */
#define MODBUS_DIR_PIN 4 // connect DR, RE pin of MAX485 to gpio 4
#define MODBUS_RX_PIN 18 // Rx pin
#define MODBUS_TX_PIN 19 // Tx pin
#define MODBUS_SERIAL_BAUD 19200 // Baud rate for esp32 and max485 communication Must
//Initialize the ModbusMaster object as node
ModbusMaster node;
// Pin 4 made high for Modbus transmision mode
void modbusPreTransmission()
{
digitalWrite(MODBUS_DIR_PIN, HIGH);
delay(20);
}
// Pin 4 made low for Modbus receive mode
void modbusPostTransmission()
{
digitalWrite(MODBUS_DIR_PIN, LOW);
delay(20);
}
String modbus_chyba(int chyba)
{
String message = "ERROR: ";
switch (chyba) {
case 0x01:
message += "Modbus protocol illegal function exception.";
break;
case 0x02:
message += "Modbus protocol illegal data address exception.";
break;
case 0x03:
message += "Modbus protocol illegal data value exception.";
break;
case 0x04:
message += "Modbus protocol slave device failure exception.";
break;
case 0x00:
message += "ModbusMaster success.";
break;
case 0xE0:
message += "ModbusMaster invalid response slave ID exception.";
break;
case 0xE1:
message += "ModbusMaster invalid response function exception.";
break;
case 0xE2:
message += "ModbusMaster response timed out exception.";
break;
case 0xE3:
message += "ModbusMaster invalid response CRC exception.";
break;
default:
message += "Neznámá chyba.";
break;
}
return message;
}
// Bez opakování
int ReadModbusMust(int registr, int pocet) {
uint8_t result;
// Zapnutí led
digitalWrite(LEDPIN, HIGH);
// Přečtení dat do buferru
result = node.readHoldingRegisters(registr, pocet);
if (result == node.ku8MBSuccess) {
Serial.println("Success, Received data: ");
}
else {
Serial.print("Failed, Response Code: ");
Serial.print(result, HEX);
Serial.println("");
}
// vypnutí led
digitalWrite(LEDPIN, LOW);
return result;
}
/*
// S opakováním po neúspěchu
int ReadModbusMust(int registr, int pocet) {
uint8_t result;
int pruchody = 0;
// maximální počet pokusu o cteni
const int max_pruchody = 5;
// Zapnutí led
digitalWrite(LEDPIN, HIGH);
do {
// Přečtení dat do buferru
result = node.readHoldingRegisters(registr, pocet);
if (result == node.ku8MBSuccess) {
Serial.println("Success, Received data: ");
}
else {
Serial.print("Failed, Response Code: ");
Serial.print(result, HEX);
Serial.println("");
delay(300);
}
++pruchody;
if (pruchody > max_pruchody) break;
} while (result != node.ku8MBSuccess);
// vypnutí led
digitalWrite(LEDPIN, LOW);
return result;
}
*/
int WriteModbusMust(int registr, int hodnota) {
uint8_t result;
// Zapnutí led
digitalWrite(LEDPIN, HIGH);
// Zapis dat
result = node.writeSingleRegister(registr, hodnota);
if (result == node.ku8MBSuccess) {
Serial.println("Success, Write data OK");
}
else {
Serial.print("Failed, Response Code: ");
Serial.print(result, HEX);
Serial.println("");
}
// vypnutí led
digitalWrite(LEDPIN, LOW);
return result;
}
// přečtení registru
// parametry registr a pocet
// http://menic1.soban.cz/read?registr=20000&pocet=1
void www_read_must() {
int registr_must;
int pocet_must;
int chyba;
int i;
String nazev = "registr";
String pocet = "pocet";
String arg_nazev;
String arg_hodnota;
String message;
// default hodnoty
pocet_must = 1;
registr_must = 20000;
message = " ";
// načtení parametrů
for (i = 0; i < server.args(); i++) {
arg_nazev = server.argName(i);
arg_hodnota = server.arg(i);
if ( nazev == arg_nazev ) {
registr_must = arg_hodnota.toInt();
}
if ( pocet == arg_nazev ) {
pocet_must = arg_hodnota.toInt();
}
}
// precteni dat
// static const uint8_t ku8MaxBufferSize= 64; ///< size of response/transmit buffers
if (pocet_must > 64)
{
pocet_must = 64;
}
chyba = ReadModbusMust(registr_must, pocet_must);
if( chyba == 0) {
//data ok
for (int i = 0; i < pocet_must; i++)
{
message += String(node.getResponseBuffer(i));
message += ",";
}
message += "END\n";
server.sendHeader("Cache-Control","no-store, max-age=0");
server.send(200, "text/plain", message);
}
else {
// chyba
message = modbus_chyba(chyba);
server.sendHeader("Cache-Control","no-store, max-age=0");
server.send(504, "text/plain", message);
}
}
// zapis registru
// parametry registr a hodnota
// http://menic1.soban.cz/read?registr=20000&hodnota=1
void www_write_must() {
int registr_must;
int hodnota_must;
int chyba;
int i;
bool nastav_registr;
bool nastav_hodnota;
String nazev = "registr";
String pocet = "hodnota";
String arg_nazev;
String arg_hodnota;
String message;
// default hodnoty
nastav_registr = false;
nastav_hodnota = false;
// načtení parametrů
for (i = 0; i < server.args(); i++) {
arg_nazev = server.argName(i);
arg_hodnota = server.arg(i);
if ( nazev == arg_nazev ) {
registr_must = arg_hodnota.toInt();
nastav_registr = true;
}
if ( pocet == arg_nazev ) {
hodnota_must = arg_hodnota.toInt();
nastav_hodnota = true;
}
}
if (nastav_hodnota & nastav_registr) {
// zapis dat
chyba = WriteModbusMust(registr_must, hodnota_must);
if( chyba == 0) {
//data ok
message = "OK,END\n";
}
else {
// chyba
message = modbus_chyba(chyba);
}
}
else message = "Nesprávné argumenty,END\n";
server.sendHeader("Cache-Control","no-store, max-age=0");
server.send(200, "text/plain", message);
}
// Stránky www
// Nenalezena stránka
void handleNotFound() {
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.sendHeader("Cache-Control","no-store, max-age=0");
server.send(404, "text/plain", message);
}
// hlavní stránka
void handleRoot() {
int hodnota;
float i;
int chyba;
float proud_baterie;
chyba = ReadModbusMust(25274, 1);
i = node.getResponseBuffer(0);
if (i > 32767) i = ( i - float(65536) );
proud_baterie = i;
// načtení hodnoty času
timeClient.update();
String den = daysOfTheWeek[timeClient.getDay()];
String cas = String (timeClient.getFormattedTime());
delay(300);
chyba = ReadModbusMust(25201, 33);
String message = "<html><head><meta http-equiv=\"refresh\" content=\"30\"></head><body>";
message += WWW_UVOD;
message += "<h1>";
message += nazev_menice();
message += "</h1>";
message += WWW_ODDELOVAC;
message += "<p>Dnes je ";
message += den;
message += " ";
message += cas;
message += "</p>";
message += WWW_ODDELOVAC;
message += "<h3>Invertor</h3>";
message += WWW_ODDELOVAC;
if (chyba == 0 ) {
message += "<p>Stav: ";
hodnota = node.getResponseBuffer(0x00);
switch (hodnota) {
case 0:
message += "<span style=\"color: fuchsia;\">Zapnut</span>";
break;
case 1:
message += "<span style=\"color: fuchsia;\">Test</span>";
break;
case 2:
message += "<span style=\"color: green;\">OffGrid</span>";
break;
case 3:
message += "<span style=\"color: green;\">Grid-Tie</span>";
break;
case 4:
message += "<span style=\"background-color: black; color: yellow;\"> ByPass </span>";
break;
case 5:
message += "<span style=\"color: red;\">Stop</span>";
break;
case 6:
message += "<span style=\"background-color: black; color: yellow;\"> Nabíjení ze sítě </span>";
break;
default:
message += "<span style=\"color: red;\">Neznámý</span>";
break;
}
message += "</p>\n";
message += "<p>Napětí DS: ";
message += String(node.getResponseBuffer(6)/10.0);
message += " V</p>\n";
message += "<p>Napětí Inverter: ";
message += String(node.getResponseBuffer(5)/10.0);
message += " V</p>\n";
message += "<p>Napětí baterie: ";
message += String(node.getResponseBuffer(4)/10.0);
message += " V</p>\n";
message += "<p>Proud z baterie: ";
message += String(proud_baterie);
message += " A</p>\n";
message += "<p>Výkon měniče: ";
message += String(node.getResponseBuffer(12));
message += " W</p>\n";
message += "<p>Výkon DS: ";
message += String(node.getResponseBuffer(13));
message += " W</p>\n";
message += "<p>Zatížení měniče: ";
message += String(node.getResponseBuffer(14));
message += " W</p>\n";
message += "<p>Výkon měniče: ";
message += String(node.getResponseBuffer(16));
message += " VA</p>\n";
message += "<p>Výkon DS: ";
message += String(node.getResponseBuffer(17));
message += " VA</p>\n";
message += "<p>Zatížení měniče: ";
message += String(node.getResponseBuffer(18));
message += " VA</p>\n";
message += "<p>Zatížení měniče: ";
message += String(node.getResponseBuffer(15));
message += " %</p>\n";
message += "<p>Teplota: ";
message += String(node.getResponseBuffer(32));
message += " °C</p>\n";
}
else
{
message += "<p>";
message += modbus_chyba(chyba);
message += "</p>";
}
message += WWW_ODDELOVAC;
// uložená data
delay(300);
chyba = ReadModbusMust(25245, 16);
if (chyba == 0 ) {
if(node.getResponseBuffer(1)|node.getResponseBuffer(0)|node.getResponseBuffer(2)|node.getResponseBuffer(3)|node.getResponseBuffer(4)|node.getResponseBuffer(5)|node.getResponseBuffer(6)|node.getResponseBuffer(7)|node.getResponseBuffer(8)|node.getResponseBuffer(9)|node.getResponseBuffer(10)|node.getResponseBuffer(11)|node.getResponseBuffer(12)|node.getResponseBuffer(13)|node.getResponseBuffer(14)|node.getResponseBuffer(15) != 0) {
message += "<h3>Výroba:</h3>";
message += WWW_ODDELOVAC;
// Accumulated charger power
if (node.getResponseBuffer(1)|node.getResponseBuffer(0) != 0) {
message += "<p>Nabíjení baterie (charger): ";
message += String(node.getResponseBuffer(1)/10.0f + (node.getResponseBuffer(0) * 1000) );
message += " kwh</p>\n";
}
// Accumulated discharger power
if (node.getResponseBuffer(3)|node.getResponseBuffer(2) != 0) {
message += "<p>Vybíjení baterie (discharger): ";
message += String(node.getResponseBuffer(3)/10.0f + (node.getResponseBuffer(2) * 1000));
message += " kwh</p>\n";
}
// Accumulated buy power
if (node.getResponseBuffer(5)|node.getResponseBuffer(4) != 0) {
message += "<p>Koupě (buy): ";
message += String(node.getResponseBuffer(5)/10.0f + (node.getResponseBuffer(4) * 1000));
message += " kwh</p>\n";
}
// Accumulated sell power
if (node.getResponseBuffer(7)|node.getResponseBuffer(6) != 0) {
message += "<p>Prodej (sell): ";
message += String(node.getResponseBuffer(7)/10.0f + (node.getResponseBuffer(6) * 1000));
message += " kwh</p>\n";
}
// Accumulated load power
if (node.getResponseBuffer(9)|node.getResponseBuffer(8) != 0) {
message += "<p>Výkon (load): ";
message += String(node.getResponseBuffer(9)/10.0f + (node.getResponseBuffer(8) * 1000));
message += " kwh</p>\n";
}
// Accumulated self_use power
if (node.getResponseBuffer(11)|node.getResponseBuffer(10) != 0) {
message += "<p>Vyrobená vlastní baterie+PV (self use): ";
message += String(node.getResponseBuffer(11)/10.0f + (node.getResponseBuffer(10) * 1000));
message += " kwh</p>\n";
}
// Accumulated PV_sell power
if (node.getResponseBuffer(13)|node.getResponseBuffer(12) != 0) {
message += "<p>PV prodej (sell): ";
message += String(node.getResponseBuffer(13)/10.0f + (node.getResponseBuffer(12) * 1000));
message += " kwh</p>\n";
}
// Accumulated grid_charger power
if (node.getResponseBuffer(15)|node.getResponseBuffer(14) != 0) {
message += "<p>Nabíjení ze sítě (grid charger): ";
message += String(node.getResponseBuffer(15)/10.0f + (node.getResponseBuffer(14) * 1000));
message += " kwh</p>\n";
}
message += WWW_ODDELOVAC;
}
}
else
{
message += "<p>";
message += modbus_chyba(chyba);
message += "</p>";
message += WWW_ODDELOVAC;
}
// konec uložených dat
message += "<h3>MPPT</h3>";
message += WWW_ODDELOVAC;
delay(300);
chyba = ReadModbusMust(15201, 21);
if (chyba == 0 ) {
message += "<p>Stav: ";
hodnota = node.getResponseBuffer(0x00);
switch (hodnota) {
case 0:
message += "<span style=\"color: fuchsia;\">Inicializace</span>";
break;
case 1:
message += "<span style=\"color: fuchsia;\">Test</span>";
break;
case 2:
message += "<span style=\"color: green;\">Pracuje</span>";
break;
case 3:
message += "<span style=\"color: red;\">Stop</span>";
break;
default:
message += "<span style=\"color: red;\">Neznámý</span>";
break;
}
message += "</p>\n";
message += "<p>Mppt Status: ";
hodnota = node.getResponseBuffer(1);
switch (hodnota) {
case 0:
message += "<span style=\"color: red;\">Stop</span>";
break;
case 1:
message += "<span style=\"color: green;\">Pracuje</span>";
break;
case 2:
message += "<span style=\"background-color: black; color: yellow;\"> Omezení proudu </span>";
break;
default:
message += "<span style=\"color: red;\">Neznámý</span>";
break;
}
message += "</p>\n";
message += "<p>Stav nabíjení: ";
hodnota = node.getResponseBuffer(2);
switch (hodnota) {
case 0:
message += "<span style=\"color: red;\">Stop</span>";
break;
case 1:
message += "<span style=\"color: green;\">Absorbce</span>";
break;
case 2:
message += "<span style=\"background-color: black; color: yellow;\"> Float </span>";
break;
case 3:
message += "<span style=\"color: fuchsia;\">Eqalize</span>";
break;
default:
message += "<span style=\"color: red;\">Neznámý</span>";
break;
}
message += "</p>\n";
message += "<p>Napětí baterie (MPPT): ";
message += String(node.getResponseBuffer(5)/10.0);
message += " V</p>\n";
message += "<p>Napětí panelů: ";
message += String(node.getResponseBuffer(4)/10.0);
message += " V</p>\n";
message += "<p>Proud z panelů do baterky: ";
message += String(node.getResponseBuffer(6)/10.0);
message += " A</p>\n";
message += "<p>Výkon panelů: ";
message += String(node.getResponseBuffer(7));
message += " W</p>\n";
message += "<p>Teplota: ";
if (node.getResponseBuffer(8) == 0) message += "--";
else message += String(node.getResponseBuffer(8));
message += " °C</p>\n";
message += "<p>Baterka: ";
if (node.getResponseBuffer(10)) message += "<span style=\"color: green;\">Připojená</span>";
else message += "<span style=\"color: red;\">Odpojená</span>";
message += "</p>\n";
message += "<p>Panely: ";
if (node.getResponseBuffer(11)) message += "<span style=\"color: green;\">Připojené</span>";
else message += "<span style=\"color: red;\">Odpojené</span>";
message += "</p>\n";
// uložená data mppt
if (node.getResponseBuffer(17)|node.getResponseBuffer(16) != 0) {
message += WWW_ODDELOVAC;
message += "<h3>Výroba:</h3>";
message += WWW_ODDELOVAC;
// Accumulated PV power
message += "<p>Panely (PV): ";
message += String(node.getResponseBuffer(17)/10.0f + (node.getResponseBuffer(16) * 1000) );
message += " kwh</p>\n";
}
// konec uložená data mppt
}
else
{
message += "<p>";
message += modbus_chyba(chyba);
message += "</p>";
}
message += WWW_ODDELOVAC;
message += WWW_PATICKA;
message += "</body></html>";
server.sendHeader("Cache-Control","no-store, max-age=0");
server.send(200, "text/html;charset=utf-8", message);
}
// setup
void www_config_must() {
int hodnota;
float i;
int chyba;
// načtení hodnoty času
timeClient.update();
String den = daysOfTheWeek[timeClient.getDay()];
String cas = String (timeClient.getFormattedTime());
String message = WWW_UVOD;
message += "<h1>";
message += nazev_menice();
message += "</h1>";
message += WWW_ODDELOVAC;
message += "<p>Dnes je ";
message += den;
message += " ";
message += cas;
message += "</p>";
message += WWW_ODDELOVAC;
message += "<h3>Inverter</h3>";
message += WWW_ODDELOVAC;
chyba = ReadModbusMust(20101, 44);
if (chyba == 0 ) {
message += "<p>Inverter offgrid work enable (20101): ";
hodnota = node.getResponseBuffer(0);
switch (hodnota) {
case 0:
message += "<span style=\"color: red;\">OFF</span>";
break;
case 1:
message += "<span style=\"color: green;\">ON</span>";
break;
default:
message += "<span style=\"color: red;\">Neznámý</span>";
break;
}
message += "</p>\n";
message += "<p>Inverter output voltage Set (20102): ";
message += String(node.getResponseBuffer(1)/10.0);
message += " V</p>\n";
message += "<p>Inverter output frequency Set (20103): ";
message += String(node.getResponseBuffer(2)/100.0);
message += " Hz</p>\n";
message += "<p>Inverter search mode enable (20104): ";
hodnota = node.getResponseBuffer(3);
switch (hodnota) {
case 0:
message += "<span style=\"color: red;\">OFF</span>";
break;
case 1:
message += "<span style=\"color: green;\">ON</span>";
break;
default:
message += "<span style=\"color: red;\">Neznámý</span>";
break;
}
message += "</p>\n";
message += "<p>Inverter discharger to grid enable (20108): ";
hodnota = node.getResponseBuffer(7);
switch (hodnota) {
case 0:
message += "<span style=\"color: red;\">OFF</span>";
break;
case 1:
message += "<span style=\"color: green;\">ON</span>";
break;
default:
message += "<span style=\"color: red;\">Neznámý</span>";
break;
}
message += "</p>\n";
message += "<p>Energy use mode (20109): ";
hodnota = node.getResponseBuffer(8);
switch (hodnota) {
case 1:
message += "SBU";
break;
case 2:
message += "SUB";
break;
case 3:
message += "UTI";
break;
case 4:
message += "SOL";
break;
default:
message += "<span style=\"color: red;\">Neznámý</span>";
break;
}
message += "</p>\n";
message += "<p>Grid protect standard (20111): ";
hodnota = node.getResponseBuffer(10);
switch (hodnota) {
case 0:
message += "VDE4105";
break;
case 1:
message += "UPS";
break;
case 2:
message += "APL";
break;
case 3:
message += "GEN";
break;
default:
message += "<span style=\"color: red;\">Neznámý</span>";
break;
}
message += "</p>\n";
message += "<p>SolarUse Aim (20112): ";
hodnota = node.getResponseBuffer(11);
switch (hodnota) {
case 0:
message += "LBU";
break;
case 1:
message += "BLU";
break;
default:
message += "<span style=\"color: red;\">Neznámý</span>";
break;
}
message += "</p>\n";
message += "<p>Inverter max discharger current (20113): ";
message += String(node.getResponseBuffer(12)/10.0);
message += " A</p>\n";
message += "<p>Battery stop discharging voltage (20118): ";
message += String(node.getResponseBuffer(17)/10.0);
message += " V</p>\n";
message += "<p>Battery stop charging voltage (20119): ";
message += String(node.getResponseBuffer(18)/10.0);
message += " V</p>\n";
message += "<p>Grid max charger current set (20125): ";
message += String(node.getResponseBuffer(24)/10.0);
message += " A</p>\n";
message += "<p>Battery low voltage (20127): ";
message += String(node.getResponseBuffer(26)/10.0);
message += " V</p>\n";
message += "<p>Battery high voltage (20128): ";
message += String(node.getResponseBuffer(27)/10.0);
message += " V</p>\n";
message += "<p>Max Combine charger current (20132): ";
message += String(node.getResponseBuffer(31)/10.0);
message += " A</p>\n";
message += "<p>Charger source priority (20143): ";
hodnota = node.getResponseBuffer(42);
switch (hodnota) {
case 0:
message += "Soalr first";
break;
case 2:
message += "Solar and Utility";
break;
case 3:
message += "Only Solar";
break;
default:
message += "<span style=\"color: red;\">Neznámý</span>";
break;
}
message += "</p>\n";
message += "<p>Solar power balance (20144): ";
hodnota = node.getResponseBuffer(43);
switch (hodnota) {
case 0:
message += "<span style=\"color: red;\">SBD</span>";
break;
case 1:
message += "<span style=\"color: green;\">SBE</span>";
break;
default:
message += "<span style=\"color: red;\">Neznámý</span>";
break;
}
message += "</p>\n";
}
else
{
message += "<p>";
message += modbus_chyba(chyba);
message += "</p>";
}
message += WWW_ODDELOVAC;
message += "<h3>Mppt</h3>";
message += WWW_ODDELOVAC;
delay(300);
chyba = ReadModbusMust(10103, 9);
if (chyba == 0 ) {
message += "<p>Napětí Float (10103): ";
message += String(node.getResponseBuffer(0)/10.0);
message += " V</p>\n";
message += "<p>Napětí Absorpce (10104): ";
message += String(node.getResponseBuffer(1)/10.0);
message += " V</p>\n";
message += "<p>Nízké napětí baterie (10105): ";
message += String(node.getResponseBuffer(2)/10.0);
message += " V</p>\n";
message += "<p>Vysoké napětí baterie (10107): ";
message += String(node.getResponseBuffer(4)/10.0);
message += " V</p>\n";
message += "<p>PV max charger current (10108): ";
message += String(node.getResponseBuffer(5)/10.0);
message += " A</p>\n";
message += "<p>Typ baterky (10110): ";
hodnota = node.getResponseBuffer(7);
switch (hodnota) {
case 0:
message += "no choose";
break;
case 1:
message += "Use defined";
break;
case 2:
message += "lithium";
break;
case 3:
message += "SEALED_LEAD";
break;
case 4:
message += "AGM";
break;
case 5:
message += "GEL";
break;
case 6:
message += "FLOODED";
break;
default:
message += "<span style=\"color: red;\">Neznámý</span>";
break;
}
message += "</p>\n";
message += "<p>Battery (10111): ";
message += String(node.getResponseBuffer(8));
message += " Ah</p>\n";
}
else
{
message += "<p>";
message += modbus_chyba(chyba);
message += "</p>";
}
message += WWW_ODDELOVAC;
message += WWW_PATICKA;
server.sendHeader("Cache-Control","no-store, max-age=0");
server.send(200, "text/html;charset=utf-8", message);
}
void www_help() {
String message = WWW_UVOD;
message += "<h1>";
message += nazev_menice();
message += "</h1>";
message += WWW_ODDELOVAC;
message += "<h2>Help:</h2>";
message += WWW_ODDELOVAC;
message += "<p><a href=\"/help\">Rozumím příkazu: SERVER/help</a></p>";
message += "<p><a href=\"/\">Rozumím příkazu: SERVER/</a></p>";
message += "<p><a href=\"/setup\">Rozumím příkazu: SERVER/config</a></p>";
message += "<p><a href=\"/setup\">Rozumím příkazu: SERVER/setup</a></p>";
message += "<p><a href=\"/inverter_display_message\">Rozumím příkazu: SERVER/inverter_display_message</a></p>";
message += "<p><a href=\"/inverter_control_message\">Rozumím příkazu: SERVER/inverter_control_message</a></p>";
message += "<p><a href=\"/pv_charger_control_message\">Rozumím příkazu: SERVER/pv_charger_control_message</a></p>";
message += "<p><a href=\"/pv_charger_display_message\">Rozumím příkazu: SERVER/pv_charger_display_message</a></p>";
message += "<p><a href=\"/restart\">Rozumím příkazu: SERVER/restart</a></p>";
message += "<p><a href=\"/firmware\">Rozumím příkazu: SERVER/firmware</a></p>";
message += "<p><a href=\"/read?registr=25201&pocet=26\">Rozumím příkazu: SERVER/read?registr=xxxxx&pocet=yy</a></p>";
message += "<p>Rozumím příkazu: SERVER/write?registr=xxxxx&hodnota=yy</p>";
message += WWW_ODDELOVAC;
message += WWW_PATICKA;
server.send(200, "text/html;charset=utf-8", message);
}
void www_setup_must() {
String message = WWW_UVOD;
message += "<h1>";
message += nazev_menice();
message += "</h1>";
message += WWW_ODDELOVAC;
message += "<h2>Nastavení:</h2>";
message += WWW_ODDELOVAC;
// Nastavení parametrů mustu
// vypnuti menice
message += "<p>Inverter offgrid work enable <a href=\"/write?registr=20101&hodnota=1\"> ON (Zapnuto) </a> <a href=\"/write?registr=20101&hodnota=0\"> OFF (Vypnuto) </a></p>";
message += WWW_ODDELOVAC;
// Režim SOL UTI
message += "<p>Nastavení měniče režim: <a href=\"/write?registr=20109&hodnota=4\"> SOL </a> <a href=\"/write?registr=20109&hodnota=3\"> UTI </a></p>";
message += WWW_ODDELOVAC;
// Charger source priority
message += "<p>Charger source priority: <a href=\"/write?registr=20143&hodnota=3\"> Only Solar </a> <a href=\"/write?registr=20143&hodnota=0\"> Solar first </a> <a href=\"/write?registr=20143&hodnota=2\"> Solar and Utility </a></p>";
message += WWW_ODDELOVAC;
// reset uložených hodnot výroby
message += "<p><a href=\"/write?registr=20213&hodnota=1\">Remove the accumulated data (Inverter)</a></p>";
message += "<p><a href=\"/write?registr=10112&hodnota=1\">Remove the accumulated data (PV)</a></p>";
message += WWW_ODDELOVAC;
//nabijeni
// float
message += "<p>Float voltage: <a href=\"/write?registr=10103&hodnota=268\"> 26.8V </a> <a href=\"/write?registr=10103&hodnota=270\"> 27V </a> <a href=\"/write?registr=10103&hodnota=273\"> 27.3V </a> <a href=\"/write?registr=10103&hodnota=274\"> 27.4V </a> <a href=\"/write?registr=10103&hodnota=275\">27.5V</a> <a href=\"/write?registr=10103&hodnota=276\"> 27.6V </a> <a href=\"/write?registr=10103&hodnota=277\"> 27.7V </a> <a href=\"/write?registr=10103&hodnota=278\"> 27.8V </a> <a href=\"/write?registr=10103&hodnota=279\"> 27.9V </a></p>";
message += WWW_ODDELOVAC;
//absorpce
message += "<p>Absorption voltage: <a href=\"/write?registr=10104&hodnota=274\">27.4V</a> <a href=\"/write?registr=10104&hodnota=275\">27.5V</a> <a href=\"/write?registr=10104&hodnota=276\">27.6V</a> <a href=\"/write?registr=10104&hodnota=277\">27.7V</a> <a href=\"/write?registr=10104&hodnota=278\">27.8V</a> <a href=\"/write?registr=10104&hodnota=279\">27.9V</a> <a href=\"/write?registr=10104&hodnota=280\">28V</a> <a href=\"/write?registr=10104&hodnota=282\">28.2V</a></p>";
message += WWW_ODDELOVAC;
// typ baterky
message += "<p>Battery type: <a href=\"/write?registr=10110&hodnota=1\">Use defined </a> <a href=\"/write?registr=10110&hodnota=2\">lithium</a> <a href=\"/write?registr=10110&hodnota=3\">SEALED_LEAD</a> <a href=\"/write?registr=10110&hodnota=4\">AGM</a> <a href=\"/write?registr=10110&hodnota=5\">GEL</a> <a href=\"/write?registr=10110&hodnota=6\">FLOODED</a></p>";
message += WWW_ODDELOVAC;
message += WWW_PATICKA;
server.send(200, "text/html;charset=utf-8", message);
}
void www_Read_Inverter_Display_Message()
{
int chyba;
chyba = ReadModbusMust(25201, 40);
String message;
if (chyba == 0 ) {
message = "Inverter Display Message 25201 + 79\n";
for (int i = 0; i < 40; i++)
{
message += String(node.getResponseBuffer(i));
message += ",";
}
}
else {
message = "Prvni čast ";
message += modbus_chyba(chyba);
message += "\n";
}
chyba = ReadModbusMust(25241, 39);
if (chyba == 0 ) {
for (int i = 0; i < 39; i++)
{
message += String(node.getResponseBuffer(i));
message += ",";
}
message += "END\n";
}
else {
message += "Druhá část ";
message += modbus_chyba(chyba);
message += "\n";
}
server.sendHeader("Cache-Control","no-store, max-age=0");
server.send(200, "text/plain;charset=utf-8", message);
}
void www_Read_Inverter_Control_Message()
{
int chyba;
chyba = ReadModbusMust(20101, 44);
String message;
if (chyba == 0 ) {
message = "Inverter Control Message 20101 + 44\n";
for (int i = 0; i < 44; i++)
{
message += String(node.getResponseBuffer(i));
message += ",";
}
message += "END\n";
}
else {
message = modbus_chyba(chyba);
message +="\n";
}
server.sendHeader("Cache-Control","no-store, max-age=0");
server.send(200, "text/plain;charset=utf-8", message);
}
void www_Read_PV_Charger_Control_Message()
{
int chyba;
chyba = ReadModbusMust(10103, 9);
String message;
if (chyba == 0 ) {
message = "PV Charger Control Message 10103 + 9\n";
for (int i = 0; i < 9; i++)
{
message += String(node.getResponseBuffer(i));
message += ",";
}
message += "END\n";
}
else {
message = modbus_chyba(chyba);
message += "\n";
}
server.sendHeader("Cache-Control","no-store, max-age=0");
server.send(200, "t§ext/plain;charset=utf-8", message);
}
void www_Read_PV_Charger_Display_Message()
{
int chyba ;
chyba = ReadModbusMust(15201, 21);
String message;
if (chyba == 0 )
{
message = "PV Charger Display Message 15201 + 21\n";
for (int i = 0; i < 21; i++)
{
message += String(node.getResponseBuffer(i));
message += ",";
}
message += "END\n";
}
else
{
message = modbus_chyba(chyba);
message += "\n";
}
server.sendHeader("Cache-Control","no-store, max-age=0");
server.send(200, "text/plain;charset=utf-8", message);
}
// inicializace setup
void setup()
{
// esp serial communication
Serial.begin(115200);
// led pin
pinMode(LEDPIN, OUTPUT);
// modbus pin
pinMode(MODBUS_DIR_PIN, OUTPUT);
digitalWrite(MODBUS_DIR_PIN, LOW);
//Serial2.begin(baud-rate, protocol, RX pin, TX pin);.
Serial2.begin(MODBUS_SERIAL_BAUD, SERIAL_8N1, MODBUS_RX_PIN, MODBUS_TX_PIN);
//Serial2.setTimeout(300);
//modbus slave ID 4
node.begin(4, Serial2);
setup_wifi();
// callbacks allow us to configure the RS485 transceiver correctly
node.preTransmission(modbusPreTransmission);
node.postTransmission(modbusPostTransmission);
// definice stránek www
server.on("/", handleRoot);
server.on("/help", www_help);
server.on("/inverter_display_message", www_Read_Inverter_Display_Message);
server.on("/inverter_control_message", www_Read_Inverter_Control_Message);
server.on("/pv_charger_control_message", www_Read_PV_Charger_Control_Message);
server.on("/pv_charger_display_message", www_Read_PV_Charger_Display_Message);
server.on("/read", www_read_must);
server.on("/write", www_write_must);
server.on("/setup", www_setup_must);
server.on("/config", www_config_must);
// restart
server.on("/restart", []() {
String zprava = WWW_UVOD;
zprava += "<h1>";
zprava += nazev_menice();
zprava += "</h1>";
zprava += WWW_ODDELOVAC;
zprava += RESTART;
zprava += WWW_ODDELOVAC;
zprava += WWW_PATICKA;
server.sendHeader("Cache-Control","no-store, max-age=0");
server.send(200,"text/html;charset=utf-8", zprava);
delay(1000);
ESP.restart();
});
//update
server.on("/firmware", HTTP_GET, []() {
server.sendHeader("Connection", "close");
server.send(200, "text/html;charset=utf-8", SERVERFIRMWARE);
});
/*handling uploading firmware file */
server.on("/update", HTTP_POST, []() {
server.sendHeader("Connection", "close");
server.send(200, "text/html;charset=utf-8", (Update.hasError()) ? WWW_UVOD"<p>Upgrade FAIL</p>"WWW_ODDELOVAC WWW_PATICKA : WWW_UVOD"<p>Upgrade OK</p>"WWW_ODDELOVAC WWW_PATICKA);
ESP.restart();
}, []() {
HTTPUpload& upload = server.upload();
if (upload.status == UPLOAD_FILE_START) {
Serial.printf("Update: %s\n", upload.filename.c_str());
if (!Update.begin(UPDATE_SIZE_UNKNOWN)) { //start with max available size
Update.printError(Serial);
}
} else if (upload.status == UPLOAD_FILE_WRITE) {
/* flashing firmware to ESP*/
if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
Update.printError(Serial);
}
} else if (upload.status == UPLOAD_FILE_END) {
if (Update.end(true)) { //true to set the size to the current progress
Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);
} else {
Update.printError(Serial);
}
}
});
server.onNotFound(handleNotFound);
// zahájení aktivity HTTP serveru
server.begin();
}
// Hlavní smyčka
void loop()
{
//btStop();
server.handleClient();
delay(100);//Normální čekání
reconnect_wifi();
}
3,6kWp | 2x MUST PV18-3024 VHM, 3kW/24V | 16kWh
-
- Příspěvky: 14
- Registrován: úte bře 14, 2023 4:11 pm
- Lokalita: Decin
Re: Sledování Epeveru pomocí ESP 32
ja pouzivam ESP12 s tasmotou a prevodnik RS485
-
- Příspěvky: 406
- Registrován: čtv dub 21, 2022 7:15 pm
- Lokalita: Poblíž Hradce Králové
- Systémové napětí: 48V
Re: Sledování Epeveru pomocí ESP 32
Já mám toto:
https://www.laskakit.cz/laskakit-esplan ... ntId=12167
Ale zatím v tom tápu, přijde že každý kód stejnou věc řeší jinak, a to se pak blbě učí nějaké závislosti a postupy.
Navíc jsem zatím odkázaný pouze na sériový monitor u Arduino IDE...
Soban děkuji, mě by stačilo něco jednoduššího do začátku, abych viděl cestu, ale máš to pěkný, popsaný, třeba mě to nakopne
https://www.laskakit.cz/laskakit-esplan ... ntId=12167
Ale zatím v tom tápu, přijde že každý kód stejnou věc řeší jinak, a to se pak blbě učí nějaké závislosti a postupy.
Navíc jsem zatím odkázaný pouze na sériový monitor u Arduino IDE...
Soban děkuji, mě by stačilo něco jednoduššího do začátku, abych viděl cestu, ale máš to pěkný, popsaný, třeba mě to nakopne
16 panelů DHM-72L9-450 Wp = 7200Wp jih, sklon 17°
2 regulátory EPever Tracer 6415 AN = 6000W
Paralelní adaptér PAL-ADP-50AN
Hlavní měniče Multiplus2 5000VA v sérii 4 + 4kW
Měniče EPever IP+ pro vytěžování 5, 3 a 2kW
135 + 135 + 230 = 500Ah LiFePo na 48V
3* BMS a Balancer Seplos
2 regulátory EPever Tracer 6415 AN = 6000W
Paralelní adaptér PAL-ADP-50AN
Hlavní měniče Multiplus2 5000VA v sérii 4 + 4kW
Měniče EPever IP+ pro vytěžování 5, 3 a 2kW
135 + 135 + 230 = 500Ah LiFePo na 48V
3* BMS a Balancer Seplos
-
- Příspěvky: 132
- Registrován: pát úno 17, 2023 6:08 pm
- Lokalita: Praha
Re: Sledování Epeveru pomocí ESP 32
Epever je použit přímo jako příklad na ESPHOME https://esphome.io/components/modbus_controller.html
Just PoC (proof of concept) "FVE" pro odzkoušení a doplnění si vzdělání
1x panel 180Wp, MPPT EPever 5415, EPever IPower+ 500-12, LifePo4 30Ah 12V, JK BMS, HomeAssistant
1x panel 180Wp, MPPT EPever 5415, EPever IPower+ 500-12, LifePo4 30Ah 12V, JK BMS, HomeAssistant
-
- Příspěvky: 406
- Registrován: čtv dub 21, 2022 7:15 pm
- Lokalita: Poblíž Hradce Králové
- Systémové napětí: 48V
Re: Sledování Epeveru pomocí ESP 32
To je asi v .yaml ... a s tím si neporadím. Nemám HA ani stroj na kterém bych ho spustil
16 panelů DHM-72L9-450 Wp = 7200Wp jih, sklon 17°
2 regulátory EPever Tracer 6415 AN = 6000W
Paralelní adaptér PAL-ADP-50AN
Hlavní měniče Multiplus2 5000VA v sérii 4 + 4kW
Měniče EPever IP+ pro vytěžování 5, 3 a 2kW
135 + 135 + 230 = 500Ah LiFePo na 48V
3* BMS a Balancer Seplos
2 regulátory EPever Tracer 6415 AN = 6000W
Paralelní adaptér PAL-ADP-50AN
Hlavní měniče Multiplus2 5000VA v sérii 4 + 4kW
Měniče EPever IP+ pro vytěžování 5, 3 a 2kW
135 + 135 + 230 = 500Ah LiFePo na 48V
3* BMS a Balancer Seplos
-
- Příspěvky: 390
- Registrován: pát říj 15, 2021 10:41 am
- Lokalita: Stredocesky kraj
- Systémové napětí: 48V
- Výkon panelů [Wp]: 11250
- Kapacita baterie [kWh]: 9.6
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
Re: Sledování Epeveru pomocí ESP 32
To ESPHome je kuzelne, namiesto toho, aby si to clovek musel programovat v C-cku, kde mu ten jeho vytvor aspon skontroluje compiler tak nejak hned, tak musi najprv spravit giganticky konfigurak v yamli, riadenom indentom (na cokolvek riadene indentom som fakt, ale fakt extremne alergicky), no a potom tam do toho yamlu napise ...... tramdadadaaaaaaaa .... c-ckovy kod
To nevymyslis
To nevymyslis
30*375 Wp JJZ, 2xXTM4000, 2xVT-80, 2xUS5000
-
- Příspěvky: 1920
- Registrován: pát lis 11, 2022 8:14 am
- Lokalita: Hlohovec, SR
- Systémové napětí: 48V
- Výkon panelů [Wp]: 5520
- Kapacita baterie [kWh]: 14
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Hlohovec, SR
Re: Sledování Epeveru pomocí ESP 32
Na milión iných vecí v esphome netreba lambdy v céčku, iba yaml. A netreba písať každú blbosť v C, riešiť polia, typy, pointery, konverzie... V C viem čo to porobiť, ale ak nemusím, tak s radosťou použijem esphome, Tasmotu alebo niečo podobné.
Ale s formátom yaml musím súhlasiť s tebou, je to na hlavu. Aj samotný popis na webe esphome je dosť mätúci, nekompletný. Ale dá sa s tým naučiť žiť.
Ale s formátom yaml musím súhlasiť s tebou, je to na hlavu. Aj samotný popis na webe esphome je dosť mätúci, nekompletný. Ale dá sa s tým naučiť žiť.
2x MUST PH1800 5.5kW, 8.85kWp 3x 2S3P, V+J+Z, 16x 280 Ah LiFePO4 (14.3 kWh), BMS JBD 200A, SW: Home Assistant na Synology DS923+ ku tomu ESPHome, Tasmota, MariaDB, InfluxDB, Telegraf, Grafana, Zigbee2MQTT..., HW: ESPlan (ESP32 + LAN 8720 + RS485 + UART). Nejaké moje projekty: MUST-ESPhome, ELTEK Flatpack2 ESPhome, ESP32-EMON, PZEM-017@WiFi, diyBMS-CurrentShunt-ESPhome 01/2023 -> 11/2024 = 8.7 MWh AC
-
- Příspěvky: 3934
- Registrován: pon úno 07, 2022 10:11 pm
- Lokalita: Zlaté Hory / Olomouc
- Systémové napětí: 24V
- Výkon panelů [Wp]: 3600
- Kapacita baterie [kWh]: 16
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Zlaté Hory
Re: Sledování Epeveru pomocí ESP 32
Tak ono stačí když budeš ve smyčce číst nějaký registr a posílat si ho na výstup - usb a zobrazovat v ide prozatím.
Já tam mám generování hromadu www stránek přes které jsem četl údaje.
3,6kWp | 2x MUST PV18-3024 VHM, 3kW/24V | 16kWh
-
- Příspěvky: 406
- Registrován: čtv dub 21, 2022 7:15 pm
- Lokalita: Poblíž Hradce Králové
- Systémové napětí: 48V
Re: Sledování Epeveru pomocí ESP 32
Chtěl bych web server se zobrazenými live daty a nějaká tlačítka, ale zatím to se mnou nemluví ..
16 panelů DHM-72L9-450 Wp = 7200Wp jih, sklon 17°
2 regulátory EPever Tracer 6415 AN = 6000W
Paralelní adaptér PAL-ADP-50AN
Hlavní měniče Multiplus2 5000VA v sérii 4 + 4kW
Měniče EPever IP+ pro vytěžování 5, 3 a 2kW
135 + 135 + 230 = 500Ah LiFePo na 48V
3* BMS a Balancer Seplos
2 regulátory EPever Tracer 6415 AN = 6000W
Paralelní adaptér PAL-ADP-50AN
Hlavní měniče Multiplus2 5000VA v sérii 4 + 4kW
Měniče EPever IP+ pro vytěžování 5, 3 a 2kW
135 + 135 + 230 = 500Ah LiFePo na 48V
3* BMS a Balancer Seplos
-
- Příspěvky: 3934
- Registrován: pon úno 07, 2022 10:11 pm
- Lokalita: Zlaté Hory / Olomouc
- Systémové napětí: 24V
- Výkon panelů [Wp]: 3600
- Kapacita baterie [kWh]: 16
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Zlaté Hory
Re: Sledování Epeveru pomocí ESP 32
No máš ten RS485 převodník připojen stejně na té desce?
V první chvíli si rozchoď vyčtení jednoho registru z toho epeveru.
Co třeba změnit?
Zde zadat název tvé wifi a heslo k ní.
Pak ESP dostane IP z tvého routeru a můžeš k němu přistupovat http:/IP_toho ESP
Taky změnit na jaké piny je připojen ten převodník a parametry komunikace
Ten převodník je připojen k Serial2
ID zařízení mustu je 4 jaké je epeveru nevím takže tu 4 ku třeba změnit.
A pokud se z epeveru čtou data jako holding registry tak by mělo fungovat:
V prohlížeči zadáš http://IP_toho_ESP/read?registr=20000&pocet=1
Jaký budeš chtít přečíst registr zadáš místo té číslovky 20000 (toto je registr 20000).
V první chvíli si rozchoď vyčtení jednoho registru z toho epeveru.
Co třeba změnit?
Kód: Vybrat vše
// Replace the next variables with your SSID/Password combination
const char* ssid = "sofia-bezrucova";
const char* password = "satyricon";
Pak ESP dostane IP z tvého routeru a můžeš k němu přistupovat http:/IP_toho ESP
Taky změnit na jaké piny je připojen ten převodník a parametry komunikace
Kód: Vybrat vše
/* Modbus stuff */
#define MODBUS_DIR_PIN 4 // connect DR, RE pin of MAX485 to gpio 4
#define MODBUS_RX_PIN 18 // Rx pin
#define MODBUS_TX_PIN 19 // Tx pin
#define MODBUS_SERIAL_BAUD 19200 // Baud rate for esp32 and max485 communication Must
Kód: Vybrat vše
//Serial2.begin(baud-rate, protocol, RX pin, TX pin);.
Serial2.begin(MODBUS_SERIAL_BAUD, SERIAL_8N1, MODBUS_RX_PIN, MODBUS_TX_PIN);
//Serial2.setTimeout(300);
Kód: Vybrat vše
//modbus slave ID 4
node.begin(4, Serial2);
V prohlížeči zadáš http://IP_toho_ESP/read?registr=20000&pocet=1
Jaký budeš chtít přečíst registr zadáš místo té číslovky 20000 (toto je registr 20000).
3,6kWp | 2x MUST PV18-3024 VHM, 3kW/24V | 16kWh
-
- Příspěvky: 406
- Registrován: čtv dub 21, 2022 7:15 pm
- Lokalita: Poblíž Hradce Králové
- Systémové napětí: 48V
Re: Sledování Epeveru pomocí ESP 32
Děkuji, vyzkouším to.
Epever se vyčítá z input reg.
Epever se vyčítá z input reg.
16 panelů DHM-72L9-450 Wp = 7200Wp jih, sklon 17°
2 regulátory EPever Tracer 6415 AN = 6000W
Paralelní adaptér PAL-ADP-50AN
Hlavní měniče Multiplus2 5000VA v sérii 4 + 4kW
Měniče EPever IP+ pro vytěžování 5, 3 a 2kW
135 + 135 + 230 = 500Ah LiFePo na 48V
3* BMS a Balancer Seplos
2 regulátory EPever Tracer 6415 AN = 6000W
Paralelní adaptér PAL-ADP-50AN
Hlavní měniče Multiplus2 5000VA v sérii 4 + 4kW
Měniče EPever IP+ pro vytěžování 5, 3 a 2kW
135 + 135 + 230 = 500Ah LiFePo na 48V
3* BMS a Balancer Seplos
-
- Příspěvky: 3934
- Registrován: pon úno 07, 2022 10:11 pm
- Lokalita: Zlaté Hory / Olomouc
- Systémové napětí: 24V
- Výkon panelů [Wp]: 3600
- Kapacita baterie [kWh]: 16
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Zlaté Hory
Re: Sledování Epeveru pomocí ESP 32
Jinak ta adresa registru je v desítkové soustavě takže jak máš tabulku v šestnáctkové tak si to musíš převést.
Jinak samozřejmě ostatní stránky budou zobrazovat nesmysly protože tam mám zadané adresy mustu.
Jinak samozřejmě ostatní stránky budou zobrazovat nesmysly protože tam mám zadané adresy mustu.
3,6kWp | 2x MUST PV18-3024 VHM, 3kW/24V | 16kWh
-
- Podobná témata
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 5 Odpovědi
- 775 Zobrazení
-
Poslední příspěvek od Dusan61
-
- 15 Odpovědi
- 1290 Zobrazení
-
Poslední příspěvek od DanoP
-
- 5 Odpovědi
- 1846 Zobrazení
-
Poslední příspěvek od dsmal
-
- 10 Odpovědi
- 3702 Zobrazení
-
Poslední příspěvek od marko250
-
- 117 Odpovědi
- 26678 Zobrazení
-
Poslední příspěvek od Valdano