From 2af5f61b0344cd0d25725860d5cb3f9f25c6c54c Mon Sep 17 00:00:00 2001 From: Christopher Tremblay Date: Mon, 2 Nov 2020 00:26:35 -0800 Subject: [PATCH] Add support for EZO DO Add support for EZO Disolved Oxygen sensor --- I2CDEVICES.md | 1 + tasmota/i18n.h | 2 ++ tasmota/language/bg_BG.h | 1 + tasmota/language/cs_CZ.h | 1 + tasmota/language/de_DE.h | 1 + tasmota/language/el_GR.h | 1 + tasmota/language/en_GB.h | 1 + tasmota/language/es_ES.h | 1 + tasmota/language/fr_FR.h | 1 + tasmota/language/he_HE.h | 1 + tasmota/language/hu_HU.h | 1 + tasmota/language/it_IT.h | 1 + tasmota/language/ko_KO.h | 1 + tasmota/language/nl_NL.h | 1 + tasmota/language/pl_PL.h | 1 + tasmota/language/pt_BR.h | 1 + tasmota/language/pt_PT.h | 1 + tasmota/language/ro_RO.h | 1 + tasmota/language/ru_RU.h | 1 + tasmota/language/sk_SK.h | 1 + tasmota/language/sv_SE.h | 1 + tasmota/language/tr_TR.h | 1 + tasmota/language/uk_UA.h | 1 + tasmota/language/vi_VN.h | 1 + tasmota/language/zh_CN.h | 1 + tasmota/language/zh_TW.h | 1 + tasmota/my_user_config.h | 1 + tasmota/tasmota_configurations.h | 1 + tasmota/xsns_78_ezo.ino | 2 +- tasmota/xsns_78_ezodo.ino | 60 ++++++++++++++++++++++++++++++++ tasmota/xsns_78_xezo.ino | 17 ++++++--- 31 files changed, 102 insertions(+), 6 deletions(-) create mode 100644 tasmota/xsns_78_ezodo.ino diff --git a/I2CDEVICES.md b/I2CDEVICES.md index 57b10538c..cbd00b950 100644 --- a/I2CDEVICES.md +++ b/I2CDEVICES.md @@ -86,3 +86,4 @@ Index | Define | Driver | Device | Address(es) | Description 55 | USE_EZOO2 | xsns_78 | EZOO2 | 0x61 - 0x70 | O2 sensor 55 | USE_EZOPRS | xsns_78 | EZOPRS | 0x61 - 0x70 | Pressure sensor 55 | USE_EZOFLO | xsns_78 | EZOFLO | 0x61 - 0x70 | Flow meter sensor + 55 | USE_EZODO | xsns_78 | EZODO | 0x61 - 0x70 | Disolved Oxygen sensor diff --git a/tasmota/i18n.h b/tasmota/i18n.h index 9649e0ec6..33359eb29 100644 --- a/tasmota/i18n.h +++ b/tasmota/i18n.h @@ -53,6 +53,7 @@ #define D_JSON_DARKNESS "Darkness" #define D_JSON_DATA "Data" #define D_JSON_DEWPOINT "DewPoint" +#define D_JSON_DO "DisolvedOxygen" #define D_JSON_DISTANCE "Distance" #define D_JSON_DNSSERVER "DNSServer" #define D_JSON_DONE "Done" @@ -785,6 +786,7 @@ const char HTTP_SNS_EC[] PROGMEM = "{s}%s " D_EC "{ const char HTTP_SNS_O2[] PROGMEM = "{s}%s " D_O2 "{m}%s " D_UNIT_PERCENT "{e}"; const char HTTP_SNS_LITERS[] PROGMEM = "{s}%s " D_VOLUME "{m}%s " D_UNIT_LITERS "{e}"; const char HTTP_SNS_LPM[] PROGMEM = "{s}%s " D_FLOW_RATE "{m}%s " D_UNIT_LITERS_PER_MIN "{e}"; +const char HTTP_SNS_DO[] PROGMEM = "{s}%s " D_DO "{m}%s " D_UNIT_PARTS_PER_MILLION "{e}"; const char S_MAIN_MENU[] PROGMEM = D_MAIN_MENU; const char S_CONFIGURATION[] PROGMEM = D_CONFIGURATION; diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index 162c0d564..6ad19f493 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -84,6 +84,7 @@ #define D_DISABLED "Забранен" #define D_DISTANCE "Разстояние" #define D_DNS_SERVER "DNS Сървър" +#define D_DO "Disolved Oxygen" #define D_DONE "Изпълнено" #define D_DST_TIME "Лятно време" #define D_EC "EC" diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index e4e07aa03..6db75feae 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -84,6 +84,7 @@ #define D_DISABLED "Zablokováno" #define D_DISTANCE "Distance" #define D_DNS_SERVER "Server DNS" +#define D_DO "Disolved Oxygen" #define D_DONE "Provedeno" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index 5ab4b8df4..7b374e719 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -84,6 +84,7 @@ #define D_DISABLED "deaktiviert" #define D_DISTANCE "Abstand" #define D_DNS_SERVER "DNS-Server" +#define D_DO "Disolved Oxygen" #define D_DONE "erledigt" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index 5fdbb305b..519c26299 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -84,6 +84,7 @@ #define D_DISABLED "Ανενεργό" #define D_DISTANCE "Απόσταση" #define D_DNS_SERVER "Διακομιστής DNS" +#define D_DO "Disolved Oxygen" #define D_DONE "Ολοκληρώθηκε" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index 25fa29550..2a17d14a8 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -84,6 +84,7 @@ #define D_DISABLED "Disabled" #define D_DISTANCE "Distance" #define D_DNS_SERVER "DNS Server" +#define D_DO "Disolved Oxygen" #define D_DONE "Done" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index 88537c607..7ecfb47d9 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -84,6 +84,7 @@ #define D_DISABLED "Deshabilitado" #define D_DISTANCE "Distancia" #define D_DNS_SERVER "Servidor DNS" +#define D_DO "Disolved Oxygen" #define D_DONE "Listo" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index 4fb5a3452..24dd72ec8 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -80,6 +80,7 @@ #define D_DISABLED "Désactivé" #define D_DISTANCE "Distance" #define D_DNS_SERVER "Serveur DNS" +#define D_DO "Disolved Oxygen" #define D_DONE "Terminé" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index 032ce5c04..edd1cf680 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -84,6 +84,7 @@ #define D_DISABLED "מבוטל" #define D_DISTANCE "מרחק" #define D_DNS_SERVER "DNS שרת" +#define D_DO "Disolved Oxygen" #define D_DONE "סיים" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index be7590886..81c8b902b 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -84,6 +84,7 @@ #define D_DISABLED "Letiltva" #define D_DISTANCE "Távolság" #define D_DNS_SERVER "DNS szerver" +#define D_DO "Disolved Oxygen" #define D_DONE "Kész" #define D_DST_TIME "nyári idő" #define D_EC "EC" diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index 614d47a95..75dfb3ff1 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -84,6 +84,7 @@ #define D_DISABLED "Disabilitato/a" #define D_DISTANCE "Distanza" #define D_DNS_SERVER "Server DNS" +#define D_DO "Disolved Oxygen" #define D_DONE "Completato" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index 0dce6d865..2d958401a 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -84,6 +84,7 @@ #define D_DISABLED "사용안함" #define D_DISTANCE "거리" #define D_DNS_SERVER "DNS 서버" +#define D_DO "Disolved Oxygen" #define D_DONE "완료" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index 24e02a07f..56b72ae60 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -84,6 +84,7 @@ #define D_DISABLED "Uitgeschakeld" #define D_DISTANCE "Afstand" #define D_DNS_SERVER "DNS Server" +#define D_DO "Disolved Oxygen" #define D_DONE "Klaar" #define D_DST_TIME "ZT" #define D_EC "EC" diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index 764396b4e..2976538a2 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -84,6 +84,7 @@ #define D_DISABLED "Wyłączony" #define D_DISTANCE "Odległość" #define D_DNS_SERVER "Serwer DNS" +#define D_DO "Disolved Oxygen" #define D_DONE "Wykonane" #define D_DST_TIME "Czas DST" #define D_EC "EC" diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index fc69677ab..fa68108aa 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -84,6 +84,7 @@ #define D_DISABLED "Desabilitado" #define D_DISTANCE "Distância" #define D_DNS_SERVER "Servidor DNS" +#define D_DO "Disolved Oxygen" #define D_DONE "Concluído" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index a3b7a5542..5aee83f2e 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -84,6 +84,7 @@ #define D_DISABLED "Disabilitado" #define D_DISTANCE "Distância" #define D_DNS_SERVER "Servidor DNS" +#define D_DO "Disolved Oxygen" #define D_DONE "Concluído" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index eea0cc635..be4678b52 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -84,6 +84,7 @@ #define D_DISABLED "Dezactivat" #define D_DISTANCE "Distanță" #define D_DNS_SERVER "Server DNS" +#define D_DO "Disolved Oxygen" #define D_DONE "Terminat" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index 8e51ec376..30f1c489c 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -84,6 +84,7 @@ #define D_DISABLED "Блокирован" #define D_DISTANCE "Distance" #define D_DNS_SERVER "DNS Сервер" +#define D_DO "Disolved Oxygen" #define D_DONE "Выполнено" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index c84590e18..634520391 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -85,6 +85,7 @@ #define D_DISABLED "Zablokované" #define D_DISTANCE "Vzdialenosť" #define D_DNS_SERVER "Server DNS" +#define D_DO "Disolved Oxygen" #define D_DONE "Hotovo" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index 615669f74..5ab897d31 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -84,6 +84,7 @@ #define D_DISABLED "Inaktiverad" #define D_DISTANCE "Distans" #define D_DNS_SERVER "DNS-server" +#define D_DO "Disolved Oxygen" #define D_DONE "Gjort" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index 29558e865..fb672ef48 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -84,6 +84,7 @@ #define D_DISABLED "Etkin Değil" #define D_DISTANCE "Mesage" #define D_DNS_SERVER "DNS Sunucu" +#define D_DO "Disolved Oxygen" #define D_DONE "Tamam" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index f5b0d3e9a..0e14712d7 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -84,6 +84,7 @@ #define D_DISABLED "Вимкнено" #define D_DISTANCE "Відстань" #define D_DNS_SERVER "Сервер DNS" +#define D_DO "Disolved Oxygen" #define D_DONE "Виконано" #define D_DST_TIME "Літній час" #define D_EC "EC" diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index c1dd6ed19..d53ac9235 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -84,6 +84,7 @@ #define D_DISABLED "Vô hiệu hóa" #define D_DISTANCE "Khoảng cách" #define D_DNS_SERVER "Máy chủ DNS" +#define D_DO "Disolved Oxygen" #define D_DONE "Hoàn thành" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index fa9c04339..a93ca3262 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -84,6 +84,7 @@ #define D_DISABLED "禁用" #define D_DISTANCE "距离" #define D_DNS_SERVER "DNS服务器" +#define D_DO "Disolved Oxygen" #define D_DONE "完成" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index 0dd6d15d4..8d9615f12 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -84,6 +84,7 @@ #define D_DISABLED "已停用" #define D_DISTANCE "距離" #define D_DNS_SERVER "DNS伺服器" +#define D_DO "Disolved Oxygen" #define D_DONE "完成" #define D_DST_TIME "DST" #define D_EC "EC" diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index b0b06a64e..8e5d8ecd4 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -571,6 +571,7 @@ // #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_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 47caeb9cd..773a2e32e 100644 --- a/tasmota/tasmota_configurations.h +++ b/tasmota/tasmota_configurations.h @@ -136,6 +136,7 @@ //#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_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 a92df5d87..409b55d11 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) +#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) #define USE_EZO #endif #if defined(USE_EZO) diff --git a/tasmota/xsns_78_ezodo.ino b/tasmota/xsns_78_ezodo.ino new file mode 100644 index 000000000..a0dd6a36f --- /dev/null +++ b/tasmota/xsns_78_ezodo.ino @@ -0,0 +1,60 @@ +/* + xsns_78_ezodo.ino - EZO DO I2C DO 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_EZODO + +#define EZO_DO_READ_LATENCY 600 + +struct EZODO : public EZOStruct { + EZODO(uint32_t addr) : EZOStruct(addr), DO(0) {} + + virtual void ProcessMeasurement(void) + { + char data[D_EZO_MAX_BUF]; + + EZOStruct::ProcessMeasurement(data, sizeof(data), EZO_DO_READ_LATENCY); + DO = CharToFloat(data); + } + + virtual void Show(bool json, const char *name) + { + char str[8]; + dtostrfd(DO, 2, str); + + if (json) { + ResponseAppend_P(PSTR(",\"%s\":{\"" D_JSON_DO "\":%d}" ), name, str); + } +#ifdef USE_WEBSERVER + else { + WSContentSend_PD(HTTP_SNS_DO, name, str); +#endif // USE_WEBSERVER + } + } + + static const char id[] PROGMEM; + +private: + float DO; +}; + +const char EZODO::id[] PROGMEM = "D.O."; + +#endif // USE_EZODO +#endif // USE_I2C diff --git a/tasmota/xsns_78_xezo.ino b/tasmota/xsns_78_xezo.ino index 95019cb50..784475ab5 100644 --- a/tasmota/xsns_78_xezo.ino +++ b/tasmota/xsns_78_xezo.ino @@ -51,7 +51,11 @@ enum { // The order of the EZO devices must map with the enum declared above const char *const EZOSupport[EZO_ADDR_n] PROGMEM = { - EZOStruct::id, // "DO" +#ifdef USE_EZODO + EZODO::id, +#else + EZOStruct::id, +#endif #ifdef USE_EZOORP EZOORP::id, #else @@ -67,7 +71,7 @@ const char *const EZOSupport[EZO_ADDR_n] PROGMEM = { #else EZOStruct::id, #endif - EZOStruct::id, + EZOStruct::id, // #ifdef USE_EZORTD EZORTD::id, #else @@ -89,14 +93,14 @@ const char *const EZOSupport[EZO_ADDR_n] PROGMEM = { #else EZOStruct::id, #endif - EZOStruct::id, + EZOStruct::id, // #ifdef USE_EZOO2 EZOO2::id, #else EZOStruct::id, #endif - EZOStruct::id, - EZOStruct::id, + EZOStruct::id, // + EZOStruct::id, // #ifdef USE_EZOHUM EZOHUM::id, #else @@ -234,6 +238,9 @@ private: // We use switch intead of virtual function to save RAM switch (j + EZO_ADDR_0) { +#ifdef USE_EZODO + CREATE_EZO_CLASS(DO) +#endif #ifdef USE_EZOORP CREATE_EZO_CLASS(ORP) #endif