Add victron pins to device manager

This commit is contained in:
helgeerbe 2023-02-02 23:01:22 +01:00
parent 9e79f02787
commit 1c01e927f9
11 changed files with 52 additions and 7 deletions

View File

@ -29,6 +29,8 @@ struct PinMapping_t {
uint8_t display_clk;
uint8_t display_cs;
uint8_t display_reset;
uint8_t victron_tx;
uint8_t victron_rx;
};
class PinMappingClass {
@ -39,6 +41,7 @@ public:
bool isValidNrf24Config();
bool isValidEthConfig();
bool isValidVictronConfig();
private:
PinMapping_t _pinMapping;

View File

@ -56,9 +56,9 @@ VeDirectFrameHandler::VeDirectFrameHandler() :
{
}
void VeDirectFrameHandler::init()
void VeDirectFrameHandler::init(int8_t rx, int8_t tx)
{
VedirectSerial.begin(19200, SERIAL_8N1, VICTRON_PIN_RX, VICTRON_PIN_TX);
VedirectSerial.begin(19200, SERIAL_8N1, rx, tx);
VedirectSerial.flush();
}

View File

@ -29,7 +29,7 @@ class VeDirectFrameHandler {
public:
VeDirectFrameHandler();
void init(); // initialize HardewareSerial
void init(int8_t rx, int8_t tx); // initialize HardewareSerial
void setPollInterval(unsigned long interval); // set poll intervall in seconds
void loop(); // main loop to read ve.direct data
unsigned long getLastUpdate(); // timestamp of last successful frame read

View File

@ -51,6 +51,8 @@ build_flags = ${env.build_flags}
-DHOYMILES_PIN_IRQ=16
-DHOYMILES_PIN_CE=4
-DHOYMILES_PIN_CS=5
-DVICTRON_PIN_TX=21
-DVICTRON_PIN_RX=22
[env:olimex_esp32_poe]

View File

@ -30,5 +30,7 @@ upload_port = COM4
; -DHOYMILES_PIN_IRQ=4
; -DHOYMILES_PIN_CE=5
; -DHOYMILES_PIN_CS=6
; -DVICTRON_PIN_TX=21
; -DVICTRON_PIN_RX=22
;monitor_port = /dev/ttyACM0
;upload_port = /dev/ttyACM0

View File

@ -61,6 +61,9 @@ PinMappingClass::PinMappingClass()
_pinMapping.display_cs = DISPLAY_CS;
_pinMapping.display_reset = DISPLAY_RESET;
_pinMapping.victron_tx = VICTRON_PIN_TX;
_pinMapping.victron_rx = VICTRON_PIN_RX;
}
PinMapping_t& PinMappingClass::get()
@ -113,6 +116,9 @@ bool PinMappingClass::init(const String& deviceMapping)
_pinMapping.display_cs = doc[i]["display"]["cs"] | DISPLAY_CS;
_pinMapping.display_reset = doc[i]["display"]["reset"] | DISPLAY_RESET;
_pinMapping.victron_rx = doc[i]["victron"]["rx"] | VICTRON_PIN_RX;
_pinMapping.victron_tx = doc[i]["victron"]["tx"] | VICTRON_PIN_TX;
return true;
}
}
@ -134,3 +140,9 @@ bool PinMappingClass::isValidEthConfig()
{
return _pinMapping.eth_enabled;
}
bool PinMappingClass::isValidVictronConfig()
{
return _pinMapping.victron_rx > 0
&& _pinMapping.victron_tx > 0;
}

View File

@ -69,6 +69,10 @@ void WebApiDeviceClass::onDeviceAdminGet(AsyncWebServerRequest* request)
display[F("screensaver")] = config.Display_ScreenSaver;
display[F("contrast")] = config.Display_Contrast;
JsonObject victronPinObj = curPin.createNestedObject("victron");
victronPinObj[F("rx")] = pin.victron_rx;
victronPinObj[F("tx")] = pin.victron_tx;
response->setLength();
request->send(response);
}

View File

@ -165,9 +165,13 @@ void setup()
// Initialize ve.direct communication
MessageOutput.println(F("Initialize ve.direct interface... "));
VeDirect.init();
VeDirect.setPollInterval(config.Vedirect_PollInterval);
MessageOutput.println(F("done"));
if (PinMapping.isValidVictronConfig()) {
VeDirect.init(pin.victron_rx, pin.victron_tx);
VeDirect.setPollInterval(config.Vedirect_PollInterval);
MessageOutput.println(F("done"));
} else {
MessageOutput.println(F("Invalid pin config"));
}
}
void loop()

View File

@ -81,7 +81,7 @@
</tr>
<tr>
<td rowspan="6">Display</td>
<td rowspan="5">Display</td>
<td>type</td>
<td>{{ selectedPinAssignment?.display?.type }}</td>
<td>{{ currentPinAssignment?.display?.type }}</td>
@ -107,6 +107,18 @@
<td>{{ currentPinAssignment?.display?.reset }}</td>
</tr>
<tr>
<td rowspan="2">Victron</td>
<td>RX</td>
<td>{{ selectedPinAssignment?.victron?.rx }}</td>
<td>{{ currentPinAssignment?.victron?.rx }}</td>
</tr>
<tr>
<td>TX</td>
<td>{{ selectedPinAssignment?.victron?.tx }}</td>
<td>{{ currentPinAssignment?.victron?.tx }}</td>
</tr>
</tbody>
</table>
</div>

View File

@ -25,11 +25,17 @@ export interface Display {
reset: number;
}
export interface Victron {
rx: number;
tx: number;
}
export interface Device {
name: string;
nrf24: Nrf24;
eth: Ethernet;
display: Display;
victron: Victron;
}
export interface PinMapping extends Array<Device>{}

Binary file not shown.