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

I think we have different opinion about “cleaner setup”, this is the first device I used, the Atom with the Tail485, and it’s so small that I closed it inside the controller, so you won’t see anything from the outside.

Then I switched to the Atomic RS485 base + Atom because it’s more compact, but less flexible (you can’t use the additional GPIO pins).

I think being invisible and embedded in the controller is the cleanest setup. :

So I think the waveshare device is not an esp32 device will not be an out of the box solution …
what about the m5stack POE esp32 device ?

waveshare devices are only bridges that allow you to receive data from the rs485 interface to usb or tcp (depends on the model). they are not smart devices with a fw like Tasmota and the Neopool driver that can actually communicate with the system, because they know the protocol.

in other terms: waveshare only works at lower ISO/OSI layers, Tasmota+Neopool span to the upper layers.

See my answer to tarvi 5 posts before

thank you sorry i’ve missed it. good there are probably other devices out there with Eth to be tested out …Quinled could be another one to test , i’ll have one for the led setup i will perhaps try…

@curzon01 I wanted to resolve this issue in the “cleanest” way possible, since I’m having spikes again (in pH readings this time). Reading MQTT Sensor docs and this excellent post by @Troon I think the availability_template could be used to skip out of range payload values.

image

Something like this for each sensor should work (needs some testing obviously):

pH sensor:

availability_template: "{{ 'Online' if (6 <= value|float(0) <= 9) else 'Offline' }}"

In NeoPool docs do we have ranges documented for all sensors? Didn’t check yet.

Please let me know your feedback then I’ll start updating all sensors with range checks.

Thanks.

I had been thinking about this problem for a while, but due to a lack of time weeks ago I didn’t really try any of the solutions.

I can also see that post-processing on the HA side has some disadvantages:

First, for a value such as the current hydrolysis level, you would have to take into account what the value range is - unfortunately, this is system-dependent (0-100% is known for HA but not x for 0-x g/h).

Secondly I also don’t really like the solution of handling nul (nan/nil) values using the availability status of an entity. Here we are misusing a functionality (and its status) for something for which it is not intended.

Unfortunately (for me :slight_smile:), I also come to the conclusion that the values in the data chain should be checked beforehand (NeoPool), even if this means a small rat’s tail of additional implementation (error counting and publishing) and even this solution would not be possible for all possible data (only for the most important measured values) and only for values that are outside a valid range - we do not eliminte spikes within valid ranges. Spikes within the min/max of a sensor are also present and cannot be eliminated using this method. I have not really found a working solution for this problem. All the ones I know must be able to change one or two past dates, which is not possible. But we only know one or two measurements later whether a measured value was a spike within valid range or a valid value.

I am thinking about implementing a check within NeoPool - may be limited (default) to ESP32.

Well, % sensor is available on both systems, IIRC. If a system doesn’t have g/h, then that sensor won’t be used so it’s not a problem from my point of view.

I agree, but since HA doesn’t provide a range-limit functionality for sensors, that seems like a way to implement it. Not clean, but it seems to be working.

That’s why I like collaborating with you: you are intellectually honest and open to change your mind. It already happened in the past, and I’m glad you came to my same conclusion. :slight_smile:

I think that’s more than enough.

we could try to detect those anomalies: by checking the delta variations in time, but it’s up to you how far you want to go with this. It is technically possible, but it seems overkill to me. I only saw out of scale spikes, but that’s just my personal experience.

I’m open to discuss about this if you decide to pursue it.

I can understand why. With time, even if you said in the past you don’t want to maintain two NeoPool versions, I think it will be inevitable. Also because ESP32 is now widely spread and having more functionalities in the ESP32 vs ESP82xx seems reasonable to me. The only problem is having to maintain both, but you could decide to freeze developement for ESP82xx and only add new features to ESP32.

Let me know how I can be of help for you. :slight_smile:

Pls check implementation having some sensor data range validation and communication statistic - see Tasmota PR #21721 for details.

For testing:
The development branch in your repo contains firmware including PR #21721.

Note: The ESP8266 binary also contains these functions as an exception (unlike to the default), but has not been tested. There may be stability problems on ESP8266 (depends on other usage), but ESP8266 + data validation/statistic has no priority for me. But I will not include this in any release binaries. If someone wants to have the validation/statistics in the ESP8266, they have to compile their binary themselves (how, that is described in the PR above).

Seems like a good compromise. Will you support people that will compile it themselves? If not, I would not include those features for ESP8266. But it’s your decision…

I will add these to the sensors package, in the diagnostic category, so we can understand better what’s going on, in case of issues:

  • MBRequests is the total number of system request
  • MBNoError is the total number of system responses without error
  • MBNoResponse is the number of MBRequests having no repsonse
  • DataOutOfRange is the total number of values outside the valid range

I will test the dev firmware as soon as possible and will give you feedback. Thanks.

In which case? Compiling in general or adding this function to ESP8266 with NeoPool? The latter is already described in the PR.

If there are users who are not able to compile Tasmota themselves and loading binaries from a development branch onto their ESP, they have done something wrong anyway. Developer branch binaries are for testing purposes only, in general end users should not use material from such a branch.
As I wrote, the ESP8266 binary within main branch will never have this functionality included.

Do you intend to remain backwards compatible by checking the existence of these json keys?

Edit: Typo

The latter: since you said there might be stability issues, in case of problems will you support them? In case you will, I don’t understand the choice of not publishing pre-compiled firmware files. But it’s just my curiosity. I thought you wanted to discourage the use of ESP8266 with these latest firmwares.

this is what led me to ask the question: if it’s not a main branch feature for ESP8266, I guessed there would also be no support for it.

I will try to.

:point_up_2:

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.