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_clk;
uint8_t display_cs; uint8_t display_cs;
uint8_t display_reset; uint8_t display_reset;
uint8_t victron_tx;
uint8_t victron_rx;
}; };
class PinMappingClass { class PinMappingClass {
@ -39,6 +41,7 @@ public:
bool isValidNrf24Config(); bool isValidNrf24Config();
bool isValidEthConfig(); bool isValidEthConfig();
bool isValidVictronConfig();
private: private:
PinMapping_t _pinMapping; 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(); VedirectSerial.flush();
} }

View File

@ -29,7 +29,7 @@ class VeDirectFrameHandler {
public: public:
VeDirectFrameHandler(); 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 setPollInterval(unsigned long interval); // set poll intervall in seconds
void loop(); // main loop to read ve.direct data void loop(); // main loop to read ve.direct data
unsigned long getLastUpdate(); // timestamp of last successful frame read 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_IRQ=16
-DHOYMILES_PIN_CE=4 -DHOYMILES_PIN_CE=4
-DHOYMILES_PIN_CS=5 -DHOYMILES_PIN_CS=5
-DVICTRON_PIN_TX=21
-DVICTRON_PIN_RX=22
[env:olimex_esp32_poe] [env:olimex_esp32_poe]

View File

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

View File

@ -60,6 +60,9 @@ PinMappingClass::PinMappingClass()
_pinMapping.display_clk = DISPLAY_CLK; _pinMapping.display_clk = DISPLAY_CLK;
_pinMapping.display_cs = DISPLAY_CS; _pinMapping.display_cs = DISPLAY_CS;
_pinMapping.display_reset = DISPLAY_RESET; _pinMapping.display_reset = DISPLAY_RESET;
_pinMapping.victron_tx = VICTRON_PIN_TX;
_pinMapping.victron_rx = VICTRON_PIN_RX;
} }
@ -113,6 +116,9 @@ bool PinMappingClass::init(const String& deviceMapping)
_pinMapping.display_cs = doc[i]["display"]["cs"] | DISPLAY_CS; _pinMapping.display_cs = doc[i]["display"]["cs"] | DISPLAY_CS;
_pinMapping.display_reset = doc[i]["display"]["reset"] | DISPLAY_RESET; _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; return true;
} }
} }
@ -133,4 +139,10 @@ bool PinMappingClass::isValidNrf24Config()
bool PinMappingClass::isValidEthConfig() bool PinMappingClass::isValidEthConfig()
{ {
return _pinMapping.eth_enabled; 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("screensaver")] = config.Display_ScreenSaver;
display[F("contrast")] = config.Display_Contrast; 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(); response->setLength();
request->send(response); request->send(response);
} }

View File

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

View File

@ -81,7 +81,7 @@
</tr> </tr>
<tr> <tr>
<td rowspan="6">Display</td> <td rowspan="5">Display</td>
<td>type</td> <td>type</td>
<td>{{ selectedPinAssignment?.display?.type }}</td> <td>{{ selectedPinAssignment?.display?.type }}</td>
<td>{{ currentPinAssignment?.display?.type }}</td> <td>{{ currentPinAssignment?.display?.type }}</td>
@ -107,6 +107,18 @@
<td>{{ currentPinAssignment?.display?.reset }}</td> <td>{{ currentPinAssignment?.display?.reset }}</td>
</tr> </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> </tbody>
</table> </table>
</div> </div>

View File

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

Binary file not shown.