Compare commits

...

7 commits
v9.1.2 ... main

Author SHA1 Message Date
Daniel Öster
d8153c48bb
Update CONTRIBUTING.md 2025-10-03 13:52:14 +03:00
Daniel Öster
f3a6157080
Merge pull request #1592 from dalathegreat/improvement/stark-BMS-on-by-default
Stark CMR: Make BMS power on by default
2025-10-02 14:27:47 +03:00
Daniel Öster
867512eecd Make Stark BMS power on by default 2025-10-01 21:13:41 +03:00
Daniel Öster
f9109d0348
Merge pull request #1587 from dalathegreat/bugfix/passwords-dashes
Bugfix: Allow dash as special character in usernames/passwords
2025-10-01 20:08:27 +03:00
Daniel Öster
9943406836 Make Wifi use actual set SSID for AP 2025-09-30 23:29:08 +03:00
Daniel Öster
18ee9d6c27 Allow dash as special character in usernames/passwords 2025-09-30 22:16:05 +03:00
Daniel Öster
31ea1f0928
Update Software.cpp 2025-09-30 14:43:14 +03:00
5 changed files with 31 additions and 12 deletions

View file

@ -106,3 +106,20 @@ Navigate to Battery-Emulator/test folder
sudo cmake CMakeLists.txt sudo cmake CMakeLists.txt
sudo make sudo make
``` ```
## Downloading a pull request build to test locally 🛜
If you want to test a pull request, you can download the precompiled binaries from the build system. To do this,start by clicking on the "**Checks**" tab
<img width="779" height="312" alt="image" src="https://github.com/user-attachments/assets/fc7783c1-ba61-440e-ab09-b53d2b49f1bb" />
Then select which hardware you need the binaries for. Currently we build for these hardwares:
- LilyGo T-CAN485
- Stark CMR
- LilyGo T-2CAN
<img width="647" height="476" alt="image" src="https://github.com/user-attachments/assets/fbb97719-0155-4792-9d91-c51e6052fa57" />
After selecting the hardware you need, click the "**Upload Artifact**", and there will be a download link. Download the file, and [OTA Update](https://github.com/dalathegreat/Battery-Emulator/wiki/OTA-Update) your device with this file!
<img width="1714" height="697" alt="image" src="https://github.com/user-attachments/assets/2e17f90f-cc7d-4265-b7bc-7aa5cc6b6ec8" />

View file

@ -34,7 +34,7 @@
#endif #endif
// The current software version, shown on webserver // The current software version, shown on webserver
const char* version_number = "9.1.2"; const char* version_number = "9.2.dev";
// Interval timers // Interval timers
volatile unsigned long currentMillis = 0; volatile unsigned long currentMillis = 0;

View file

@ -21,6 +21,9 @@ class StarkHal : public Esp32Hal {
public: public:
const char* name() { return "Stark CMR Module"; } const char* name() { return "Stark CMR Module"; }
//Always enable BMS power on Stark CMR, it does not collide with any pin definitions
virtual bool always_enable_bms_power() { return true; }
// Not needed, GPIO 16 has hardware pullup for PSRAM compatibility // Not needed, GPIO 16 has hardware pullup for PSRAM compatibility
virtual gpio_num_t PIN_5V_EN() { return GPIO_NUM_NC; } virtual gpio_num_t PIN_5V_EN() { return GPIO_NUM_NC; }

View file

@ -1249,14 +1249,14 @@ const char* getCANInterfaceName(CAN_Interface interface) {
<label>Access point name: </label> <label>Access point name: </label>
<input type='text' name='APNAME' value="%APNAME%" <input type='text' name='APNAME' value="%APNAME%"
pattern="[A-Za-z0-9!#*]{8,63}" pattern="[A-Za-z0-9!#*-]{8,63}"
title="Name must be 8-63 characters long and may only contain letters, numbers and some special characters: !#*" title="Name must be 8-63 characters long and may only contain letters, numbers and some special characters: !#*-"
required /> required />
<label>Access point password: </label> <label>Access point password: </label>
<input type='text' name='APPASSWORD' value="%APPASSWORD%" <input type='text' name='APPASSWORD' value="%APPASSWORD%"
pattern="[A-Za-z0-9!#*]{8,63}" pattern="[A-Za-z0-9!#*-]{8,63}"
title="Password must be 8-63 characters long and may only contain letters, numbers and some special characters: !#*" title="Password must be 8-63 characters long and may only contain letters, numbers and some special characters: !#*-"
required /> required />
<label>Wifi channel 0-14: </label> <label>Wifi channel 0-14: </label>
@ -1266,8 +1266,8 @@ const char* getCANInterfaceName(CAN_Interface interface) {
<label>Custom Wifi hostname: </label> <label>Custom Wifi hostname: </label>
<input type='text' name='HOSTNAME' value="%HOSTNAME%" <input type='text' name='HOSTNAME' value="%HOSTNAME%"
pattern="[A-Za-z0-9!*]+" pattern="[A-Za-z0-9!#*-]+"
title="Optional: Hostname may only contain only letters, numbers, ! and *" /> title="Optional: Hostname may only contain letters, numbers and some special characters: !#*-" />
<label>Use static IP address: </label> <label>Use static IP address: </label>
<input type='checkbox' name='STATICIP' value='on' %STATICIP% /> <input type='checkbox' name='STATICIP' value='on' %STATICIP% />
@ -1312,11 +1312,11 @@ const char* getCANInterfaceName(CAN_Interface interface) {
min="1" max="65535" step="1" min="1" max="65535" step="1"
title="Port number (1-65535)" /> title="Port number (1-65535)" />
<label>MQTT user: </label><input type='text' name='MQTTUSER' value="%MQTTUSER%" <label>MQTT user: </label><input type='text' name='MQTTUSER' value="%MQTTUSER%"
pattern="[A-Za-z0-9!#*]+" pattern="[A-Za-z0-9!#*-]+"
title="MQTT username can only contain letters, numbers and some special characters: !#*" /> title="MQTT username can only contain letters, numbers and some special characters: !#*-" />
<label>MQTT password: </label><input type='password' name='MQTTPASSWORD' value="%MQTTPASSWORD%" <label>MQTT password: </label><input type='password' name='MQTTPASSWORD' value="%MQTTPASSWORD%"
pattern="[A-Za-z0-9!#*]+" pattern="[A-Za-z0-9!#*-]+"
title="MQTT password can only contain letters, numbers and some special characters: !#*" /> title="MQTT password can only contain letters, numbers and some special characters: !#*-" />
<label>MQTT timeout ms: </label> <label>MQTT timeout ms: </label>
<input name='MQTTTIMEOUT' type='number' value="%MQTTTIMEOUT%" <input name='MQTTTIMEOUT' type='number' value="%MQTTTIMEOUT%"
min="1" max="60000" step="1" min="1" max="60000" step="1"

View file

@ -240,7 +240,6 @@ void init_mDNS() {
} }
void init_WiFi_AP() { void init_WiFi_AP() {
ssidAP = std::string("BatteryEmulator") + WiFi.macAddress().c_str();
DEBUG_PRINTF("Creating Access Point: %s\n", ssidAP.c_str()); DEBUG_PRINTF("Creating Access Point: %s\n", ssidAP.c_str());
DEBUG_PRINTF("With password: %s\n", passwordAP.c_str()); DEBUG_PRINTF("With password: %s\n", passwordAP.c_str());