I’m still learning this stuff, but I set up the same kind of alarm for the pool chemistry at our hotel, so I can do the second half.
There’s no “between” in alarm conditions, you write it as a group. The form does one comparison per severity, so switch the rule to JSON mode:
"severities": [
{ "severity": "MAJOR",
"condition": { "any": [
{ "key": "ph", "op": "<", "value": 5.5 },
{ "key": "ph", "op": ">", "value": 6.5 } ] } }
],
"debounce": { "mode": "duration", "raise": 300, "clear": 60 },
"hysteresis": 0.1
The duration debounce is what stops the dosing dip. The condition has to be true for 300 seconds by the device’s own timestamps before the alarm opens. Our chlorine dose dip lasts about two minutes, so 5 minutes was safe. Since you report every 30 s that’s ten readings in a row, plenty.
Hysteresis 0.1 means it clears at 5.6 or above on the low side, 6.4 or below on the high side, so it doesn’t flap at the edge.
All of this is on Alarm conditions reference, and the debounce part on the page next to it.

