Add support for EZO DO

Add support for EZO Disolved Oxygen sensor
This commit is contained in:
Christopher Tremblay 2020-11-02 00:26:35 -08:00
parent 58461e5554
commit 2af5f61b03
31 changed files with 102 additions and 6 deletions

View File

@ -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

View File

@ -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;

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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

View File

@ -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)

View File

@ -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)

60
tasmota/xsns_78_ezodo.ino Normal file
View File

@ -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 <http://www.gnu.org/licenses/>.
*/
#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

View File

@ -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, // <unnamed>
#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, // <unnamed>
#ifdef USE_EZOO2
EZOO2::id,
#else
EZOStruct::id,
#endif
EZOStruct::id,
EZOStruct::id,
EZOStruct::id, // <unnamed>
EZOStruct::id, // <unnamed>
#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