intial test version
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
/**
|
||||
* BluettiBLE Logger Example
|
||||
*
|
||||
* Prints a line only when a value of interest changes, rather than every poll
|
||||
* cycle. Demonstrates the snapshot / change-detection pattern.
|
||||
*/
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "BluettiBLE.h"
|
||||
|
||||
BluettiBLE bluetti;
|
||||
|
||||
// Last-seen snapshot of the fields we care about.
|
||||
struct Snapshot {
|
||||
bool valid = false;
|
||||
uint8_t soc = 0;
|
||||
uint16_t acOut = 0;
|
||||
uint16_t dcOut = 0;
|
||||
bool acOn = false;
|
||||
bool dcOn = false;
|
||||
uint32_t packetsSinceLog = 0;
|
||||
};
|
||||
|
||||
static Snapshot prev;
|
||||
|
||||
void onBluettiData(const BluettiDevice* dev) {
|
||||
const BluettiData& d = dev->data;
|
||||
prev.packetsSinceLog++;
|
||||
|
||||
bool changed = !prev.valid ||
|
||||
prev.soc != d.totalBatteryPercent ||
|
||||
prev.acOut != d.acOutputPower ||
|
||||
prev.dcOut != d.dcOutputPower ||
|
||||
prev.acOn != d.acOutputOn ||
|
||||
prev.dcOn != d.dcOutputOn;
|
||||
|
||||
if (!changed) return;
|
||||
|
||||
Serial.printf("CHANGE (%lu polls): SoC %u%% AC %u W (%s) DC %u W (%s)\n",
|
||||
prev.packetsSinceLog,
|
||||
d.totalBatteryPercent,
|
||||
d.acOutputPower, d.acOutputOn ? "ON" : "off",
|
||||
d.dcOutputPower, d.dcOutputOn ? "ON" : "off");
|
||||
|
||||
prev.valid = true;
|
||||
prev.soc = d.totalBatteryPercent;
|
||||
prev.acOut = d.acOutputPower;
|
||||
prev.dcOut = d.dcOutputPower;
|
||||
prev.acOn = d.acOutputOn;
|
||||
prev.dcOn = d.dcOutputOn;
|
||||
prev.packetsSinceLog = 0;
|
||||
}
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
delay(1000);
|
||||
|
||||
Serial.println("\nBluettiBLE Logger Example\n");
|
||||
|
||||
bluetti.begin();
|
||||
bluetti.setCallback(onBluettiData);
|
||||
|
||||
// CHANGE THESE: your device's advertised BLE name and model.
|
||||
bluetti.addDevice("My Bluetti", "AC3001234567890", BLUETTI_AC300);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
bluetti.loop();
|
||||
}
|
||||
Reference in New Issue
Block a user