Improve power saving and payload safety

This commit is contained in:
2026-01-23 17:32:40 +01:00
parent ae6e7b3192
commit 460b6f86bb
4 changed files with 15 additions and 3 deletions

View File

@@ -134,7 +134,10 @@ static void receiver_loop() {
if (lora_receive(pkt, 0) && pkt.protocol_version == PROTOCOL_VERSION && pkt.payload_type == PayloadType::MeterData) { if (lora_receive(pkt, 0) && pkt.protocol_version == PROTOCOL_VERSION && pkt.payload_type == PayloadType::MeterData) {
uint8_t decompressed[256]; uint8_t decompressed[256];
size_t decompressed_len = 0; size_t decompressed_len = 0;
if (decompressBuffer(pkt.payload, pkt.payload_len, decompressed, sizeof(decompressed), decompressed_len)) { if (decompressBuffer(pkt.payload, pkt.payload_len, decompressed, sizeof(decompressed) - 1, decompressed_len)) {
if (decompressed_len >= sizeof(decompressed)) {
return;
}
decompressed[decompressed_len] = '\0'; decompressed[decompressed_len] = '\0';
MeterData data = {}; MeterData data = {};
if (jsonToMeterData(String(reinterpret_cast<const char *>(decompressed)), data)) { if (jsonToMeterData(String(reinterpret_cast<const char *>(decompressed)), data)) {

View File

@@ -17,6 +17,7 @@ void power_sender_init() {
} }
void power_receiver_init() { void power_receiver_init() {
btStop();
analogReadResolution(12); analogReadResolution(12);
pinMode(PIN_BAT_ADC, INPUT); pinMode(PIN_BAT_ADC, INPUT);
} }

View File

@@ -95,7 +95,10 @@ void test_receiver_loop(SenderStatus *statuses, uint8_t count, uint16_t self_sho
uint8_t decompressed[160]; uint8_t decompressed[160];
size_t decompressed_len = 0; size_t decompressed_len = 0;
if (!decompressBuffer(pkt.payload, pkt.payload_len, decompressed, sizeof(decompressed), decompressed_len)) { if (!decompressBuffer(pkt.payload, pkt.payload_len, decompressed, sizeof(decompressed) - 1, decompressed_len)) {
return;
}
if (decompressed_len >= sizeof(decompressed)) {
return; return;
} }
decompressed[decompressed_len] = '\0'; decompressed[decompressed_len] = '\0';

View File

@@ -1,5 +1,6 @@
#include "wifi_manager.h" #include "wifi_manager.h"
#include <WiFi.h> #include <WiFi.h>
#include <esp_wifi.h>
static Preferences prefs; static Preferences prefs;
@@ -43,7 +44,11 @@ bool wifi_connect_sta(const WifiMqttConfig &config, uint32_t timeout_ms) {
while (WiFi.status() != WL_CONNECTED && millis() - start < timeout_ms) { while (WiFi.status() != WL_CONNECTED && millis() - start < timeout_ms) {
delay(200); delay(200);
} }
return WiFi.status() == WL_CONNECTED; bool connected = WiFi.status() == WL_CONNECTED;
if (connected) {
esp_wifi_set_ps(WIFI_PS_MIN_MODEM);
}
return connected;
} }
void wifi_start_ap(const char *ap_ssid, const char *ap_pass) { void wifi_start_ap(const char *ap_ssid, const char *ap_pass) {