Add Pylontech battery to device pin manager

This commit is contained in:
Bernhard Kaszt 2023-03-05 19:55:56 +01:00
parent 43436e19b7
commit 06fbdf1f12
7 changed files with 40 additions and 9 deletions

View File

@ -31,6 +31,8 @@ struct PinMapping_t {
uint8_t display_reset; uint8_t display_reset;
uint8_t victron_tx; uint8_t victron_tx;
uint8_t victron_rx; uint8_t victron_rx;
uint8_t battery_rx;
uint8_t battery_tx;
}; };
class PinMappingClass { class PinMappingClass {
@ -42,9 +44,10 @@ public:
bool isValidNrf24Config(); bool isValidNrf24Config();
bool isValidEthConfig(); bool isValidEthConfig();
bool isValidVictronConfig(); bool isValidVictronConfig();
bool isValidBatteryConfig();
private: private:
PinMapping_t _pinMapping; PinMapping_t _pinMapping;
}; };
extern PinMappingClass PinMapping; extern PinMappingClass PinMapping;

View File

@ -17,7 +17,8 @@
class PylontechCanReceiverClass { class PylontechCanReceiverClass {
public: public:
void init(); void init(int8_t rx, int8_t tx);
void enable();
void loop(); void loop();
void parseCanPackets(); void parseCanPackets();
void mqtt(); void mqtt();

View File

@ -64,6 +64,8 @@ PinMappingClass::PinMappingClass()
_pinMapping.victron_tx = VICTRON_PIN_TX; _pinMapping.victron_tx = VICTRON_PIN_TX;
_pinMapping.victron_rx = VICTRON_PIN_RX; _pinMapping.victron_rx = VICTRON_PIN_RX;
_pinMapping.battery_rx = PYLONTECH_PIN_RX;
_pinMapping.battery_tx = PYLONTECH_PIN_TX;
} }
PinMapping_t& PinMappingClass::get() PinMapping_t& PinMappingClass::get()
@ -119,6 +121,9 @@ bool PinMappingClass::init(const String& deviceMapping)
_pinMapping.victron_rx = doc[i]["victron"]["rx"] | VICTRON_PIN_RX; _pinMapping.victron_rx = doc[i]["victron"]["rx"] | VICTRON_PIN_RX;
_pinMapping.victron_tx = doc[i]["victron"]["tx"] | VICTRON_PIN_TX; _pinMapping.victron_tx = doc[i]["victron"]["tx"] | VICTRON_PIN_TX;
_pinMapping.battery_rx = doc[i]["battery"]["rx"] | PYLONTECH_PIN_RX;
_pinMapping.battery_tx = doc[i]["battery"]["tx"] | PYLONTECH_PIN_TX;
return true; return true;
} }
} }
@ -145,4 +150,10 @@ bool PinMappingClass::isValidVictronConfig()
{ {
return _pinMapping.victron_rx > 0 return _pinMapping.victron_rx > 0
&& _pinMapping.victron_tx > 0; && _pinMapping.victron_tx > 0;
} }
bool PinMappingClass::isValidBatteryConfig()
{
return _pinMapping.battery_rx > 0
&& _pinMapping.battery_tx > 0;
}

View File

@ -9,16 +9,21 @@
PylontechCanReceiverClass PylontechCanReceiver; PylontechCanReceiverClass PylontechCanReceiver;
void PylontechCanReceiverClass::init() void PylontechCanReceiverClass::init(int8_t rx, int8_t tx)
{ {
CAN.setPins(rx, tx);
CONFIG_T& config = Configuration.get(); CONFIG_T& config = Configuration.get();
if (!config.Battery_Enabled) { if (!config.Battery_Enabled) {
return; return;
} }
CAN.setPins(PYLONTECH_PIN_RX, PYLONTECH_PIN_TX);
enable();
}
void PylontechCanReceiverClass::enable()
{
if (!CAN.begin(500E3)) { if (!CAN.begin(500E3)) {
Hoymiles.getMessageOutput()->println("Starting CAN failed!"); Hoymiles.getMessageOutput()->println("Starting CAN failed!");
} }

View File

@ -108,6 +108,6 @@ void WebApiBatteryClass::onAdminPost(AsyncWebServerRequest* request)
request->send(response); request->send(response);
if (config.Battery_Enabled) { if (config.Battery_Enabled) {
PylontechCanReceiver.init(); PylontechCanReceiver.enable();
} }
} }

View File

@ -73,6 +73,10 @@ void WebApiDeviceClass::onDeviceAdminGet(AsyncWebServerRequest* request)
victronPinObj[F("rx")] = pin.victron_rx; victronPinObj[F("rx")] = pin.victron_rx;
victronPinObj[F("tx")] = pin.victron_tx; victronPinObj[F("tx")] = pin.victron_tx;
JsonObject batteryPinObj = curPin.createNestedObject("battery");
batteryPinObj[F("rx")] = pin.battery_rx;
batteryPinObj[F("tx")] = pin.battery_tx;
response->setLength(); response->setLength();
request->send(response); request->send(response);
} }

View File

@ -149,8 +149,15 @@ void setup()
// Dynamic power limiter // Dynamic power limiter
PowerLimiter.init(); PowerLimiter.init();
// Pylontech / CAN bus // Initialize Pylontech Battery / CAN bus
PylontechCanReceiver.init(); MessageOutput.println(F("Initialize Pylontech battery interface... "));
if (PinMapping.isValidBatteryConfig()) {
MessageOutput.printf("Pylontech Battery rx = %d, tx = %d\r\n", pin.battery_rx, pin.battery_tx);
PylontechCanReceiver.init(pin.battery_rx, pin.battery_tx);
MessageOutput.println(F("done"));
} else {
MessageOutput.println(F("Invalid pin config"));
}
} }
void loop() void loop()