EspHome Epever RS485 modbus
-
- Aktivní autor
- Příspěvky: 61
- Registrován: 04. červenec 2022, 23:32
- Dal poděkování: 10 poděkování
- Dostal poděkování: 1 poděkování
EspHome Epever RS485 modbus
Zdarec. Jelikož už mám FVE téměř hotovou, ve zkušebním provozu, potřebuju vytáhnout data ze třech Epever regulátorů. Mám koupenej a funkční modul od Colina Hickeyho, který funguje s jeho .bin firmvérem. Ten by se měl umět napíchnout na mosquito, což mě na první ránu nejede.
Ale touhle cestou stejně nechci jít, chci sestavit další dva vlastní kousky z nodemcu a převodníků, kterých mám doma několik. Pokoušel jsem se o zfunkčnění originál USB kabelu Epever to PC HA, ale je tam problém s driverem XRUSB, který je potřeba do PC doinstalovat a pak následně vypnout funkci cdc-adm, což mi vyřadí USB wifi dongle a HA zůstane bez spojení a to je, samozřejmě, nesmysl. Mám i USB RS485 CH340 převodník, ale tudy také cesta jaksi nevedla.
CHci se zeptat, jestli jste to někdo neřešil a jak. Mám už nějakou cestu nastíněnou a pomalu s tím pracuju, ale jelikož jsem python objevil doslova předevčírem tak to zatím okousávám.
Pokud by se našel někdo, kdo to vyřešil kabelem, nebo by mě s tím pomoh, bylo by to asi nejlepší.
Jinak budu muset pokračovat přes EspHome, což sice obvykle přináší problémy s napájením, ale v tomhle případě lze použít napájení z Epevru přes RJ45.
Zátiší:
Od každého mám víc kusů.
Ale touhle cestou stejně nechci jít, chci sestavit další dva vlastní kousky z nodemcu a převodníků, kterých mám doma několik. Pokoušel jsem se o zfunkčnění originál USB kabelu Epever to PC HA, ale je tam problém s driverem XRUSB, který je potřeba do PC doinstalovat a pak následně vypnout funkci cdc-adm, což mi vyřadí USB wifi dongle a HA zůstane bez spojení a to je, samozřejmě, nesmysl. Mám i USB RS485 CH340 převodník, ale tudy také cesta jaksi nevedla.
CHci se zeptat, jestli jste to někdo neřešil a jak. Mám už nějakou cestu nastíněnou a pomalu s tím pracuju, ale jelikož jsem python objevil doslova předevčírem tak to zatím okousávám.
Pokud by se našel někdo, kdo to vyřešil kabelem, nebo by mě s tím pomoh, bylo by to asi nejlepší.
Jinak budu muset pokračovat přes EspHome, což sice obvykle přináší problémy s napájením, ale v tomhle případě lze použít napájení z Epevru přes RJ45.
Zátiší:
Od každého mám víc kusů.
Naposledy upravil(a) Plazivec dne 08. červenec 2022, 00:32, celkem upraveno 1 x.
-
- Aktivní autor
- Příspěvky: 61
- Registrován: 04. červenec 2022, 23:32
- Dal poděkování: 10 poděkování
- Dostal poděkování: 1 poděkování
Re: EspHome Epever RS485 modbus
Vidím, že se nikdo nechytnul, tak konkrétní dotaz.
Pokouším se přizpůsobit ten kód pro moje podmínky a první věc:
Je to dobře to časové pásmo?
Další vec je hláška file editoru "expected float na předposlední řádce:
A také nerozumím, proč je místo nastavení hesla pro api použito: "reboot_timeout: 0"
Pokouším se přizpůsobit ten kód pro moje podmínky a první věc:
Kód: Vybrat vše
time:
- platform: sntp
id: sntp_time
timezone: "CET-1CEST,M3.5.0,M10.5.0/3"
servers: "de.pool.ntp.org"
Další vec je hláška file editoru "expected float na předposlední řádce:
Kód: Vybrat vše
substitutions:
updates: 30s
name: solarstation-x
esphome:
name: ${name}
platformio_options:
## larger stack size required with all registers enable_load_test
## reduce registers or wait for integration of 2.0.0 arduinoespressif32
## not yet working needs 2.0
build_flags:
- -DCONFIG_ARDUINO_LOOP_STACK_SIZE=32768
on_boot:
## configure controller settings at setup
## make sure priority is lower than setup_priority of modbus_controller
priority: -100
then:
- lambda: |-
// get local time and sync to controller
time_t now = ::time(nullptr);
struct tm *time_info = ::localtime(&now);
int seconds = time_info->tm_sec;
int minutes = time_info->tm_min;
int hour = time_info->tm_hour;
int day = time_info->tm_mday;
int month = time_info->tm_mon + 1;
int year = time_info->tm_year % 100;
esphome::modbus_controller::ModbusController *controller = id(epever);
// if there is no internet connection localtime returns year 70
if (year != 70) {
// create the payload
std::vector<uint16_t> rtc_data = {uint16_t((minutes << 8) | seconds), uint16_t((day << 8) | hour),
uint16_t((year << 8) | month)};
// Create a modbus command item with the time information as the payload
esphome::modbus_controller::ModbusCommandItem set_rtc_command =
esphome::modbus_controller::ModbusCommandItem::create_write_multiple_command(controller, 0x9013, 3, rtc_data);
// Submit the command to the send queue
epever->queue_command(set_rtc_command);
ESP_LOGI("ModbusLambda", "EPSOLAR RTC set to %02d:%02d:%02d %02d.%02d.%04d", hour, minutes, seconds, day, month,
year + 2000);
}
// Battery settings
// Note: these values are examples only and apply my AGM Battery
std::vector<uint16_t> battery_settings1 = {
0, // 9000 Battery Type 0 = User
0x0073, // 9001 Battery Cap 0x55 == 115AH
0x012C, // 9002 Temp compensation -3V /°C/2V
0x05DC, // 9003 0x5DC == 1500 Over Voltage Disconnect Voltage 15,0
0x058C, // 9004 0x58C == 1480 Charging Limit Voltage 14,8
0x058C, // 9005 Over Voltage Reconnect Voltage 14,8
0x05BF, // 9006 Equalize Charging Voltage 14,6
0x05BE, // 9007 Boost Charging Voltage 14,7
0x0550, // 9008 Float Charging Voltage 13,6
0x0528, // 9009 Boost Reconnect Charging Voltage 13,2
0x04C4, // 900A Low Voltage Reconnect Voltage 12,2
0x04B0, // 900B Under Voltage Warning Reconnect Voltage 12,0
0x04BA, // 900c Under Volt. Warning Volt 12,1
0x04BA, // 900d Low Volt. Disconnect Volt. 11.8
0x04BA // 900E Discharging Limit Voltage 11.8
};
// Boost and equalization periods
std::vector<uint16_t> battery_settings3 = {
0x0000, // 906B Equalize Duration (min.) 0
0x0075 // 906C Boost Duration (aka absorb) 117 mins
};
esphome::modbus_controller::ModbusCommandItem set_battery1_command =
esphome::modbus_controller::ModbusCommandItem::create_write_multiple_command(controller, 0x9000, battery_settings1.size() ,
battery_settings1);
// esphome::modbus_controller::ModbusCommandItem set_battery2_command =
// esphome::modbus_controller::ModbusCommandItem::create_write_multiple_command(controller, 0x900A, battery_settings2.size() ,
// battery_settings2);
esphome::modbus_controller::ModbusCommandItem set_battery3_command =
esphome::modbus_controller::ModbusCommandItem::create_write_multiple_command(controller, 0x906B, battery_settings3.size(),
battery_settings3);
delay(200) ;
controller->queue_command(set_battery1_command);
delay(200) ;
// controller->queue_command(set_battery2_command);
// delay(200) ;
controller->queue_command(set_battery3_command);
ESP_LOGI("ModbusLambda", "EPSOLAR Battery set");
esp32:
board: pico32
framework:
type: arduino
version: latest
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.1.180
gateway: 192.168.1.2
subnet: 255.255.255.0
time:
- platform: sntp
id: sntp_time
timezone: "CET-1CEST,M3.5.0,M10.5.0/3"
servers: "de.pool.ntp.org"
# Enable logging
logger:
level: INFO
# Enable Home Assistant API
api:
reboot_timeout: 0s
- Pete30
- Moderátor
- Příspěvky: 3461
- Registrován: 30. září 2020, 20:33
- Dal poděkování: 174 poděkování
- Dostal poděkování: 373 poděkování
Re: EspHome Epever RS485 modbus
K tomu prvnímu: tam se nedá použít čas z HA ?
Lambda, ! není problém spíš to vidím na špatný zápis nebo syntaxe.
Naformátuj ten kód takto není možné zjistit jestli je to dobře odsazené
Co vidím na kódu teď že je to špatně.
Kód: Vybrat vše
time:
- platform: homeassistant
id: xyz
Naformátuj ten kód takto není možné zjistit jestli je to dobře odsazené
Co vidím na kódu teď že je to špatně.
Pokud nejsem přítomen tak jsem na rybách
- Pete30
- Moderátor
- Příspěvky: 3461
- Registrován: 30. září 2020, 20:33
- Dal poděkování: 174 poděkování
- Dostal poděkování: 373 poděkování
Re: EspHome Epever RS485 modbus
U api heslo není podmínka jen bonus.
Nastavením reboot na 0 ignoruje restart při odpojení klienta, defaultně je v esp nastaveno 15 min
Nastavením reboot na 0 ignoruje restart při odpojení klienta, defaultně je v esp nastaveno 15 min
Pokud nejsem přítomen tak jsem na rybách
- Pete30
- Moderátor
- Příspěvky: 3461
- Registrován: 30. září 2020, 20:33
- Dal poděkování: 174 poděkování
- Dostal poděkování: 373 poděkování
Re: EspHome Epever RS485 modbus
V kódu toho máš část a řešíš chyby
Nemáš uart, modbus, modbus controller a další.
Proč nepostupuješ podle tohoto postupu, který je vyzkoušen a až to rozjedeš můžeš to upravovat podle svého:
https://esphome.io/cookbook/tracer-an.html
Nemáš uart, modbus, modbus controller a další.
Proč nepostupuješ podle tohoto postupu, který je vyzkoušen a až to rozjedeš můžeš to upravovat podle svého:
https://esphome.io/cookbook/tracer-an.html
Pokud nejsem přítomen tak jsem na rybách
-
- Aktivní autor
- Příspěvky: 61
- Registrován: 04. červenec 2022, 23:32
- Dal poděkování: 10 poděkování
- Dostal poděkování: 1 poděkování
Re: EspHome Epever RS485 modbus
No dyť podle toho postupuju, to je to samý a jsou tam ty samý chybky.Pete30 píše: ↑08. červenec 2022, 01:09 V kódu toho máš část a řešíš chyby
Nemáš uart, modbus, modbus controller a další.
Proč nepostupuješ podle tohoto postupu, který je vyzkoušen a až to rozjedeš můžeš to upravovat podle svého:
https://esphome.io/cookbook/tracer-an.html
-
- Aktivní autor
- Příspěvky: 61
- Registrován: 04. červenec 2022, 23:32
- Dal poděkování: 10 poděkování
- Dostal poděkování: 1 poděkování
Re: EspHome Epever RS485 modbus
No to mě po...drž. vyřešeno. nakonec jsem to zkusil podle jednoduššího návodu, který mě kdysy dávno také nešel. Pro jistotu to sem hodím, kdyby někdo něco podobného řešil.
Všimněte si jak jsou definovány TX a RX v UART. V tom byl problém, já je zapojoval do kříže a vono to má být rovně. Něchtělo se mi to přeletovávat, tak jsem to prohodil v yamlu a flešnul přes OTA a těpic, vono to najelo!
Všimněte si jak jsou definovány TX a RX v UART. V tom byl problém, já je zapojoval do kříže a vono to má být rovně. Něchtělo se mi to přeletovávat, tak jsem to prohodil v yamlu a flešnul přes OTA a těpic, vono to najelo!
Kód: Vybrat vše
esphome:
name: epever-zapad
esp8266:
board: nodemcuv2
# Enable logging
logger:
level: INFO
baud_rate: 0
# Enable Home Assistant API
api:
password: "vašehesloAPI"
ota:
password: "vašhesloOTA"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: va.še.ip.adresa
gateway: 192.168.1.2
subnet: 255.255.255.0
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "epever-zapad"
password: "pinoccio"
captive_portal:
web_server:
port: 80
uart:
id: mod_bus
tx_pin: RX
rx_pin: TX
baud_rate: 115200
stop_bits: 1
modbus:
flow_control_pin: 5
id: modbus1
modbus_controller:
- id: epever
## the Modbus device addr
address: 0x1
modbus_id: modbus1
setup_priority: -10
sensor:
- platform: modbus_controller
modbus_controller_id: epever
id: pv_input_voltage
name: "PV array input voltage"
address: 0x3100
unit_of_measurement: "V" ## for any other unit the value is returned in minutes
register_type: read
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: pv_input_current
name: "PV array input current"
address: 0x3101
unit_of_measurement: "A" ## for any other unit the value is returned in minutes
register_type: read
value_type: U_WORD
accuracy_decimals: 2
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: pv_input_power
name: "PV array input power"
address: 0x3102
unit_of_measurement: "W" ## for any other unit the value is returned in minutes
register_type: read
value_type: U_DWORD_R
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: charging_voltage
name: "Charging voltage"
address: 0x3104
unit_of_measurement: "V"
register_type: read
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: charging_current
name: "Charging current"
address: 0x3105
unit_of_measurement: "A"
register_type: read
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: charging_power
name: "Charging power"
address: 0x3106
unit_of_measurement: "W"
register_type: read
value_type: U_DWORD_R
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: battery_temperature
name: "Battery temperature"
address: 0x3110
unit_of_measurement: °C
register_type: read
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: device_temperature
name: "Device temperature"
address: 0x3111
unit_of_measurement: °C
register_type: read
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: battery_soc
name: "Battery SOC"
address: 0x311A
unit_of_measurement: "%"
register_type: read
value_type: U_WORD
accuracy_decimals: 0
- platform: modbus_controller
modbus_controller_id: epever
id: battery_voltage
name: "Battery voltage"
address: 0x331A
register_type: read
value_type: U_WORD
accuracy_decimals: 1
unit_of_measurement: "V"
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: battery_current
name: "Battery current"
address: 0x331B
register_type: read
value_type: S_DWORD_R
register_count: 2
accuracy_decimals: 2
unit_of_measurement: "A"
filters:
- multiply: 0.01