HA NeoPool MQTT: integration of Tasmota NeoPool (for Sugar Valley, Hayward/Aquarite, Bayrol devices)

I upgraded to latest dev firmware. Then I implemented the four new connection diagnostic sensors:

In order to make them available/unavailable, I used the following availability_topic/availability_template combination:

I check if the value of the Connection topic is defined, then I also check the availability of one of the main sensors, since I can’t check for LWT topic directly, so it’s an indirect LWT check. The logic seems to be working, I’ve done several tests.

While testing, I noticed that sometimes, on startup of the Aquarite+ system (power-cycle) the number of Invalid responses (out of range) increases, I’ve seen 8 right after the power cycle. But it’s not a consistent behaviour.

The only problem I noticed is that the device got “stuck” 3 times, seems randomly, but in order to restore functionality, I had to power-cycle the Aquarite (I have a tasmotized Shelly to control the aquarite). When it was stuck, the Atom Lite was not pingable on the network, so I couldn’t even check what the problem might be.

I’ll keep monitoring the device, but if this issue is frequent, I’ll revert back to the stable fw.

@curzon01 another thing I noticed is that I receive mqtt updates every 3-4s. But I have Teleperiod=30 and NPTeleperiod=60 (you can see from the log below). This means that some value is changing constantly, but it seems a bit strange:

02:54:58.982 MQT: tele/SmartPool/STATE = {"Time":"2024-07-07T02:54:58","Uptime":"0T00:15:43","UptimeSec":943,"Heap":117,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"Berry":{"HeapUsed":30,"Objects":420},"Wifi":{"AP":1,"SSId":"NetStumbling?","BSSId":"2C:3A:FD:EF:1E:67","Channel":1,"Mode":"HT20","RSSI":100,"Signal":-38,"LinkCount":1,"Downtime":"0T00:00:10"}}
02:54:58.994 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:54:58","NeoPool":{"Time":"2024-07-07T02:54:54","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":14,"24-30V":31,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":1,"FL1":0,"Tank":1},"Redox":{"Data":685,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:45:32","Part":"166T22:45:32","Pol1":"83T16:31:48","Pol2":"83T06:13:45","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":0,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[1,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":1},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3641,"MBNoError":3560,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":80,"DataOutOfRange":0}},"TempUnit":"C"} (retained)
02:55:00.986 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:55:00","NeoPool":{"Time":"2024-07-07T02:54:56","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":13,"24-30V":29,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":1,"FL1":0,"Tank":1},"Redox":{"Data":686,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:45:34","Part":"166T22:45:34","Pol1":"83T16:31:48","Pol2":"83T06:13:47","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":0,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[1,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":1},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3649,"MBNoError":3568,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":80,"DataOutOfRange":0}}} (retained)
02:55:19.990 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:55:19","NeoPool":{"Time":"2024-07-07T02:55:15","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":13,"24-30V":29,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":1,"FL1":0,"Tank":1},"Redox":{"Data":686,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:45:53","Part":"166T22:45:53","Pol1":"83T16:31:48","Pol2":"83T06:14:06","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":0,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[1,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":1},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3718,"MBNoError":3634,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":83,"DataOutOfRange":0}}} (retained)
02:55:25.990 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:55:25","NeoPool":{"Time":"2024-07-07T02:55:21","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":14,"24-30V":31,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":1,"FL1":0,"Tank":1},"Redox":{"Data":686,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:45:59","Part":"166T22:45:59","Pol1":"83T16:31:48","Pol2":"83T06:14:12","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":0,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[1,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":1},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3742,"MBNoError":3658,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":83,"DataOutOfRange":0}}} (retained)
02:55:28.985 MQT: tele/SmartPool/STATE = {"Time":"2024-07-07T02:55:28","Uptime":"0T00:16:13","UptimeSec":973,"Heap":121,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"Berry":{"HeapUsed":30,"Objects":420},"Wifi":{"AP":1,"SSId":"NetStumbling?","BSSId":"2C:3A:FD:EF:1E:67","Channel":1,"Mode":"HT20","RSSI":100,"Signal":-39,"LinkCount":1,"Downtime":"0T00:00:10"}}
02:55:28.998 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:55:28","NeoPool":{"Time":"2024-07-07T02:55:25","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":13,"24-30V":29,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":1,"FL1":0,"Tank":1},"Redox":{"Data":686,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:46:01","Part":"166T22:46:01","Pol1":"83T16:31:48","Pol2":"83T06:14:14","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":0,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[1,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":1},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3754,"MBNoError":3670,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":83,"DataOutOfRange":0}},"TempUnit":"C"} (retained)
02:55:35.976 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:55:35","NeoPool":{"Time":"2024-07-07T02:55:31","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":13,"24-30V":29,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":2,"FL1":0,"Tank":1},"Redox":{"Data":686,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:46:09","Part":"166T22:46:09","Pol1":"83T16:31:48","Pol2":"83T06:14:22","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":0,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[0,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":0},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3782,"MBNoError":3698,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":83,"DataOutOfRange":0}}} (retained)
02:55:39.028 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:55:39","NeoPool":{"Time":"2024-07-07T02:55:33","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":14,"24-30V":31,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":2,"FL1":0,"Tank":1},"Redox":{"Data":686,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:46:09","Part":"166T22:46:09","Pol1":"83T16:31:48","Pol2":"83T06:14:22","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":1,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[0,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":0},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3793,"MBNoError":3706,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":86,"DataOutOfRange":0}}} (retained)
02:55:42.958 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:55:42","NeoPool":{"Time":"2024-07-07T02:55:38","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":13,"24-30V":29,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":2,"FL1":0,"Tank":1},"Redox":{"Data":686,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:46:16","Part":"166T22:46:16","Pol1":"83T16:31:48","Pol2":"83T06:14:29","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":0,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[0,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":0},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3803,"MBNoError":3715,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":87,"DataOutOfRange":0}}} (retained)
02:55:56.988 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:55:56","NeoPool":{"Time":"2024-07-07T02:55:52","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":14,"24-30V":31,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":2,"FL1":0,"Tank":1},"Redox":{"Data":687,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:46:30","Part":"166T22:46:30","Pol1":"83T16:31:48","Pol2":"83T06:14:43","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":1,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[0,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":0},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3860,"MBNoError":3772,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":87,"DataOutOfRange":0}}} (retained)
02:55:58.985 MQT: tele/SmartPool/STATE = {"Time":"2024-07-07T02:55:58","Uptime":"0T00:16:43","UptimeSec":1003,"Heap":119,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"Berry":{"HeapUsed":30,"Objects":420},"Wifi":{"AP":1,"SSId":"NetStumbling?","BSSId":"2C:3A:FD:EF:1E:67","Channel":1,"Mode":"HT20","RSSI":100,"Signal":-42,"LinkCount":1,"Downtime":"0T00:00:10"}}
02:55:58.997 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:55:58","NeoPool":{"Time":"2024-07-07T02:55:54","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":14,"24-30V":31,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":2,"FL1":0,"Tank":1},"Redox":{"Data":687,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:46:32","Part":"166T22:46:32","Pol1":"83T16:31:48","Pol2":"83T06:14:45","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":0,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[0,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":0},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3868,"MBNoError":3780,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":87,"DataOutOfRange":0}},"TempUnit":"C"} (retained)
02:55:59.011 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:55:59","NeoPool":{"Time":"2024-07-07T02:55:54","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":14,"24-30V":31,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":2,"FL1":0,"Tank":1},"Redox":{"Data":687,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:46:32","Part":"166T22:46:32","Pol1":"83T16:31:48","Pol2":"83T06:14:45","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":0,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[0,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":0},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3868,"MBNoError":3780,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":87,"DataOutOfRange":0}}} (retained)
02:56:02.985 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:56:02","NeoPool":{"Time":"2024-07-07T02:55:58","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":13,"24-30V":29,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":2,"FL1":0,"Tank":1},"Redox":{"Data":687,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:46:36","Part":"166T22:46:36","Pol1":"83T16:31:48","Pol2":"83T06:14:49","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":1,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[0,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":0},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3884,"MBNoError":3796,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":87,"DataOutOfRange":0}}} (retained)
02:56:06.985 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:56:06","NeoPool":{"Time":"2024-07-07T02:56:02","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":13,"24-30V":30,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":2,"FL1":0,"Tank":1},"Redox":{"Data":687,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:46:40","Part":"166T22:46:40","Pol1":"83T16:31:48","Pol2":"83T06:14:53","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":0,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[0,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":0},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3900,"MBNoError":3812,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":87,"DataOutOfRange":0}}} (retained)
02:56:09.990 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:56:09","NeoPool":{"Time":"2024-07-07T02:56:04","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":13,"24-30V":30,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":2,"FL1":0,"Tank":1},"Redox":{"Data":687,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:46:40","Part":"166T22:46:40","Pol1":"83T16:31:48","Pol2":"83T06:14:53","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":1,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[0,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":0},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3910,"MBNoError":3820,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":89,"DataOutOfRange":0}}} (retained)
02:56:11.989 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:56:11","NeoPool":{"Time":"2024-07-07T02:56:08","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":13,"24-30V":31,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":2,"FL1":0,"Tank":1},"Redox":{"Data":687,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:46:43","Part":"166T22:46:43","Pol1":"83T16:31:48","Pol2":"83T06:14:56","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":0,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[0,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":0},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3918,"MBNoError":3828,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":89,"DataOutOfRange":0}}} (retained)
02:56:16.004 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:56:15","NeoPool":{"Time":"2024-07-07T02:56:12","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":13,"24-30V":30,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":2,"FL1":0,"Tank":1},"Redox":{"Data":687,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:46:47","Part":"166T22:46:47","Pol1":"83T16:31:48","Pol2":"83T06:15:00","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":1,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[0,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":0},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3934,"MBNoError":3844,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":89,"DataOutOfRange":0}}} (retained)
02:56:21.990 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:56:21","NeoPool":{"Time":"2024-07-07T02:56:18","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":13,"24-30V":31,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":2,"FL1":0,"Tank":1},"Redox":{"Data":688,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:46:53","Part":"166T22:46:53","Pol1":"83T16:31:48","Pol2":"83T06:15:06","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":1,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[0,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":0},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3958,"MBNoError":3868,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":89,"DataOutOfRange":0}}} (retained)
02:56:23.990 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:56:23","NeoPool":{"Time":"2024-07-07T02:56:20","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":14,"24-30V":31,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":2,"FL1":0,"Tank":1},"Redox":{"Data":688,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:46:55","Part":"166T22:46:55","Pol1":"83T16:31:48","Pol2":"83T06:15:08","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":0,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[0,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":0},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3966,"MBNoError":3876,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":89,"DataOutOfRange":0}}} (retained)
02:56:26.024 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:56:26","NeoPool":{"Time":"2024-07-07T02:56:22","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":12,"24-30V":29,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":2,"FL1":0,"Tank":1},"Redox":{"Data":688,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:46:57","Part":"166T22:46:57","Pol1":"83T16:31:48","Pol2":"83T06:15:10","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":1,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[0,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":0},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3974,"MBNoError":3884,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":89,"DataOutOfRange":0}}} (retained)
02:56:28.989 MQT: tele/SmartPool/STATE = {"Time":"2024-07-07T02:56:28","Uptime":"0T00:17:13","UptimeSec":1033,"Heap":112,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"Berry":{"HeapUsed":30,"Objects":420},"Wifi":{"AP":1,"SSId":"NetStumbling?","BSSId":"2C:3A:FD:EF:1E:67","Channel":1,"Mode":"HT20","RSSI":100,"Signal":-42,"LinkCount":1,"Downtime":"0T00:00:10"}}
02:56:29.002 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:56:28","NeoPool":{"Time":"2024-07-07T02:56:26","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":13,"24-30V":29,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":2,"FL1":0,"Tank":1},"Redox":{"Data":688,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:47:01","Part":"166T22:47:01","Pol1":"83T16:31:48","Pol2":"83T06:15:14","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":1,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[0,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":0},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":3986,"MBNoError":3896,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":89,"DataOutOfRange":0}},"TempUnit":"C"} (retained)
02:56:49.587 CMD: TelePeriod
02:56:49.591 MQT: stat/SmartPool/TELEPERIOD = {"TelePeriod":30}
02:56:49.996 MQT: tele/SmartPool/STATE = {"Time":"2024-07-07T02:56:49","Uptime":"0T00:17:34","UptimeSec":1054,"Heap":116,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"Berry":{"HeapUsed":30,"Objects":420},"Wifi":{"AP":1,"SSId":"NetStumbling?","BSSId":"2C:3A:FD:EF:1E:67","Channel":1,"Mode":"HT20","RSSI":100,"Signal":-43,"LinkCount":1,"Downtime":"0T00:00:10"}}
02:56:50.009 MQT: tele/SmartPool/SENSOR = {"Time":"2024-07-07T02:56:49","NeoPool":{"Time":"2024-07-07T02:56:45","Type":"Hay","Modules":{"pH":1,"Redox":1,"Hydrolysis":1,"Chlorine":0,"Conductivity":0,"Ionization":0},"Temperature":25.5,"Powerunit":{"Version":"V5.0","NodeID":"XXXX XXXX XXXX XXXX XXXX 3435","5V":5,"12V":12,"24-30V":28,"4-20mA":0.100},"pH":{"Data":7.6,"Min":7.2,"Max":7.5,"State":0,"Pump":2,"FL1":0,"Tank":1},"Redox":{"Data":688,"Setpoint":730},"Hydrolysis":{"Data":16.0,"Unit":"g/h","Setpoint":16.0,"Max":33.0,"Percent":{"Data":48,"Setpoint":48},"Runtime":{"Total":"166T22:47:23","Part":"166T22:47:23","Pol1":"83T16:31:48","Pol2":"83T06:15:36","Changes":2093},"State":"Pol2","Cover":0,"Boost":0,"Low":1,"FL1":0,"Redox":1},"Filtration":{"State":1,"Speed":1,"Mode":0},"Light":1,"Relay":{"State":[0,1,1,0,0,0,0],"Aux":[0,0,0,0],"Acid":0},"Connection":{"Time":"2024-07-07T02:39:26","MBRequests":4068,"MBNoError":3976,"MBIllegalFunc":0,"MBIllegalDataAddr":0,"MBIllegalDataValue":0,"MBSlaveError":0,"MBAck":0,"MBSlaveBusy":0,"MBNotEnoughData":0,"MBMemParityErr":0,"MBCRCErr":0,"MBGWPath":0,"MBGWTarget":0,"MBRegErr":0,"MBRegData":0,"MBTooManyReg":0,"MBUnknownErr":1,"MBNoResponse":91,"DataOutOfRange":0}},"TempUnit":"C"} (retained)
02:56:54.787 CMD: NPTelePeriod
02:56:54.794 MQT: stat/SmartPool/NPTELEPERIOD = {"NPTelePeriod":60}

I don’t think this additional check is necessary.

Have you also done the identical test for this with the previous fw (which version?). Nothing of this Neopool extension could trigger something like this, this is part of the Tasmota basic functions.

I use a syslog server and “syslog 4” (and sometimes DEBUG_SENSOR fw) for such things, it logs until the system dies.

Unfortunately I also had to realise that my Atom Lite with Tail485 doesn’t run quite as smoothly as my DIN-Rail self-build with an ESP32 and an ali… RS485 interface before.

I have additional sensors on my Oxilife ESP and they also fail randomly on the Atom Lite, only a power cycle helps. I suspect that the power supply (possibly in connection with the DC/DC converter on the 485 supplied by the not quite clean 12V of the Sugar Valley) is not quite so clean, because I don’t have this problem with my own construction.
Will check this by adding a tantalum capacitor trying eleminiate power surges/low voltage. A poor power supply is the main cause of ESPs disconnecting from the network.

At least your redox fluctuates. But you don’t see the real value on pH, you have only configured one decimal (set NPpHRes 2).

This could be a disadvantage of the change in Tasmota v14.1.0.2. I will probably make this configurable, the systems are slightly different in quality

The range check replaces values outside range with a previously read value. After system boot, there is no previous value (is nil), in this case the current incorrect value can not replaced by the prevous and is replaced with the minimum or maximum of the range - but this is not saved as the previous value for the next range check.
So as long as your system only delivers garbadge after boot, this counter counts up. This really has happened before, but you didn’t realise it because it wasn’t reported.

It is: when the device got stuck, all sensors were unavailable (LWT topic was ‘Offline’) but the new diagnostic sensors were online. I don’t like inconsintencies, so I found a way to use LWT without using it as the main availability_topic. Now they all go unavailable.

It never got stuck like this…maybe only once since I use it. I’m positive it’s Tasmota, but probably that is the effect, not the cause. But I’m speculating…

I could set this up…let’s see if it’s still needed. Thanks.,

Yes, I suspect the same: the system doesn’t provide a clean power supply of 12V, maybe there are spikes that create issues to the DC/DC regulator of the Tail485/Atomic RS485 Base. I’m no expert in electronics unfortunately, it would be cool to find a way to put something that “normalizes” the voltage between the system and the Tail/Atomic base.

Let me know if you find a solution…I don’t even know what a tantalum capacitor is, but I’ll research it now. :slight_smile:

I hope one day ESP device manufacturers fix this problem in their designs. Many issues due to bad power supplies.

Is this the power unit that supplies the 12V in the system board?

image

IIRC, the default in HA for device_class: ph is 1 digit precision. But I could use suggested_display_precision in the sensor definition to modify it.

You mean the automatic “push on change” configurable? So only NPTeleperiod will be effective?

I thought it would simply “skip” the value, so the previous retained value was there, unaffected.If you think about MQTT retained value, it’s better skipping it vs creating a fictitious value. If you don’t write anything to MQTT, there would be no change, so HA would already have the previous value in its sensor. Does it make sense? :slight_smile:

It happens, but now always. I suspect it’s related to the powe supply issue discussed above.

Last night I disconnected the Atom, connected it to serial, factory reset it and factory flashed it. Then I restored the configuration, and reuploaded the Berry scripts. Took 10m.

Now the device seems to be working much better, no hiccups, but it could be a coincidence, I’ll wait some more time before checking if there was any real benefit.

I wanted to ask you: what would be the best and quickest way to backup EVERYTHING, Berry scripts included, and restoring everything from scratch? Because using Tasmota features for backup/restore is not really enough.

Didn’t get it - how can JSON $NeoPool.Connection.MBRequests there but $NeoPool.Type not? Both has the same source tele SENSOR, even you use Tasmota retain for this topic. Do you have a MQTT payload example of this situation?

Edit: I got it, you need the real LWT from the device by using another entity :+1:

Yes
But the quality of the systems seems to vary quite a bit (the low peaks at evening, in the night and noon are are intentional, the system was briefly repowered)
image

NPpHRes 1 returns "pH":{"Data":7.6}, NPpHRes 2 may be returns "pH":{"Data":7.58} in the SENSOR topic.
What I wanted to say is that this has nothing to do with HA, you should increase the resolution of your HA source Tasmota. Your pH value may also fluctuate in the 2nd decimal place, but you just don’t see it 'cause of your default Tasmota setting NPpHRes 1.

“Skipping” (saying deliver nothing) a value is not possible within the Tasmota API model. A sensor/driver can append sensor data to the SENSOR json or not. Skipping single values would result in the SENSOR JSON key not being available for that value for this time. I don’t think that’s a good solution (this might be easy to handle in HA, but that’s not the only system where NeoPool is used).
Moreover, where should a previous value wihtin Tasmota topic come from in a start-up situation? This is also missing.

BTW: NeoPool itself does not publish the SENSOR topic (or not), that is the task of the underlying Tasmota.

Sensors that trigger the SENSOR Topic are divided into two classes.
The first class are sensors that are frequently changes and only trigger a SENSOR topic after NPTelePeriod.
The second class are sensors that change less frequently. These trigger an immediate output of the SENSOR topic when a change occurs.
The change in 14.1.0.2 was to assign the other sensors to class 2 except for temperature (class 1).

The previous solution did lead to irritations not only for me, example: Hydroyse State was set to PolX, but Production was still 0%.

I want to allow a free assignment of the sensors to the two classes, so that everyone can set for themselves what the topic publish triggers.

This is already a very old topic. Back in the Sonoff days, it was common practice to completely delete the ESP flash and reflash the firmware in the event of such errors and crashes. This solved most of the problems by magic.

Unfortunately, there is no solution for exactly that, but almost:
I use my decode-config I wrote for Tasmota to backup/restore all my devices. A simple command line call for the new device restores everything. However, the berry scripts have to be re-uploaded manually.

Your graph is totally different, but I have an Hayward Aquarite+, I think you have a Sugar Valley product. Maybe they use different components for power etc.? Or maybe it’s something related to my AC line (I have a 3 phase 6kW main line), and one of the phases supplies power to the pool equipment.

In any case, the DC/DC regulator A0Z1282CI seems to support 4.5V-36V, so we’re in range. Maybe it’s something related to the implementation by m5stack?

“not appending” is what I mean by “skipping”. If the JSON data doesn’t contain that value it means that integrations that consume the JSON data won’t receive that value, and that’s correct because it was invalid. The Tasmota sensor topic should be retained, so it contains last valid value. Creating a value to replace the invalid one is not really a clean solution because it doesn’t represent reality: reality is that an out of range value is read, and it shouldn’t replace the previous value. But that’s just my way of seeing things. :slight_smile:

I agree with this approach. My only concern it becomes a bit difficult to configure things. But I’m sure you’ll find an easy way to do it.

I don’t really believe in magic. It’s like the “doesn’t work? reboot” approach to problem solving. But yesterday I was a bit desperate and after flashing dev firmware the device was really unstable. So I started from a known state, scratching everything. And after 24h no strange incidents…let’s cross fingers. :slight_smile:

Some months ago I asked TasmoAdmin developer to integrate decode-config for backup/restore. :slight_smile:

Using the integrated Tasmota backup/restore do I leave something behind vs using decode-config? Can you share the command used to fully backup the device?

We both (incl. my Oxilife) have a Sugar Valley product, yours is a rebrand for Hayward.

That’s also not a representation of the reality. Anyway, flapping of values cannot be mapped in every system, this is the main reason.

There are some examples in docs under Save backup/Restore backup, here another one:

(if you have set an admin password, add it with -p on cmnd line, e. g. -p "my!Paszx#")

Backup:

decode-config.py -s <tasmota-ip-host> -o Config_@[email protected] -o Config_@[email protected]

example:

decode-config.py -s SmartPool -o Config_@[email protected] -o Config_@[email protected]

creates two backup files at once:

  • a human readable and editable json file and
  • a Tasmota Web-UI “Restore Configuration” compatible dmp file.

Restore:

decode-config.py -s <tasmota-ip-host> -i Config_@[email protected]

or use the .dmp file with WebUI and “Configuration” → “Restore Configuration”.

An out of range value is due to a problem, it doesn’t represent the real state of what you’re measuring. So it should be ignored, it’s a “bad read”. :slight_smile:

This is fantastic, I thought it only exported the json format. I’ll build a script to backup all my tasmotas…thanks. :slight_smile:

Yeah, so by your logic please tell that to the Sugar Valley people. :slight_smile:

If you tell me how, I will. I’ve already done this with product managers: last time it happened it was Nuki’s product manager. :slight_smile:

@curzon01 I can confirm in these latest tests that out of range values happen only when power-cycling the aquarite+, and not every power-cycle, happened two times out of 4.

Didn’t happen while it’s running…I think also this issue is due to power fluctuations, but it’s just a guess.

Just to report back, I got PoESP32 working .

Used following settings in user_config_override.h

#define USER_TEMPLATE "{\"NAME\":\"M5Stack PoESP32 + RS485\",\"GPIO\":[0,0,0,0,0,5536,0,0,0,0,0,0,6976,7008,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"FLAG\":0,\"BASE\":1}"

// Enable ethernet
#ifndef USE_ETHERNET
#define USE_ETHERNET
#endif

#ifdef ETH_TYPE
  #undef ETH_TYPE
#endif
#define ETH_TYPE 1

#ifdef ETH_CLKMODE
#undef ETH_CLKMODE
#endif
#define ETH_CLKMODE 0

#ifdef ETH_ADDRESS
#undef ETH_ADDRESS
#endif
#define ETH_ADDRESS 1

plus other settings from alexdelprete/HA-NeoPool-MQTT GH repo.

Hi there, I have installed quite everything, but I do not succeed to install the HACS text-divider-row.
It is NOT avail into hacs, and when I do follow the manual install steps, it does not work…
Help would be greatly appreciated please…

I have it in HACS:

image

If you still can’t find it (weird) try clicking this link, it should open HA and bring you directly to the component to install.

Thanks a lot, your link did work perfectly, and now everything is working.