Create sensor classes that can be shared across variants

This commit is contained in:
Normunds Gavars
2025-05-19 17:24:54 +03:00
parent fa0456549a
commit 8a27743e43
8 changed files with 259 additions and 157 deletions

View File

@@ -0,0 +1,67 @@
#include "EnvironmentSensorManager.h"
bool EnvironmentSensorManager::begin() {
INA3221_sensor.begin();
INA219_sensor.begin();
AHTX0_sensor.begin();
return true;
}
bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) {
next_available_channel = TELEM_CHANNEL_SELF + 1;
if (requester_permissions & TELEM_PERM_ENVIRONMENT) {
if (INA3221_sensor.isInitialized()) {
for(int i = 0; i < 3; i++) {
// add only enabled INA3221 channels to telemetry
if (INA3221_sensor.getChannelEnabled(i)) {
telemetry.addVoltage(next_available_channel, INA3221_sensor.getVoltage(i));
telemetry.addCurrent(next_available_channel, INA3221_sensor.getCurrent(i));
telemetry.addPower(next_available_channel, INA3221_sensor.getPower(i));
next_available_channel++;
}
}
}
if (INA219_sensor.isInitialized()) {
telemetry.addVoltage(next_available_channel, INA219_sensor.getVoltage());
telemetry.addCurrent(next_available_channel, INA219_sensor.getCurrent());
telemetry.addPower(next_available_channel, INA219_sensor.getPower());
next_available_channel++;
}
if (AHTX0_sensor.isInitialized()) {
telemetry.addTemperature(TELEM_CHANNEL_SELF, AHTX0_sensor.getTemperature());
telemetry.addRelativeHumidity(TELEM_CHANNEL_SELF, AHTX0_sensor.getRelativeHumidity());
}
}
return true;
}
int EnvironmentSensorManager::getNumSettings() const {
return NUM_SENSOR_SETTINGS;
}
const char* EnvironmentSensorManager::getSettingName(int i) const {
if (i >= 0 && i < NUM_SENSOR_SETTINGS) {
return INA3221_CHANNEL_NAMES[i];
}
return NULL;
}
const char* EnvironmentSensorManager::getSettingValue(int i) const {
if (i >= 0 && i < NUM_SENSOR_SETTINGS) {
return INA3221_sensor.getChannelEnabled(i) == true ? "1" : "0";
}
return NULL;
}
bool EnvironmentSensorManager::setSettingValue(const char* name, const char* value) {
for (int i = 0; i < NUM_SENSOR_SETTINGS; i++) {
if (strcmp(name, INA3221_CHANNEL_NAMES[i]) == 0) {
bool channel_enabled = strcmp(value, "1") == 0 ? true : false;
INA3221_sensor.setChannelEnabled(i, channel_enabled);
return true;
}
}
return false;
}