Prusa-Firmware-ESP32-Cam/ESP32_PrusaConnectCam/ExternalTemperatureSensor.cpp

150 lines
3.9 KiB
C++

/**
@file ExternalTemperatureSensor.cpp
@brief Library for external temperature sensor control
@author Miroslav Pivovarsky
Contact: miroslav.pivovarsky@gmail.com
@bug: no know bug
*/
#include "ExternalTemperatureSensor.h"
ExternalSensor ExternalTemperatureSensor(DHT_SENSOR_PIN, DHT_SENSOR_ENABLE, &SystemLog, &SystemConfig);
ExternalSensor::ExternalSensor(uint8_t i_pin, bool i_enable, Logs *i_log, Configuration *i_cfg) : DhtSensor(i_pin) {
Pin = i_pin;
SystemEnable = i_enable;
log = i_log;
config = i_cfg;
}
void ExternalSensor::Init() {
log->AddEvent(LogLevel_Info, F("Init external temperature sensor"));
Unit = (TemperatureSensorUnit_enum) config->LoadExternalTemperatureSensorUnit();
UserEnable = config->LoadExternalTemperatureSensorEnable();
//DhtSensor.setHumOffset(10);
//DhtSensor.setTempOffset(-3.5);
ReadSensorData();
}
String ExternalSensor::GetSensorStatus() {
String status = "";
if (false == SystemEnable) {
status = "Unsupport sensor";
} else if (false == UserEnable) {
status = "Sensor disabled";
} else {
status = "Detected: ";
SensorType = DhtSensor.getType();
switch (SensorType) {
case 0:
status += "not defined";
break;
case 11:
status += "DHT11";
break;
case 22:
status += "DHT22";
break;
case 23:
status += "DHT22";
break;
case 70:
status += "Sonoff Si7021";
break;
default:
status += "Unknown";
break;
}
}
return status;
}
void ExternalSensor::EnableSensor(bool i_enable) {
if (true == SystemEnable) {
UserEnable = i_enable;
config->SaveExternalTemperatureSensorEnable(UserEnable);
} else {
UserEnable = false;
config->SaveExternalTemperatureSensorEnable(UserEnable);
}
}
void ExternalSensor::ReadSensorData() {
if ((true == SystemEnable) && (true == UserEnable)) {
DhtSensor.read();
}
}
void ExternalSensor::SetUnit(TemperatureSensorUnit_enum i_unit) {
Unit = i_unit;
config->SaveExternalTemperatureSensorUnit(Unit);
}
float ExternalSensor::GetTemperature() {
float temp = 0.0;
if ((true == SystemEnable) && (true == UserEnable)) {
if (Unit == TEMPERATURE_UNIT_CELSIUS) {
temp = DhtSensor.getTemperature();
} else if (Unit == TEMPERATURE_UNIT_FAHRENHEIT) {
temp = DhtSensor.getTemperature() * 9.0 / 5.0 + 32.0;
}
}
return temp;
}
float ExternalSensor::GetHumidity() {
if ((true == SystemEnable) && (true == UserEnable)) {
return DhtSensor.getHumidity();
} else {
return 0.0;
}
}
String ExternalSensor::GetTemperatureString() {
String temp = "";
if (false == SystemEnable) {
temp = "Unsupport";
} else if ((false == UserEnable) || (false == SystemEnable)) {
temp = "Disabled";
} else {
if (Unit == TEMPERATURE_UNIT_CELSIUS) {
temp = String(GetTemperature(), 1) + " °C";
} else if (Unit == TEMPERATURE_UNIT_FAHRENHEIT) {
temp = String(GetTemperature(), 1) + " °F";
}
}
return temp;
}
String ExternalSensor::GetHumidityString() {
String hum = "";
if (false == SystemEnable) {
hum = "Unsupport";
} else if ((false == UserEnable) || (false == SystemEnable)) {
hum = "Disabled";
} else {
hum = String(GetHumidity(), 1) + " %";
}
return hum;
}
bool ExternalSensor::GetUserEnableSensor() {
return UserEnable;
}
TemperatureSensorUnit_enum ExternalSensor::GetTemperatureUnit() {
return Unit;
}
/* EOF */