Skip to content

Commit

Permalink
Merge pull request letscontrolit#5042 from tonhuisman/bugfix/P135-err…
Browse files Browse the repository at this point in the history
…or-reading-sensor-settings

[Bugfix][P135] SCD4x fix reading sensor settings
  • Loading branch information
TD-er authored May 1, 2024
2 parents 01aa5ad + 7514687 commit d99eda9
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 11 deletions.
1 change: 1 addition & 0 deletions src/_P135_SCD4x.ino
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
// #######################################################################################################

/**
* 2024-04-27 tonhuisman: Fix bug that sensor settings can only be retrieved if measuring is stopped
* 2023-11-23 tonhuisman: Add Device flag for I2CMax100kHz as this sensor won't work at 400 kHz
* 2022-08-28 tonhuisman: Include 'CO2' in plugin name, to be in line with other CO2 plugins
* 2022-08-24 tonhuisman: Removed [TESTING] tag
Expand Down
28 changes: 17 additions & 11 deletions src/src/PluginStructs/P135_data_struct.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,12 @@ bool P135_data_struct::init() {
if (scd4x->begin(false, _autoCalibrate)) {
const uint16_t orgAltitude = scd4x->getSensorAltitude();

if (_altitude != 0) {
if ((_altitude != 0) && (_altitude != orgAltitude)) {
scd4x->setSensorAltitude(_altitude);
}
const float orgTempOffset = scd4x->getTemperatureOffset();

// FIXME TD-er: Is this correct? Checking _tempOffset and not checking orgTempOffset? (same for altitude)
if (!essentiallyZero(_tempOffset)) {
if (!essentiallyZero(_tempOffset) && !essentiallyEqual(_tempOffset, orgTempOffset)) {
scd4x->setTemperatureOffset(_tempOffset);
}
const bool hasSerial = scd4x->getSerialNumber(serialNumber); // Not yet reading, get serial
Expand Down Expand Up @@ -304,23 +303,30 @@ bool P135_data_struct::plugin_write(struct EventStruct *event,
*****************************************************/
bool P135_data_struct::plugin_get_config_value(struct EventStruct *event,
String & string) {
if (nullptr == scd4x) { return false; } // Safeguard
bool success = false;

const String var = parseString(string, 1);

if (equals(var, F("getaltitude"))) { // [<taskname>#getaltitude] = get sensor altitude
string = scd4x->getSensorAltitude();
if (equals(var, F("getaltitude")) &&
scd4x->stopPeriodicMeasurement()) { // [<taskname>#getaltitude] = get sensor altitude
string = scd4x->getSensorAltitude();
startPeriodicMeasurements();
success = true;
} else if (equals(var, F("gettempoffset"))) { // [<taskname>#gettempoffset] = get sensor temperature offset
string = toString(scd4x->getTemperatureOffset(), 2);
} else if (equals(var, F("gettempoffset")) &&
scd4x->stopPeriodicMeasurement()) { // [<taskname>#gettempoffset] = get sensor temperature offset
string = toString(scd4x->getTemperatureOffset(), 2);
startPeriodicMeasurements();
success = true;
} else if (equals(var, F("getdataready"))) { // [<taskname>#getdataready] = is data ready? (1/0)
} else if (equals(var, F("getdataready"))) { // [<taskname>#getdataready] = is data ready? (1/0)
string = scd4x->getDataReadyStatus();
success = true;
} else if (equals(var, F("getselfcalibration"))) { // [<taskname>#getselfcalibration] = is self-calibration enabled? (1/0)
string = scd4x->getAutomaticSelfCalibrationEnabled();
} else if (equals(var, F("getselfcalibration")) &&
scd4x->stopPeriodicMeasurement()) { // [<taskname>#getselfcalibration] = is self-calibration enabled? (1/0)
string = scd4x->getAutomaticSelfCalibrationEnabled();
startPeriodicMeasurements();
success = true;
} else if (equals(var, F("serialnumber"))) { // [<taskname>#serialnumber] = the devices electronic serial number
} else if (equals(var, F("serialnumber"))) { // [<taskname>#serialnumber] = the devices electronic serial number
string = String(serialNumber);
success = true;
}
Expand Down

0 comments on commit d99eda9

Please sign in to comment.