Yesterday I wrote that in its current mode my sump pump monitor controls every number it reports except one, the power the pump draws at the end of each 120-second pulse, and that "the watts have one value." I had looked at 1,322 pulses as a pile. This morning I looked at them as days, and the sentence is wrong. The watts had two values last week, and the second one was set by the power company.
That matters beyond my basement because of what the trade press was selling this week. A predictive-maintenance vendor's list of 2026 trends, reprinted by the Edge AI and Vision Alliance, puts "a single machine health score" built from sensor and visual data near the top. BrainChip announced a neuromorphic co-processor that hangs off the SPI bus of whatever microcontroller a product already has and hands back "a detected fault" from the sensor stream, learning on the chip. ANYbotics shipped the first legged inspection robot certified for explosive atmospheres, aimed at "pumps, compressors, valves, and piping" in oil and gas, and sold on turning inspection data into maintenance action. Every one of these scores a motor, and every score of a motor I have ever seen starts from its power draw. Here is what mine measured.
The table I should have built yesterday
The plug reports the line voltage every ten minutes in a heartbeat. I take the median of the idle readings each day, when the pump is off and the plug is just a voltmeter on a basement outlet. The controller runs the pump for two minutes every twelve, 119 pulses a day, and logs the watts at the end of each. Here are the last twelve days, all without rain.
| Date | Idle line voltage (median) | Pulse watts (median) | Pulses under 450 W | Digest |
|---|---|---|---|---|
| Oct 17 | 122.7 | 496 | 0 | OK |
| Oct 18 | 122.5 | 492 | 0 | OK |
| Oct 19 | 123.4 | 505 | 0 | OK |
| Oct 20 | 123.9 | 510 | 0 | OK |
| Oct 21 | 119.7 | 460 | 31 | OK |
| Oct 22 | 119.3 | 453 | 40 | OK |
| Oct 23 | 120.0 | 467 | 13 | OK |
| Oct 24 | 122.8 | 501 | 0 | OK |
| Oct 25 | 122.7 | 498 | 0 | OK |
| Oct 26 | 122.7 | 497 | 0 | OK |
| Oct 27 | 122.7 | 499 | 0 | OK |
| Oct 28 (to 7:40 am) | 123.0 | 502 | 0 | OK |
The hourly log puts the edges at about 8 am on October 21 and 1 pm on October 23, fifty-three hours. The lowest heartbeat was 117.2 volts. The pump drew a median of 453 watts on the 22nd against 499 on an ordinary October day, down 45 watts, nine percent, for a drop of three and a half volts, under three percent. Eighty-four pulses in those three days came in under 450 watts. In the nine days around them, none did.
Since the plug started reporting voltage in March, only three days have a daily median under 121 volts. They are these three.
What each layer said
Four pieces of software watch this pump. I checked each one against the three days.
- The monitor alerts below 110 volts and above 130. The grid never went below 117.2, so it said nothing. It was right to. The utility standard for service voltage allows down to 114 at the meter and 110 at the outlet; 119 is in range. Nothing was wrong with the grid, and nothing was wrong with the pump.
- The assessor, which classifies the situation every fifteen minutes, printed the same verdict 299 times in three days: high inflow, informational, "pump is healthy."
- The daily digest said OK three mornings. Its subject line carries one instantaneous power reading taken at eight o'clock. Two subjects this week read 497 and 517 watts; the rest read zero, because the pump happened to be off.
- The language model that reads an hour of log four times a day wrote twelve notes across the three days. It used the word "healthy" in eight of them and the word "voltage" in none. At noon on the 22nd it wrote "healthy ~450-465W wet cycles." At midnight on the 24th, with the grid back, it wrote "wet-cycle power steady 483-501W (healthy)." Both are true sentences about the hour in front of it. Its prompt does not contain the word voltage, so it had no reason to connect them.
Nobody and nothing noticed that the pump's one unconstrained number had moved nine percent and moved back, because every layer judges the watts against a threshold or against the previous hour, and the watts never crossed a threshold or changed within an hour. They changed within a morning, stayed changed for two days, and recovered within an afternoon.
Twelve watts per volt
So I did the thing the three-day sag made obvious and asked the whole record. There are 180 days with both a voltage series and more than fifty pulses. Plotting each day's median pulse watts against its median idle voltage gives a straight line:
watts = 11.79 x volts - 949.5 r = 0.96, n = 180 days last 30 days: r = 0.99, 12.4 watts per volt
The day-to-day standard deviation of the pump's watts is 7.5 watts raw. After subtracting the line, it is 2.1 watts. Ninety-two percent of the variation in the number I have been treating as the pump's vital sign is the voltage at the outlet. The three sag days land on the line like any other: their residuals are -1.2, -3.7 and +1.6 watts. The motor did not change. The supply did.
Then the fit answered a question I have been failing to answer since spring. In August I went looking for a wear trend in the watts and found a sampling artifact instead. In September I tried again with 14,946 readings and got a trend that flipped sign depending on whether I controlled for the plug's temperature or the voltage, and I wrote that the missing variable was an ambient temperature I was not measuring. Here are the monthly medians with the voltage removed.
| Month | Idle voltage (median) | Pulse watts (median) | Residual after fit (W) | Plug temp at pulse (C) |
|---|---|---|---|---|
| March | 122.5 | 494 | -3.1 | 37.3 |
| April | 123.0 | 500 | -1.3 | 39.0 |
| June | 122.4 | 493 | -0.6 | 47.0 |
| July | 121.9 | 487 | +0.3 | 49.6 |
| August | 122.0 | 489 | +0.5 | 49.6 |
| September | 122.3 | 493 | +0.1 | 48.0 |
| October | 122.7 | 499 | +1.2 | 44.0 |
The raw watts dip thirteen watts from April to July and come back. So does the voltage, by a volt, and the summer is when the plug runs hot. Across days, idle voltage and plug temperature correlate at -0.53: hot season, low voltage. That is why temperature kept showing up as a covariate and kept flipping the sign. It was standing in for the season, and the season was standing in for the grid. With the voltage out, the motor's monthly residual runs from -3.1 watts in March to +1.2 in October. Four watts on a 493-watt motor, under one percent, in eight months. There is no wear trend. There was never a wear trend. There was a voltmeter.
What a health score is made of
Now back to the week's products. A single machine health score, learned from sensor data, alerting on deviation from baseline. A chip that learns the motor's normal on-device and reports a detected fault. An inspection robot trained on synthetic clips of "changes between facility visits." These are good products and I would like to sell the small-building version of all of them. But every one of them, applied to a motor, begins with the watts or the current, and a score that begins with the watts and does not carry the line voltage as a covariate is a voltmeter with a motor attached.
Run my three days through such a score. A baseline learned in a 122.7-volt month sees a 119-volt week and scores the pump nine percent sicker. A maintenance ticket opens. A technician finds a pump in perfect health and closes it, and the next alert from that score is read a little slower. That is the false positive, and it is a real event in my log. The false negative is the mirror: on a day the grid runs two volts high, which it did on the 20th, a motor that has genuinely lost 24 watts, five percent, reads exactly normal. At twelve watts per volt the grid can hide or invent a five percent change in the motor on any given day, and the utility is allowed to move the voltage five percent in either direction and still be in spec.
The vendor question is short. Does the score carry line voltage, or does it learn a baseline and alert on deviation? If the answer is a baseline, ask what the score did the last time the utility sagged for two days, because it has, and the plant did not have a two-day outbreak of failing motors.
The fix is one subtraction
The plug already reports the voltage. The monitor already logs it, ten minutes apart, in the heartbeat. What it does not do is write the voltage on the same line as the watts, or compute the one number that is actually about the pump:
corrected = watts - 11.8 x (volts - 122.3)
That goes in the pulse log, in the digest subject in place of the instantaneous reading, in the sentence the assessor prints, and in the prompt the language model reads. The alert is on a 20-watt move in the daily median of the corrected number, which is four percent of the motor and ten times the residual's day-to-day noise. None of my existing thresholds would ever fire on the thing this detects. The number that would fire is the one I never computed.
I will say again what I said yesterday, because the three days say it louder. The monitor has been up since September 2 without a restart. It wrote every heartbeat and every digest through the sag. It was running, and running was never the hard part. It was also, for fifty-three hours, reporting a number about the power company and labeling it the pump, and no layer I built, including the one that reads English, could tell. I found it by making a table with one more column.
If you have a motor on a monitor, or a vendor's health score on a motor: pull a month of the power readings and the line voltage, take the daily medians, and plot one against the other. If the points lie on a line, your health number is the slope times the grid plus a small remainder, and the remainder is your motor. Alert on the remainder. The slope on my one-third horsepower pump is twelve watts per volt. Yours will differ. The shape will not.
Is your health score measuring the machine, or the outlet?
I build and audit monitoring for small buildings: sump pumps, boilers, compressors, anything with a motor and a power draw. The audit starts with the raw readings and the question of what each number actually tracks.
See the Physical AI practice