kopia lustrzana https://github.com/Aircoookie/WLED
109 wiersze
3.7 KiB
C++
109 wiersze
3.7 KiB
C++
#pragma once
|
|
#include "wled.h"
|
|
#include "OneWire.h"
|
|
|
|
//Pin defaults for QuinLed Dig-Uno if not overriden
|
|
#ifndef TEMPERATURE_PIN
|
|
#ifdef ARDUINO_ARCH_ESP32
|
|
#define TEMPERATURE_PIN 18
|
|
#else //ESP8266 boards
|
|
#define TEMPERATURE_PIN 14
|
|
#endif
|
|
#endif
|
|
|
|
// the frequency to check temperature, 1 minute
|
|
#ifndef USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL
|
|
#define USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL 60000
|
|
#endif
|
|
|
|
class UsermodTemperature : public Usermod {
|
|
|
|
private:
|
|
|
|
bool initDone = false;
|
|
OneWire *oneWire;
|
|
// GPIO pin used for sensor (with a default compile-time fallback)
|
|
int8_t temperaturePin = TEMPERATURE_PIN;
|
|
// measurement unit (true==°C, false==°F)
|
|
bool degC = true;
|
|
// using parasite power on the sensor
|
|
bool parasite = false;
|
|
int8_t parasitePin = -1;
|
|
// how often do we read from sensor?
|
|
unsigned long readingInterval = USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL;
|
|
// set last reading as "40 sec before boot", so first reading is taken after 20 sec
|
|
unsigned long lastMeasurement = UINT32_MAX - USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL;
|
|
// last time requestTemperatures was called
|
|
// used to determine when we can read the sensors temperature
|
|
// we have to wait at least 93.75 ms after requestTemperatures() is called
|
|
unsigned long lastTemperaturesRequest;
|
|
float temperature;
|
|
// indicates requestTemperatures has been called but the sensor measurement is not complete
|
|
bool waitingForConversion = false;
|
|
// flag set at startup if DS18B20 sensor not found, avoids trying to keep getting
|
|
// temperature if flashed to a board without a sensor attached
|
|
byte sensorFound;
|
|
|
|
bool enabled = true;
|
|
|
|
bool HApublished = false;
|
|
int16_t idx = -1; // Domoticz virtual sensor idx
|
|
|
|
// strings to reduce flash memory usage (used more than twice)
|
|
static const char _name[];
|
|
static const char _enabled[];
|
|
static const char _readInterval[];
|
|
static const char _parasite[];
|
|
static const char _parasitePin[];
|
|
static const char _domoticzIDX[];
|
|
static const char _sensor[];
|
|
static const char _temperature[];
|
|
static const char _Temperature[];
|
|
static const char _data_fx[];
|
|
|
|
//Dallas sensor quick (& dirty) reading. Credit to - Author: Peter Scargill, August 17th, 2013
|
|
float readDallas();
|
|
void requestTemperatures();
|
|
void readTemperature();
|
|
bool findSensor();
|
|
#ifndef WLED_DISABLE_MQTT
|
|
void publishHomeAssistantAutodiscovery();
|
|
#endif
|
|
|
|
static UsermodTemperature* _instance; // to overcome nonstatic getTemperatureC() method and avoid UsermodManager::lookup(USERMOD_ID_TEMPERATURE);
|
|
|
|
public:
|
|
|
|
UsermodTemperature() { _instance = this; }
|
|
static UsermodTemperature *getInstance() { return UsermodTemperature::_instance; }
|
|
|
|
/*
|
|
* API calls te enable data exchange between WLED modules
|
|
*/
|
|
inline float getTemperatureC() { return temperature; }
|
|
inline float getTemperatureF() { return temperature * 1.8f + 32.0f; }
|
|
float getTemperature();
|
|
const char *getTemperatureUnit();
|
|
uint16_t getId() override { return USERMOD_ID_TEMPERATURE; }
|
|
|
|
void setup() override;
|
|
void loop() override;
|
|
//void connected() override;
|
|
#ifndef WLED_DISABLE_MQTT
|
|
void onMqttConnect(bool sessionPresent) override;
|
|
#endif
|
|
//void onUpdateBegin(bool init) override;
|
|
|
|
//bool handleButton(uint8_t b) override;
|
|
//void handleOverlayDraw() override;
|
|
|
|
void addToJsonInfo(JsonObject& root) override;
|
|
//void addToJsonState(JsonObject &root) override;
|
|
//void readFromJsonState(JsonObject &root) override;
|
|
void addToConfig(JsonObject &root) override;
|
|
bool readFromConfig(JsonObject &root) override;
|
|
|
|
void appendConfigData() override;
|
|
};
|
|
|