Removed index to indentify temperatur sensors

This commit is contained in:
Ollo 2021-04-07 19:40:31 +02:00
parent 284fb4907d
commit dc5dc27ba5
4 changed files with 39 additions and 52 deletions

View File

@ -81,5 +81,6 @@ DS18B20 one wire temp sensor
* Timeout um nicht ewig aufs WLAN zu warten * Timeout um nicht ewig aufs WLAN zu warten
* Nicht mehrere Messungen vom Temp-Sensor nur warten, bis wir einen Wert bekommen * Nicht mehrere Messungen vom Temp-Sensor nur warten, bis wir einen Wert bekommen
* Partitionslayout * Partitionslayout
* OW-search address in topic nutzen

View File

@ -1,18 +1,6 @@
/* /**
* DS2438.h * @file DS2438.h
* *
* by Joe Bechter
*
* (C) 2012, bechter.com
*
* All files, software, schematics and designs are provided as-is with no warranty.
* All files, software, schematics and designs are for experimental/hobby use.
* Under no circumstances should any part be used for critical systems where safety,
* life or property depends upon it. You are responsible for all use.
* You are free to use, modify, derive or otherwise extend for your own non-commercial purposes provided
* 1. No part of this software or design may be used to cause injury or death to humans or animals.
* 2. Use is non-commercial.
* 3. Credit is given to the author (i.e. portions © bechter.com), and provide a link to the original source.
* *
*/ */

View File

@ -19,43 +19,53 @@
#define MAX_PLANTS 7 #define MAX_PLANTS 7
/** /**
* @name Attributes * @name Homie Attributes
* generated Information * generated Information
* @{ * @{
**/ **/
#define NUMBER_TYPE "number" #define NUMBER_TYPE "number" /**< numberic information, published or read in Homie */
#define TEMPERATUR_SENSOR_LIPO "lipo"
#define TEMPERATUR_SENSOR_WATER "water" /**
#define TEMPERATUR_SENSOR_OUTSIDE "temp" * @name Temperatur Node
#define TEMPERATUR_SENSOR_CHIP "chip" * @{
**/
#define TEMPERATURE_NAME "Temperature" #define TEMPERATURE_NAME "Temperature"
#define TEMPERATURE_UNIT "°C" #define TEMPERATURE_UNIT "°C"
#define TEMPERATUR_SENSOR_LIPO "lipo" /**< Homie node: temperatur, setting: lipo temperatur (or close to it) */
#define TEMPERATUR_SENSOR_CHIP "chip" /**< Homie node: temperatur, setting: battery chip */
#define TEMPERATUR_SENSOR_WATER "water" /**< Homie node: temperatur, setting: water temperatur */
/** @}
*
* @name Plant Nodes
* @{
*/
HomieNode plant0("plant0", "Plant 0", "Plant"); /**< dynamic Homie information for first plant */ HomieNode plant0("plant0", "Plant 0", "Plant"); /**< dynamic Homie information for first plant */
HomieNode plant1("plant1", "Plant 1", "Plant"); /**< dynamic Homie information for second plant */ HomieNode plant1("plant1", "Plant 1", "Plant"); /**< dynamic Homie information for second plant */
HomieNode plant2("plant2", "Plant 2", "Plant"); /**< dynamic Homie information for first plant */ HomieNode plant2("plant2", "Plant 2", "Plant"); /**< dynamic Homie information for third plant */
HomieNode plant3("plant3", "Plant 3", "Plant"); /**< dynamic Homie information for first plant */ HomieNode plant3("plant3", "Plant 3", "Plant"); /**< dynamic Homie information for fourth plant */
HomieNode plant4("plant4", "Plant 4", "Plant"); /**< dynamic Homie information for first plant */ HomieNode plant4("plant4", "Plant 4", "Plant"); /**< dynamic Homie information for fivth plant */
HomieNode plant5("plant5", "Plant 5", "Plant"); /**< dynamic Homie information for first plant */ HomieNode plant5("plant5", "Plant 5", "Plant"); /**< dynamic Homie information for sixth plant */
HomieNode plant6("plant6", "Plant 6", "Plant"); /**< dynamic Homie information for first plant */ HomieNode plant6("plant6", "Plant 6", "Plant"); /**< dynamic Homie information for seventh plant */
HomieNode sensorLipo("lipo", "Battery Status", "Lipo"); HomieNode sensorLipo("lipo", "Battery Status", "Lipo");
HomieNode sensorSolar("solar", "Solar Status", "Solarpanel"); HomieNode sensorSolar("solar", "Solar Status", "Solarpanel");
HomieNode sensorWater("water", "WaterSensor", "Water"); HomieNode sensorWater("water", "WaterSensor", "Water");
HomieNode sensorTemp("temperature", "Temperature", "temperature"); HomieNode sensorTemp("temperature", "Temperature", "temperature");
HomieNode startupReason("startupReason", "startupReason", "startupReason");
HomieNode stayAlive("stay", "alive", "alive"); /**< Necessary for Mqtt Active Command */ HomieNode stayAlive("stay", "alive", "alive"); /**< Necessary for Mqtt Active Command */
/* @} */ /**
* @}
*/
/** /**
* @name Settings * @name Settings
* General settings for the controller * General settings for the controller
* @{ * @{
*/ */
HomieSetting<long> maxTimeBetweenMQTTUpdates("mqttSleep", "time in seconds to start into mode2"); HomieSetting<long> deepSleepTime("deepsleep", "time in seconds to sleep");
HomieSetting<long> deepSleepTime("deepsleep", "time in seconds to sleep (0 deactivats it)");
HomieSetting<long> deepSleepNightTime("nightsleep", "time in seconds to sleep (0 uses same setting: deepsleep at night, too)"); HomieSetting<long> deepSleepNightTime("nightsleep", "time in seconds to sleep (0 uses same setting: deepsleep at night, too)");
HomieSetting<long> wateringDeepSleep("pumpdeepsleep", "time seconds to sleep, while a pump is running"); HomieSetting<long> wateringDeepSleep("pumpdeepsleep", "time seconds to sleep, while a pump is running");
@ -63,8 +73,8 @@ HomieSetting<long> waterLevelMax("watermaxlevel", "distance (mm) at maximum wate
HomieSetting<long> waterLevelMin("waterminlevel", "distance (mm) at minimum water level (pumps still covered)"); HomieSetting<long> waterLevelMin("waterminlevel", "distance (mm) at minimum water level (pumps still covered)");
HomieSetting<long> waterLevelWarn("waterlevelwarn", "warn (mm) if below this water level %"); HomieSetting<long> waterLevelWarn("waterlevelwarn", "warn (mm) if below this water level %");
HomieSetting<long> waterLevelVol("waterVolume", "(ml) between minimum and maximum"); HomieSetting<long> waterLevelVol("waterVolume", "(ml) between minimum and maximum");
HomieSetting<long> lipoSensorIndex("lipoTempIndex", "index onwire bus for lipo temperature sensor"); HomieSetting<const char *> lipoSensorAddr("lipoTempAddr", "1wire address for lipo temperature sensor");
HomieSetting<long> waterSensorIndex("waterTempIndex", "index onwire bus for water temperature sensor"); HomieSetting<const char *> waterSensorAddr("waterTempIndex", "1wire address for water temperature sensor");
HomieSetting<const char *> ntpServer("ntpServer", "NTP server (pool.ntp.org as default)"); HomieSetting<const char *> ntpServer("ntpServer", "NTP server (pool.ntp.org as default)");
/** /**

View File

@ -46,15 +46,11 @@ int readTemp();
******************************************************************************/ ******************************************************************************/
//only relevant if mode2 did start pumping before //only relevant if mode2 did start pumping before
RTC_DATA_ATTR int lastPumpRunning = 0; RTC_DATA_ATTR int lastPumpRunning = 0; /**< store last successfully waterd plant */
RTC_DATA_ATTR long lastWaterValue = 0; RTC_DATA_ATTR long lastWaterValue = 0; /**< to calculate the used water per plant */
RTC_DATA_ATTR int gBootCount = 0; RTC_DATA_ATTR int gBootCount = 0;
//FIXME use -1 and configure properly
RTC_DATA_ATTR int rtcLipoTempIndex = 0;
RTC_DATA_ATTR int rtcWaterTempIndex = -1;
/****************************************************************************** /******************************************************************************
* LOCAL VARIABLES * LOCAL VARIABLES
******************************************************************************/ ******************************************************************************/
@ -196,9 +192,6 @@ void mode2MQTT()
sensorLipo.setProperty("CCA").send(String(battery.getCCA())); sensorLipo.setProperty("CCA").send(String(battery.getCCA()));
sensorSolar.setProperty("volt").send(String(mSolarVoltage)); sensorSolar.setProperty("volt").send(String(mSolarVoltage));
rtcLipoTempIndex = lipoSensorIndex.get();
rtcWaterTempIndex = waterSensorIndex.get();
sensorTemp.setProperty(TEMPERATUR_SENSOR_LIPO).send(String(mTempLipo)); sensorTemp.setProperty(TEMPERATUR_SENSOR_LIPO).send(String(mTempLipo));
Serial << "Lipo Temperatur " << mTempLipo << " °C " << endl; Serial << "Lipo Temperatur " << mTempLipo << " °C " << endl;
@ -310,12 +303,7 @@ void readSensors()
for (int i = 0; i < sensorCount; i++) { for (int i = 0; i < sensorCount; i++) {
float temp = sensors.getTempCByIndex(i); float temp = sensors.getTempCByIndex(i);
Serial << "OneWire sensor " << i << " has value " << temp << endl; Serial << "OneWire sensor " << i << " has value " << temp << endl;
if (rtcWaterTempIndex != -1 && rtcWaterTempIndex == i) { /** FIXME: handle via address */
mTempWater = temp;
}
if (rtcLipoTempIndex != -1 && rtcLipoTempIndex == i) {
mTempLipo = temp;
}
} }
// Update battery chip data // Update battery chip data
@ -467,8 +455,9 @@ void systemInit()
// Set default values // Set default values
//in seconds //in seconds
maxTimeBetweenMQTTUpdates.setDefaultValue(700); deepSleepTime.setDefaultValue(600).setValidator([] (long candidate) {
deepSleepTime.setDefaultValue(600); return (candidate > 0) && (candidate < (60 * 60 * 2) /** 2h max sleep */ );
});
deepSleepNightTime.setDefaultValue(600); deepSleepNightTime.setDefaultValue(600);
wateringDeepSleep.setDefaultValue(5); wateringDeepSleep.setDefaultValue(5);
ntpServer.setDefaultValue("pool.ntp.org"); ntpServer.setDefaultValue("pool.ntp.org");
@ -477,8 +466,8 @@ void systemInit()
waterLevelMin.setDefaultValue(50); /* 5cm in mm */ waterLevelMin.setDefaultValue(50); /* 5cm in mm */
waterLevelWarn.setDefaultValue(500); /* 50cm in mm */ waterLevelWarn.setDefaultValue(500); /* 50cm in mm */
waterLevelVol.setDefaultValue(5000); /* 5l in ml */ waterLevelVol.setDefaultValue(5000); /* 5l in ml */
lipoSensorIndex.setDefaultValue(0); lipoSensorAddr.setDefaultValue("");
waterSensorIndex.setDefaultValue(-1); waterSensorAddr.setDefaultValue("");
Homie.setLoopFunction(homieLoop); Homie.setLoopFunction(homieLoop);
Homie.onEvent(onHomieEvent); Homie.onEvent(onHomieEvent);
//Homie.disableLogging(); //Homie.disableLogging();
@ -522,7 +511,6 @@ void systemInit()
.setDatatype(NUMBER_TYPE) .setDatatype(NUMBER_TYPE)
.setUnit("V"); .setUnit("V");
sensorWater.advertise("remaining").setDatatype(NUMBER_TYPE).setUnit("%"); sensorWater.advertise("remaining").setDatatype(NUMBER_TYPE).setUnit("%");
startupReason.advertise("startupReason").setDatatype(NUMBER_TYPE).setUnit("Enum");
} }
stayAlive.advertise("alive").setName("Alive").setDatatype(NUMBER_TYPE).settable(aliveHandler); stayAlive.advertise("alive").setName("Alive").setDatatype(NUMBER_TYPE).settable(aliveHandler);
} }