diff --git a/examples/MultiDevice/src/main.cpp b/examples/MultiDevice/src/main.cpp index 3c33f99..a102683 100644 --- a/examples/MultiDevice/src/main.cpp +++ b/examples/MultiDevice/src/main.cpp @@ -143,7 +143,7 @@ MyVictronCallback callback; void setup() { Serial.begin(115200); - delay(2000); + delay(1000); Serial.println("\n\n================================="); Serial.println("VictronBLE Multi-Device Example"); @@ -155,14 +155,12 @@ void setup() { Serial.println(victron.getLastError()); while (1) delay(1000); } - delay(1000); // Enable debug output (optional) victron.setDebug(true); // Set callback for data updates victron.setCallback(&callback); - delay(1000); // Add your devices here // Replace with your actual MAC addresses and encryption keys @@ -189,7 +187,6 @@ void setup() { "0ec3adf7433dd61793ff2f3b8ad32ed8", // Encryption key (32 hex chars) DEVICE_TYPE_SOLAR_CHARGER // Device type ); - delay(1000); /* * @@ -209,41 +206,47 @@ void setup() { */ // Example: Solar Charger #1 + /* victron.addDevice( "MPPT 100/30", // Device name "E7:48:D4:28:B7:9C", // MAC address "0df4d0395b7d1a876c0c33ecb9e70dcd", // Encryption key (32 hex chars) DEVICE_TYPE_SOLAR_CHARGER // Device type ); + */ // Example: Solar Charger #2 + /* victron.addDevice( "MPPT 75/15", "AA:BB:CC:DD:EE:FF", "1234567890abcdef1234567890abcdef", DEVICE_TYPE_SOLAR_CHARGER ); + */ // Example: Battery Monitor (SmartShunt) + /* victron.addDevice( "SmartShunt", "11:22:33:44:55:66", "fedcba0987654321fedcba0987654321", DEVICE_TYPE_BATTERY_MONITOR ); + */ // Example: Inverter/Charger + /* victron.addDevice( "MultiPlus", "99:88:77:66:55:44", "abcdefabcdefabcdefabcdefabcdefab", DEVICE_TYPE_INVERTER ); + */ - delay(1000); Serial.println("Configured " + String(victron.getDeviceCount()) + " devices"); Serial.println("\nStarting BLE scan...\n"); - delay(1000); } void loop() { diff --git a/src/VictronBLE.cpp b/src/VictronBLE.cpp index a4804c7..dcea477 100644 --- a/src/VictronBLE.cpp +++ b/src/VictronBLE.cpp @@ -471,8 +471,8 @@ bool VictronBLE::parseBatteryMonitor(const uint8_t* data, size_t len, BatteryMon // Parse battery current (22-bit signed, 1 mA units) // Bits 0-7: currentLow, Bits 8-15: currentMid, Bits 16-21: low 6 bits of currentHigh_consumedLow - int32_t current = payload->currentLow | - (payload->currentMid << 8) | + int32_t current = payload->currentLow | + (payload->currentMid << 8) | ((payload->currentHigh_consumedLow & 0x3F) << 16); // Sign extend from 22 bits to 32 bits if (current & 0x200000) { @@ -482,8 +482,8 @@ bool VictronBLE::parseBatteryMonitor(const uint8_t* data, size_t len, BatteryMon // Parse consumed Ah (18-bit signed, 10 mAh units) // Bits 0-1: high 2 bits of currentHigh_consumedLow, Bits 2-9: consumedMid, Bits 10-17: consumedHigh - int32_t consumedAh = ((payload->currentHigh_consumedLow & 0xC0) >> 6) | - (payload->consumedMid << 2) | + int32_t consumedAh = ((payload->currentHigh_consumedLow & 0xC0) >> 6) | + (payload->consumedMid << 2) | (payload->consumedHigh << 10); // Sign extend from 18 bits to 32 bits if (consumedAh & 0x20000) { @@ -520,8 +520,8 @@ bool VictronBLE::parseInverter(const uint8_t* data, size_t len, InverterData& re result.batteryCurrent = payload->batteryCurrent * 0.01f; // Parse AC Power (signed 24-bit, 1 W units) - int32_t acPower = payload->acPowerLow | - (payload->acPowerMid << 8) | + int32_t acPower = payload->acPowerLow | + (payload->acPowerMid << 8) | (payload->acPowerHigh << 16); // Sign extend from 24 bits to 32 bits if (acPower & 0x800000) { @@ -698,6 +698,7 @@ void VictronBLE::debugPrint(const String& message) { } } +// XXX Can't we use debugPrintf instead for hex struct etc? void VictronBLE::debugPrintHex(const char* label, const uint8_t* data, size_t len) { if (!debugEnabled) return;