Skip to content

Commit

Permalink
Add Pylontech battery to device pin manager
Browse files Browse the repository at this point in the history
  • Loading branch information
Bernhard Kaszt committed Mar 5, 2023
1 parent 43436e1 commit 06fbdf1
Show file tree
Hide file tree
Showing 7 changed files with 40 additions and 9 deletions.
5 changes: 4 additions & 1 deletion include/PinMapping.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ struct PinMapping_t {
uint8_t display_reset;
uint8_t victron_tx;
uint8_t victron_rx;
uint8_t battery_rx;
uint8_t battery_tx;
};

class PinMappingClass {
Expand All @@ -42,9 +44,10 @@ class PinMappingClass {
bool isValidNrf24Config();
bool isValidEthConfig();
bool isValidVictronConfig();
bool isValidBatteryConfig();

private:
PinMapping_t _pinMapping;
};

extern PinMappingClass PinMapping;
extern PinMappingClass PinMapping;
3 changes: 2 additions & 1 deletion include/PylontechCanReceiver.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@

class PylontechCanReceiverClass {
public:
void init();
void init(int8_t rx, int8_t tx);
void enable();
void loop();
void parseCanPackets();
void mqtt();
Expand Down
13 changes: 12 additions & 1 deletion src/PinMapping.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ PinMappingClass::PinMappingClass()
_pinMapping.victron_tx = VICTRON_PIN_TX;
_pinMapping.victron_rx = VICTRON_PIN_RX;

_pinMapping.battery_rx = PYLONTECH_PIN_RX;
_pinMapping.battery_tx = PYLONTECH_PIN_TX;
}

PinMapping_t& PinMappingClass::get()
Expand Down Expand Up @@ -119,6 +121,9 @@ bool PinMappingClass::init(const String& deviceMapping)
_pinMapping.victron_rx = doc[i]["victron"]["rx"] | VICTRON_PIN_RX;
_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;
}
}
Expand All @@ -145,4 +150,10 @@ bool PinMappingClass::isValidVictronConfig()
{
return _pinMapping.victron_rx > 0
&& _pinMapping.victron_tx > 0;
}
}

bool PinMappingClass::isValidBatteryConfig()
{
return _pinMapping.battery_rx > 0
&& _pinMapping.battery_tx > 0;
}
11 changes: 8 additions & 3 deletions src/PylontechCanReceiver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,21 @@

PylontechCanReceiverClass PylontechCanReceiver;

void PylontechCanReceiverClass::init()
void PylontechCanReceiverClass::init(int8_t rx, int8_t tx)
{
CAN.setPins(rx, tx);

CONFIG_T& config = Configuration.get();

if (!config.Battery_Enabled) {
return;
}

CAN.setPins(PYLONTECH_PIN_RX, PYLONTECH_PIN_TX);

enable();
}

void PylontechCanReceiverClass::enable()
{
if (!CAN.begin(500E3)) {
Hoymiles.getMessageOutput()->println("Starting CAN failed!");
}
Expand Down
2 changes: 1 addition & 1 deletion src/WebApi_battery.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,6 @@ void WebApiBatteryClass::onAdminPost(AsyncWebServerRequest* request)
request->send(response);

if (config.Battery_Enabled) {
PylontechCanReceiver.init();
PylontechCanReceiver.enable();
}
}
4 changes: 4 additions & 0 deletions src/WebApi_device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@ void WebApiDeviceClass::onDeviceAdminGet(AsyncWebServerRequest* request)
victronPinObj[F("rx")] = pin.victron_rx;
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();
request->send(response);
}
Expand Down
11 changes: 9 additions & 2 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -149,8 +149,15 @@ void setup()
// Dynamic power limiter
PowerLimiter.init();

// Pylontech / CAN bus
PylontechCanReceiver.init();
// Initialize Pylontech Battery / CAN bus
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()
Expand Down

0 comments on commit 06fbdf1

Please sign in to comment.