From f70c16c8825551f1845aed4a6f5303c3c7451e16 Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Wed, 9 Mar 2022 10:01:48 +0100 Subject: [PATCH 01/22] Update register description --- tasmota/xsns_83_neopool.ino | 194 ++++++++++++++++++------------------ 1 file changed, 97 insertions(+), 97 deletions(-) diff --git a/tasmota/xsns_83_neopool.ino b/tasmota/xsns_83_neopool.ino index 9a357e4fa..2eb0b68c1 100644 --- a/tasmota/xsns_83_neopool.ino +++ b/tasmota/xsns_83_neopool.ino @@ -180,8 +180,8 @@ enum NeoPoolRegister { 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_PH_PUMP_REP_TIME_OFF, // 0x042B mask 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 mask 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 @@ -292,82 +292,82 @@ enum NeoPoolConstAndBitMask { 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) - MBMSK_PH_STATUS_BASE_PUMP_ACTIVE = 0x1000, // Base pH Pump Relay On (Pump On) - MBMSK_PH_STATUS_CTRL_ACTIVE = 0x2000, // Active pH control module and controlling pumps - MBMSK_PH_STATUS_MEASURE_ACTIVE = 0x4000, // Active pH measurement module and making measurements. If this bit is at 1, the pH bar should be displayed. - MBMSK_PH_STATUS_MODULE_PRESENT = 0x8000, // Detected pH measurement module + MBMSK_PH_STATUS_CTRL_BY_FL = 0x0400, // 10 Control status of the pH module by flow detection (if enabled by MBF_PAR_HIDRO_ION_CAUDAL) + MBMSK_PH_STATUS_ACID_PUMP_ACTIVE = 0x0800, // 11 Acid pH pump relay on (pump on) + MBMSK_PH_STATUS_BASE_PUMP_ACTIVE = 0x1000, // 12 Base pH Pump Relay On (Pump On) + MBMSK_PH_STATUS_CTRL_ACTIVE = 0x2000, // 13 Active pH control module and controlling pumps + MBMSK_PH_STATUS_MEASURE_ACTIVE = 0x4000, // 14 Active pH measurement module and making measurements. If this bit is at 1, the pH bar should be displayed. + MBMSK_PH_STATUS_MODULE_PRESENT = 0x8000, // 15 Detected pH measurement module // MBF_RX_STATUS - MBMSK_RX_STATUS_RX_PUMP_ACTIVE = 0x1000, // Redox pump relay on (pump activated) - MBMSK_RX_STATUS_CTRL_ACTIVE = 0x2000, // Active Redox control module and controlling pump - MBMSK_RX_STATUS_MEASURE_ACTIVE = 0x4000, // Active Redox measurement module and performing measurements. If this bit is at 1, the Redox bar should be displayed on the screen. - MBMSK_RX_STATUS_MODULE_PRESENT = 0x8000, // Redox measurement module detected in the system + MBMSK_RX_STATUS_RX_PUMP_ACTIVE = 0x1000, // 12 Redox pump relay on (pump activated) + MBMSK_RX_STATUS_CTRL_ACTIVE = 0x2000, // 13 Active Redox control module and controlling pump + MBMSK_RX_STATUS_MEASURE_ACTIVE = 0x4000, // 14 Active Redox measurement module and performing measurements. If this bit is at 1, the Redox bar should be displayed on the screen. + MBMSK_RX_STATUS_MODULE_PRESENT = 0x8000, // 15 Redox measurement module detected in the system // MBF_CL_STATUS - MBMSK_CL_STATUS_CHLORINE_FLOW = 0x0008, // Chlorine Probe Flow Sensor. This sensor is built into the probe itself and serves to detect whether there is water passing through the chlorine measurement probe. In case the sensor is at 0, the chlorine measurement will not be valid. - MBMSK_CL_STATUS_CL_PUMP_ACTIVE = 0x1000, // Chlorine pump relay on (pump on) - MBMSK_CL_STATUS_CTRL_ACTIVE = 0x2000, // Active chlorine control module and controlling pump - MBMSK_CL_STATUS_MEASURE_ACTIVE = 0x4000, // Active chlorine measurement module and taking measurements. If this bit is 1, the chlorine bar should be displayed on the screen. - MBMSK_CL_STATUS_MODULE_PRESENT = 0x8000, // Chlorine measurement module detected in the system + MBMSK_CL_STATUS_CHLORINE_FLOW = 0x0008, // 3 Chlorine Probe Flow Sensor. This sensor is built into the probe itself and serves to detect whether there is water passing through the chlorine measurement probe. In case the sensor is at 0, the chlorine measurement will not be valid. + MBMSK_CL_STATUS_CL_PUMP_ACTIVE = 0x1000, // 12 Chlorine pump relay on (pump on) + MBMSK_CL_STATUS_CTRL_ACTIVE = 0x2000, // 13 Active chlorine control module and controlling pump + MBMSK_CL_STATUS_MEASURE_ACTIVE = 0x4000, // 14 Active chlorine measurement module and taking measurements. If this bit is 1, the chlorine bar should be displayed on the screen. + MBMSK_CL_STATUS_MODULE_PRESENT = 0x8000, // 15 Chlorine measurement module detected in the system // MBF_CD_STATUS - MBMSK_CD_STATUS_RX_PUMP_ACTIVE = 0x1000, // Conductivity pump relay on (pump active) - MBMSK_CD_STATUS_CTRL_ACTIVE = 0x2000, // Active conductivity control module and controlling pump - MBMSK_CD_STATUS_MEASURE_ACTIVE = 0x4000, // Active conductivity measurement module and making measurements. If this bit is 1, the conditionality bar should be displayed on the screen. - MBMSK_CD_STATUS_MODULE_PRESENT = 0x8000, // Conductivity measurement module detected in the system + MBMSK_CD_STATUS_RX_PUMP_ACTIVE = 0x1000, // 12 Conductivity pump relay on (pump active) + MBMSK_CD_STATUS_CTRL_ACTIVE = 0x2000, // 13 Active conductivity control module and controlling pump + MBMSK_CD_STATUS_MEASURE_ACTIVE = 0x4000, // 14 Active conductivity measurement module and making measurements. If this bit is 1, the conditionality bar should be displayed on the screen. + MBMSK_CD_STATUS_MODULE_PRESENT = 0x8000, // 15 Conductivity measurement module detected in the system // MBF_ION_STATUS - MBMSK_ION_STATUS_ON_TARGET = 0x0001, // On Target - the system has reached the set point. - MBMSK_ION_STATUS_LOW = 0x0002, // Low - Ionization cannot reach the set point. - MBMSK_ION_STATUS_RESERVED = 0x0004, - MBMSK_ION_STATUS_PROGTIME_EXCEEDED = 0x0008, // Pr off - The programmed ionization time has been exceeded - MBMSK_ION_STATUS_POLOFF = 0x1000, // Ion Pol off - Ionization in dead time - MBMSK_ION_STATUS_POL1 = 0x2000, // Ion Pol 1 - Ionization working in polarization 1 - MBMSK_ION_STATUS_POL2 = 0x4000, // Ion Pol 2 - Ionization working in polarization 2 + MBMSK_ION_STATUS_ON_TARGET = 0x0001, // 0 On Target - the system has reached the set point. + MBMSK_ION_STATUS_LOW = 0x0002, // 1 Low - Ionization cannot reach the set point. + MBMSK_ION_STATUS_RESERVED = 0x0004, // 2 + MBMSK_ION_STATUS_PROGTIME_EXCEEDED = 0x0008, // 3 Pr off - The programmed ionization time has been exceeded + MBMSK_ION_STATUS_POLOFF = 0x1000, // 12 Ion Pol off - Ionization in dead time + MBMSK_ION_STATUS_POL1 = 0x2000, // 13 Ion Pol 1 - Ionization working in polarization 1 + MBMSK_ION_STATUS_POL2 = 0x4000, // 14 Ion Pol 2 - Ionization working in polarization 2 // MBF_HIDRO_STATUS - MBMSK_HIDRO_STATUS_ON_TARGET = 0x0001, // On Target - the system has reached the set point. - MBMSK_HIDRO_STATUS_LOW = 0x0002, // Low - Hydrolysis cannot reach the set point. - MBMSK_HIDRO_STATUS_RESERVED = 0x0004, - MBMSK_HIDRO_STATUS_FL1 = 0x0008, // Flow - Hydrolysis cell flow indicator (FL1) - MBMSK_HIDRO_STATUS_COVER = 0x0010, // Cover - Cover input activated - MBMSK_HIDRO_STATUS_MODULE_ACTIVE = 0x0020, // Active - Active Module hydrolysis (hidroEnable) - MBMSK_HIDRO_STATUS_CTRL_ACTIVE = 0x0040, // Control - Hydrolysis module working with regulation (hydroControlEnable) - MBMSK_HIDRO_STATUS_REDOX_ENABLED = 0x0080, // Redox enable - Activation of hydrolysis by the redox module - MBMSK_HIDRO_STATUS_SHOCK_ENABLED = 0x0100, // Hydro shock enabled - Chlorine shock mode enabled - MBMSK_HIDRO_STATUS_FL2 = 0x0200, // FL2 - Chlorine probe flow indicator, if present - MBMSK_HIDRO_STATUS_ENABLED_BY_CHLORINE = 0x0400, // Cl enable - Activation of hydrolysis by the chlorine module - MBMSK_HIDRO_STATUS_POLOFF = 0x1000, // Ion Pol off - Ionization in dead time - MBMSK_HIDRO_STATUS_POL1 = 0x2000, // Ion Pol 1 - Ionization working in polarization 1 - MBMSK_HIDRO_STATUS_POL2 = 0x4000, // Ion Pol 2 - Ionization working in polarization 2 + MBMSK_HIDRO_STATUS_ON_TARGET = 0x0001, // 0 On Target - the system has reached the set point. + MBMSK_HIDRO_STATUS_LOW = 0x0002, // 1 Low - Hydrolysis cannot reach the set point. + MBMSK_HIDRO_STATUS_RESERVED = 0x0004, // 2 + MBMSK_HIDRO_STATUS_FL1 = 0x0008, // 3 Flow - Hydrolysis cell flow indicator (FL1) + MBMSK_HIDRO_STATUS_COVER = 0x0010, // 4 Cover - Cover input activated + MBMSK_HIDRO_STATUS_MODULE_ACTIVE = 0x0020, // 5 Active - Active Module hydrolysis (hidroEnable) + MBMSK_HIDRO_STATUS_CTRL_ACTIVE = 0x0040, // 6 Control - Hydrolysis module working with regulation (hydroControlEnable) + MBMSK_HIDRO_STATUS_REDOX_ENABLED = 0x0080, // 7 Redox enable - Activation of hydrolysis by the redox module + MBMSK_HIDRO_STATUS_SHOCK_ENABLED = 0x0100, // 8 Hydro shock enabled - Chlorine shock mode enabled + MBMSK_HIDRO_STATUS_FL2 = 0x0200, // 9 FL2 - Chlorine probe flow indicator, if present + MBMSK_HIDRO_STATUS_ENABLED_BY_CHLORINE = 0x0400, // 10 Cl enable - Activation of hydrolysis by the chlorine module + MBMSK_HIDRO_STATUS_POLOFF = 0x1000, // 12 Ion Pol off - Ionization in dead time + MBMSK_HIDRO_STATUS_POL1 = 0x2000, // 13 Ion Pol 1 - Ionization working in polarization 1 + MBMSK_HIDRO_STATUS_POL2 = 0x4000, // 14 Ion Pol 2 - Ionization working in polarization 2 // MBF_RELAY_STATE - MBMSK_RELAY_STATE1 = 0x0001, // Relay 1 state (1 on; 0 off) (normally assigned to ph) - MBMSK_RELAY_STATE2 = 0x0002, // Relay 2 state (1 on; 0 off) (normally assigned to filtering) - MBMSK_RELAY_STATE3 = 0x0004, // Relay 3 status (1 on; 0 off) (normally assigned to lighting) - MBMSK_RELAY_STATE4 = 0x0008, // Relay 4 status (1 on; 0 off) - MBMSK_RELAY_STATE5 = 0x0010, // Relay 5 status (1 on; 0 off) - MBMSK_RELAY_STATE6 = 0x0020, // Relay 6 status (1 on; 0 off) - MBMSK_RELAY_STATE7 = 0x0040, // Relay 7 status (1 on; 0 off) - MBMSK_RELAY_FILTSPEED_LOW = 0x0100, // Filtration low speed - MBMSK_RELAY_FILTSPEED_MID = 0x0200, // Filtration mid speed - MBMSK_RELAY_FILTSPEED_HIGH = 0x0400, // Filtration high speed + MBMSK_RELAY_STATE1 = 0x0001, // 0 Relay 1 state (1 on; 0 off) (normally assigned to ph) + MBMSK_RELAY_STATE2 = 0x0002, // 1 Relay 2 state (1 on; 0 off) (normally assigned to filtering) + MBMSK_RELAY_STATE3 = 0x0004, // 2 Relay 3 status (1 on; 0 off) (normally assigned to lighting) + MBMSK_RELAY_STATE4 = 0x0008, // 3 Relay 4 status (1 on; 0 off) + MBMSK_RELAY_STATE5 = 0x0010, // 4 Relay 5 status (1 on; 0 off) + MBMSK_RELAY_STATE6 = 0x0020, // 5 Relay 6 status (1 on; 0 off) + MBMSK_RELAY_STATE7 = 0x0040, // 6 Relay 7 status (1 on; 0 off) + MBMSK_RELAY_FILTSPEED_LOW = 0x0100, // 8 Filtration low speed + MBMSK_RELAY_FILTSPEED_MID = 0x0200, // 9 Filtration mid speed + MBMSK_RELAY_FILTSPEED_HIGH = 0x0400, // 10 Filtration high speed // MBF_NOTIFICATION - MBMSK_NOTIF_MODBUS_CHANGED = 0x0001, - MBMSK_NOTIF_GLOBAL_CHANGED = 0x0002, - MBMSK_NOTIF_FACTORY_CHANGED = 0x0004, - MBMSK_NOTIF_INSTALLER_CHANGED = 0x0008, - MBMSK_NOTIF_USER_CHANGED = 0x0010, - MBMSK_NOTIF_MISC_CHANGED = 0x0020, + MBMSK_NOTIF_MODBUS_CHANGED = 0x0001, // 0 Modbus page changed + MBMSK_NOTIF_GLOBAL_CHANGED = 0x0002, // 1 Global page changed + MBMSK_NOTIF_FACTORY_CHANGED = 0x0004, // 2 Factory page changed + MBMSK_NOTIF_INSTALLER_CHANGED = 0x0008, // 3 Installer page changed + MBMSK_NOTIF_USER_CHANGED = 0x0010, // 4 User page changed + MBMSK_NOTIF_MISC_CHANGED = 0x0020, // 5 Misc page changed // MBF_PAR_MODEL - MBMSK_MODEL_ION = 0x0001, // The equipment includes ionization control - MBMSK_MODEL_HIDRO = 0x0002, // The equipment includes hydrolysis or electrolysis - MBMSK_MODEL_UV = 0x0004, // The equipment includes disinfection control by ultraviolet lamp - MBMSK_MODEL_SALINITY = 0x0008, // The equipment includes measurement of salinity (Fanless equipment only) + MBMSK_MODEL_ION = 0x0001, // 0 The equipment includes ionization control + MBMSK_MODEL_HIDRO = 0x0002, // 1 The equipment includes hydrolysis or electrolysis + MBMSK_MODEL_UV = 0x0004, // 2 The equipment includes disinfection control by ultraviolet lamp + MBMSK_MODEL_SALINITY = 0x0008, // 3 The equipment includes measurement of salinity (Fanless equipment only) // MBF_PAR_HIDRO_FLOW_SIGNAL MBV_PAR_HIDRO_FLOW_SIGNAL_STD = 0, // Standard detection based on conduction between an auxiliary electrode and either of the two electrodes of the cell. @@ -377,13 +377,13 @@ enum NeoPoolConstAndBitMask { MBV_PAR_HIDRO_FLOW_SIGNAL_PADDLE_OR_STD = 4, // Detection based on the paddle switch, associated with the FL1 input, or the standard detector. The system will understand that there is flow when either of the two elements detects flow. Hydrolysis will stop only if both detectors detect no flow. // MBF_PAR_HIDRO_ION_CAUDAL - MBMSK_HIDRO_ION_CAUDAL_FL1_CTRL = 0x0001, // If the FL1 signal is detected to be inactive, the actuation of the different elements of the system is disabled. - MBMSK_HIDRO_ION_CAUDAL_FL2_CTRL = 0x0002, // If the FL2 signal is detected to be inactive, the actuation of the different elements of the system is disabled. - MBMSK_HIDRO_ION_CAUDAL_FULL_CL_HIDRO_CTRL=0x0004, // If there is a chlorine module installed and it is detected that its flow sensor is inactive, the action of the different elements of the system is disabled. - MBMSK_HIDRO_ION_CAUDAL_SLAVE = 0x0008, // The value of the slave input is taken and if it is inactive, the action of the different elements of the system is disabled. - MBMSK_HIDRO_ION_CAUDAL_PADDLE_SWITCH = 0x0010, - MBMSK_HIDRO_ION_CAUDAL_PADDLE_SWITCH_INV= 0x0020, - MBMSK_HIDRO_ION_CAUDAL_INVERSION = 0x0080, // This bit determines if active means open or closed for the input electrical signals, and allows to reverse the operation for example to implement a paddle switch that closes when there is no flow. + MBMSK_HIDRO_ION_CAUDAL_FL1_CTRL = 0x0001, // 0 If the FL1 signal is detected to be inactive, the actuation of the different elements of the system is disabled. + MBMSK_HIDRO_ION_CAUDAL_FL2_CTRL = 0x0002, // 1 If the FL2 signal is detected to be inactive, the actuation of the different elements of the system is disabled. + MBMSK_HIDRO_ION_CAUDAL_FULL_CL_HIDRO_CTRL=0x0004, // 2 If there is a chlorine module installed and it is detected that its flow sensor is inactive, the action of the different elements of the system is disabled. + MBMSK_HIDRO_ION_CAUDAL_SLAVE = 0x0008, // 3 The value of the slave input is taken and if it is inactive, the action of the different elements of the system is disabled. + MBMSK_HIDRO_ION_CAUDAL_PADDLE_SWITCH = 0x0010, // 4 + MBMSK_HIDRO_ION_CAUDAL_PADDLE_SWITCH_INV= 0x0020, // 5 + MBMSK_HIDRO_ION_CAUDAL_INVERSION = 0x0080, // 7 This bit determines if active means open or closed for the input electrical signals, and allows to reverse the operation for example to implement a paddle switch that closes when there is no flow. // 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. @@ -398,8 +398,8 @@ enum NeoPoolConstAndBitMask { MBV_PAR_UV_MODE1 = 1, // UV is switched on and it will turn on when filtration starts. Time counter for the UV lamp will be incremented. // MBF_PAR_UV_HIDE_WARN - MBMSK_UV_HIDE_WARN_CLEAN = 0x0001, - MBMSK_UV_HIDE_WARN_REPLACE = 0x0002, + MBMSK_UV_HIDE_WARN_CLEAN = 0x0001, // 0 + MBMSK_UV_HIDE_WARN_REPLACE = 0x0002, // 1 // MBF_PAR_PH_PUMP_REP_TIME_ON MBMSK_PH_PUMP_TIME = 0x7FFF, // Time level for the pump: The time level has a special coding format. It can cover periods of 1 to 180 seconds with 1 second granularity and from 3 to 999 minutes with 1 minute granularity. f the value is set to 30 for example, a 30 second time will be considered. If we have the value 200, we will have an on time of (200-180+3) = 23 minutes. @@ -515,38 +515,38 @@ enum NeoPoolConstAndBitMask { MBV_PAR_CTIMER_FCT_AUXREL7 = 0x4000, // Auxiliary function assigned to relay 7 // MBF_PAR_UICFG_SOUND - MBMSK_PAR_SOUND_CLICK = 0x0001, // Click sounds every time a key is pressed - MBMSK_PAR_SOUND_POPUP = 0x0002, // Sound plays each time a pop-up message appears - MBMSK_PAR_SOUND_ALERTS = 0x0004, // An alarm sounds when there is an alert on the equipment (AL3) - MBMSK_PAR_SOUND_FILTRATION = 0x0008, // Audible warning every time the filtration is started + MBMSK_PAR_SOUND_CLICK = 0x0001, // 0 Click sounds every time a key is pressed + MBMSK_PAR_SOUND_POPUP = 0x0002, // 1 Sound plays each time a pop-up message appears + MBMSK_PAR_SOUND_ALERTS = 0x0004, // 2 An alarm sounds when there is an alert on the equipment (AL3) + MBMSK_PAR_SOUND_FILTRATION = 0x0008, // 3 Audible warning every time the filtration is started // MBF_PAR_UICFG_VISUAL_OPTIONS - MBMSK_HIDE_TEMPERATURE = 0x0001, // Hide temperature measurement from main menu - MBMSK_HIDE_FILTRATION = 0x0002, // Hide filter status from main menu - MBMSK_HIDE_LIGHTING = 0x0004, // Hide lighting status from main menu - MBMSK_HIDE_AUX_RELAYS = 0x0008, // Hide auxiliary relay status from main menu. - MBMSK_VO_HIDE_EXTRA_REGS = 0x0010, // Hide the option to adjust additional registers in the installer menu - MBMSK_VO_HIDE_RELAY_CONFIG = 0x0020, // Hide the relay configuration option in the installer menu. - MBMSK_VO_SLOW_FILTER_HIDRO_LEVEL = 0x0040, // This option enables the slow hydrolysis level filtering option when the pH module is installed. This is especially important when the acid / base dosing is done very close to the hydrolysis probe. - MBMSK_VO_HIDE_SALINITY_MAIN_WINDOW = 0x0080, // Hides the salinity measurement from main screen. - MBMSK_VO_SHOW_SPECIAL_REGS = 0x0100, // Displays the special register set configuration menu in the installer menu. - MBMSK_SHOW_HID_SHUTDOWN_BY_TEMPERATURE = 0x0200, // Displays the option to turn off hydrolysis by temperature. - MBMSK_SHOW_CELL_SELECTION = 0x0400, // Enables access to the cell selection menu from the service menu option of the configuration menu. - MBMSK_SHOW_PUMP_TYPE = 0x0800, // Displays the option for selecting the type of filtration pump (normal, three speeds, etc.). - MBMSK_SHOW_QUICK_MENU = 0x1000, // Displays the quick access menu instead of the conventional menu, when the SET key is pressed from the main display screen. Filtration (normal, three speeds, etc). - MBMSK_SHOW_OXI_MAIN_DATA_SCREEN = 0x2000, // Displays main screen shown with a particular style called OXI - MBMSK_SHOW_INSTALLER_MENU = 0x4000, // Shows access to the installer menu in the main menu without the need for a password. - MBMSK_SHOW_FACTORY_MENU = 0x8000, // Shows access to the factory menu in the main menu without the need for a password. + MBMSK_HIDE_TEMPERATURE = 0x0001, // 0 Hide temperature measurement from main menu + MBMSK_HIDE_FILTRATION = 0x0002, // 1 Hide filter status from main menu + MBMSK_HIDE_LIGHTING = 0x0004, // 2 Hide lighting status from main menu + MBMSK_HIDE_AUX_RELAYS = 0x0008, // 3 Hide auxiliary relay status from main menu. + MBMSK_VO_HIDE_EXTRA_REGS = 0x0010, // 4 Hide the option to adjust additional registers in the installer menu + MBMSK_VO_HIDE_RELAY_CONFIG = 0x0020, // 5 Hide the relay configuration option in the installer menu. + MBMSK_VO_SLOW_FILTER_HIDRO_LEVEL = 0x0040, // 6 This option enables the slow hydrolysis level filtering option when the pH module is installed. This is especially important when the acid / base dosing is done very close to the hydrolysis probe. + MBMSK_VO_HIDE_SALINITY_MAIN_WINDOW = 0x0080, // 7 Hides the salinity measurement from main screen. + MBMSK_VO_SHOW_SPECIAL_REGS = 0x0100, // 8 Displays the special register set configuration menu in the installer menu. + MBMSK_SHOW_HID_SHUTDOWN_BY_TEMPERATURE = 0x0200, // 9 Displays the option to turn off hydrolysis by temperature. + MBMSK_SHOW_CELL_SELECTION = 0x0400, // 10 Enables access to the cell selection menu from the service menu option of the configuration menu. + MBMSK_SHOW_PUMP_TYPE = 0x0800, // 11 Displays the option for selecting the type of filtration pump (normal, three speeds, etc.). + MBMSK_SHOW_QUICK_MENU = 0x1000, // 12 Displays the quick access menu instead of the conventional menu, when the SET key is pressed from the main display screen. Filtration (normal, three speeds, etc). + MBMSK_SHOW_OXI_MAIN_DATA_SCREEN = 0x2000, // 13 Displays main screen shown with a particular style called OXI + MBMSK_SHOW_INSTALLER_MENU = 0x4000, // 14 Shows access to the installer menu in the main menu without the need for a password. + MBMSK_SHOW_FACTORY_MENU = 0x8000, // 15 Shows access to the factory menu in the main menu without the need for a password. // MBF_PAR_UICFG_VISUAL_OPTIONS_EXT - MBMSK_VOE_SHOW_PNEUMATIC_VALVE = 0x0001, // Shows the pneumatic valve - MBMSK_VOE_HIDE_AUX_REL_DEPENDENCY = 0x0002, // Hides the auxiliary relay dependency - MBMSK_VOE_SHOW_BESGO_NAME = 0x0004, // Show “Besgo” instead of “Pneumatic” for the pneumatic valve titles. + MBMSK_VOE_SHOW_PNEUMATIC_VALVE = 0x0001, // 0 Shows the pneumatic valve + MBMSK_VOE_HIDE_AUX_REL_DEPENDENCY = 0x0002, // 1 Hides the auxiliary relay dependency + MBMSK_VOE_SHOW_BESGO_NAME = 0x0004, // 2 Show “Besgo” instead of “Pneumatic” for the pneumatic valve titles. // MBF_PAR_UICFG_MACH_VISUAL_STYLE - MBMSK_VS_FORCE_UNITS_GRH = 0x2000, // Display the hydrolysis/electrolysis in units of grams per hour (gr/h). - MBMSK_VS_FORCE_UNITS_PERCENTAGE = 0x4000, // Display the hydrolysis/electrolysis in percentage units (%). - MBMSK_ELECTROLISIS = 0x8000, // Display the word electrolysis instead of hydrolysis in generic mode. + MBMSK_VS_FORCE_UNITS_GRH = 0x2000, // 13 Display the hydrolysis/electrolysis in units of grams per hour (gr/h). + MBMSK_VS_FORCE_UNITS_PERCENTAGE = 0x4000, // 14 Display the hydrolysis/electrolysis in percentage units (%). + MBMSK_ELECTROLISIS = 0x8000, // 15 Display the word electrolysis instead of hydrolysis in generic mode. // MBF_POWER_MODULE_REG_* MBV_POWER_MODULE_REG_INFO = 0, // undocumented - set of 26-byte power module register stores an ASCIIZ string containing the subversion and timestamp of the module, e. g. ".57\nMay 26 2020\n01:08:10\n\0" From 28d67a8325a9733dff11c8cef035dbadb45cd7f9 Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Wed, 9 Mar 2022 13:55:18 +0100 Subject: [PATCH 02/22] Fix NPBit output --- tasmota/xsns_83_neopool.ino | 44 +++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/tasmota/xsns_83_neopool.ino b/tasmota/xsns_83_neopool.ino index 2eb0b68c1..f503e7fbc 100644 --- a/tasmota/xsns_83_neopool.ino +++ b/tasmota/xsns_83_neopool.ino @@ -669,10 +669,6 @@ const char kNeoPoolpHAlarms[] PROGMEM = D_NEOPOOL_PUMP_TIME_EXCEEDED ; -#ifndef D_STR_BIT -#define D_STR_BIT "Bit" -#endif // D_STR_BIT - #define NEOPOOL_FMT_PH "%*_f" #define NEOPOOL_FMT_RX "%d" #define NEOPOOL_FMT_CL "%*_f" @@ -1382,6 +1378,7 @@ bool NeoPoolIsIonization(void) #define D_NEOPOOL_JSON_PHPUMP "Pump" #define D_NEOPOOL_JSON_FLOW1 "FL1" #define D_NEOPOOL_JSON_TANK "Tank" +#define D_NEOPOOL_JSON_BIT "Bit" void NeoPoolShow(bool json) { @@ -1784,28 +1781,41 @@ void NeoPoolShow(bool json) * Command implementation \*********************************************************************************************/ -void NeopoolReadWriteResponse(uint16_t addr, uint16_t *data, uint16_t cnt, bool fbits32) +void NeopoolReadWriteResponse(uint16_t addr, uint16_t *data, uint16_t cnt, bool fbits32, int16_t bit) { + const char *data_fmt; + uint32_t ldata; + Response_P(PSTR("{\"%s\":{\"" D_JSON_ADDRESS "\":"), XdrvMailbox.command); ResponseAppend_P(NEOPOOL_RESULT_HEX == neopool_result ? PSTR("\"0x%04X\"") : PSTR("%d"), addr); - ResponseAppend_P(PSTR(",\"" D_JSON_DATA"\":")); - const char *data_fmt; + ResponseAppend_P(PSTR(",\"" D_JSON_DATA "\":")); + + data_fmt = PSTR("%ld"); + if (NEOPOOL_RESULT_HEX == neopool_result) { + data_fmt = fbits32 ? PSTR("\"0x%08X\"") : PSTR("\"0x%04X\""); + } + ldata = (uint32_t)data[0]; if (fbits32) { - data_fmt = NEOPOOL_RESULT_HEX == neopool_result ? PSTR("\"0x%08X\"") : PSTR("%ld"); - } else { - data_fmt = NEOPOOL_RESULT_HEX == neopool_result ? PSTR("\"0x%04X\"") : PSTR("%d"); + ldata |= (uint32_t)data[1] << 16; } if ( cnt > 1 ) { char sdel[2] = {0}; ResponseAppend_P(PSTR("[")); for(uint16_t i=0; i= 0) { + ResponseAppend_P(PSTR(",\"" D_NEOPOOL_JSON_BIT "%d\":%ld"), bit, (ldata>>bit) & 1); } ResponseJsonEndEnd(); } @@ -1850,7 +1860,7 @@ void CmndNeopoolReadReg(void) return; } } - NeopoolReadWriteResponse(addr, data, cnt, fbits32); + NeopoolReadWriteResponse(addr, data, cnt, fbits32, -1); } @@ -1881,14 +1891,14 @@ void CmndNeopoolWriteReg(void) NeopoolResponseError(); return; } - NeopoolReadWriteResponse(addr, data, cnt, fbits32); + NeopoolReadWriteResponse(addr, data, cnt, fbits32, -1); } void CmndNeopoolBit(void) { uint16_t addr, data; - int8_t bit; + uint16_t bit; uint32_t value[3] = { 0 }; uint32_t params_cnt = ParseParameters(nitems(value), value); bool fbits32 = !strcasecmp_P(XdrvMailbox.command, PSTR(D_PRFX_NEOPOOL D_CMND_NP_BITL)); @@ -1896,7 +1906,7 @@ void CmndNeopoolBit(void) if (params_cnt >= 2) { addr = value[0]; - bit = (int8_t)value[1]; + bit = (uint16_t)value[1]; if (bit >= 0 && bit < 16< Date: Wed, 9 Mar 2022 15:32:34 +0100 Subject: [PATCH 03/22] Add register description --- tasmota/xsns_83_neopool.ino | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/tasmota/xsns_83_neopool.ino b/tasmota/xsns_83_neopool.ino index f503e7fbc..4fd913f64 100644 --- a/tasmota/xsns_83_neopool.ino +++ b/tasmota/xsns_83_neopool.ino @@ -113,8 +113,16 @@ enum NeoPoolRegister { // GLOBAL page (0x02xx) MBF_CELL_RUNTIME_LOW = 0x0206, // 0x0206* undocumented - cell runtime (32 bit) - low word - MBF_CELL_RUNTIME_HIGH = 0x0207, // 0x0207* undocumented - cell runtime (32 bit) - high word + MBF_CELL_RUNTIME_HIGH, // 0x0207* undocumented - cell runtime (32 bit) - high word + MBF_CELL_RUNTIME_PART_LOW, // 0x0208 undocumented - cell part runtime (32 bit) - low word + MBF_CELL_RUNTIME_PART_HIGH, // 0x0209 undocumented - cell part runtime (32 bit) - high word MBF_BOOST_CTRL = 0x020C, // 0x020C undocumented - 0x0000 = Boost Off, 0x05A0 = Boost with redox ctrl, 0x85A0 = Boost without redox ctrl + MBF_CELL_RUNTIME_POLA_LOW = 0x0214, // 0x0214 undocumented - cell runtime polarity A (32 bit) - low word + MBF_CELL_RUNTIME_POLA_HIGH, // 0x0215 undocumented - cell runtime polarity A (32 bit) - high word + MBF_CELL_RUNTIME_POLB_LOW, // 0x0216 undocumented - cell runtime polarity B (32 bit) - low word + MBF_CELL_RUNTIME_POLB_HIGH, // 0x0217 undocumented - cell runtime polarity B (32 bit) - high word + MBF_CELL_RUNTIME_POL_CHANGES_LOW, // 0x0218 undocumented - cell runtime polarity changes (32 bit) - low word + MBF_CELL_RUNTIME_POL_CHANGES_HIGH, // 0x0219 undocumented - cell runtime polarity changes (32 bit) - high word MBF_HIDRO_MODULE_VERSION = 0x0280, // 0x0280 undocumented - Hydrolysis module version MBF_HIDRO_MODULE_CONNECTIVITY = 0x0281, // 0x0281 undocumented - Hydrolysis module connection quality (in myriad: 0..10000) MBF_SET_MANUAL_CTRL = 0x0289, // 0x0289 undocumented - write a 1 before manual control MBF_RELAY_STATE, after done write 0 and do MBF_EXEC @@ -542,6 +550,16 @@ enum NeoPoolConstAndBitMask { MBMSK_VOE_SHOW_PNEUMATIC_VALVE = 0x0001, // 0 Shows the pneumatic valve MBMSK_VOE_HIDE_AUX_REL_DEPENDENCY = 0x0002, // 1 Hides the auxiliary relay dependency MBMSK_VOE_SHOW_BESGO_NAME = 0x0004, // 2 Show “Besgo” instead of “Pneumatic” for the pneumatic valve titles. + MBMSK_VOE_HIDE_SMART_INTEL_MODES = 0x0008, // 3 Hide smart intelligent modes + MBMSK_VOE_ENABLE_ADVANCED_CALIBRATION = 0x0010, // 4 Enable advanced calibration + MBMSK_VOE_SHOW_DOSING_PUMP_SCALING = 0x0020, // 5 Show dosing pump scaling + MBMSK_VOE_HIDE_MASTER_SLAVE_SEL = 0x0030, // 6 Hide master slave selection + MBMSK_VOE_ENABLE_ADVANCED_MASTER_SLAVE = 0x0080, // 7 Enable advanced Master Slave + MBMSK_VOE_SHOW_OVERTEMP_PROTECTION = 0x0100, // 8 Show overtemperature protection + MBMSK_VOE_SHOW_HYDRO_MODE_SEL = 0x0200, // 9 Show hidrolysis mode selection + MBMSK_VOE_SHOW_ADVANCED_EXT_CONTROL = 0x0400, // 10 Show advanced external controls + MBMSK_VOE_HIDE_BASIC_EXT_CONTROL = 0x0800, // 11 Hide basic external controls + MBMSK_VOE_HIDE_DIAGNOSTICS = 0x1000, // 12 Hide diagnostics // MBF_PAR_UICFG_MACH_VISUAL_STYLE MBMSK_VS_FORCE_UNITS_GRH = 0x2000, // 13 Display the hydrolysis/electrolysis in units of grams per hour (gr/h). From 5693d64de238066d9cb12f508f7f51b72a590547 Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Wed, 9 Mar 2022 16:23:00 +0100 Subject: [PATCH 04/22] Add JSON cell runtime complete info --- tasmota/xsns_83_neopool.ino | 58 +++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/tasmota/xsns_83_neopool.ino b/tasmota/xsns_83_neopool.ino index 4fd913f64..052c669f3 100644 --- a/tasmota/xsns_83_neopool.ino +++ b/tasmota/xsns_83_neopool.ino @@ -114,15 +114,15 @@ enum NeoPoolRegister { // GLOBAL page (0x02xx) MBF_CELL_RUNTIME_LOW = 0x0206, // 0x0206* undocumented - cell runtime (32 bit) - low word MBF_CELL_RUNTIME_HIGH, // 0x0207* undocumented - cell runtime (32 bit) - high word - MBF_CELL_RUNTIME_PART_LOW, // 0x0208 undocumented - cell part runtime (32 bit) - low word - MBF_CELL_RUNTIME_PART_HIGH, // 0x0209 undocumented - cell part runtime (32 bit) - high word - MBF_BOOST_CTRL = 0x020C, // 0x020C undocumented - 0x0000 = Boost Off, 0x05A0 = Boost with redox ctrl, 0x85A0 = Boost without redox ctrl - MBF_CELL_RUNTIME_POLA_LOW = 0x0214, // 0x0214 undocumented - cell runtime polarity A (32 bit) - low word - MBF_CELL_RUNTIME_POLA_HIGH, // 0x0215 undocumented - cell runtime polarity A (32 bit) - high word - MBF_CELL_RUNTIME_POLB_LOW, // 0x0216 undocumented - cell runtime polarity B (32 bit) - low word - MBF_CELL_RUNTIME_POLB_HIGH, // 0x0217 undocumented - cell runtime polarity B (32 bit) - high word - MBF_CELL_RUNTIME_POL_CHANGES_LOW, // 0x0218 undocumented - cell runtime polarity changes (32 bit) - low word - MBF_CELL_RUNTIME_POL_CHANGES_HIGH, // 0x0219 undocumented - cell runtime polarity changes (32 bit) - high word + MBF_CELL_RUNTIME_PART_LOW, // 0x0208* undocumented - cell part runtime (32 bit) - low word + MBF_CELL_RUNTIME_PART_HIGH, // 0x0209* undocumented - cell part runtime (32 bit) - high word + MBF_BOOST_CTRL = 0x020C, // 0x020C* undocumented - 0x0000 = Boost Off, 0x05A0 = Boost with redox ctrl, 0x85A0 = Boost without redox ctrl + MBF_CELL_RUNTIME_POLA_LOW = 0x0214, // 0x0214* undocumented - cell runtime polarity A (32 bit) - low word + MBF_CELL_RUNTIME_POLA_HIGH, // 0x0215* undocumented - cell runtime polarity A (32 bit) - high word + MBF_CELL_RUNTIME_POLB_LOW, // 0x0216* undocumented - cell runtime polarity B (32 bit) - low word + MBF_CELL_RUNTIME_POLB_HIGH, // 0x0217* undocumented - cell runtime polarity B (32 bit) - high word + MBF_CELL_RUNTIME_POL_CHANGES_LOW, // 0x0218* undocumented - cell runtime polarity changes (32 bit) - low word + MBF_CELL_RUNTIME_POL_CHANGES_HIGH, // 0x0219* undocumented - cell runtime polarity changes (32 bit) - high word MBF_HIDRO_MODULE_VERSION = 0x0280, // 0x0280 undocumented - Hydrolysis module version MBF_HIDRO_MODULE_CONNECTIVITY = 0x0281, // 0x0281 undocumented - Hydrolysis module connection quality (in myriad: 0..10000) MBF_SET_MANUAL_CTRL = 0x0289, // 0x0289 undocumented - write a 1 before manual control MBF_RELAY_STATE, after done write 0 and do MBF_EXEC @@ -609,13 +609,13 @@ struct { uint16_t *data; } NeoPoolReg[] = { // 7 entries each polled every 250ms needs 1750 ms for complete register set - {MBF_ION_CURRENT, MBF_NOTIFICATION - MBF_ION_CURRENT + 1, nullptr}, - {MBF_CELL_RUNTIME_LOW, MBF_CELL_RUNTIME_HIGH - MBF_CELL_RUNTIME_LOW + 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_ION, MBF_PAR_FILTRATION_CONF - MBF_PAR_ION + 1, nullptr}, - {MBF_PAR_UICFG_MACHINE, MBF_PAR_UICFG_MACH_VISUAL_STYLE - MBF_PAR_UICFG_MACHINE + 1, nullptr}, - {MBF_VOLT_24_36, MBF_VOLT_12 - MBF_VOLT_24_36 + 1, nullptr} + {MBF_ION_CURRENT, MBF_NOTIFICATION - MBF_ION_CURRENT + 1, nullptr}, + {MBF_CELL_RUNTIME_LOW, MBF_CELL_RUNTIME_POL_CHANGES_HIGH - MBF_CELL_RUNTIME_LOW + 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_ION, MBF_PAR_FILTRATION_CONF - MBF_PAR_ION + 1, nullptr}, + {MBF_PAR_UICFG_MACHINE, MBF_PAR_UICFG_MACH_VISUAL_STYLE - MBF_PAR_UICFG_MACHINE + 1, nullptr}, + {MBF_VOLT_24_36, MBF_VOLT_12 - MBF_VOLT_24_36 + 1, nullptr} }; // NeoPool modbus function errors @@ -1314,6 +1314,12 @@ uint16_t NeoPoolGetData(uint16_t addr) } +uint32_t NeoPoolGetDataLong(uint16_t addr) +{ + return ((uint32_t)NeoPoolGetData(addr) + ((uint32_t)NeoPoolGetData(addr+1) << 16)); +} + + uint32_t NeoPoolGetSpeedIndex(uint16_t speedvalue) { if (speedvalue >= 4) { @@ -1375,6 +1381,11 @@ bool NeoPoolIsIonization(void) #define D_NEOPOOL_JSON_FILTRATION_SPEED "Speed" #define D_NEOPOOL_JSON_HYDROLYSIS "Hydrolysis" #define D_NEOPOOL_JSON_CELL_RUNTIME "Runtime" +#define D_NEOPOOL_JSON_CELL_RUNTIME_TOTAL "Total" +#define D_NEOPOOL_JSON_CELL_RUNTIME_PART "Part" +#define D_NEOPOOL_JSON_CELL_RUNTIME_POLA "PolA" +#define D_NEOPOOL_JSON_CELL_RUNTIME_POLB "PolB" +#define D_NEOPOOL_JSON_CELL_RUNTIME_CHANGES "Changes" #define D_NEOPOOL_JSON_IONIZATION "Ionization" #define D_NEOPOOL_JSON_LIGHT "Light" #define D_NEOPOOL_JSON_LIGHT_MODE "Mode" @@ -1419,7 +1430,7 @@ void NeoPoolShow(bool json) #ifndef NEOPOOL_OPTIMIZE_READINGS // Time ResponseAppend_P(PSTR("\"" D_JSON_TIME "\":\"%s\""), - GetDT((uint32_t)NeoPoolGetData(MBF_PAR_TIME_LOW) + ((uint32_t)NeoPoolGetData(MBF_PAR_TIME_HIGH) << 16)).c_str()); + GetDT(NeoPoolGetDataLong(MBF_PAR_TIME_LOW)).c_str()); // Type ResponseAppend_P(PSTR(",")); @@ -1513,8 +1524,13 @@ void NeoPoolShow(bool json) ResponseAppend_P(PSTR(",\"" D_NEOPOOL_JSON_UNIT "\":\"%s\""), sunit); #ifndef NEOPOOL_OPTIMIZE_READINGS - ResponseAppend_P(PSTR(",\"" D_NEOPOOL_JSON_CELL_RUNTIME "\":\"%s\""), - GetDuration((uint32_t)NeoPoolGetData(MBF_CELL_RUNTIME_LOW) + ((uint32_t)NeoPoolGetData(MBF_CELL_RUNTIME_HIGH) << 16)).c_str()); + ResponseAppend_P(PSTR(",\"" D_NEOPOOL_JSON_CELL_RUNTIME "\":{")); + ResponseAppend_P(PSTR( "\"" D_NEOPOOL_JSON_CELL_RUNTIME_TOTAL "\":\"%s\""), GetDuration(NeoPoolGetDataLong(MBF_CELL_RUNTIME_LOW)).c_str()); + ResponseAppend_P(PSTR(",\"" D_NEOPOOL_JSON_CELL_RUNTIME_PART "\":\"%s\""), GetDuration(NeoPoolGetDataLong(MBF_CELL_RUNTIME_PART_LOW)).c_str()); + ResponseAppend_P(PSTR(",\"" D_NEOPOOL_JSON_CELL_RUNTIME_POLA "\":\"%s\""), GetDuration(NeoPoolGetDataLong(MBF_CELL_RUNTIME_POLA_LOW)).c_str()); + ResponseAppend_P(PSTR(",\"" D_NEOPOOL_JSON_CELL_RUNTIME_POLB "\":\"%s\""), GetDuration(NeoPoolGetDataLong(MBF_CELL_RUNTIME_POLB_LOW)).c_str()); + ResponseAppend_P(PSTR(",\"" D_NEOPOOL_JSON_CELL_RUNTIME_CHANGES "\":%ld"), NeoPoolGetDataLong(MBF_CELL_RUNTIME_POL_CHANGES_LOW)); + ResponseJsonEnd(); #endif // NEOPOOL_OPTIMIZE_READINGS // S1 @@ -1595,7 +1611,7 @@ void NeoPoolShow(bool json) // Time char dt[20]; TIME_T tmpTime; - BreakTime((uint32_t)NeoPoolGetData(MBF_PAR_TIME_LOW) + ((uint32_t)NeoPoolGetData(MBF_PAR_TIME_HIGH) << 16), tmpTime); + BreakTime(NeoPoolGetDataLong(MBF_PAR_TIME_LOW), tmpTime); snprintf_P(dt, sizeof(dt), PSTR("%04d-%02d-%02d %02d:%02d"), tmpTime.year +1970, tmpTime.month, tmpTime.day_of_month, tmpTime.hour, tmpTime.minute); WSContentSend_PD(HTTP_SNS_NEOPOOL_TIME, neopool_type, dt); @@ -1785,7 +1801,7 @@ void NeoPoolShow(bool json) { // Cell runtime WSContentSend_PD(HTTP_SNS_NEOPOOL_CELL_RUNTIME, neopool_type, - GetDuration((uint32_t)NeoPoolGetData(MBF_CELL_RUNTIME_LOW) + ((uint32_t)NeoPoolGetData(MBF_CELL_RUNTIME_HIGH) << 16)).c_str()); + GetDuration(NeoPoolGetDataLong(MBF_CELL_RUNTIME_LOW)).c_str()); } #endif // NEOPOOL_OPTIMIZE_READINGS From f9d1105fc6f42b4a1e191d598cc4c4eaae992b57 Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Wed, 9 Mar 2022 17:53:32 +0100 Subject: [PATCH 05/22] Change JSON hydro level --- tasmota/xsns_83_neopool.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tasmota/xsns_83_neopool.ino b/tasmota/xsns_83_neopool.ino index 052c669f3..7e6609f18 100644 --- a/tasmota/xsns_83_neopool.ino +++ b/tasmota/xsns_83_neopool.ino @@ -1380,6 +1380,7 @@ bool NeoPoolIsIonization(void) #define D_NEOPOOL_JSON_FILTRATION_MODE "Mode" #define D_NEOPOOL_JSON_FILTRATION_SPEED "Speed" #define D_NEOPOOL_JSON_HYDROLYSIS "Hydrolysis" +#define D_NEOPOOL_JSON_HYDROLYSIS_LEVEL "Level" #define D_NEOPOOL_JSON_CELL_RUNTIME "Runtime" #define D_NEOPOOL_JSON_CELL_RUNTIME_TOTAL "Total" #define D_NEOPOOL_JSON_CELL_RUNTIME_PART "Part" @@ -1520,7 +1521,7 @@ void NeoPoolShow(bool json) dec = 0; sunit = PSTR("%"); } - ResponseAppend_P(PSTR(",\"" D_NEOPOOL_JSON_HYDROLYSIS "\":{\"" D_JSON_DATA "\":" NEOPOOL_FMT_HIDRO), dec, &fvalue); + ResponseAppend_P(PSTR(",\"" D_NEOPOOL_JSON_HYDROLYSIS "\":{\"" D_NEOPOOL_JSON_HYDROLYSIS_LEVEL "\":" NEOPOOL_FMT_HIDRO), dec, &fvalue); ResponseAppend_P(PSTR(",\"" D_NEOPOOL_JSON_UNIT "\":\"%s\""), sunit); #ifndef NEOPOOL_OPTIMIZE_READINGS From da40f5d72acdcfd58d7a6541095c9f758478ebdf Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Thu, 10 Mar 2022 08:45:29 +0100 Subject: [PATCH 06/22] Change JSON voltage --- tasmota/xsns_83_neopool.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasmota/xsns_83_neopool.ino b/tasmota/xsns_83_neopool.ino index 7e6609f18..4698aee97 100644 --- a/tasmota/xsns_83_neopool.ino +++ b/tasmota/xsns_83_neopool.ino @@ -1449,7 +1449,7 @@ void NeoPoolShow(bool json) { float f12volt = (float)NeoPoolGetData(MBF_VOLT_12)/1000; float f24_36volt = (float)NeoPoolGetData(MBF_VOLT_24_36)/1000; - ResponseAppend_P(PSTR(",\"" D_VOLTAGE "\":{\"12\":%*_f,\"24\":%*_f}"), + ResponseAppend_P(PSTR(",\"" D_JSON_POWERUSAGE "\":{\"12\":%*_f,\"24-30\":%*_f}"), Settings->flag2.voltage_resolution, &f12volt, Settings->flag2.voltage_resolution, &f24_36volt); } From efd0972527b4541b48596d1a8747e818f62b7fed Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Thu, 10 Mar 2022 08:58:56 +0100 Subject: [PATCH 07/22] Remove NeoPool ambiguous color in device names --- tasmota/language/af_AF.h | 14 +++++++------- tasmota/language/bg_BG.h | 14 +++++++------- tasmota/language/cs_CZ.h | 14 +++++++------- tasmota/language/de_DE.h | 14 +++++++------- tasmota/language/el_GR.h | 14 +++++++------- tasmota/language/en_GB.h | 14 +++++++------- tasmota/language/es_ES.h | 14 +++++++------- tasmota/language/fr_FR.h | 14 +++++++------- tasmota/language/fy_NL.h | 14 +++++++------- tasmota/language/he_HE.h | 14 +++++++------- tasmota/language/hu_HU.h | 14 +++++++------- tasmota/language/it_IT.h | 14 +++++++------- tasmota/language/ko_KO.h | 14 +++++++------- tasmota/language/nl_NL.h | 14 +++++++------- tasmota/language/pl_PL.h | 14 +++++++------- tasmota/language/pt_BR.h | 14 +++++++------- tasmota/language/pt_PT.h | 14 +++++++------- tasmota/language/ro_RO.h | 14 +++++++------- tasmota/language/ru_RU.h | 14 +++++++------- tasmota/language/sk_SK.h | 14 +++++++------- tasmota/language/sv_SE.h | 14 +++++++------- tasmota/language/tr_TR.h | 14 +++++++------- tasmota/language/uk_UA.h | 14 +++++++------- tasmota/language/vi_VN.h | 14 +++++++------- tasmota/language/zh_CN.h | 14 +++++++------- tasmota/language/zh_TW.h | 14 +++++++------- 26 files changed, 182 insertions(+), 182 deletions(-) diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h index 805e4cd17..c91946742 100644 --- a/tasmota/language/af_AF.h +++ b/tasmota/language/af_AF.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (geel)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blou)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (groen)" -#define D_NEOPOOL_MACH_BIONET "Bionet (ligblou)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (rooi)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (sering)" -#define D_NEOPOOL_MACH_STATION "Station (oranje)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index 979c82f53..4682cf4c9 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index 57d44d27f..9945e77c6 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index 765f2d93b..2cb51228c 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (Gelb)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (Blau)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (Grün)" -#define D_NEOPOOL_MACH_BIONET "Bionet (Hellblau)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (Rot)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (Lila)" -#define D_NEOPOOL_MACH_STATION "Station (Orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index 9e8dfc2a6..50d15fded 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index 8b0cc6ffa..4df349671 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index 1ef43e2d8..5dea3929e 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (amarillo)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (azul)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (verde)" -#define D_NEOPOOL_MACH_BIONET "Bionet (celeste)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (rojo)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lila)" -#define D_NEOPOOL_MACH_STATION "Station (naranga)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Genérico" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index b405d1fbc..d420371fb 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h index b9df8e019..6d4a2de36 100644 --- a/tasmota/language/fy_NL.h +++ b/tasmota/language/fy_NL.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index 947edd76a..937d50c29 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index b465f0e7d..fa5e9ae01 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index ceb1f3d7f..78aa21511 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (giallo)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blu)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (verde)" -#define D_NEOPOOL_MACH_BIONET "Bionet (azzurro)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (rosso)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (arancio)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generico" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index b97a9fa59..27b8d08e5 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index 32f6b81a4..6333ffbcc 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (geel)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blauw)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (groen)" -#define D_NEOPOOL_MACH_BIONET "Bionet (licht blauw)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (rood)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (paars)" -#define D_NEOPOOL_MACH_STATION "Station (oranje)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index ef579e94f..0d797b26d 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index 207412ee2..2723324e3 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (amarelo)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (azul)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (verde)" -#define D_NEOPOOL_MACH_BIONET "Bionet (azul claro)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (vermelho)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilás)" -#define D_NEOPOOL_MACH_STATION "Station (laranja)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Genérico" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index 1376284ed..4dc39756e 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (amarelo)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (azul)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (verde)" -#define D_NEOPOOL_MACH_BIONET "Bionet (azul claro)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (vermelho)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilás)" -#define D_NEOPOOL_MACH_STATION "Station (laranja)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Genérico" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index 8003940f0..1a19f6bca 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index 503aeb0df..71f4fedba 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index 79a9eecc9..ea34fbbf2 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index ab4fea710..e7e1e0c49 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index d822fe0de..cae0f23d7 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index c15933943..ed27880a2 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index 7a294db1c..c70a3185c 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index ae140bc95..4d83a0804 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index a7f1ec66f..cb6816e58 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -1047,13 +1047,13 @@ // xsns_83_neopool.ino #define D_NEOPOOL_MACH_NONE "NeoPool" // Machine names -#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife (yellow)" -#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic (blue)" -#define D_NEOPOOL_MACH_OXILIFE "Oxilife (green)" -#define D_NEOPOOL_MACH_BIONET "Bionet (light blue)" -#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser (red)" -#define D_NEOPOOL_MACH_UVSCENIC "UVScenic (lilac)" -#define D_NEOPOOL_MACH_STATION "Station (orange)" +#define D_NEOPOOL_MACH_HIDROLIFE "Hidrolife" +#define D_NEOPOOL_MACH_AQUASCENIC "Aquascenic" +#define D_NEOPOOL_MACH_OXILIFE "Oxilife" +#define D_NEOPOOL_MACH_BIONET "Bionet" +#define D_NEOPOOL_MACH_HIDRONISER "Hidroniser" +#define D_NEOPOOL_MACH_UVSCENIC "UVScenic" +#define D_NEOPOOL_MACH_STATION "Station" #define D_NEOPOOL_MACH_BRILIX "Brilix" #define D_NEOPOOL_MACH_GENERIC "Generic" #define D_NEOPOOL_MACH_BAYROL "Bayrol" From 0a4c4da730bdbf16951af30b498a94a6fa37e638 Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Thu, 10 Mar 2022 12:16:37 +0100 Subject: [PATCH 08/22] Rename GUI filtration mode --- tasmota/language/cs_CZ.h | 2 +- tasmota/language/de_DE.h | 2 +- tasmota/language/el_GR.h | 2 +- tasmota/language/en_GB.h | 2 +- tasmota/language/es_ES.h | 2 +- tasmota/language/fr_FR.h | 2 +- tasmota/language/fy_NL.h | 2 +- tasmota/language/he_HE.h | 2 +- tasmota/language/hu_HU.h | 2 +- tasmota/language/it_IT.h | 2 +- tasmota/language/ko_KO.h | 2 +- tasmota/language/nl_NL.h | 2 +- tasmota/language/pl_PL.h | 2 +- tasmota/language/pt_BR.h | 2 +- tasmota/language/pt_PT.h | 2 +- tasmota/language/ro_RO.h | 2 +- tasmota/language/ru_RU.h | 2 +- tasmota/language/sk_SK.h | 2 +- tasmota/language/sv_SE.h | 2 +- tasmota/language/tr_TR.h | 2 +- tasmota/language/uk_UA.h | 2 +- tasmota/language/vi_VN.h | 2 +- tasmota/language/zh_CN.h | 2 +- tasmota/language/zh_TW.h | 2 +- 24 files changed, 24 insertions(+), 24 deletions(-) diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index 9945e77c6..8883ee9ab 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chlorine pump" #define D_NEOPOOL_RELAY_CD "Brine pump" #define D_NEOPOOL_TIME "Time" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Cell runtime" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index 2cb51228c..2662df419 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chlorpumpe" #define D_NEOPOOL_RELAY_CD "Salzwasserpumpe" #define D_NEOPOOL_TIME "Zeit" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Laufzeit Zelle" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrAus" diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index 50d15fded..9bece2add 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chlorine pump" #define D_NEOPOOL_RELAY_CD "Brine pump" #define D_NEOPOOL_TIME "Time" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Cell runtime" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index 4df349671..388c0ab52 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chlorine pump" #define D_NEOPOOL_RELAY_CD "Brine pump" #define D_NEOPOOL_TIME "Time" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Cell runtime" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index 5dea3929e..32634dc83 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Bomba de Cloro" #define D_NEOPOOL_RELAY_CD "Bomba de Salmuera" #define D_NEOPOOL_TIME "Tiempo" -#define D_NEOPOOL_FILT_MODE "Filtrado" +#define D_NEOPOOL_FILT_MODE "Modo de filtrado" #define D_NEOPOOL_CELL_RUNTIME "Tiempo de actividad" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index d420371fb..0fb67543f 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Pompe Chlore" #define D_NEOPOOL_RELAY_CD "Pompe Brome" #define D_NEOPOOL_TIME "Durée" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Cell runtime" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h index 6d4a2de36..2ff6e3943 100644 --- a/tasmota/language/fy_NL.h +++ b/tasmota/language/fy_NL.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chlorine pump" #define D_NEOPOOL_RELAY_CD "Brine pump" #define D_NEOPOOL_TIME "Time" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Cell runtime" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index 937d50c29..aba134263 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chlorine pump" #define D_NEOPOOL_RELAY_CD "Brine pump" #define D_NEOPOOL_TIME "Time" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Cell runtime" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index fa5e9ae01..9aafe19a8 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chlorine pump" #define D_NEOPOOL_RELAY_CD "Brine pump" #define D_NEOPOOL_TIME "Idő" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Cell runtime" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index 78aa21511..0abb6aeb8 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Pompa cloro" #define D_NEOPOOL_RELAY_CD "Pompa salamoia" #define D_NEOPOOL_TIME "Orario" -#define D_NEOPOOL_FILT_MODE "Filtrazione" +#define D_NEOPOOL_FILT_MODE "Modalità di filtrazione" #define D_NEOPOOL_CELL_RUNTIME "Cella attiva" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index 27b8d08e5..a17d10c1d 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chlorine pump" #define D_NEOPOOL_RELAY_CD "Brine pump" #define D_NEOPOOL_TIME "Time" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Cell runtime" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index 6333ffbcc..d851cd1ca 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chloorpomp" #define D_NEOPOOL_RELAY_CD "Pekelpomp" #define D_NEOPOOL_TIME "Tijd" -#define D_NEOPOOL_FILT_MODE "Filtratie" +#define D_NEOPOOL_FILT_MODE "Filtratie modus" #define D_NEOPOOL_CELL_RUNTIME "Cel looptijd" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrUit" diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index 0d797b26d..4e4767487 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chlorine pump" #define D_NEOPOOL_RELAY_CD "Brine pump" #define D_NEOPOOL_TIME "Time" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Cell runtime" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index 2723324e3..b528f1558 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Bomba de cloro" #define D_NEOPOOL_RELAY_CD "Bomba de salmora" #define D_NEOPOOL_TIME "Tempo" -#define D_NEOPOOL_FILT_MODE "Filtragem" +#define D_NEOPOOL_FILT_MODE "Modo de filtragem" #define D_NEOPOOL_CELL_RUNTIME "Tempo de atividade" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index 4dc39756e..15338c72e 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Bomba de cloro" #define D_NEOPOOL_RELAY_CD "Bomba de salmora" #define D_NEOPOOL_TIME "Tempo" -#define D_NEOPOOL_FILT_MODE "Filtragem" +#define D_NEOPOOL_FILT_MODE "Modo de filtragem" #define D_NEOPOOL_CELL_RUNTIME "Tempo de atividade" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index 1a19f6bca..1eaa121e9 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chlorine pump" #define D_NEOPOOL_RELAY_CD "Brine pump" #define D_NEOPOOL_TIME "Time" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Cell runtime" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index 71f4fedba..c95980d39 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chlorine pump" #define D_NEOPOOL_RELAY_CD "Brine pump" #define D_NEOPOOL_TIME "Time" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Cell runtime" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index ea34fbbf2..6a2f61692 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chlorine pump" #define D_NEOPOOL_RELAY_CD "Brine pump" #define D_NEOPOOL_TIME "Time" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Cell runtime" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index e7e1e0c49..2191b6f0f 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chlorine pump" #define D_NEOPOOL_RELAY_CD "Brine pump" #define D_NEOPOOL_TIME "Time" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Cell runtime" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index cae0f23d7..6acb99109 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chlorine pump" #define D_NEOPOOL_RELAY_CD "Brine pump" #define D_NEOPOOL_TIME "Time" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Cell runtime" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index ed27880a2..791a73ac4 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chlorine pump" #define D_NEOPOOL_RELAY_CD "Brine pump" #define D_NEOPOOL_TIME "Time" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Cell runtime" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index c70a3185c..e9f1791be 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chlorine pump" #define D_NEOPOOL_RELAY_CD "Brine pump" #define D_NEOPOOL_TIME "Time" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Cell runtime" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index 4d83a0804..8a09fb79c 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chlorine pump" #define D_NEOPOOL_RELAY_CD "Brine pump" #define D_NEOPOOL_TIME "Time" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Cell runtime" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index cb6816e58..7233a2399 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -1083,7 +1083,7 @@ #define D_NEOPOOL_RELAY_CL "Chlorine pump" #define D_NEOPOOL_RELAY_CD "Brine pump" #define D_NEOPOOL_TIME "Time" -#define D_NEOPOOL_FILT_MODE "Filtration" +#define D_NEOPOOL_FILT_MODE "Filtration mode" #define D_NEOPOOL_CELL_RUNTIME "Cell runtime" #define D_NEOPOOL_POLARIZATION "Pol" // Sensor status #define D_NEOPOOL_PR_OFF "PrOff" From 2e191ef69884287641e27eba20837a64fc5cd9fe Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Thu, 10 Mar 2022 12:24:19 +0100 Subject: [PATCH 09/22] Add additonal power values --- tasmota/xsns_83_neopool.ino | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/tasmota/xsns_83_neopool.ino b/tasmota/xsns_83_neopool.ino index 4698aee97..c903059ca 100644 --- a/tasmota/xsns_83_neopool.ino +++ b/tasmota/xsns_83_neopool.ino @@ -91,6 +91,8 @@ enum NeoPoolRegister { MBF_POWER_MODULE_DATA = 0x000D, // 0x000D undocumented - power module data as requested in MBF_POWER_MODULE_REGISTER MBF_VOLT_24_36 = 0x0022, // 0x0022 undocumented - Current 24-36V line in mV MBF_VOLT_12 = 0x0023, // 0x0023 undocumented - Current 12V line in mV + MBF_VOLT_5 = 0x006A, // 0x006A undocumented - 5V line in mV / 0,62069 + MBF_AMP_4_20_MICRO = 0x0072, // 0x0072 undocumented - 2-40mA line in µA * 10 (1=0,01mA) // MEASURE page (0x01xx) MBF_ION_CURRENT = 0x0100, // 0x0100* Current measured in the ionization system @@ -608,14 +610,15 @@ struct { const uint16_t cnt; uint16_t *data; } NeoPoolReg[] = { - // 7 entries each polled every 250ms needs 1750 ms for complete register set + // 8 entries each polled needs 2s for complete register set {MBF_ION_CURRENT, MBF_NOTIFICATION - MBF_ION_CURRENT + 1, nullptr}, {MBF_CELL_RUNTIME_LOW, MBF_CELL_RUNTIME_POL_CHANGES_HIGH - MBF_CELL_RUNTIME_LOW + 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_ION, MBF_PAR_FILTRATION_CONF - MBF_PAR_ION + 1, nullptr}, {MBF_PAR_UICFG_MACHINE, MBF_PAR_UICFG_MACH_VISUAL_STYLE - MBF_PAR_UICFG_MACHINE + 1, nullptr}, - {MBF_VOLT_24_36, MBF_VOLT_12 - MBF_VOLT_24_36 + 1, nullptr} + {MBF_VOLT_24_36, MBF_VOLT_12 - MBF_VOLT_24_36 + 1, nullptr}, + {MBF_VOLT_5, MBF_AMP_4_20_MICRO - MBF_VOLT_5 + 1, nullptr} }; // NeoPool modbus function errors @@ -697,7 +700,7 @@ const char kNeoPoolpHAlarms[] PROGMEM = #define D_NEOPOOL_UNIT_GPERH "g/h" const char HTTP_SNS_NEOPOOL_TIME[] PROGMEM = "{s}%s " D_NEOPOOL_TIME "{m}%s" "{e}"; -const char HTTP_SNS_NEOPOOL_VOLTAGE[] PROGMEM = "{s}%s " D_VOLTAGE "{m}%*_f / %*_f " D_UNIT_VOLT "{e}"; +const char HTTP_SNS_NEOPOOL_VOLTAGE[] PROGMEM = "{s}%s " D_VOLTAGE "{m}%*_f / %*_f / %*_f " D_UNIT_VOLT "{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; @@ -1447,11 +1450,15 @@ void NeoPoolShow(bool json) // Voltage { + float f5volt = (float)NeoPoolGetData(MBF_VOLT_5)/620.69; float f12volt = (float)NeoPoolGetData(MBF_VOLT_12)/1000; float f24_36volt = (float)NeoPoolGetData(MBF_VOLT_24_36)/1000; - ResponseAppend_P(PSTR(",\"" D_JSON_POWERUSAGE "\":{\"12\":%*_f,\"24-30\":%*_f}"), + float f420mA = (float)NeoPoolGetData(MBF_AMP_4_20_MICRO)/100; + ResponseAppend_P(PSTR(",\"" D_JSON_POWERUSAGE "\":{\"5V\":%*_f,\"12V\":%*_f,\"24-30V\":%*_f,\"4-20mA\":%*_f}"), + Settings->flag2.voltage_resolution, &f5volt, Settings->flag2.voltage_resolution, &f12volt, - Settings->flag2.voltage_resolution, &f24_36volt); + Settings->flag2.voltage_resolution, &f24_36volt, + Settings->flag2.current_resolution, &f420mA); } // pH @@ -1627,9 +1634,11 @@ void NeoPoolShow(bool json) // Voltage { + float f5volt = (float)NeoPoolGetData(MBF_VOLT_5)/620.69; float f12volt = (float)NeoPoolGetData(MBF_VOLT_12)/1000; float f24_36volt = (float)NeoPoolGetData(MBF_VOLT_24_36)/1000; WSContentSend_PD(HTTP_SNS_NEOPOOL_VOLTAGE, neopool_type, + Settings->flag2.voltage_resolution, &f5volt, Settings->flag2.voltage_resolution, &f12volt, Settings->flag2.voltage_resolution, &f24_36volt); } From 1fc31ff39e5accec0f84e06a3b65610d483808a7 Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Thu, 10 Mar 2022 13:02:26 +0100 Subject: [PATCH 10/22] Fix NPReadX sing reg count > 1 --- tasmota/xsns_83_neopool.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasmota/xsns_83_neopool.ino b/tasmota/xsns_83_neopool.ino index c903059ca..77a60940c 100644 --- a/tasmota/xsns_83_neopool.ino +++ b/tasmota/xsns_83_neopool.ino @@ -1847,9 +1847,9 @@ void NeopoolReadWriteResponse(uint16_t addr, uint16_t *data, uint16_t cnt, bool ResponseAppend_P(PSTR("[")); for(uint16_t i=0; i Date: Thu, 10 Mar 2022 14:34:26 +0100 Subject: [PATCH 11/22] Add NeoPool power module info --- tasmota/xsns_83_neopool.ino | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/tasmota/xsns_83_neopool.ino b/tasmota/xsns_83_neopool.ino index 77a60940c..8e78ced0e 100644 --- a/tasmota/xsns_83_neopool.ino +++ b/tasmota/xsns_83_neopool.ino @@ -85,7 +85,7 @@ enum NeoPoolRegister { // addr Unit Description // ------ ------ ------------------------------------------------------------ // MODBUS page (0x0000 - 0x002E - unknown - for internal use only) - MBF_POWER_MODULE_VERSION = 0x0002, // 0x0002 undocumented - power module version + MBF_POWER_MODULE_VERSION = 0x0002, // 0x0002 undocumented - power module version (MSB=Major, LSB=Minor) MBF_POWER_MODULE_NODEID = 0x0004, // 0x0004 undocumented - power module Node ID (6 register 0x0004 - 0x0009) MBF_POWER_MODULE_REGISTER = 0x000C, // 0x000C undocumented - Writing an address in this register causes the power module register address to be read out into MBF_POWER_MODULE_DATA, see MBF_POWER_MODULE_REG_* MBF_POWER_MODULE_DATA = 0x000D, // 0x000D undocumented - power module data as requested in MBF_POWER_MODULE_REGISTER @@ -595,6 +595,9 @@ bool neopool_first_read = true; #endif // NEOPOOL_OPTIMIZE_READINGS bool neopool_error = true; +uint16_t power_module_version; +uint16_t power_module_nodeid[6]; + #define NEOPOOL_MAX_REPEAT_ON_ERROR 10 uint8_t neopool_repeat_on_error = 2; @@ -1095,6 +1098,8 @@ bool NeoPoolInitData(void) bool res = false; neopool_error = true; + power_module_version = 0; + memset(power_module_nodeid, 0, sizeof(power_module_nodeid)); for (uint32_t i = 0; i < nitems(NeoPoolReg); i++) { if (nullptr == NeoPoolReg[i].data) { NeoPoolReg[i].data = (uint16_t *)malloc(sizeof(uint16_t)*NeoPoolReg[i].cnt); @@ -1184,7 +1189,7 @@ uint8_t NeoPoolReadRegisterData(uint16_t addr, uint16_t *data, uint16_t cnt) #ifdef DEBUG_TASMOTA_SENSOR NeoPoolLogRW("NeoPoolReadRegister", addr, origin, cnt); #endif // DEBUG_TASMOTA_SENSOR - return 0; + return NEOPOOL_MODBUS_OK; } #ifdef DEBUG_TASMOTA_SENSOR AddLog(LOG_LEVEL_DEBUG, PSTR("NEO: addr 0x%04X read out of memory"), addr); @@ -1283,7 +1288,7 @@ uint8_t NeoPoolReadRegister(uint16_t addr, uint16_t *data, uint16_t cnt) do { result = NeoPoolReadRegisterData(addr, data, cnt); SleepDelay(0); - } while(repeat-- > 0 || NEOPOOL_MODBUS_OK != result); + } while(repeat-- > 0 && NEOPOOL_MODBUS_OK != result); return result; } @@ -1295,7 +1300,7 @@ uint8_t NeoPoolWriteRegister(uint16_t addr, uint16_t *data, uint16_t cnt) do { result = NeoPoolWriteRegisterData(addr, data, cnt); SleepDelay(0); - } while(repeat-- > 0 || NEOPOOL_MODBUS_OK != result); + } while(repeat-- > 0 && NEOPOOL_MODBUS_OK != result); return result; } @@ -1412,6 +1417,7 @@ bool NeoPoolIsIonization(void) #define D_NEOPOOL_JSON_FLOW1 "FL1" #define D_NEOPOOL_JSON_TANK "Tank" #define D_NEOPOOL_JSON_BIT "Bit" +#define D_NEOPOOL_JSON_NODE_ID "NodeID" void NeoPoolShow(bool json) { @@ -1454,7 +1460,26 @@ void NeoPoolShow(bool json) float f12volt = (float)NeoPoolGetData(MBF_VOLT_12)/1000; float f24_36volt = (float)NeoPoolGetData(MBF_VOLT_24_36)/1000; float f420mA = (float)NeoPoolGetData(MBF_AMP_4_20_MICRO)/100; - ResponseAppend_P(PSTR(",\"" D_JSON_POWERUSAGE "\":{\"5V\":%*_f,\"12V\":%*_f,\"24-30V\":%*_f,\"4-20mA\":%*_f}"), + ResponseAppend_P(PSTR(",\"" D_JSON_POWERUSAGE "\":{")); + if (power_module_version || + NEOPOOL_MODBUS_OK == NeoPoolReadRegister(MBF_POWER_MODULE_VERSION, &power_module_version, 1)) { + ResponseAppend_P(PSTR("\"" D_JSON_VERSION "\":\"V%d.%d\","), + (power_module_version >> 8), + power_module_version & 0xff + ); + } + if (power_module_nodeid[0] || + NEOPOOL_MODBUS_OK == NeoPoolReadRegister(MBF_POWER_MODULE_NODEID, power_module_nodeid, nitems(power_module_nodeid))) { + ResponseAppend_P(PSTR("\"" D_NEOPOOL_JSON_NODE_ID "\":\"%04X %04X %04X %04X %04X %04X\","), + power_module_nodeid[0], + power_module_nodeid[1], + power_module_nodeid[2], + power_module_nodeid[3], + power_module_nodeid[4], + power_module_nodeid[5] + ); + } + ResponseAppend_P(PSTR("\"5V\":%*_f,\"12V\":%*_f,\"24-30V\":%*_f,\"4-20mA\":%*_f}"), Settings->flag2.voltage_resolution, &f5volt, Settings->flag2.voltage_resolution, &f12volt, Settings->flag2.voltage_resolution, &f24_36volt, From bf2a51f713c84265fd9b006d3899d00ffb73f1bb Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Thu, 10 Mar 2022 14:41:38 +0100 Subject: [PATCH 12/22] Update CHANGELOG --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1bc41096..ca50ccca4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,7 +21,7 @@ All notable changes to this project will be documented in this file. - ESP32 TasmotaSerial uart mapping to support multiple ``begin()`` and implement ``getUart()`` (#14981) - Commands ``Sensor12 D0 .. D5, S0 .. S5`` allowing differential or single-ended modes (#15001) - NeoPool commands ``NPpHMin``, ``NPpHMax``, ``NPpH``, ``NPRedox``, ``NPHydrolysis``, ``NPIonization``, ``NPChlorine`` and ``NPControl`` (#15015) -- NeoPool system voltages display +- NeoPool system voltages display, add complete power module and cell info to SENSOR - Full DS3231 integration and synchronisation when using UBX (=GPS), NTP or manual time - LVGL Splash screen and ``SetOption135 1`` to disable splash screen - Command ``RfTimeout 100..60000`` to disable duplicate RfReceive. Default 1000 (#15061) @@ -32,7 +32,8 @@ All notable changes to this project will be documented in this file. - Extent number of pulsetimers from 8 to 32 (#8266) - Tasmota ESP32 Arduino core to v2.0.2.3 (#14979) - TasmotaSerial library from v3.4.0 to v3.5.0 (#14981) -- NeoPool limit relay output to the number actually available +- NeoPool limit relay output to the number actually available, SENSOR JSON voltage and hydro level, remove ambiguous device color names + ## [11.0.0.2] 20220225 ### Changed From 8a02d16928df5bfefc904e5ee276d404dcd97b8a Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Thu, 10 Mar 2022 18:14:33 +0100 Subject: [PATCH 13/22] Rename module global var --- tasmota/xsns_83_neopool.ino | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/tasmota/xsns_83_neopool.ino b/tasmota/xsns_83_neopool.ino index 8e78ced0e..ecad9c2a9 100644 --- a/tasmota/xsns_83_neopool.ino +++ b/tasmota/xsns_83_neopool.ino @@ -595,8 +595,8 @@ bool neopool_first_read = true; #endif // NEOPOOL_OPTIMIZE_READINGS bool neopool_error = true; -uint16_t power_module_version; -uint16_t power_module_nodeid[6]; +uint16_t neopool_power_module_version; +uint16_t neopool_power_module_nodeid[6]; #define NEOPOOL_MAX_REPEAT_ON_ERROR 10 uint8_t neopool_repeat_on_error = 2; @@ -1098,8 +1098,8 @@ bool NeoPoolInitData(void) bool res = false; neopool_error = true; - power_module_version = 0; - memset(power_module_nodeid, 0, sizeof(power_module_nodeid)); + neopool_power_module_version = 0; + memset(neopool_power_module_nodeid, 0, sizeof(neopool_power_module_nodeid)); for (uint32_t i = 0; i < nitems(NeoPoolReg); i++) { if (nullptr == NeoPoolReg[i].data) { NeoPoolReg[i].data = (uint16_t *)malloc(sizeof(uint16_t)*NeoPoolReg[i].cnt); @@ -1461,22 +1461,22 @@ void NeoPoolShow(bool json) float f24_36volt = (float)NeoPoolGetData(MBF_VOLT_24_36)/1000; float f420mA = (float)NeoPoolGetData(MBF_AMP_4_20_MICRO)/100; ResponseAppend_P(PSTR(",\"" D_JSON_POWERUSAGE "\":{")); - if (power_module_version || - NEOPOOL_MODBUS_OK == NeoPoolReadRegister(MBF_POWER_MODULE_VERSION, &power_module_version, 1)) { + if (neopool_power_module_version || + NEOPOOL_MODBUS_OK == NeoPoolReadRegister(MBF_POWER_MODULE_VERSION, &neopool_power_module_version, 1)) { ResponseAppend_P(PSTR("\"" D_JSON_VERSION "\":\"V%d.%d\","), - (power_module_version >> 8), - power_module_version & 0xff + (neopool_power_module_version >> 8), + neopool_power_module_version & 0xff ); } - if (power_module_nodeid[0] || - NEOPOOL_MODBUS_OK == NeoPoolReadRegister(MBF_POWER_MODULE_NODEID, power_module_nodeid, nitems(power_module_nodeid))) { + if (neopool_power_module_nodeid[0] || + NEOPOOL_MODBUS_OK == NeoPoolReadRegister(MBF_POWER_MODULE_NODEID, neopool_power_module_nodeid, nitems(neopool_power_module_nodeid))) { ResponseAppend_P(PSTR("\"" D_NEOPOOL_JSON_NODE_ID "\":\"%04X %04X %04X %04X %04X %04X\","), - power_module_nodeid[0], - power_module_nodeid[1], - power_module_nodeid[2], - power_module_nodeid[3], - power_module_nodeid[4], - power_module_nodeid[5] + neopool_power_module_nodeid[0], + neopool_power_module_nodeid[1], + neopool_power_module_nodeid[2], + neopool_power_module_nodeid[3], + neopool_power_module_nodeid[4], + neopool_power_module_nodeid[5] ); } ResponseAppend_P(PSTR("\"5V\":%*_f,\"12V\":%*_f,\"24-30V\":%*_f,\"4-20mA\":%*_f}"), From 5c211d7e3462e8a7527d45ec69376093610197b9 Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Thu, 10 Mar 2022 18:36:10 +0100 Subject: [PATCH 14/22] Refaktor read polling register --- tasmota/xsns_83_neopool.ino | 49 ++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/tasmota/xsns_83_neopool.ino b/tasmota/xsns_83_neopool.ino index ecad9c2a9..599cbd502 100644 --- a/tasmota/xsns_83_neopool.ino +++ b/tasmota/xsns_83_neopool.ino @@ -89,10 +89,10 @@ enum NeoPoolRegister { MBF_POWER_MODULE_NODEID = 0x0004, // 0x0004 undocumented - power module Node ID (6 register 0x0004 - 0x0009) MBF_POWER_MODULE_REGISTER = 0x000C, // 0x000C undocumented - Writing an address in this register causes the power module register address to be read out into MBF_POWER_MODULE_DATA, see MBF_POWER_MODULE_REG_* MBF_POWER_MODULE_DATA = 0x000D, // 0x000D undocumented - power module data as requested in MBF_POWER_MODULE_REGISTER - MBF_VOLT_24_36 = 0x0022, // 0x0022 undocumented - Current 24-36V line in mV - MBF_VOLT_12 = 0x0023, // 0x0023 undocumented - Current 12V line in mV - MBF_VOLT_5 = 0x006A, // 0x006A undocumented - 5V line in mV / 0,62069 - MBF_AMP_4_20_MICRO = 0x0072, // 0x0072 undocumented - 2-40mA line in µA * 10 (1=0,01mA) + MBF_VOLT_24_36 = 0x0022, // 0x0022* undocumented - Current 24-36V line in mV + MBF_VOLT_12 = 0x0023, // 0x0023* undocumented - Current 12V line in mV + MBF_VOLT_5 = 0x006A, // 0x006A* undocumented - 5V line in mV / 0,62069 + MBF_AMP_4_20_MICRO = 0x0072, // 0x0072* undocumented - 2-40mA line in µA * 10 (1=0,01mA) // MEASURE page (0x01xx) MBF_ION_CURRENT = 0x0100, // 0x0100* Current measured in the ionization system @@ -100,16 +100,16 @@ enum NeoPoolRegister { 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_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_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_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. @@ -223,25 +223,25 @@ enum NeoPoolRegister { 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_CONF = 0x050F, // 0x050F mask undocumented - filtration type and speed, see MBMSK_PAR_FILTRATION_CONF_* + 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_CONF = 0x050F, // 0x050F* mask undocumented - filtration type and speed, see MBMSK_PAR_FILTRATION_CONF_* 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_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 @@ -613,7 +613,7 @@ struct { const uint16_t cnt; uint16_t *data; } NeoPoolReg[] = { - // 8 entries each polled needs 2s for complete register set + // 8 entries each poll needs 2 sec for complete register set {MBF_ION_CURRENT, MBF_NOTIFICATION - MBF_ION_CURRENT + 1, nullptr}, {MBF_CELL_RUNTIME_LOW, MBF_CELL_RUNTIME_POL_CHANGES_HIGH - MBF_CELL_RUNTIME_LOW + 1, nullptr}, {MBF_PAR_VERSION, MBF_PAR_MODEL - MBF_PAR_VERSION + 1, nullptr}, @@ -1313,12 +1313,15 @@ uint8_t NeoPoolWriteRegisterWord(uint16_t addr, uint16_t data) uint16_t NeoPoolGetData(uint16_t addr) { + uint16_t data; + for (uint32_t i = 0; i < nitems(NeoPoolReg); i++) { if (nullptr != NeoPoolReg[i].data && addr >= NeoPoolReg[i].addr && addr < NeoPoolReg[i].addr+NeoPoolReg[i].cnt) { return NeoPoolReg[i].data[addr - NeoPoolReg[i].addr]; } } - return 0; + NeoPoolReadRegister(addr, &data, 1); + return data; } From 0db6bdea6fea34ad322c83756b84e0e640e5cc8d Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Thu, 10 Mar 2022 18:46:38 +0100 Subject: [PATCH 15/22] Refaktor model option reading --- tasmota/xsns_83_neopool.ino | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/tasmota/xsns_83_neopool.ino b/tasmota/xsns_83_neopool.ino index 599cbd502..b1c9fbcbc 100644 --- a/tasmota/xsns_83_neopool.ino +++ b/tasmota/xsns_83_neopool.ino @@ -78,13 +78,13 @@ /*********************************************************************************************\ - * Sugar Valley Modbus Register (* register are currently used) + * Sugar Valley Modbus Register (addresses marked with * are queried with each polling cycle) * (see https://downloads.vodnici.net/uploads/wpforo/attachments/69/171-Modbus-registers.pdf) \*********************************************************************************************/ enum NeoPoolRegister { // addr Unit Description // ------ ------ ------------------------------------------------------------ - // MODBUS page (0x0000 - 0x002E - unknown - for internal use only) + // MODBUS page (0x00xx) - undocumented - for internal use MBF_POWER_MODULE_VERSION = 0x0002, // 0x0002 undocumented - power module version (MSB=Major, LSB=Minor) MBF_POWER_MODULE_NODEID = 0x0004, // 0x0004 undocumented - power module Node ID (6 register 0x0004 - 0x0009) MBF_POWER_MODULE_REGISTER = 0x000C, // 0x000C undocumented - Writing an address in this register causes the power module register address to be read out into MBF_POWER_MODULE_DATA, see MBF_POWER_MODULE_REG_* @@ -595,6 +595,7 @@ bool neopool_first_read = true; #endif // NEOPOOL_OPTIMIZE_READINGS bool neopool_error = true; +uint16_t neopool_model_option; uint16_t neopool_power_module_version; uint16_t neopool_power_module_nodeid[6]; @@ -613,10 +614,9 @@ struct { const uint16_t cnt; uint16_t *data; } NeoPoolReg[] = { - // 8 entries each poll needs 2 sec for complete register set + // complete poll cycle needs 7x250 ms to read complete register set {MBF_ION_CURRENT, MBF_NOTIFICATION - MBF_ION_CURRENT + 1, nullptr}, {MBF_CELL_RUNTIME_LOW, MBF_CELL_RUNTIME_POL_CHANGES_HIGH - MBF_CELL_RUNTIME_LOW + 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_ION, MBF_PAR_FILTRATION_CONF - MBF_PAR_ION + 1, nullptr}, {MBF_PAR_UICFG_MACHINE, MBF_PAR_UICFG_MACH_VISUAL_STYLE - MBF_PAR_UICFG_MACHINE + 1, nullptr}, @@ -981,7 +981,7 @@ void (* const NPCommand[])(void) PROGMEM = { /*********************************************************************************************/ -void NeoPool250ms(void) // Every 250 mSec +void NeoPoolPoll(void) // Every 250 mSec { if (!neopool_poll) { return; @@ -1098,6 +1098,7 @@ bool NeoPoolInitData(void) bool res = false; neopool_error = true; + neopool_model_option = 0xFFFF; neopool_power_module_version = 0; memset(neopool_power_module_nodeid, 0, sizeof(neopool_power_module_nodeid)); for (uint32_t i = 0; i < nitems(NeoPoolReg); i++) { @@ -1346,9 +1347,18 @@ uint32_t NeoPoolGetSpeedIndex(uint16_t speedvalue) } +uint16_t NeoPoolModelOption(void) +{ + if (0xFFFF == neopool_model_option) { + neopool_model_option = NeoPoolGetData(MBF_PAR_MODEL); + } + return neopool_model_option; +} + + bool NeoPoolIsHydrolysis(void) { - return (((NeoPoolGetData(MBF_PAR_MODEL) & MBMSK_MODEL_HIDRO)) || + return (((NeoPoolModelOption() & MBMSK_MODEL_HIDRO)) || (NeoPoolGetData(MBF_HIDRO_STATUS) & (MBMSK_HIDRO_STATUS_CTRL_ACTIVE | MBMSK_HIDRO_STATUS_CTRL_ACTIVE))); } @@ -1379,7 +1389,7 @@ bool NeoPoolIsConductivity(void) bool NeoPoolIsIonization(void) { - return (NeoPoolGetData(MBF_PAR_MODEL) & MBMSK_MODEL_ION); + return (NeoPoolModelOption() & MBMSK_MODEL_ION); } @@ -2466,7 +2476,7 @@ bool Xsns83(uint8_t function) } else if (neopool_active) { switch (function) { case FUNC_EVERY_250_MSECOND: - NeoPool250ms(); + NeoPoolPoll(); break; case FUNC_COMMAND: result = DecodeCommand(kNPCommands, NPCommand); From b4d532fd6cdc3f54d3102211bb350572b25f70f5 Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Fri, 11 Mar 2022 10:11:09 +0100 Subject: [PATCH 16/22] Revert model option reading --- tasmota/xsns_83_neopool.ino | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/tasmota/xsns_83_neopool.ino b/tasmota/xsns_83_neopool.ino index b1c9fbcbc..219f33b64 100644 --- a/tasmota/xsns_83_neopool.ino +++ b/tasmota/xsns_83_neopool.ino @@ -595,7 +595,6 @@ bool neopool_first_read = true; #endif // NEOPOOL_OPTIMIZE_READINGS bool neopool_error = true; -uint16_t neopool_model_option; uint16_t neopool_power_module_version; uint16_t neopool_power_module_nodeid[6]; @@ -614,9 +613,10 @@ struct { const uint16_t cnt; uint16_t *data; } NeoPoolReg[] = { - // complete poll cycle needs 7x250 ms to read complete register set + // complete poll cycle needs 8x250 ms to read complete register set {MBF_ION_CURRENT, MBF_NOTIFICATION - MBF_ION_CURRENT + 1, nullptr}, {MBF_CELL_RUNTIME_LOW, MBF_CELL_RUNTIME_POL_CHANGES_HIGH - MBF_CELL_RUNTIME_LOW + 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_ION, MBF_PAR_FILTRATION_CONF - MBF_PAR_ION + 1, nullptr}, {MBF_PAR_UICFG_MACHINE, MBF_PAR_UICFG_MACH_VISUAL_STYLE - MBF_PAR_UICFG_MACHINE + 1, nullptr}, @@ -1098,7 +1098,6 @@ bool NeoPoolInitData(void) bool res = false; neopool_error = true; - neopool_model_option = 0xFFFF; neopool_power_module_version = 0; memset(neopool_power_module_nodeid, 0, sizeof(neopool_power_module_nodeid)); for (uint32_t i = 0; i < nitems(NeoPoolReg); i++) { @@ -1347,18 +1346,9 @@ uint32_t NeoPoolGetSpeedIndex(uint16_t speedvalue) } -uint16_t NeoPoolModelOption(void) -{ - if (0xFFFF == neopool_model_option) { - neopool_model_option = NeoPoolGetData(MBF_PAR_MODEL); - } - return neopool_model_option; -} - - bool NeoPoolIsHydrolysis(void) { - return (((NeoPoolModelOption() & MBMSK_MODEL_HIDRO)) || + return (((NeoPoolGetData(MBF_PAR_MODEL) & MBMSK_MODEL_HIDRO)) || (NeoPoolGetData(MBF_HIDRO_STATUS) & (MBMSK_HIDRO_STATUS_CTRL_ACTIVE | MBMSK_HIDRO_STATUS_CTRL_ACTIVE))); } @@ -1389,7 +1379,7 @@ bool NeoPoolIsConductivity(void) bool NeoPoolIsIonization(void) { - return (NeoPoolModelOption() & MBMSK_MODEL_ION); + return (NeoPoolGetData(MBF_PAR_MODEL) & MBMSK_MODEL_ION); } From ee664c852ecd37964ece66dbd2cecda850d4e9f3 Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Fri, 11 Mar 2022 12:49:54 +0100 Subject: [PATCH 17/22] Add chlorine, conductivity and ionization details --- CHANGELOG.md | 2 +- tasmota/xsns_83_neopool.ino | 54 ++++++++++++++++++++++++++----------- 2 files changed, 40 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca50ccca4..40d6e4634 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,7 +21,7 @@ All notable changes to this project will be documented in this file. - ESP32 TasmotaSerial uart mapping to support multiple ``begin()`` and implement ``getUart()`` (#14981) - Commands ``Sensor12 D0 .. D5, S0 .. S5`` allowing differential or single-ended modes (#15001) - NeoPool commands ``NPpHMin``, ``NPpHMax``, ``NPpH``, ``NPRedox``, ``NPHydrolysis``, ``NPIonization``, ``NPChlorine`` and ``NPControl`` (#15015) -- NeoPool system voltages display, add complete power module and cell info to SENSOR +- NeoPool system voltages display, add JSON power module, cell info, chlorine, conductivity and ionization to SENSOR - Full DS3231 integration and synchronisation when using UBX (=GPS), NTP or manual time - LVGL Splash screen and ``SetOption135 1`` to disable splash screen - Command ``RfTimeout 100..60000`` to disable duplicate RfReceive. Default 1000 (#15061) diff --git a/tasmota/xsns_83_neopool.ino b/tasmota/xsns_83_neopool.ino index 219f33b64..cdb465b9f 100644 --- a/tasmota/xsns_83_neopool.ino +++ b/tasmota/xsns_83_neopool.ino @@ -135,9 +135,9 @@ enum NeoPoolRegister { // 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_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. @@ -616,7 +616,7 @@ struct { // complete poll cycle needs 8x250 ms to read complete register set {MBF_ION_CURRENT, MBF_NOTIFICATION - MBF_ION_CURRENT + 1, nullptr}, {MBF_CELL_RUNTIME_LOW, MBF_CELL_RUNTIME_POL_CHANGES_HIGH - MBF_CELL_RUNTIME_LOW + 1, nullptr}, - {MBF_PAR_VERSION, MBF_PAR_MODEL - MBF_PAR_VERSION + 1, nullptr}, + {MBF_PAR_VERSION, MBF_PAR_HIDRO_NOM - MBF_PAR_VERSION + 1, nullptr}, {MBF_PAR_TIME_LOW, MBF_PAR_FILT_GPIO - MBF_PAR_TIME_LOW + 1, nullptr}, {MBF_PAR_ION, MBF_PAR_FILTRATION_CONF - MBF_PAR_ION + 1, nullptr}, {MBF_PAR_UICFG_MACHINE, MBF_PAR_UICFG_MACH_VISUAL_STYLE - MBF_PAR_UICFG_MACHINE + 1, nullptr}, @@ -731,7 +731,13 @@ const char HTTP_SNS_NEOPOOL_STATUS_ACTIVE[] PROGMEM = "filter:invert(1)"; * * NPFiltrationMode {} * get/set filtration mode (mode = 0..4|13) - * get mode if is omitted, otherwise set new mode + * get mode if is omitted, otherwise set new mode according: + * 0 - Manual + * 1 - Auto + * 2 - Heating + * 3 - Smart + * 4 - Intelligent + * 13 - Backwash * * NPTime {