mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-24 03:06:33 +00:00
Merge pull request #8128 from gururise/development
Add Interval to PMS5003 sensor to extend lifetime.
This commit is contained in:
commit
0d2287dc94
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Подсветка"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Backlight"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Backlight"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Backlight"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Backlight"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Backlight"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "RétroÉcl"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 RX"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 TX"
|
||||
#define D_SENSOR_HPMA_RX "HPMA RX"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Backlight"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Háttérfény"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI - MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI - CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Retroilluminazione"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 - RX"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 - TX"
|
||||
#define D_SENSOR_HPMA_RX "HPMA - RX"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Backlight"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Backlight"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Podświetlanie"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Luz de fundo"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Luz fundo"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Backlight"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Backlight"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Backlight"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Backlight"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Backlight"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "OLED Light"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Backlight"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -567,7 +567,8 @@
|
||||
#define D_SENSOR_SPI_MOSI "SPI MOSI"
|
||||
#define D_SENSOR_SPI_CLK "SPI CLK"
|
||||
#define D_SENSOR_BACKLIGHT "Backlight"
|
||||
#define D_SENSOR_PMS5003 "PMS5003"
|
||||
#define D_SENSOR_PMS5003_TX "PMS5003 Tx"
|
||||
#define D_SENSOR_PMS5003_RX "PMS5003 Rx"
|
||||
#define D_SENSOR_SDS0X1_RX "SDS0X1 Rx"
|
||||
#define D_SENSOR_SDS0X1_TX "SDS0X1 Tx"
|
||||
#define D_SENSOR_HPMA_RX "HPMA Rx"
|
||||
|
@ -505,8 +505,9 @@ struct PACKED SYSCFG {
|
||||
uint16_t zb_pan_id; // F30
|
||||
uint8_t zb_channel; // F32
|
||||
uint8_t zb_free_byte; // F33
|
||||
uint16_t pms_wake_interval;
|
||||
|
||||
uint8_t free_f18[132]; // F34
|
||||
uint8_t free_f18[130]; // F34
|
||||
|
||||
uint16_t pulse_counter_debounce_low; // FB8
|
||||
uint16_t pulse_counter_debounce_high; // FBA
|
||||
|
@ -93,7 +93,7 @@ enum UserSelectablePins {
|
||||
GPIO_SPI_CS, // SPI Chip Select
|
||||
GPIO_SPI_DC, // SPI Data Direction
|
||||
GPIO_BACKLIGHT, // Display backlight control
|
||||
GPIO_PMS5003, // Plantower PMS5003 Serial interface
|
||||
GPIO_PMS5003_RX, // Plantower PMS5003 Serial interface
|
||||
GPIO_SDS0X1_RX, // Nova Fitness SDS011 Serial interface
|
||||
GPIO_SBR_TX, // Serial Bridge Serial interface
|
||||
GPIO_SBR_RX, // Serial Bridge Serial interface
|
||||
@ -227,6 +227,7 @@ enum UserSelectablePins {
|
||||
GPIO_HRXL_RX, // Data from MaxBotix HRXL sonar range sensor
|
||||
GPIO_ELECTRIQ_MOODL_TX, // ElectriQ iQ-wifiMOODL Serial TX
|
||||
GPIO_AS3935,
|
||||
GPIO_PMS5003_TX, // Plantower PMS5003 Serial interface
|
||||
GPIO_SENSOR_END };
|
||||
|
||||
// Programmer selectable GPIO functionality
|
||||
@ -260,7 +261,7 @@ const char kSensorNames[] PROGMEM =
|
||||
D_SENSOR_PZEM0XX_TX "|" D_SENSOR_PZEM004_RX "|"
|
||||
D_SENSOR_SAIR_TX "|" D_SENSOR_SAIR_RX "|"
|
||||
D_SENSOR_SPI_CS "|" D_SENSOR_SPI_DC "|" D_SENSOR_BACKLIGHT "|"
|
||||
D_SENSOR_PMS5003 "|" D_SENSOR_SDS0X1_RX "|"
|
||||
D_SENSOR_PMS5003_RX "|" D_SENSOR_SDS0X1_RX "|"
|
||||
D_SENSOR_SBR_TX "|" D_SENSOR_SBR_RX "|"
|
||||
D_SENSOR_SR04_TRIG "|" D_SENSOR_SR04_ECHO "|"
|
||||
D_SENSOR_SDM120_TX "|" D_SENSOR_SDM120_RX "|"
|
||||
@ -314,7 +315,7 @@ const char kSensorNames[] PROGMEM =
|
||||
D_SENSOR_CC1101_GDO0 "|" D_SENSOR_CC1101_GDO2 "|"
|
||||
D_SENSOR_HRXL_RX "|"
|
||||
D_SENSOR_ELECTRIQ_MOODL "|"
|
||||
D_SENSOR_AS3935
|
||||
D_SENSOR_AS3935 "|" D_SENSOR_PMS5003_TX
|
||||
;
|
||||
|
||||
const char kSensorNamesFixed[] PROGMEM =
|
||||
@ -582,7 +583,8 @@ const uint8_t kGpioNiceList[] PROGMEM = {
|
||||
GPIO_HPMA_RX, // Honeywell HPMA115S0 Serial interface
|
||||
#endif
|
||||
#ifdef USE_PMS5003
|
||||
GPIO_PMS5003, // Plantower PMS5003 Serial interface
|
||||
GPIO_PMS5003_TX, // Plantower PMS5003 Serial interface
|
||||
GPIO_PMS5003_RX, // Plantower PMS5003 Serial interface
|
||||
#endif
|
||||
#if defined(USE_TX20_WIND_SENSOR) || defined(USE_TX23_WIND_SENSOR)
|
||||
GPIO_TX2X_TXD_BLACK, // TX20/TX23 Transmission Pin
|
||||
|
@ -32,10 +32,41 @@
|
||||
|
||||
#include <TasmotaSerial.h>
|
||||
|
||||
#ifndef WARMUP_PERIOD
|
||||
#define WARMUP_PERIOD 30 // Turn on PMSX003 XX-seconds before read in passive mode
|
||||
#endif
|
||||
|
||||
#ifndef MIN_INTERVAL_PERIOD
|
||||
#define MIN_INTERVAL_PERIOD 60 // minimum interval period in seconds required for passive mode
|
||||
#endif
|
||||
|
||||
TasmotaSerial *PmsSerial;
|
||||
|
||||
uint8_t pms_type = 1;
|
||||
uint8_t pms_valid = 0;
|
||||
uint16_t pms_time = 0;
|
||||
uint8_t wake_mode = 1;
|
||||
uint8_t pms_ready = 1;
|
||||
|
||||
const char ACTIVE_MODE[] = "Active Mode";
|
||||
const char PASSIVE_MODE[] = "Passive Mode";
|
||||
|
||||
enum PmsCommands
|
||||
{
|
||||
CMD_MODE_ACTIVE,
|
||||
CMD_SLEEP,
|
||||
CMD_WAKEUP,
|
||||
CMD_MODE_PASSIVE,
|
||||
CMD_READ_DATA
|
||||
};
|
||||
|
||||
const uint8_t kPmsCommands[][7] PROGMEM = {
|
||||
// 0 1 2 3 4 5 6
|
||||
{0x42, 0x4D, 0xE1, 0x00, 0x01, 0x01, 0x71}, // pms_set_active_mode
|
||||
{0x42, 0x4D, 0xE4, 0x00, 0x00, 0x01, 0x73}, // pms_sleep
|
||||
{0x42, 0x4D, 0xE4, 0x00, 0x01, 0x01, 0x74}, // pms_wake
|
||||
{0x42, 0x4D, 0xE1, 0x00, 0x00, 0x01, 0x70}, // pms_set_passive_mode
|
||||
{0x42, 0x4D, 0xE2, 0x00, 0x00, 0x01, 0x71}}; // pms_passive_mode_read
|
||||
|
||||
struct pmsX003data {
|
||||
uint16_t framelen;
|
||||
@ -52,6 +83,13 @@ struct pmsX003data {
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
size_t PmsSendCmd(uint8_t command_id)
|
||||
{
|
||||
return PmsSerial->write(kPmsCommands[command_id], sizeof(kPmsCommands[command_id]));
|
||||
}
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
bool PmsReadData(void)
|
||||
{
|
||||
if (! PmsSerial->available()) {
|
||||
@ -122,15 +160,94 @@ bool PmsReadData(void)
|
||||
return true;
|
||||
}
|
||||
|
||||
/*********************************************************************************************\
|
||||
* Command Sensor18
|
||||
*
|
||||
* Warmup time for sensor is 30 seconds, therfore setting interval time to less than 60
|
||||
* seconds doesn't really make sense.
|
||||
*
|
||||
* 0 - 59 - Active Mode (continuous sensor readings)
|
||||
* 60 .. 65535 - Passive Mode (read sensor every x seconds)
|
||||
\*********************************************************************************************/
|
||||
|
||||
bool PmsCommandSensor(void)
|
||||
{
|
||||
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload < 65536))
|
||||
{
|
||||
if (XdrvMailbox.payload < MIN_INTERVAL_PERIOD) {
|
||||
// Set Active Mode if interval is less than 60 seconds
|
||||
Settings.pms_wake_interval = 0;
|
||||
wake_mode = 1;
|
||||
pms_ready = 1;
|
||||
PmsSendCmd(CMD_MODE_ACTIVE);
|
||||
PmsSendCmd(CMD_WAKEUP);
|
||||
} else {
|
||||
// Set Passive Mode and schedule read once per interval time
|
||||
Settings.pms_wake_interval = XdrvMailbox.payload;
|
||||
PmsSendCmd(CMD_MODE_PASSIVE);
|
||||
PmsSendCmd(CMD_SLEEP);
|
||||
wake_mode = 0;
|
||||
pms_ready = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (pin[GPIO_PMS5003_TX] >= 99)
|
||||
{
|
||||
// setting interval not supported if TX pin not connected
|
||||
Settings.pms_wake_interval = 0;
|
||||
}
|
||||
|
||||
Response_P(S_JSON_SENSOR_INDEX_NVALUE, XSNS_18, Settings.pms_wake_interval);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
void PmsSecond(void) // Every second
|
||||
{
|
||||
if (PmsReadData()) {
|
||||
pms_valid = 10;
|
||||
} else {
|
||||
if (pms_valid) {
|
||||
pms_valid--;
|
||||
if (Settings.pms_wake_interval >= MIN_INTERVAL_PERIOD)
|
||||
{
|
||||
// Passive Mode
|
||||
pms_time++;
|
||||
if ((Settings.pms_wake_interval - pms_time <= WARMUP_PERIOD) && !wake_mode)
|
||||
{
|
||||
// wakeup sensor WARMUP_PERIOD before read interval
|
||||
wake_mode = 1;
|
||||
PmsSendCmd(CMD_WAKEUP);
|
||||
}
|
||||
if (pms_time >= Settings.pms_wake_interval)
|
||||
{
|
||||
// sensor is awake and warmed up, set up for reading
|
||||
PmsSendCmd(CMD_READ_DATA);
|
||||
pms_ready = 1;
|
||||
pms_time = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (pms_ready)
|
||||
{
|
||||
if (PmsReadData())
|
||||
{
|
||||
pms_valid = 10;
|
||||
if (Settings.pms_wake_interval >= MIN_INTERVAL_PERIOD)
|
||||
{
|
||||
PmsSendCmd(CMD_SLEEP);
|
||||
wake_mode = 0;
|
||||
pms_ready = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pms_valid)
|
||||
{
|
||||
pms_valid--;
|
||||
if (Settings.pms_wake_interval >= MIN_INTERVAL_PERIOD)
|
||||
{
|
||||
PmsSendCmd(CMD_READ_DATA);
|
||||
pms_ready = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -140,13 +257,26 @@ void PmsSecond(void) // Every second
|
||||
void PmsInit(void)
|
||||
{
|
||||
pms_type = 0;
|
||||
if (pin[GPIO_PMS5003] < 99) {
|
||||
PmsSerial = new TasmotaSerial(pin[GPIO_PMS5003], -1, 1);
|
||||
if ((pin[GPIO_PMS5003_RX] < 99) && (pin[GPIO_PMS5003_TX] < 99))
|
||||
{
|
||||
PmsSerial = new TasmotaSerial(pin[GPIO_PMS5003_RX], pin[GPIO_PMS5003_TX], 1);
|
||||
if (PmsSerial->begin(9600)) {
|
||||
if (PmsSerial->hardwareSerial()) { ClaimSerial(); }
|
||||
pms_type = 1;
|
||||
}
|
||||
}
|
||||
else if ((pin[GPIO_PMS5003_RX] < 99))
|
||||
{
|
||||
PmsSerial = new TasmotaSerial(pin[GPIO_PMS5003_RX], -1, 1);
|
||||
if (PmsSerial->begin(9600))
|
||||
{
|
||||
if (PmsSerial->hardwareSerial())
|
||||
{
|
||||
ClaimSerial();
|
||||
}
|
||||
pms_type = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef USE_WEBSERVER
|
||||
@ -230,6 +360,12 @@ bool Xsns18(uint8_t function)
|
||||
case FUNC_EVERY_SECOND:
|
||||
PmsSecond();
|
||||
break;
|
||||
case FUNC_COMMAND_SENSOR:
|
||||
if (XSNS_18 == XdrvMailbox.index)
|
||||
{
|
||||
result = PmsCommandSensor();
|
||||
}
|
||||
break;
|
||||
case FUNC_JSON_APPEND:
|
||||
PmsShow(1);
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user