151 lines
3.9 KiB
C++
151 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 */ |