From 87a4b2314f551d7842db61abce3593e8a33a38e4 Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Sun, 23 May 2021 10:54:05 +0200 Subject: [PATCH] Update Sugar Valley Neopool driver Add NPLight TOGGLE cmnd Add NPFiltrationMode string parameter Add filtration speed on result Add undocumented register function Fix NPLight get status Fix hydrolysis status Fix NPFiltration side effects Fix pH warning Fix hydrolysis/redox value Fix register desc --- tasmota/language/af_AF.h | 6 +- tasmota/language/bg_BG.h | 8 +- tasmota/language/cs_CZ.h | 8 +- tasmota/language/de_DE.h | 8 +- tasmota/language/el_GR.h | 8 +- tasmota/language/en_GB.h | 8 +- tasmota/language/es_ES.h | 6 +- tasmota/language/fr_FR.h | 6 +- tasmota/language/fy_NL.h | 8 +- tasmota/language/he_HE.h | 8 +- tasmota/language/hu_HU.h | 8 +- tasmota/language/it_IT.h | 8 +- tasmota/language/ko_KO.h | 8 +- tasmota/language/nl_NL.h | 8 +- tasmota/language/pl_PL.h | 8 +- tasmota/language/pt_BR.h | 8 +- tasmota/language/pt_PT.h | 8 +- tasmota/language/ro_RO.h | 8 +- tasmota/language/ru_RU.h | 8 +- tasmota/language/sk_SK.h | 8 +- tasmota/language/sv_SE.h | 8 +- tasmota/language/tr_TR.h | 8 +- tasmota/language/uk_UA.h | 8 +- tasmota/language/vi_VN.h | 8 +- tasmota/language/zh_CN.h | 8 +- tasmota/language/zh_TW.h | 8 +- tasmota/xsns_83_neopool.ino | 1202 +++++++++++++++++++++++------------ 27 files changed, 961 insertions(+), 443 deletions(-) diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h index 9fd58c6b8353..2f4f37ee3017 100644 --- a/tasmota/language/af_AF.h +++ b/tasmota/language/af_AF.h @@ -1049,7 +1049,11 @@ #define D_NEOPOOL_SETPOINT_OK "Oké" #define D_NEOPOOL_COVER "Voorblad" #define D_NEOPOOL_SHOCK "Skok" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Laag" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index e72ba7fe3412..8dfc0b6a6398 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -1047,8 +1047,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index f4250f311b4a..a31b548b9da4 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index 8e9d3638db52..a0fc836fdb75 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrAus" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Abdeckung" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Niedrig" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index 5dbbbd6480d0..09d6e67e5257 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index 4efac66597a4..48abd5821622 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index 05ac117072a6..f66489a1a57b 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -1049,7 +1049,11 @@ #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" #define D_NEOPOOL_SHOCK "Golpe" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Bajo" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index 2495d420f9e0..38ad61db7b5d 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -1048,7 +1048,11 @@ #define D_NEOPOOL_SETPOINT_OK "OK" #define D_NEOPOOL_COVER "Couverture" #define D_NEOPOOL_SHOCK "Choc chlore" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Bas" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h index 7068a0a009ec..8adb1c762102 100644 --- a/tasmota/language/fy_NL.h +++ b/tasmota/language/fy_NL.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index bf2e34b19745..3e7bddce5f6d 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index 1b3e8afe426e..1fce49fe891e 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index 662043552db8..fe0d56a4d300 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "OK" #define D_NEOPOOL_COVER "Copertura" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Bassa" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index 4f40559e790a..e15715ed5157 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index c0e6dd81a0ee..df7bab416a0d 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index 3a8069d877f4..d5976985d46e 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index 582ab278602f..69aeb352cdaf 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index 626c5c8cc44b..dcc213806acd 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index 9087824853ce..2d7961d18da1 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index e43d3ed229be..547f5b1643fe 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index d5febc4dfd89..4b94fed083a4 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index e99a0b44c3c1..cc02300b3987 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index 6bafbedff32b..60fbfb50c86d 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index 1976683eb7ae..a30c2f925884 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index bbe1fbc8b4e5..258f3bbb020c 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index 1b5caf59548f..42a198725c70 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index 4a9f786c798a..69b96258f9b8 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -1048,8 +1048,12 @@ #define D_NEOPOOL_PR_OFF "PrOff" #define D_NEOPOOL_SETPOINT_OK "Ok" #define D_NEOPOOL_COVER "Cover" -#define D_NEOPOOL_SHOCK "Shock" -#define D_NEOPOOL_ALARM "! " +#define D_NEOPOOL_SHOCK "Boost" +#define D_NEOPOOL_STATUS_ON "ON" +#define D_NEOPOOL_STATUS_OFF "OFF" +#define D_NEOPOOL_STATUS_WAIT "WAIT" +#define D_NEOPOOL_STATUS_TANK "TANK" +#define D_NEOPOOL_STATUS_FLOW "Flow" #define D_NEOPOOL_LOW "Low" #define D_NEOPOOL_FLOW1 "FL1" #define D_NEOPOOL_FLOW2 "FL2" diff --git a/tasmota/xsns_83_neopool.ino b/tasmota/xsns_83_neopool.ino index 22fc9489bad1..0c8da85686f3 100644 --- a/tasmota/xsns_83_neopool.ino +++ b/tasmota/xsns_83_neopool.ino @@ -58,161 +58,197 @@ #endif -#define NEOPOOL_READ_REGISTER 0x04 // Function code used to read register: Read Input Registers -#define NEOPOOL_WRITE_REGISTER 0x10 // Function code used to write register: Write Multiple Registers +#define NEOPOOL_READ_REGISTER 0x04 // Function code used to read register +#define NEOPOOL_WRITE_REGISTER 0x10 // Function code used to write register #define NEOPOOL_READ_TIMEOUT 25 // read data timeout in ms //#define NEOPOOL_OPTIMIZE_READINGS // Optimize modbus readings by considering of MBF_NOTIFICATION register - Note: Does not work on all systems! + +// Pool LED RGB lights with different programs, the individual programs can be selected +// by switching them off and on again for a defined time when the LED is switched on. +// Default timings for LED light program step sequence (NPLight 3) +#define NEOPOOL_LIGHT_PRG_WAIT 30 // delay before start prg light if light was off (in ms) +#define NEOPOOL_LIGHT_PRG_DELAY 15 // default next light prg delay (in ms) +#define NEOPOOL_LIGHT_PRG_DELAY_MIN 5 // next light prg delay min (in ms) +#define NEOPOOL_LIGHT_PRG_DELAY_MAX 100 // next light prg delay max (in ms) + + /*********************************************************************************************\ * Sugar Valley Modbus Register (* register are currently used) * (see https://downloads.vodnici.net/uploads/wpforo/attachments/69/171-Modbus-registers.pdf) \*********************************************************************************************/ enum NeoPoolRegister { - // addr Unit Description - // ------ ----- ------------------------------------------------------------ + // addr Unit Description + // ------ ------ ------------------------------------------------------------ // MODBUS page (0x0000 - 0x002E - unknown - for internal use only) + MBF_VOLT_24_36 = 0x0022, // 0x0022 Current 24-36V line in mV + MBF_VOLT_12 = 0x0023, // 0x0023 Current 12V line in mV // MEASURE page (0x01xx) - MBF_ION_CURRENT=0x0100, // 0x0100* Current measured in the ionization system - MBF_HIDRO_CURRENT, // 0x0101* Intensity level currently measured in the hydrolysissystem - MBF_MEASURE_PH, // 0x0102* ph Level measured in hundredths (700=7.00) - MBF_MEASURE_RX, // 0x0103* ppm Redox level in hundredths of ppm (100=1.00 ppm) - MBF_MEASURE_CL, // 0x0104* ppm Level measured in hundredths of chlorine ppm (100=1.00 ppm) - MBF_MEASURE_CONDUCTIVITY, // 0x0105 % Level of conductivity measured in the water. - MBF_MEASURE_TEMPERATURE, // 0x0106* °C Water temperature sensor (100=10.0°C) - MBF_PH_STATUS, // 0x0107* mask Status of the module control pH - MBF_RX_STATUS, // 0x0108* mask Status of the Rx-module - MBF_CL_STATUS, // 0x0109* mask Status of the Chlorine-module - MBF_CD_STATUS, // 0x010A mask Status of the Conductivity-module - MBF_ION_STATUS=0x010C, // 0x010C* mask Status of the Ionization-module - MBF_HIDRO_STATUS, // 0x010D* mask Status of the Hydrolysis-module - MBF_RELAY_STATE, // 0x010E* mask Status of each configurable relays - MBF_HIDRO_SWITCH_VALUE, // 0x010F INTERNAL - contains the opening of the hydrolysis PWM. - MBF_NOTIFICATION, // 0x0110* mask Reports whether a page of properties has changed since the last time it was consulted. - MBF_HIDRO_VOLTAGE, // 0x0111 Reports on the stress applied to the hydrolysis cell. This register, together with that of MBF_HIDRO_CURRENT allows extrapolating the salinity of the water. + MBF_ION_CURRENT = 0x0100, // 0x0100* Current measured in the ionization system + MBF_HIDRO_CURRENT, // 0x0101* Intensity level currently measured in the hydrolysissystem + MBF_MEASURE_PH, // 0x0102* ph Level measured in hundredths (700 = 7.00) + MBF_MEASURE_RX, // 0x0103* mV Redox level in mV + MBF_MEASURE_CL, // 0x0104* ppm Level measured in hundredths of chlorine ppm (100 = 1.00 ppm) + MBF_MEASURE_CONDUCTIVITY, // 0x0105 % Level of conductivity measured in the water. + MBF_MEASURE_TEMPERATURE, // 0x0106* °C Water temperature sensor (100 = 10.0°C) + MBF_PH_STATUS, // 0x0107* mask Status of the module control pH + MBF_RX_STATUS, // 0x0108* mask Status of the Rx-module + MBF_CL_STATUS, // 0x0109* mask Status of the Chlorine-module + MBF_CD_STATUS, // 0x010A mask Status of the Conductivity-module + MBF_ION_STATUS = 0x010C, // 0x010C* mask Status of the Ionization-module + MBF_HIDRO_STATUS, // 0x010D* mask Status of the Hydrolysis-module + MBF_RELAY_STATE, // 0x010E* mask Status of each configurable relays + MBF_HIDRO_SWITCH_VALUE, // 0x010F INTERNAL - contains the opening of the hydrolysis PWM. + MBF_NOTIFICATION, // 0x0110* mask Reports whether a page of properties has changed since the last time it was consulted. + MBF_HIDRO_VOLTAGE, // 0x0111 Reports on the stress applied to the hydrolysis cell. This register, together with that of MBF_HIDRO_CURRENT allows extrapolating the salinity of the water. // GLOBAL page (0x02xx) - MBF_SAVE_TO_EEPROM=0x02F0, // 0x02F0 A write operation to this register starts a EEPROM storage operation immediately. During the EEPROM storage procedure, the system may be unresponsive to MODBUS requests. The operation will last always less than 1 second. - MBF_EXEC=0x02F5, // 0x02F5 undocumented - immediately take over settings - a write operation to this register take over the previous written data + MBF_SET_MANUAL_CTRL = 0x0289, // 0x0289 undocumented - write a 1 before manual control MBF_RELAY_STATE, after done write 0 and do MBF_EXEC + MBF_ESCAPE = 0x0297, // 0x0297 undocumented - A write operation to this register is the same as using the ESC button on main screen - clears error + MBF_SAVE_TO_EEPROM = 0x02F0, // 0x02F0 A write operation to this register starts a EEPROM storage operation immediately. During the EEPROM storage procedure, the system may be unresponsive to MODBUS requests. The operation will last always less than 1 second. + MBF_EXEC = 0x02F5, // 0x02F5 undocumented - immediately take over settings - a write operation to this register take over the previous written data // FACTORY page (0x03xx) - MBF_PAR_VERSION=0x0300, // 0x0300* Software version of the PowerBox (unused) - MBF_PAR_MODEL, // 0x0301* mask System model options - MBF_PAR_SERNUM, // 0x0302 Serial number of the PowerBox (unused) - MBF_PAR_ION_NOM, // 0x0303 Ionization maximum production level (DO NOT WRITE!) - MBF_PAR_HIDRO_NOM=0x0306, // 0x0306 Hydrolysis maximum production level. (DO NOT WRITE!) If the hydrolysis is set to work in percent mode, this value will be 100. If the hydrolysis module is set to work in g/h production, this module will contain the maximum amount of production in g/h units. (DO NOT WRITE!) - MBF_PAR_SAL_AMPS=0x030A, // 0x030A Current command in regulation for which we are going to measure voltage - MBF_PAR_SAL_CELLK, // 0x030B Specifies the relationship between the resistance obtained in the measurement process and its equivalence in g / l (grams per liter) - MBF_PAR_SAL_TCOMP, // 0x030C Specifies the deviation in temperature from the conductivity. - MBF_PAR_HIDRO_MAX_VOLTAGE=0x0322, // 0x0322 Allows setting the maximum voltage value that can be reached with the hydrolysis current regulation. The value is specified in tenths of a volt. The default value of this register when the EEPROM is cleared is 80, which is equivalent to a maximum cell operating voltage of 8 volts. - MBF_PAR_HIDRO_FLOW_SIGNAL, // 0x0323 Allows to select the operation of the flow detection signal associated with the operation of the hydrolysis (see MBV_PAR_HIDRO_FLOW_SIGNAL*). The default value for this register is 0 (standard detection). - MBF_PAR_HIDRO_MAX_PWM_STEP_UP, // 0x0324 This register sets the PWM ramp up of the hydrolysis in pulses per duty cycle. This register makes it possible to adjust the rate at which the power delivered to the cell increases, allowing a gradual rise in power so that the operation of the switching source of the equipment is not saturated. Default 150 - MBF_PAR_HIDRO_MAX_PWM_STEP_DOWN, // 0x0325 This register sets the PWM down ramp of the hydrolysis in pulses per duty cycle. This register allows adjusting the rate at which the power delivered to the cell decreases, allowing a gradual drop in power so that the switched source of the equipment is not disconnected due to lack of consumption. This gradual fall must be in accordance with the type of cell used, since said cell stores charge once the current stimulus has ceased. Default 20 + MBF_PAR_VERSION = 0x0300, // 0x0300* Software version of the PowerBox (unused) + MBF_PAR_MODEL, // 0x0301* mask System model options + MBF_PAR_SERNUM, // 0x0302 Serial number of the PowerBox (unused) + MBF_PAR_ION_NOM, // 0x0303 Ionization maximum production level (DO NOT WRITE!) + MBF_PAR_HIDRO_NOM = 0x0306, // 0x0306 Hydrolysis maximum production level. (DO NOT WRITE!) If the hydrolysis is set to work in percent mode, this value will be 100. If the hydrolysis module is set to work in g/h production, this module will contain the maximum amount of production in g/h units. (DO NOT WRITE!) + MBF_PAR_SAL_AMPS = 0x030A, // 0x030A Current command in regulation for which we are going to measure voltage + MBF_PAR_SAL_CELLK, // 0x030B Specifies the relationship between the resistance obtained in the measurement process and its equivalence in g / l (grams per liter) + MBF_PAR_SAL_TCOMP, // 0x030C Specifies the deviation in temperature from the conductivity. + MBF_PAR_HIDRO_MAX_VOLTAGE = 0x0322, // 0x0322 Allows setting the maximum voltage value that can be reached with the hydrolysis current regulation. The value is specified in tenths of a volt. The default value of this register when the EEPROM is cleared is 80, which is equivalent to a maximum cell operating voltage of 8 volts. + MBF_PAR_HIDRO_FLOW_SIGNAL, // 0x0323 Allows to select the operation of the flow detection signal associated with the operation of the hydrolysis (see MBV_PAR_HIDRO_FLOW_SIGNAL*). The default value for this register is 0 (standard detection). + MBF_PAR_HIDRO_MAX_PWM_STEP_UP, // 0x0324 This register sets the PWM ramp up of the hydrolysis in pulses per duty cycle. This register makes it possible to adjust the rate at which the power delivered to the cell increases, allowing a gradual rise in power so that the operation of the switching source of the equipment is not saturated. Default 150 + MBF_PAR_HIDRO_MAX_PWM_STEP_DOWN, // 0x0325 This register sets the PWM down ramp of the hydrolysis in pulses per duty cycle. This register allows adjusting the rate at which the power delivered to the cell decreases, allowing a gradual drop in power so that the switched source of the equipment is not disconnected due to lack of consumption. This gradual fall must be in accordance with the type of cell used, since said cell stores charge once the current stimulus has ceased. Default 20 // INSTALLER page (0x04xx) - MBF_PAR_ION_POL0=0x0400, // 0x0400 Time in min the team must spend working on positive polarization in copper-silver ionization. - MBF_PAR_ION_POL1, // 0x0401 Time in min the team must spend working on positive polarization in copper-silver ionization. - MBF_PAR_ION_POL2, // 0x0402 Time in min the team must spend working on positive polarization in copper-silver ionization. - MBF_PAR_HIDRO_ION_CAUDAL, // 0x0403 mask Bitmask register regulates the external control mode of ionization, hydrolysis and pumps. - MBF_PAR_HIDRO_MODE, // 0x0404 Regulates the external control mode of hydrolysis from the modules of measure. 0: no control, 1: standard control (on / off), 2: with timed pump - MBF_PAR_HIDRO_POL0, // 0x0405 Time must spend working on positive polarization in hydrolysis / electrolysis. Time is stored in minutes. - MBF_PAR_HIDRO_POL1, // 0x0406 Time must spend working on positive polarization in hydrolysis / electrolysis. Time is stored in minutes. - MBF_PAR_HIDRO_POL2, // 0x0407 Time must spend working on positive polarization in hydrolysis / electrolysis. Time is stored in minutes. - MBF_PAR_TIME_LOW, // 0x0408* System timestamp (32 bit unixtime) - low word - MBF_PAR_TIME_HIGH, // 0x0409* System timestamp (32 bit unixtime) - high word - MBF_PAR_PH_ACID_RELAY_GPIO, // 0x040A* Relay number assigned to the acid pump function (only with pH module). - MBF_PAR_PH_BASE_RELAY_GPIO, // 0x040B* Relay number assigned to the base pump function (only with pH module). - MBF_PAR_RX_RELAY_GPIO, // 0x040C* Relay number assigned to the Redox level regulation function. If the value is 0, there is no relay assigned, and therefore there is no pump function (ON / OFF should not be displayed) - MBF_PAR_CL_RELAY_GPIO, // 0x040D* Relay number assigned to the chlorine pump function (only with free chlorine measuring modules). - MBF_PAR_CD_RELAY_GPIO, // 0x040E* Relay number assigned to the conductivity (brine) pump function (only with conductivity measurement modules). - MBF_PAR_TEMPERATURE_ACTIVE, // 0x040F* Indicates whether the equipment has a temperature measurement or not. - MBF_PAR_LIGHTING_GPIO, // 0x0410* Relay number assigned to the lighting function. 0: inactive. - MBF_PAR_FILT_MODE, // 0x0411* Filtration mode (see MBV_PAR_FILT_*) - MBF_PAR_FILT_GPIO, // 0x0412* Relay selected to perform the filtering function (by default it is relay 2). When this value is at zero, there is no relay assigned and therefore it is understood that the equipment does not control the filtration. In this case, the filter option does not appear in the user menu. - MBF_PAR_FILT_MANUAL_STATE, // 0x0413 Filtration status in manual mode (on = 1; off = 0) - MBF_PAR_HEATING_MODE, // 0x0414 Heating mode. 0: the equipment is not heated. 1: the equipment is heating. - MBF_PAR_HEATING_GPIO, // 0x0415 Relay selected to perform the heating function (by default it is relay 7). When this value is at zero, there is no relay assigned and therefore it is understood that the equipment does not control the heating. In this case, the filter modes associated with heating will not be displayed. - MBF_PAR_HEATING_TEMP, // 0x0416 Heating setpoint temperature - MBF_PAR_CLIMA_ONOFF, // 0x0417 Activation of the air conditioning mode (0 inactive; 1 active. - MBF_PAR_SMART_TEMP_HIGH, // 0x0418 Superior temperature of the Smart mode - MBF_PAR_SMART_TEMP_LOW, // 0x0419 Lower temperature of the Smart mode - MBF_PAR_SMART_ANTI_FREEZE, // 0x041A Antifreeze mode activated (1) or not (0). This adjustment is only available in the Smart filtration mode. - MBF_PAR_SMART_INTERVAL_REDUCTION, // 0x041B This register is read-only and reports to the outside what percentage (0 to 100%) is being applied to the nominal filtration time. 100% means that the total programmed time is being filtered. - MBF_PAR_INTELLIGENT_TEMP, // 0x041C Setpoint temperature for smart mode - MBF_PAR_INTELLIGENT_FILT_MIN_TIME, // 0x041D Minimum filtration time in minutes - MBF_PAR_INTELLIGENT_BONUS_TIME, // 0x041E Bonus time for the current set of intervals - MBF_PAR_INTELLIGENT_TT_NEXT_INTERVAL,//0x041F Time to next filtration interval. When it reaches 0 an interval is started and the number of seconds is reloaded for the next interval (2x3600) - MBF_PAR_INTELLIGENT_INTERVALS, // 0x0420 Number of started intervals. When it reaches 12 it is reset to 0 and the bonus time is reloaded with the value of MBF_PAR_INTELLIGENT_FILT_MIN_TIME - MBF_PAR_FILTRATION_STATE, // 0x0421 Filtration function state: 0 is off and 1 is on. The filtration state is regulated according to the MBF_PAR_FILT_MANUAL_STATE register if the filtration mode held in register MBF_PAR_FILT_MODE is set to FILT_MODE_MANUAL (0). - MBF_PAR_HEATING_DELAY_TIME, // 0x0422 // Timer in seconds that counts up when the heating is to be enabled. Once this counter reaches 60 seconds, the heating is then enabled. This counter is for internal use only. - MBF_PAR_FILTERING_TIME_LOW, // 0x0423 32-bit value: - MBF_PAR_FILTERING_TIME_HIGH, // 0x0424 Internal timer for the intelligent filtering mode. It counts the filtering time done during a given day. This register is only for internal use and should not be modified by the user. - MBF_PAR_INTELLIGENT_INTERVAL_TIME_LOW,// 0x0425 32-bit value: - MBF_PAR_INTELLIGENT_INTERVAL_TIME_HIGH,// 0x0426 Internal timer that counts the filtration interval assigned to the the intelligent mode. This register is only for internal use and should not be modified by the user. - MBF_PAR_UV_MODE, // 0x0427 UV mode active or not - see MBV_PAR_UV_MODE*. To enable UV support for a given device, add the mask MBMSK_MODEL_UV to the MBF_PAR_MODEL register. - MBF_PAR_UV_HIDE_WARN, // 0x0428 mask Suppression for warning messages in the UV mode. - MBF_PAR_UV_RELAY_GPIO, // 0x0429 Relay number assigned to the UV function. - MBF_PAR_PH_PUMP_REP_TIME_ON, // 0x042A mask Time that the pH pump will be turn on in the repetitive mode (see MBMSK_PH_PUMP_*). Contains a special time format, see desc for MBMSK_PH_PUMP_TIME. - MBF_PAR_PH_PUMP_REP_TIME_OFF, // 0x042B Time that the pH pump will be turn off in the repetitive mode. Contains a special time format, see desc for MBMSK_PH_PUMP_TIME, has no upper configuration bit 0x8000 - MBF_PAR_HIDRO_COVER_ENABLE, // 0x042C Options for the hydrolysis/electrolysis module (see MBMSK_HIDRO_*) - MBF_PAR_HIDRO_COVER_REDUCTION, // 0x042D Configured levels for the cover reduction and the hydrolysis shutdown temperature options: LSB=Percentage for the cover reduction, MSB=Temperature level for the hydrolysis shutdown (see MBMSK_HIDRO_*) - MBF_PAR_PUMP_RELAY_TIME_OFF, // 0x042E Time level in minutes or seconds that the dosing pump must remain off when the temporized pump mode is selected. This time level register applies to all pumps except pH. Contains a special time format, see desc for MBMSK_PH_PUMP_TIME, has no upper configuration bit 0x8000 - MBF_PAR_PUMP_RELAY_TIME_ON, // 0x042F Time level in minutes or seconds that the dosing pump must remain on when the temporized pump mode is selected. This time level register applies to all pumps except pH. Contains a special time format, see desc for MBMSK_PH_PUMP_TIME, has no upper configuration bit 0x8000 - MBF_PAR_RELAY_PH, // 0x0430 Determine what pH regulation configuration the equipment has (see MBV_PAR_RELAY_PH_*) - MBF_PAR_RELAY_MAX_TIME, // 0x0431 Maximum amount of time, in seconds, that a dosing pump can operate before rising an alarm signal. The behavior of the system when the dosing time is exceeded is regulated by the type of action stored in the MBF_PAR_RELAY_MODE register. - MBF_PAR_RELAY_MODE, // 0x0432 Behavior of the system when the dosing time is exceeded (see MBMSK_PAR_RELAY_MODE_* and MBV_PAR_RELAY_MODE_*) - MBF_PAR_RELAY_ACTIVATION_DELAY, // 0x0433 Delay time in seconds for the pH pump when the measured pH value is outside the allowable pH setpoints. The system internally adds an extra time of 10 seconds to the value stored here. The pump starts the dosing operation once the condition of pH out of valid interval is maintained during the time specified in this register. - MBF_PAR_TIMER_BLOCK_BASE, // 0x0434 This block of 180 registers holds the configuration of the system timers. The system has a set of 12 fully configurable timers, each one assigned to a specific function, described below: - MBF_PAR_TIMER_BLOCK_FILT_INT1=0x0434,//0x0434 Filtration interval 1 (15 register - see MBV_TIMER_OFFMB_* for desc) - MBF_PAR_TIMER_BLOCK_FILT_INT2=0x0443,//0x0443 Filtration interval 2 (15 register - see MBV_TIMER_OFFMB_* for desc) - MBF_PAR_TIMER_BLOCK_FILT_INT3=0x0452,//0x0452 Filtration interval 3 (15 register - see MBV_TIMER_OFFMB_* for desc) - MBF_PAR_TIMER_BLOCK_AUX1_INT2=0x0461,//0x0461 Auxiliary relay 1 - 2. interval (15 register - see MBV_TIMER_OFFMB_* for desc) - MBF_PAR_TIMER_BLOCK_LIGHT_INT=0x0470,//0x0470 Lighting interval (15 register - see MBV_TIMER_OFFMB_* for desc) - MBF_PAR_TIMER_BLOCK_AUX2_INT2=0x047F,//0x047F Auxiliary relay 2 - 2. interval (15 register - see MBV_TIMER_OFFMB_* for desc) - MBF_PAR_TIMER_BLOCK_AUX3_INT2=0x048E,//0x048E Auxiliary relay 3 - 2. interval (15 register - see MBV_TIMER_OFFMB_* for desc) - MBF_PAR_TIMER_BLOCK_AUX4_INT2=0x049D,//0x049D Auxiliary relay 4 - 2. interval (15 register - see MBV_TIMER_OFFMB_* for desc) - MBF_PAR_TIMER_BLOCK_AUX1_INT1=0x04AC,//0x04AC Auxiliary relay 1 - 1. interval (15 register - see MBV_TIMER_OFFMB_* for desc) - MBF_PAR_TIMER_BLOCK_AUX2_INT1=0x04BB,//0x04BB Auxiliary relay 2 - 1. interval (15 register - see MBV_TIMER_OFFMB_* for desc) - MBF_PAR_TIMER_BLOCK_AUX3_INT1=0x04CA,//0x04CA Auxiliary relay 3 - 1. interval (15 register - see MBV_TIMER_OFFMB_* for desc) - MBF_PAR_TIMER_BLOCK_AUX4_INT1=0x04D9,//0x04D9 Auxiliary relay 4 - 1. interval (15 register - see MBV_TIMER_OFFMB_* for desc) - MBF_PAR_FILTVALVE_ENABLE=0x04E8, // 0x04E8 Filter cleaning functionality mode (0=off, 1=Besgo) - MBF_PAR_FILTVALVE_MODE, // 0x04E9 Filter cleaning valve timing mode, possible modes: MBV_PAR_CTIMER_ENABLED, MBV_PAR_CTIMER_ALWAYS_ON, MBV_PAR_CTIMER_ALWAYS_OFF - MBF_PAR_FILTVALVE_GPIO, // 0x04EA Relay associated with the filter cleaning function. default AUX2 (value 5) - MBF_PAR_FILTVALVE_START_LOW, // 0x04EB start timestamp of filter cleaning (32-bit) - MBF_PAR_FILTVALVE_START_HIGH, // 0x04EC " - MBF_PAR_FILTVALVE_PERIOD_MINUTES, // 0x04ED Period in minutes between cleaning actions. For example, if a value of 60 is stored in this registry, a cleanup action will occur every hour. - MBF_PAR_FILTVALVE_INTERVAL, // 0x04EE Cleaning action duration in seconds. - MBF_PAR_FILTVALVE_REMAINING, // 0x04EF Time remaining for the current cleaning action in seconds. If this register is 0, it means that there is no cleaning function running. When a cleanup function is started, the contents of the MBF_PAR_FILTVALVE_INTERVAL register are copied to this register, then decremented once per second. The display uses this log to track the progress of the cleaning function. - MBF_ACTION_COPY_TO_RTC, // 0x04F0 A write (any value) forces the writing of the RTC time registers MBF_PAR_TIME_LOW (0x0408) and MBF_PAR_TIME_HIGH (0x0409) into the RTC internal microcontroller clock management registers. - - // USER page (0x05xx) To make the modification of this register persistent, execute the EEPROM storage procedure described in global register MBF_SAVE_TO_EEPROM. - MBF_PAR_ION=0x0500, // 0x0500 Ionization target production level. The value adjusted in this register must not exceed the value set in the MBF_PAR_ION_NOM factory register. - MBF_PAR_ION_PR, // 0x0501 Amount of time in minutes that the ionization must be activated each time that the filtration starts. - MBF_PAR_HIDRO, // 0x0502 Hydrolisis target production level. When the hydrolysis production is to be set in percent values, this value will contain the percent of production. If the hydrolysis module is set to work in g/h production, this module will contain the desired amount of production in g/h units. The value adjusted in this register must not exceed the value set in the MBF_PAR_HIDRO_NOM factory register. - MBF_PAR_PH1=0x0504, // 0x0504 Higher limit of the pH regulation system. The value set in this register is multiplied by 100. This means that if we want to set a value of 7.5, the numerical content that we must write in this register is 750. This register must be always higher than MBF_PAR_PH2. - MBF_PAR_PH2, // 0x0505 Lower limit of the pH regulation system. The value set in this register is multiplied by 100. This means that if we want to set a value of 7.0, the numerical content that we must write in this register is 700. This register must be always lower than MBF_PAR_PH1. - MBF_PAR_RX1=0x0508, // 0x0508 Set point for the redox regulation system. This value must be in the range of 0 to 1000. - MBF_PAR_CL1=0x050A, // 0x050A Set point for the chlorine regulation system. The value stored in this register is multiplied by 100. This mean that if we want to set a value of 1.5 ppm, we will have to write a numerical value of 150. This value stored in this register must be in the range of 0 to 1000. - MBF_PAR_FUNCTION_DEPENDENCY=0x051B, // 0x051B mask Specification for the dependency of different functions, such as heating, from external events like FL1 (see MBMSK_FCTDEP_HEATING/MBMSK_DEPENDENCY_*) + MBF_PAR_ION_POL0 = 0x0400, // 0x0400 Time in min the team must spend working on positive polarization in copper-silver ionization. + MBF_PAR_ION_POL1, // 0x0401 Time in min the team must spend working on positive polarization in copper-silver ionization. + MBF_PAR_ION_POL2, // 0x0402 Time in min the team must spend working on positive polarization in copper-silver ionization. + MBF_PAR_HIDRO_ION_CAUDAL, // 0x0403 mask Bitmask register regulates the external control mode of ionization, hydrolysis and pumps. + MBF_PAR_HIDRO_MODE, // 0x0404 Regulates the external control mode of hydrolysis from the modules of measure. 0: no control, 1: standard control (on / off), 2: with timed pump + MBF_PAR_HIDRO_POL0, // 0x0405 Time must spend working on positive polarization in hydrolysis / electrolysis. Time is stored in minutes. + MBF_PAR_HIDRO_POL1, // 0x0406 Time must spend working on positive polarization in hydrolysis / electrolysis. Time is stored in minutes. + MBF_PAR_HIDRO_POL2, // 0x0407 Time must spend working on positive polarization in hydrolysis / electrolysis. Time is stored in minutes. + MBF_PAR_TIME_LOW, // 0x0408* System timestamp (32 bit unixtime) - low word + MBF_PAR_TIME_HIGH, // 0x0409* System timestamp (32 bit unixtime) - high word + MBF_PAR_PH_ACID_RELAY_GPIO, // 0x040A* Relay number assigned to the acid pump function (only with pH module). + MBF_PAR_PH_BASE_RELAY_GPIO, // 0x040B* Relay number assigned to the base pump function (only with pH module). + MBF_PAR_RX_RELAY_GPIO, // 0x040C* Relay number assigned to the Redox level regulation function. If the value is 0, there is no relay assigned, and therefore there is no pump function (ON / OFF should not be displayed) + MBF_PAR_CL_RELAY_GPIO, // 0x040D* Relay number assigned to the chlorine pump function (only with free chlorine measuring modules). + MBF_PAR_CD_RELAY_GPIO, // 0x040E* Relay number assigned to the conductivity (brine) pump function (only with conductivity measurement modules). + MBF_PAR_TEMPERATURE_ACTIVE, // 0x040F* Indicates whether the equipment has a temperature measurement or not. + MBF_PAR_LIGHTING_GPIO, // 0x0410* Relay number assigned to the lighting function. 0: inactive. + MBF_PAR_FILT_MODE, // 0x0411* Filtration mode (see MBV_PAR_FILT_*) + MBF_PAR_FILT_GPIO, // 0x0412* Relay selected to perform the filtering function (by default it is relay 2). When this value is at zero, there is no relay assigned and therefore it is understood that the equipment does not control the filtration. In this case, the filter option does not appear in the user menu. + MBF_PAR_FILT_MANUAL_STATE, // 0x0413 Filtration status in manual mode (on = 1; off = 0) + MBF_PAR_HEATING_MODE, // 0x0414 Heating mode. 0: the equipment is not heated. 1: the equipment is heating. + MBF_PAR_HEATING_GPIO, // 0x0415 Relay selected to perform the heating function (by default it is relay 7). When this value is at zero, there is no relay assigned and therefore it is understood that the equipment does not control the heating. In this case, the filter modes associated with heating will not be displayed. + MBF_PAR_HEATING_TEMP, // 0x0416 Heating setpoint temperature + MBF_PAR_CLIMA_ONOFF, // 0x0417 Activation of the air conditioning mode (0 inactive; 1 active. + MBF_PAR_SMART_TEMP_HIGH, // 0x0418 Superior temperature of the Smart mode + MBF_PAR_SMART_TEMP_LOW, // 0x0419 Lower temperature of the Smart mode + MBF_PAR_SMART_ANTI_FREEZE, // 0x041A Antifreeze mode activated (1) or not (0). This adjustment is only available in the Smart filtration mode. + MBF_PAR_SMART_INTERVAL_REDUCTION, // 0x041B This register is read-only and reports to the outside what percentage (0 to 100%) is being applied to the nominal filtration time. 100% means that the total programmed time is being filtered. + MBF_PAR_INTELLIGENT_TEMP, // 0x041C Setpoint temperature for smart mode + MBF_PAR_INTELLIGENT_FILT_MIN_TIME, // 0x041D Minimum filtration time in minutes + MBF_PAR_INTELLIGENT_BONUS_TIME, // 0x041E Bonus time for the current set of intervals + MBF_PAR_INTELLIGENT_TT_NEXT_INTERVAL, // 0x041F Time to next filtration interval. When it reaches 0 an interval is started and the number of seconds is reloaded for the next interval (2x3600) + MBF_PAR_INTELLIGENT_INTERVALS, // 0x0420 Number of started intervals. When it reaches 12 it is reset to 0 and the bonus time is reloaded with the value of MBF_PAR_INTELLIGENT_FILT_MIN_TIME + MBF_PAR_FILTRATION_STATE, // 0x0421 Filtration function state: 0 is off and 1 is on. The filtration state is regulated according to the MBF_PAR_FILT_MANUAL_STATE register if the filtration mode held in register MBF_PAR_FILT_MODE is set to FILT_MODE_MANUAL (0). + MBF_PAR_HEATING_DELAY_TIME, // 0x0422 Timer in seconds that counts up when the heating is to be enabled. Once this counter reaches 60 seconds, the heating is then enabled. This counter is for internal use only. + MBF_PAR_FILTERING_TIME_LOW, // 0x0423 32-bit value: + MBF_PAR_FILTERING_TIME_HIGH, // 0x0424 Internal timer for the intelligent filtering mode. It counts the filtering time done during a given day. This register is only for internal use and should not be modified by the user. + MBF_PAR_INTELLIGENT_INTERVAL_TIME_LOW, // 0x0425 32-bit value: + MBF_PAR_INTELLIGENT_INTERVAL_TIME_HIGH, // 0x0426 Internal timer that counts the filtration interval assigned to the the intelligent mode. This register is only for internal use and should not be modified by the user. + MBF_PAR_UV_MODE, // 0x0427 UV mode active or not - see MBV_PAR_UV_MODE*. To enable UV support for a given device, add the mask MBMSK_MODEL_UV to the MBF_PAR_MODEL register. + MBF_PAR_UV_HIDE_WARN, // 0x0428 mask Suppression for warning messages in the UV mode. + MBF_PAR_UV_RELAY_GPIO, // 0x0429 Relay number assigned to the UV function. + MBF_PAR_PH_PUMP_REP_TIME_ON, // 0x042A mask Time that the pH pump will be turn on in the repetitive mode (see MBMSK_PH_PUMP_*). Contains a special time format, see desc for MBMSK_PH_PUMP_TIME. + MBF_PAR_PH_PUMP_REP_TIME_OFF, // 0x042B Time that the pH pump will be turn off in the repetitive mode. Contains a special time format, see desc for MBMSK_PH_PUMP_TIME, has no upper configuration bit 0x8000 + MBF_PAR_HIDRO_COVER_ENABLE, // 0x042C Options for the hydrolysis/electrolysis module (see MBMSK_HIDRO_*) + MBF_PAR_HIDRO_COVER_REDUCTION, // 0x042D Configured levels for the cover reduction and the hydrolysis shutdown temperature options: LSB = Percentage for the cover reduction, MSB = Temperature level for the hydrolysis shutdown (see MBMSK_HIDRO_*) + MBF_PAR_PUMP_RELAY_TIME_OFF, // 0x042E Time level in minutes or seconds that the dosing pump must remain off when the temporized pump mode is selected. This time level register applies to all pumps except pH. Contains a special time format, see desc for MBMSK_PH_PUMP_TIME, has no upper configuration bit 0x8000 + MBF_PAR_PUMP_RELAY_TIME_ON, // 0x042F Time level in minutes or seconds that the dosing pump must remain on when the temporized pump mode is selected. This time level register applies to all pumps except pH. Contains a special time format, see desc for MBMSK_PH_PUMP_TIME, has no upper configuration bit 0x8000 + MBF_PAR_RELAY_PH, // 0x0430 Determine what pH regulation configuration the equipment has (see MBV_PAR_RELAY_PH_*) + MBF_PAR_RELAY_MAX_TIME, // 0x0431 Maximum amount of time, in seconds, that a dosing pump can operate before rising an alarm signal. The behavior of the system when the dosing time is exceeded is regulated by the type of action stored in the MBF_PAR_RELAY_MODE register. + MBF_PAR_RELAY_MODE, // 0x0432 Behavior of the system when the dosing time is exceeded (see MBMSK_PAR_RELAY_MODE_* and MBV_PAR_RELAY_MODE_*) + MBF_PAR_RELAY_ACTIVATION_DELAY, // 0x0433 Delay time in seconds for the pH pump when the measured pH value is outside the allowable pH setpoints. The system internally adds an extra time of 10 seconds to the value stored here. The pump starts the dosing operation once the condition of pH out of valid interval is maintained during the time specified in this register. + MBF_PAR_TIMER_BLOCK_BASE, // 0x0434 This block of 180 registers holds the configuration of the system timers. The system has a set of 12 fully configurable timers, each one assigned to a specific function, described below: + MBF_PAR_TIMER_BLOCK_FILT_INT1 = 0x0434, // 0x0434 Filtration interval 1 (15 register - see MBV_TIMER_OFFMB_* for desc) + MBF_PAR_TIMER_BLOCK_FILT_INT2 = 0x0443, // 0x0443 Filtration interval 2 (15 register - see MBV_TIMER_OFFMB_* for desc) + MBF_PAR_TIMER_BLOCK_FILT_INT3 = 0x0452, // 0x0452 Filtration interval 3 (15 register - see MBV_TIMER_OFFMB_* for desc) + MBF_PAR_TIMER_BLOCK_AUX1_INT2 = 0x0461, // 0x0461 Auxiliary relay 1 - 2. interval (15 register - see MBV_TIMER_OFFMB_* for desc) + MBF_PAR_TIMER_BLOCK_LIGHT_INT = 0x0470, // 0x0470 Lighting interval (15 register - see MBV_TIMER_OFFMB_* for desc) + MBF_PAR_TIMER_BLOCK_AUX2_INT2 = 0x047F, // 0x047F Auxiliary relay 2 - 2. interval (15 register - see MBV_TIMER_OFFMB_* for desc) + MBF_PAR_TIMER_BLOCK_AUX3_INT2 = 0x048E, // 0x048E Auxiliary relay 3 - 2. interval (15 register - see MBV_TIMER_OFFMB_* for desc) + MBF_PAR_TIMER_BLOCK_AUX4_INT2 = 0x049D, // 0x049D Auxiliary relay 4 - 2. interval (15 register - see MBV_TIMER_OFFMB_* for desc) + MBF_PAR_TIMER_BLOCK_AUX1_INT1 = 0x04AC, // 0x04AC Auxiliary relay 1 - 1. interval (15 register - see MBV_TIMER_OFFMB_* for desc) + MBF_PAR_TIMER_BLOCK_AUX2_INT1 = 0x04BB, // 0x04BB Auxiliary relay 2 - 1. interval (15 register - see MBV_TIMER_OFFMB_* for desc) + MBF_PAR_TIMER_BLOCK_AUX3_INT1 = 0x04CA, // 0x04CA Auxiliary relay 3 - 1. interval (15 register - see MBV_TIMER_OFFMB_* for desc) + MBF_PAR_TIMER_BLOCK_AUX4_INT1 = 0x04D9, // 0x04D9 Auxiliary relay 4 - 1. interval (15 register - see MBV_TIMER_OFFMB_* for desc) + MBF_PAR_FILTVALVE_ENABLE = 0x04E8, // 0x04E8 Filter cleaning functionality mode (0 = off, 1 = Besgo) + MBF_PAR_FILTVALVE_MODE, // 0x04E9 Filter cleaning valve timing mode, possible modes: MBV_PAR_CTIMER_ENABLED, MBV_PAR_CTIMER_ALWAYS_ON, MBV_PAR_CTIMER_ALWAYS_OFF + MBF_PAR_FILTVALVE_GPIO, // 0x04EA Relay associated with the filter cleaning function. default AUX2 (value 5) + MBF_PAR_FILTVALVE_START_LOW, // 0x04EB start timestamp of filter cleaning (32-bit) + MBF_PAR_FILTVALVE_START_HIGH, // 0x04EC " + MBF_PAR_FILTVALVE_PERIOD_MINUTES, // 0x04ED Period in minutes between cleaning actions. For example, if a value of 60 is stored in this registry, a cleanup action will occur every hour. + MBF_PAR_FILTVALVE_INTERVAL, // 0x04EE Cleaning action duration in seconds. + MBF_PAR_FILTVALVE_REMAINING, // 0x04EF Time remaining for the current cleaning action in seconds. If this register is 0, it means that there is no cleaning function running. When a cleanup function is started, the contents of the MBF_PAR_FILTVALVE_INTERVAL register are copied to this register, then decremented once per second. The display uses this log to track the progress of the cleaning function. + MBF_ACTION_COPY_TO_RTC, // 0x04F0 A write (any value) forces the writing of the RTC time registers MBF_PAR_TIME_LOW (0x0408) and MBF_PAR_TIME_HIGH (0x0409) into the RTC internal microcontroller clock management registers. + + // USER page (0x05xx) To make the modification of this register persistent, execute the EEPROM storage procedure described in global register MBF_SAVE_TO_EEPROM. + MBF_PAR_ION = 0x0500, // 0x0500 Ionization target production level. The value adjusted in this register must not exceed the value set in the MBF_PAR_ION_NOM factory register. + MBF_PAR_ION_PR, // 0x0501 Amount of time in minutes that the ionization must be activated each time that the filtration starts. + MBF_PAR_HIDRO, // 0x0502 Hydrolisis target production level. When the hydrolysis production is to be set in percent values, this value will contain the percent of production. If the hydrolysis module is set to work in g/h production, this module will contain the desired amount of production in g/h units. The value adjusted in this register must not exceed the value set in the MBF_PAR_HIDRO_NOM factory register. + MBF_PAR_PH1 = 0x0504, // 0x0504 Higher limit of the pH regulation system. The value set in this register is multiplied by 100. This means that if we want to set a value of 7.5, the numerical content that we must write in this register is 750. This register must be always higher than MBF_PAR_PH2. + MBF_PAR_PH2, // 0x0505 Lower limit of the pH regulation system. The value set in this register is multiplied by 100. This means that if we want to set a value of 7.0, the numerical content that we must write in this register is 700. This register must be always lower than MBF_PAR_PH1. + MBF_PAR_RX1 = 0x0508, // 0x0508 Set point for the redox regulation system. This value must be in the range of 0 to 1000. + MBF_PAR_CL1 = 0x050A, // 0x050A Set point for the chlorine regulation system. The value stored in this register is multiplied by 100. This mean that if we want to set a value of 1.5 ppm, we will have to write a numerical value of 150. This value stored in this register must be in the range of 0 to 1000. + MBF_PAR_FILTRATION_TYPE = 0x050F, // 0x050F undocumented - filtration type, see MBV_PAR_FILTRATION_TYPE_* 0 = Standard, 1 = Variable Hayward, 2 = Variable speed B + MBF_PAR_FILTRATION_SPEED_FUNC = 0x0513, // 0x0513 undocumented - filtration speed function control + MBF_PAR_FUNCTION_DEPENDENCY = 0x051B, // 0x051B mask Specification for the dependency of different functions, such as heating, from external events like FL1 (see MBMSK_FCTDEP_HEATING/MBMSK_DEPENDENCY_*) // MISC page (0x06xx) - MBF_PAR_UICFG_MACHINE=0x0600, // 0x0600* Machine type (see MBV_PAR_MACH_* and kNeoPoolMachineNames[]) - MBF_PAR_UICFG_LANGUAGE, // 0x0601 Selected language (see MBV_PAR_LANG_*) - MBF_PAR_UICFG_BACKLIGHT, // 0x0602 Display backlight (see MBV_PAR_BACKLIGHT_*) - MBF_PAR_UICFG_SOUND, // 0x0603 mask Audible alerts (see MBMSK_PAR_SOUND_*) - MBF_PAR_UICFG_PASSWORD, // 0x0604 System password encoded in BCD - MBF_PAR_UICFG_VISUAL_OPTIONS, // 0x0605 mask Stores the different display options for the user interface menus (bitmask). Some bits allow you to hide options that are normally visible (bits 0 to 3) while other bits allow you to show options that are normally hidden (bits 9 to 15) - MBF_PAR_UICFG_VISUAL_OPTIONS_EXT, // 0x0606 mask This register stores additional display options for the user interface menus, see MBMSK_VOE_* - MBF_PAR_UICFG_MACH_VISUAL_STYLE, // 0x0607 mask This register is an expansion of register 0x0600 and 0x0605. The lower part of the register (8 bits LSB) is used to store the type of color selected when in register 0x600 has been specified that the machine is of type "generic". Colors and styles correspond to those listed in record 0x600 MBF_PAR_UICFG_MACHINE. The upper part (8-bit MSB) contains extra bits MBMSK_VS_FORCE_UNITS_GRH, MBMSK_VS_FORCE_UNITS_PERCENTAGE and MBMSK_ELECTROLISIS - MBF_PAR_UICFG_MACH_NAME_BOLD_0, // 0x0608 This set of 4 registers stores an ASCIIZ string of up to 8 characters that is used to specify the bold part of the title to be displayed at startup if the specified machine type is generic. Note: only lowercase letters (a-z) can be used. - MBF_PAR_UICFG_MACH_NAME_BOLD_1, // 0x0609 - MBF_PAR_UICFG_MACH_NAME_BOLD_2, // 0x060A - MBF_PAR_UICFG_MACH_NAME_BOLD_3, // 0x060B - MBF_PAR_UICFG_MACH_NAME_LIGHT_0, // 0x060C This set of 4 registers stores an ASCIIZ string of up to 8 characters that is used to specify the normal intensity part of the title that will be displayed at startup if the specified machine type is generic. Note: Only lowercase letters (a-z) can be used. - MBF_PAR_UICFG_MACH_NAME_LIGHT_1, // 0x060D - MBF_PAR_UICFG_MACH_NAME_LIGHT_2, // 0x060E - MBF_PAR_UICFG_MACH_NAME_LIGHT_3, // 0x060F + MBF_PAR_UICFG_MACHINE = 0x0600, // 0x0600* Machine type (see MBV_PAR_MACH_* and kNeoPoolMachineNames[]) + MBF_PAR_UICFG_LANGUAGE, // 0x0601 Selected language (see MBV_PAR_LANG_*) + MBF_PAR_UICFG_BACKLIGHT, // 0x0602 Display backlight (see MBV_PAR_BACKLIGHT_*) + MBF_PAR_UICFG_SOUND, // 0x0603 mask Audible alerts (see MBMSK_PAR_SOUND_*) + MBF_PAR_UICFG_PASSWORD, // 0x0604 System password encoded in BCD + MBF_PAR_UICFG_VISUAL_OPTIONS, // 0x0605 mask Stores the different display options for the user interface menus (bitmask). Some bits allow you to hide options that are normally visible (bits 0 to 3) while other bits allow you to show options that are normally hidden (bits 9 to 15) + MBF_PAR_UICFG_VISUAL_OPTIONS_EXT, // 0x0606 mask This register stores additional display options for the user interface menus, see MBMSK_VOE_* + MBF_PAR_UICFG_MACH_VISUAL_STYLE, // 0x0607* mask This register is an expansion of register 0x0600 and 0x0605. The lower part of the register (8 bits LSB) is used to store the type of color selected when in register 0x600 has been specified that the machine is of type "generic". Colors and styles correspond to those listed in record 0x600 MBF_PAR_UICFG_MACHINE. The upper part (8-bit MSB) contains extra bits MBMSK_VS_FORCE_UNITS_GRH, MBMSK_VS_FORCE_UNITS_PERCENTAGE and MBMSK_ELECTROLISIS + MBF_PAR_UICFG_MACH_NAME_BOLD_0, // 0x0608 This set of 4 registers stores an ASCIIZ string of up to 8 characters that is used to specify the bold part of the title to be displayed at startup if the specified machine type is generic. Note: only lowercase letters (a-z) can be used. + MBF_PAR_UICFG_MACH_NAME_BOLD_1, // 0x0609 + MBF_PAR_UICFG_MACH_NAME_BOLD_2, // 0x060A + MBF_PAR_UICFG_MACH_NAME_BOLD_3, // 0x060B + MBF_PAR_UICFG_MACH_NAME_LIGHT_0, // 0x060C This set of 4 registers stores an ASCIIZ string of up to 8 characters that is used to specify the normal intensity part of the title that will be displayed at startup if the specified machine type is generic. Note: Only lowercase letters (a-z) can be used. + MBF_PAR_UICFG_MACH_NAME_LIGHT_1, // 0x060D + MBF_PAR_UICFG_MACH_NAME_LIGHT_2, // 0x060E + MBF_PAR_UICFG_MACH_NAME_LIGHT_3, // 0x060F + MBF_PAR_UICFG_MACH_NAME_AUX1_0, // 0x0610 Aux1 relay name: 5 registers ASCIIZ string of up to 10 characters + MBF_PAR_UICFG_MACH_NAME_AUX1_1, // 0x0611 + MBF_PAR_UICFG_MACH_NAME_AUX1_2, // 0x0612 + MBF_PAR_UICFG_MACH_NAME_AUX1_3, // 0x0613 + MBF_PAR_UICFG_MACH_NAME_AUX1_4, // 0x0614 + MBF_PAR_UICFG_MACH_NAME_AUX2_0, // 0x0615 Aux2 relay name: 5 registers ASCIIZ string of up to 10 characters + MBF_PAR_UICFG_MACH_NAME_AUX2_1, // 0x0616 + MBF_PAR_UICFG_MACH_NAME_AUX2_2, // 0x0617 + MBF_PAR_UICFG_MACH_NAME_AUX2_3, // 0x0618 + MBF_PAR_UICFG_MACH_NAME_AUX2_4, // 0x0619 + MBF_PAR_UICFG_MACH_NAME_AUX3_0, // 0x061A Aux3 relay name: 5 registers ASCIIZ string of up to 10 characters + MBF_PAR_UICFG_MACH_NAME_AUX3_1, // 0x061B + MBF_PAR_UICFG_MACH_NAME_AUX3_2, // 0x061C + MBF_PAR_UICFG_MACH_NAME_AUX3_3, // 0x061D + MBF_PAR_UICFG_MACH_NAME_AUX3_4, // 0x061E + MBF_PAR_UICFG_MACH_NAME_AUX4_0, // 0x061F Aux4 relay name: 5 registers ASCIIZ string of up to 10 characters + MBF_PAR_UICFG_MACH_NAME_AUX4_1, // 0x0620 + MBF_PAR_UICFG_MACH_NAME_AUX4_2, // 0x0621 + MBF_PAR_UICFG_MACH_NAME_AUX4_3, // 0x0622 + MBF_PAR_UICFG_MACH_NAME_AUX4_4, // 0x0623 }; // Sugar Valley register constants and bit masks @@ -226,6 +262,7 @@ enum NeoPoolConstAndBitMask { MBV_PH_ACID_BASE_ALARM3 = 3, // pH pump (acid or base, it does not matter) has exceeded the working time set by the MBF_PAR_RELAY_PH_MAX_TIME parameter and has stopped. MBV_PH_ACID_BASE_ALARM4 = 4, // pH higher than the set point indicated in PH1 MBV_PH_ACID_BASE_ALARM5 = 5, // pH lower than the set point indicated in PH2 + MBV_PH_ACID_BASE_ALARM6 = 6, // undocumented - acid tank level alarm // Valid alarm values for pH regulation with acid only: MBV_PH_ACID_ALARM0 = 0, // no alarm MBV_PH_ACID_ALARM1 = 1, // pH too high; the pH value is 0.8 points higher than the setpoint value set in PH1 @@ -233,6 +270,7 @@ enum NeoPoolConstAndBitMask { MBV_PH_ACID_ALARM3 = 3, // pH pump acid has exceeded the working time set by the MBF_PAR_RELAY_PH_MAX_TIME parameter and has stopped. MBV_PH_ACID_ALARM4 = 4, // pH higher than the setpoint indicated in PH1 by 0.1 MBV_PH_ACID_ALARM5 = 5, // pH lower than the set point indicated in PH1 by 0.3 + MBV_PH_ACID_ALARM6 = 6, // undocumented - acid tank level alarm // Valid alarm values for pH regulation with base only: MBV_PH_BASE_ALARM0 = 0, // no alarm MBV_PH_BASE_ALARM1 = 1, // pH too high; the pH value is 0.8 points higher than the set point value set in PH2 @@ -240,6 +278,7 @@ enum NeoPoolConstAndBitMask { MBV_PH_BASE_ALARM3 = 3, // pH pump has exceeded the working time set by the MBF_PAR_RELAY_PH_MAX_TIME parameter and has stopped. MBV_PH_BASE_ALARM4 = 4, // pH higher than the set point indicated in PH2 by 0.1 MBV_PH_BASE_ALARM5 = 5, // pH lower than the set point indicated in PH2 by 0.3 + MBV_PH_BASE_ALARM6 = 6, // undocumented - acid tank level alarm MBMSK_PH_STATUS_CTRL_BY_FL = 0x0400, // Control status of the pH module by flow detection (if enabled by MBF_PAR_HIDRO_ION_CAUDAL) MBMSK_PH_STATUS_ACID_PUMP_ACTIVE = 0x0800, // Acid pH pump relay on (pump on) @@ -337,7 +376,7 @@ enum NeoPoolConstAndBitMask { // MBF_PAR_FILT_MODE MBV_PAR_FILT_MANUAL = 0, // This mode allows to turn the filtration (and all other systems that depend on it) on and off manually. MBV_PAR_FILT_AUTO = 1, // This mode allows filtering to be turned on and off according to the settings of the TIMER1, TIMER2 and TIMER3 timers. - MBV_PAR_FILT_HEADING = 2, // This mode is similar to the AUTO mode, but includes setting the temperature for the heating function. This mode is activated only if the MBF_PAR_HEATING_MODE register is at 1 and there is a heating relay assigned. + MBV_PAR_FILT_HEATING = 2, // This mode is similar to the AUTO mode, but includes setting the temperature for the heating function. This mode is activated only if the MBF_PAR_HEATING_MODE register is at 1 and there is a heating relay assigned. MBV_PAR_FILT_SMART = 3, // This filtration mode adjusts the pump operating times depending on the temperature. This mode is activated only if the MBF_PAR_TEMPERATURE_ACTIVE register is at 1. MBV_PAR_FILT_INTELLIGENT = 4, // This mode performs an intelligent filtration process in combination with the heating function. This mode is activated only if the MBF_PAR_HEATING_MODE register is at 1 and there is a heating relay assigned. MBV_PAR_FILT_BACKWASH = 13, // This filter mode is started when the backwash operation is activated. @@ -376,6 +415,15 @@ enum NeoPoolConstAndBitMask { MBV_PAR_RELAY_MODE_SHOW_ONLY = 1, // The system only shows the alarm on screen, but the dosing continues. MBV_PAR_RELAY_MODE_SHOW_AND_STOP = 2, // The system shows the alarm on screen and stops the dosing pump + // MBF_PAR_FILTRATION_TYPE + MBV_PAR_FILTRATION_TYPE_STANDARD = 0x00, // Standard (without speed control) + MBV_PAR_FILTRATION_TYPE_HAYWARD_SLOW = 0x01, // Variable Hayward Slow + MBV_PAR_FILTRATION_TYPE_HAYWARD_MEDIUM = 0x11, // Variable Hayward Medium + MBV_PAR_FILTRATION_TYPE_HAYWARD_FAST = 0x21, // Variable Hayward Fast + MBV_PAR_FILTRATION_TYPE_SPEED_B_SLOW = 0x02, // Variable speed B Slow + MBV_PAR_FILTRATION_TYPE_SPEED_B_MEDIUM = 0x12, // Variable speed B Medium + MBV_PAR_FILTRATION_TYPE_SPEED_B_FAST = 0x22, // Variable speed B Fast + // MBF_PAR_FUNCTION_DEPENDENCY MBMSK_FCTDEP_HEATING = 0x0007, // Heating function dependency: MBMSK_DEPENDENCY_FL1_PADDLE = 0x0001, @@ -484,7 +532,7 @@ enum NeoPoolConstAndBitMask { TasmotaModbus *NeoPoolModbus; enum NeoPoolResult { - NEOPOOL_RESULT_DEC=false, + NEOPOOL_RESULT_DEC = false, NEOPOOL_RESULT_HEX, NEOPOOL_RESULT_MAX }; @@ -501,25 +549,54 @@ bool neopool_first_read = true; #endif // NEOPOOL_OPTIMIZE_READINGS bool neopool_error = true; +uint16_t neopool_light_relay; +uint8_t neopool_light_prg_delay; +uint8_t neopoll_cmd_delay = 0; +void (* neopoll_cmd)(void) = nullptr; + // Modbus register set to read -struct NEOPOOL_REG { +// Can be either a block of register read once with a single read or a list of disjoined addr which has to read reg by reg +// This keeps the update cycle fast even we have a lot of register to read +#define NEOPOOL_REG_TYPE_BLOCK 0 +#define NEOPOOL_REG_TYPE_LIST 1 +typedef struct { const uint16_t addr; const uint16_t cnt; uint16_t *data; +} NeoPoolRegBlock; + +typedef struct { + const uint16_t addr; + uint16_t data; +} NeoPoolRegList; + +struct { + const uint16_t type; + union { + NeoPoolRegBlock block; + NeoPoolRegList list[]; + }; } NeoPoolReg[] = { - {MBF_ION_CURRENT, MBF_NOTIFICATION - MBF_ION_CURRENT + 1, nullptr}, - {MBF_PAR_VERSION, MBF_PAR_MODEL - MBF_PAR_VERSION + 1, nullptr}, - {MBF_PAR_TIME_LOW, MBF_PAR_FILT_GPIO - MBF_PAR_TIME_LOW + 1, nullptr}, - {MBF_PAR_UICFG_MACHINE, MBF_PAR_UICFG_MACHINE - MBF_PAR_UICFG_MACHINE + 1, nullptr} + // 4 entries so using 250ms poll interval we are through in a second for all register + {NEOPOOL_REG_TYPE_BLOCK, {MBF_ION_CURRENT, MBF_NOTIFICATION - MBF_ION_CURRENT + 1, nullptr}}, + {NEOPOOL_REG_TYPE_BLOCK, {MBF_PAR_VERSION, MBF_PAR_MODEL - MBF_PAR_VERSION + 1, nullptr}}, + {NEOPOOL_REG_TYPE_BLOCK, {MBF_PAR_TIME_LOW, MBF_PAR_FILT_GPIO - MBF_PAR_TIME_LOW + 1, nullptr}}, + {NEOPOOL_REG_TYPE_BLOCK, {MBF_PAR_ION, MBF_PAR_FILTRATION_TYPE - MBF_PAR_ION + 1, nullptr}}, + {NEOPOOL_REG_TYPE_BLOCK, {MBF_PAR_UICFG_MACHINE, MBF_PAR_UICFG_MACH_VISUAL_STYLE - MBF_PAR_UICFG_MACHINE + 1, nullptr}} }; +uint16_t filtration_types[2][3] = { + {MBV_PAR_FILTRATION_TYPE_HAYWARD_SLOW, MBV_PAR_FILTRATION_TYPE_HAYWARD_MEDIUM, MBV_PAR_FILTRATION_TYPE_HAYWARD_FAST}, + {MBV_PAR_FILTRATION_TYPE_SPEED_B_SLOW, MBV_PAR_FILTRATION_TYPE_SPEED_B_MEDIUM, MBV_PAR_FILTRATION_TYPE_SPEED_B_FAST} + }; + // NeoPool modbus function errors enum NeoPoolModbusCode { - NEOPOOL_OK=0, - NEOPOOL_ERROR_RW_DATA, - NEOPOOL_ERROR_TIMEOUT, - NEOPOOL_ERROR_OUT_OF_MEM, - NEOPOOL_ERROR_DEADLOCK + NEOPOOL_MODBUS_OK = 0, + NEOPOOL_MODBUS_ERROR_RW_DATA, + NEOPOOL_MODBUS_ERROR_TIMEOUT, + NEOPOOL_MODBUS_ERROR_OUT_OF_MEM, + NEOPOOL_MODBUS_ERROR_DEADLOCK }; @@ -548,6 +625,13 @@ const char kNeoPoolFiltrationMode[] PROGMEM = D_NEOPOOL_FILTRATION_INTELLIGENT "|" D_NEOPOOL_FILTRATION_BACKWASH ; +const uint8_t sNeoPoolFiltrationMode[] PROGMEM = { + MBV_PAR_FILT_MANUAL, + MBV_PAR_FILT_AUTO, + MBV_PAR_FILT_HEATING, + MBV_PAR_FILT_SMART, + MBV_PAR_FILT_INTELLIGENT, + MBV_PAR_FILT_BACKWASH }; const char kNeoPoolFiltrationSpeed[] PROGMEM = D_NEOPOOL_FILTRATION_NONE "|" @@ -567,33 +651,42 @@ const char kNeoPoolpHAlarms[] PROGMEM = #define D_STR_BIT "Bit" #endif // D_STR_BIT -#define NEOPOOL_FMT_PH "%-2_f" -#define NEOPOOL_FMT_RX "%-2_f" -#define NEOPOOL_FMT_CL "%-2_f" +#define NEOPOOL_FMT_PH "%1_f" +#define NEOPOOL_FMT_RX "%0_f" +#define NEOPOOL_FMT_CL "%1_f" #define NEOPOOL_FMT_CD "%d" #define NEOPOOL_FMT_ION "%1_f" -#define NEOPOOL_FMT_HIDRO "%1_f" +#define NEOPOOL_FMT_HIDRO "%*_f" + +#define D_NEOPOOL_UNIT_GPERH "g/h" -#define HTTP_SNS_NEOPOOL_FLAGS "%s" const char HTTP_SNS_NEOPOOL_TIME[] PROGMEM = "{s}%s " D_NEOPOOL_TIME "{m}%s" "{e}"; -const char HTTP_SNS_NEOPOOL_PH[] PROGMEM = "{s}%s " D_PH "{m}" NEOPOOL_FMT_PH " " " %s " "{e}"; -const char HTTP_SNS_NEOPOOL_REDOX[] PROGMEM = "{s}%s " D_NEOPOOL_REDOX "{m}" NEOPOOL_FMT_RX " " D_UNIT_MILLIVOLT "{e}"; +const char HTTP_SNS_NEOPOOL_HYDROLYSIS[] PROGMEM = "{s}%s " D_NEOPOOL_HYDROLYSIS "{m}" NEOPOOL_FMT_HIDRO " %s "; +const char HTTP_SNS_NEOPOOL_PH[] PROGMEM = "{s}%s " D_PH "{m}" NEOPOOL_FMT_PH; +const char HTTP_SNS_NEOPOOL_REDOX[] PROGMEM = "{s}%s " D_NEOPOOL_REDOX "{m}" NEOPOOL_FMT_RX " " D_UNIT_MILLIVOLT; const char HTTP_SNS_NEOPOOL_PPM_CHLORINE[] PROGMEM = "{s}%s " D_NEOPOOL_CHLORINE "{m}" NEOPOOL_FMT_CL " " D_UNIT_PARTS_PER_MILLION "{e}"; const char HTTP_SNS_NEOPOOL_CONDUCTIVITY[] PROGMEM = "{s}%s " D_NEOPOOL_CONDUCTIVITY "{m}" NEOPOOL_FMT_CD " " D_UNIT_PERCENT "{e}"; const char HTTP_SNS_NEOPOOL_IONIZATION[] PROGMEM = "{s}%s " D_NEOPOOL_IONIZATION "{m}" NEOPOOL_FMT_ION " " "%s%s" "{e}"; -const char HTTP_SNS_NEOPOOL_HYDROLYSIS[] PROGMEM = "{s}%s " D_NEOPOOL_HYDROLYSIS "{m}" NEOPOOL_FMT_HIDRO " " D_UNIT_PERCENT HTTP_SNS_NEOPOOL_FLAGS "{e}"; const char HTTP_SNS_NEOPOOL_FILT_MODE[] PROGMEM = "{s}%s " D_NEOPOOL_FILT_MODE "{m}%s" "{e}"; -const char HTTP_SNS_NEOPOOL_RELAY[] PROGMEM = "{s}%s " D_NEOPOOL_RELAY " %d %s" "{m}%s" "{e}"; +const char HTTP_SNS_NEOPOOL_RELAY[] PROGMEM = "{s}%s " "%s" "{m}%s" "{e}"; + +const char HTTP_SNS_NEOPOOL_STATUS[] PROGMEM = " %s "; +const char HTTP_SNS_NEOPOOL_STATUS_NORMAL[] PROGMEM = "filter:invert(0.1)"; +const char HTTP_SNS_NEOPOOL_STATUS_DISABLED[] PROGMEM = "display: none"; +const char HTTP_SNS_NEOPOOL_STATUS_INACTIVE[] PROGMEM = "filter:opacity(0.15)"; +const char HTTP_SNS_NEOPOOL_STATUS_ACTIVE[] PROGMEM = "filter:invert(1)"; + /*********************************************************************************************\ * Commands * - * NPFiltration {} - * get/set manual filtration (state=0|1) + * NPFiltration { {speed}} + * get/set manual filtration (state = 0|1, speed = 1..3) * get filtration state if is omitted, otherwise set new state + * for non-standard filtration types additional speed control is possible * * NPFiltrationMode {} - * get/set filtration mode (mode=0..4|13) + * get/set filtration mode (mode = 0..4|13) * get mode if is omitted, otherwise set new mode * * NPTime {