Conversation
A shutoff valve with no water-temperature sensor does not omit tempF from telemetry, it returns a constant placeholder (225 on the units this was written against). Passed through, it is indistinguishable from a measurement: consumers chart it, store it in long-term statistics, and trigger on it. Recorder data from one valve over nine days: the temperature entity logged 70 rows with two distinct values, 225 and unavailable, while flow logged 19 distinct values and pressure 18 over the same window. The device reports live data; it simply never measures a temperature. Across 168 consecutive hourly buckets from /water/metrics, averageTempF was 225 in 166 and null in 2, with no other value. get_info now sets telemetry.current.tempF to None when it is at or above boiling. The check is against boiling rather than 225 so it does not depend on every unit using the same sentinel. Detectors report ambient air through the same field and cannot approach it. Tests are parametrized across the boundary (225/212/220/300 suppressed, 70/211.9/33 passed through) so the check cannot regress to special-casing the one value seen in the wild.
21 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The problem
A Flo Smart Water Shutoff with no water-temperature sensor does not omit
tempFfrom telemetry, it returns a constant placeholder — 225 on the units I have
access to.
get_infopasses it through, so consumers cannot tell it from ameasurement. 225 °F is above the boiling point of water and far above anything a
domestic supply carries.
Recorder data from one valve over nine days:
225(x60),unavailable(x10)Over the same window flow logged 19 distinct values and pressure 18, so the
device was reporting live data. It simply never measures a temperature.
Across 168 consecutive hourly buckets from
/water/metrics,averageTempFwas225in 166 andnullin 2, with no other value. It is also225in livetelemetry sampled at 15-second resolution during real water use, so it does not
vary with flow, time or usage.
The change
get_infosetstelemetry.current.tempFtoNonewhen it is at or aboveboiling. Nothing else in the block is modified.
The threshold is boiling rather than 225 so the check does not depend on every
unit using the same sentinel. Detectors report ambient air temperature through
the same field and cannot approach it.
Why here rather than downstream
Home Assistant's
flointegration publishes this value as aSensorDeviceClass.TEMPERATUREwithSensorStateClass.MEASUREMENT, so it landsin long-term statistics. I opened home-assistant/core#182004 to filter it there
and the review asked for it in the library instead, which is the right call:
every
aiofloconsumer has the same problem, and this is a protocol quirk ratherthan a presentation choice.
Related: home-assistant/core#180671.
Tests
Parametrized across the boundary — 225, 212, 220 and 300 are suppressed; 70,
211.9 and 33 pass through unchanged. Full suite passes (35).