diff --git a/I2CDEVICES.md b/I2CDEVICES.md index f7cbe820b..351c6d67d 100644 --- a/I2CDEVICES.md +++ b/I2CDEVICES.md @@ -88,3 +88,4 @@ Index | Define | Driver | Device | Address(es) | Description 55 | USE_EZOFLO | xsns_78 | EZOFLO | 0x61 - 0x70 | Flow meter sensor 55 | USE_EZODO | xsns_78 | EZODO | 0x61 - 0x70 | Disolved Oxygen sensor 55 | USE_EZORGB | xsns_78 | EZORGB | 0x61 - 0x70 | Color sensor + 55 | USE_EZOPMP | xsns_78 | EZOPMP | 0x61 - 0x70 | Peristaltic Pump diff --git a/tasmota/i18n.h b/tasmota/i18n.h index df4c28b8b..7f23812dd 100644 --- a/tasmota/i18n.h +++ b/tasmota/i18n.h @@ -135,6 +135,7 @@ #define D_JSON_PROGRAMSIZE "ProgramSize" #define D_JSON_PSRMAXMEMORY "PsrMax" #define D_JSON_PSRFREEMEMORY "PsrFree" +#define D_JSON_PUMP "Pumped" #define D_JSON_RED "Red" #define D_JSON_REFERENCETEMPERATURE "ReferenceTemperature" #define D_JSON_REMAINING "Remaining" @@ -794,6 +795,7 @@ const char HTTP_SNS_DO[] PROGMEM = "{s}%s " D_DO "{ const char HTTP_SNS_COLOR_RED[] PROGMEM = "{s}%s " D_COLOR_RED "{m}%u " "{e}"; const char HTTP_SNS_COLOR_GREEN[] PROGMEM = "{s}%s " D_COLOR_GREEN "{m}%u " "{e}"; const char HTTP_SNS_COLOR_BLUE[] PROGMEM = "{s}%s " D_COLOR_BLUE "{m}%u " "{e}"; +const char HTTP_SNS_MILLILITERS[] PROGMEM = "{s}%s " D_VOLUME "{m}%s " D_UNIT_MILLILITERS "{e}"; #endif // USE_WEBSERVER const uint32_t MARKER_START = 0x5AA55AA5; diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index 6ad19f493..fa8e01c41 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index 6db75feae..13f0efc26 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index 7b374e719..3865c6f5f 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index 519c26299..6e042eca8 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index 2a17d14a8..7d47469ce 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index 7ecfb47d9..1ab58fadb 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index 24dd72ec8..3848542d9 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -751,6 +751,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index edd1cf680..d03e8e090 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index 81c8b902b..40cbbc8c6 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index 8f70895cd..d2c42327c 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index 2d958401a..ffdf1dfef 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "마이크로초" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "밀리초" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index 96677cbcf..2fafa100a 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index 2976538a2..6cb2abb95 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index fa68108aa..a40114f6e 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index 5aee83f2e..579b43987 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index be4678b52..a154e4049 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index 30f1c489c..b49bffd79 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "мкс" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "мА" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "мм рт.ст." #define D_UNIT_MILLISECOND "мс" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index 634520391..6007fc315 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index 5ab897d31..0b1416573 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index fb672ef48..883d8a4e4 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index 0e14712d7..7b1e91b41 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µС" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "мА" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "мм" #define D_UNIT_MILLIMETER_MERCURY "ммHg" #define D_UNIT_MILLISECOND "мС" diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index d53ac9235..122e478a4 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "mA" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "ms" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index f2392e13f..53cab55df 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "微秒" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "毫安" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "毫米" #define D_UNIT_MILLIMETER_MERCURY "毫米汞柱" #define D_UNIT_MILLISECOND "毫秒" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index 8d9615f12..0af4fcea9 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -755,6 +755,7 @@ #define D_UNIT_MICROSECOND "微秒" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" #define D_UNIT_MILLIAMPERE "毫安培" +#define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" #define D_UNIT_MILLIMETER_MERCURY "mmHg" #define D_UNIT_MILLISECOND "毫秒" diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index b2200e29c..b898addd1 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -573,6 +573,7 @@ // #define USE_EZOFLO // [I2cDriver55] Enable support for EZO's FLO sensor (+0k4 code) - Shared EZO code required for any EZO device (+1k2 code) // #define USE_EZODO // [I2cDriver55] Enable support for EZO's DO sensor (+0k3 code) - Shared EZO code required for any EZO device (+1k2 code) // #define USE_EZORGB // [I2cDriver55] Enable support for EZO's RGB sensor (+0k5 code) - Shared EZO code required for any EZO device (+1k2 code) +// #define USE_EZOPMP // [I2cDriver55] Enable support for EZO's PMP sensor (+0k3 code) - Shared EZO code required for any EZO device (+1k2 code) // #define USE_DISPLAY // Add I2C Display Support (+2k code) #define USE_DISPLAY_MODES1TO5 // Enable display mode 1 to 5 in addition to mode 0 diff --git a/tasmota/tasmota_configurations.h b/tasmota/tasmota_configurations.h index 2d9df7c00..24e3f9ace 100644 --- a/tasmota/tasmota_configurations.h +++ b/tasmota/tasmota_configurations.h @@ -136,8 +136,9 @@ //#define USE_EZOO2 // [I2cDriver55] Enable support for EZO's O2 sensor (+0k3 code) - Shared EZO code required for any EZO device (+1k2 code) //#define USE_EZOPRS // [I2cDriver55] Enable support for EZO's PRS sensor (+0k7 code) - Shared EZO code required for any EZO device (+1k2 code) //#define USE_EZOFLO // [I2cDriver55] Enable support for EZO's FLO sensor (+0k4 code) - Shared EZO code required for any EZO device (+1k2 code) -// #define USE_EZODO // [I2cDriver55] Enable support for EZO's DO sensor (+0k3 code) - Shared EZO code required for any EZO device (+1k2 code) -// #define USE_EZORGB // [I2cDriver55] Enable support for EZO's RGB sensor (+0k5 code) - Shared EZO code required for any EZO device (+1k2 code) +//#define USE_EZODO // [I2cDriver55] Enable support for EZO's DO sensor (+0k3 code) - Shared EZO code required for any EZO device (+1k2 code) +//#define USE_EZORGB // [I2cDriver55] Enable support for EZO's RGB sensor (+0k5 code) - Shared EZO code required for any EZO device (+1k2 code) +//#define USE_EZOPMP // [I2cDriver55] Enable support for EZO's PMP sensor (+0k3 code) - Shared EZO code required for any EZO device (+1k2 code) #define USE_MHZ19 // Add support for MH-Z19 CO2 sensor (+2k code) #define USE_SENSEAIR // Add support for SenseAir K30, K70 and S8 CO2 sensor (+2k3 code) diff --git a/tasmota/xsns_78_ezo.ino b/tasmota/xsns_78_ezo.ino index 0593ed200..b8ba523ea 100644 --- a/tasmota/xsns_78_ezo.ino +++ b/tasmota/xsns_78_ezo.ino @@ -18,7 +18,7 @@ */ #ifdef USE_I2C -#if defined(USE_EZOPH) || defined(USE_EZOORP) || defined(USE_EZORTD) || defined(USE_EZOHUM) || defined(USE_EZOEC) || defined(USE_EZOCO2) || defined(USE_EZOO2) || defined(USE_EZOPRS) || defined(USE_EZOFLO) || defined(USE_EZODO) || defined(USE_EZORGB) +#if defined(USE_EZOPH) || defined(USE_EZOORP) || defined(USE_EZORTD) || defined(USE_EZOHUM) || defined(USE_EZOEC) || defined(USE_EZOCO2) || defined(USE_EZOO2) || defined(USE_EZOPRS) || defined(USE_EZOFLO) || defined(USE_EZODO) || defined(USE_EZORGB) || defined(USE_EZOPMP) #define USE_EZO #endif #if defined(USE_EZO) diff --git a/tasmota/xsns_78_ezopmp.ino b/tasmota/xsns_78_ezopmp.ino new file mode 100644 index 000000000..cea7a9cf0 --- /dev/null +++ b/tasmota/xsns_78_ezopmp.ino @@ -0,0 +1,63 @@ +/* + xsns_78_ezopmp.ino - EZO PMP I2C PMP sensor support for Tasmota + + Copyright (C) 2020 Christopher Tremblay + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifdef USE_I2C +#ifdef USE_EZOPMP + +#define EZO_PMP_READ_LATENCY 300 + +struct EZOPMP : public EZOStruct { + EZOPMP(uint32_t addr) : EZOStruct(addr), volume(NAN) {} + + virtual void ProcessMeasurement(void) + { + char data[D_EZO_MAX_BUF]; + + EZOStruct::ProcessMeasurement(data, sizeof(data), EZO_PMP_READ_LATENCY); + + volume = CharToFloat(data); + } + + virtual void Show(bool json, const char *name) + { + char str[FLOATSZ]; + + dtostrfd(volume, 1, str); + + if (json) { + ResponseAppend_P(PSTR(",\"%s\":{\"" D_JSON_PUMP "\":%s"), name, str); + ResponseJsonEnd(); + +#ifdef USE_WEBSERVER + } else { + WSContentSend_PD(HTTP_SNS_MILLILITERS, name, str); +#endif + } + } + + static const char id[] PROGMEM; + +private: + float volume; +}; + +const char EZOPMP::id[] PROGMEM = "PMP"; + +#endif // USE_EZOPMP +#endif // USE_I2C diff --git a/tasmota/xsns_78_xezo.ino b/tasmota/xsns_78_xezo.ino index 6bb745dc4..2774c7a0c 100644 --- a/tasmota/xsns_78_xezo.ino +++ b/tasmota/xsns_78_xezo.ino @@ -77,7 +77,11 @@ const char *const EZOSupport[EZO_ADDR_n] PROGMEM = { #else EZOStruct::id, #endif - EZOStruct::id, // "PMP" +#ifdef USE_EZOPMP + EZOPMP::id, +#else + EZOStruct::id, +#endif #ifdef USE_EZOFLO EZOFLO::id, #else @@ -257,6 +261,9 @@ private: #ifdef USE_EZORTD CREATE_EZO_CLASS(RTD) #endif +#ifdef USE_EZOPMP + CREATE_EZO_CLASS(PMP) +#endif #ifdef USE_EZOFLO CREATE_EZO_CLASS(FLO) #endif