Help - I can't get the "Better Laundry Monitor" app to work

I'm not getting the "cycle done" message in the logs. I've only been using it for a week so I'm on the latest version. When I initially tried it, it ran through the entire cycle and did the echo notifications. Now it just stops after 1st delay. Not sure what to do at this point, maybe just delete the app and start over.

If you don't get further Power Reports from your sensor, then it will wait there 'forever'.. or to the Max Cycle time (deadman).

I ran a test yesterday using a pseudo Power Sensor driver I created. It allows me to simply set values for Power manually. I have the Thresholds set to:

Using the latest driver, I got these Logs:

app:103 2020-01-17 09:46:52.209 am debug Cycle finished after delay.
app:103 2020-01-17 09:46:52.187 am debug fixed: today at 9:46am
app:103 2020-01-17 09:46:52.123 am debug send: BLM says Washer Cycle ended
dev:151 2020-01-17 09:42:12.695 am trace pseudoWasher setPowerLevel 0
app:103 2020-01-17 09:41:51.992 am debug Ending duration is set, waiting
app:103 2020-01-17 09:41:51.944 am debug Power: 0W, State: true, thresholds: 5.0 2.0 2 1500.0
dev:151 2020-01-17 09:41:51.825 am trace pseudoWasher setPowerLevel 0
app:103 2020-01-17 09:41:47.378 am debug We hit delay 1 times
app:103 2020-01-17 09:41:47.336 am debug Power: 1W, State: true, thresholds: 5.0 2.0 2 1500.0
dev:151 2020-01-17 09:41:47.214 am trace pseudoWasher setPowerLevel 1
app:103 2020-01-17 09:41:40.022 am debug We hit the delay 1 times but cleared it
app:103 2020-01-17 09:41:39.996 am debug Power: 5W, State: true, thresholds: 5.0 2.0 2 1500.0
dev:151 2020-01-17 09:41:39.879 am trace pseudoWasher setPowerLevel 5
app:103 2020-01-17 09:41:28.168 am debug We hit delay 1 times
app:103 2020-01-17 09:41:28.139 am debug Power: 0W, State: true, thresholds: 5.0 2.0 2 1500.0
dev:151 2020-01-17 09:41:28.046 am trace pseudoWasher resetPower
app:103 2020-01-17 09:41:21.916 am debug We hit the delay 1 times but cleared it
app:103 2020-01-17 09:41:21.887 am debug Power: 5W, State: true, thresholds: 5.0 2.0 2 1500.0
dev:151 2020-01-17 09:41:21.769 am trace pseudoWasher setPowerLevel 5
app:103 2020-01-17 09:41:12.723 am debug We hit delay 1 times
app:103 2020-01-17 09:41:12.685 am debug Power: 1W, State: true, thresholds: 5.0 2.0 2 1500.0
dev:151 2020-01-17 09:41:12.592 am trace pseudoWasher setPowerLevel 1
app:103 2020-01-17 09:41:05.255 am debug Power: 2W, State: true, thresholds: 5.0 2.0 2 1500.0
dev:151 2020-01-17 09:41:05.141 am trace pseudoWasher setPowerLevel 2
app:103 2020-01-17 09:40:56.459 am debug Power: 5W, State: true, thresholds: 5.0 2.0 2 1500.0
dev:151 2020-01-17 09:40:56.317 am trace pseudoWasher setPowerLevel 5
app:103 2020-01-17 09:40:46.229 am debug Cycle started.
app:103 2020-01-17 09:40:46.218 am debug fixed: today at 9:40am
app:103 2020-01-17 09:40:46.134 am debug send: BLM says Washer Cycle Started
app:103 2020-01-17 09:40:46.113 am debug Power: 166W, State: false, thresholds: 5.0 2.0 2 1500.0
dev:151 2020-01-17 09:40:45.933 am trace pseudoWasher setPowerLevel 166
--- Live Log Started, waiting for events ---

What you can see is I set the power to validate the thresholds... Above 5 (166W) to start the cycle. Then a simulation of the dryer stopping for cool down, restarting (fluff?), and finally ending.

166W
5W
2W
1W
5W
0W (reset power)
5W
1W
0W
0W (second 'report' of a zero)

You can see two send: messages, a start and an end, the end is 5 mins after "Ending duration is set, waiting" -- everything is as expected.

@csteele What does your application state look like when the monitor isn't active? This is mine...

I'm assuming that CycleEnd is an integer date and it corresponds to the last time when the monitor thought that a cycle ended, which in this case would be last Monday 1/13 at 12:42pm. It's correct, a cycle did end then, but there were two cycles ran yesterday 1/17 that it never saw as ending. In the debug logs it shows both starting but no end.

cycleOn means that it thinks there is still an active cycle?

So my next question, is why would it not think that the cycle has ended? If the power monitor drops below 2W for 1 reporting, that should signal cycle end. The power monitor (it is a Wemo Insight using the Wemo connect app) is still showing power: 0 on the device page. So I'm still not getting how the monitor thinks there is an active cycle with 0 power being drawn.

Thanks for your help.

OK I get it now. I've got a different version of this app. I'm gonna delete it and take the one from the community github.

Hi @csteele, I just started using this app and I'm wondering about the 'done' triggers. How does the 'continuous minutes' portion work? I have both settings in the app set at 2. What I'm seeing is that the continuous minutes timer doesn't seem to start unless it sees the other condition (2 continuous readings) happen. I was sorta expecting the continuous minutes timer to be independent of the continuous reading so that it would capture a situation where the power meter doesn't report the same 'off value (0W in my case)' more than once. Right now I only get the 'done' after the deadman timer runs out. It just so happens that my washer (which is setup the same) takes a bit longer to shut down and does get 2 reports under the threshold so I can see in the logs that the 2 minutes starts only after the 2nd reading under the threshold.

So, I was figuring the 'done' would be either 2 continuous readings below the threshold (which does not happen in my case) or 2 minutes after receiving the first value below the threshold. But that doesn't appear to be the case.

Is that the expected behavior? Or am I mis-understanding something?
Thanks for all your great work!

EDIT: I took some time and reviewed the code and I think that is the way it's supposed to work. If I get some time I may try to update the code to work the way I was hoping. This way I can capture a one time power off threshold.

Modern washers and dryers are more energy conservative and when they go idle, it looks a lot like OFF. The logic in BLM is to have a power threshold above which is "on" and below is "off". Modern machines might need that threshold set to 1-2 watts. Even then it might not be distinguishable. That's where the number of cycles comes in. If a normal cycle on your machine appears to have 2, 3 or even a dozen "fake off" values, then just count how many and set that value. Note that it has to be the same every time :smiley: If that's not quite enough, and someone in the family chooses a less used cycle, "end/off" might not be detected. That's where the "deadman" value comes in and simply sets a total maximum time for Any cycle.

Got it, I just thought that the 2 done scenarios were independent so that you can capture both situations, multiple reportings below or one report below for some minutes. This way you can also capture a done condition if the energy monitor doesn't continually report. No biggie, I'll figure something out. Thanks!

Hi @csteele, Just FYI... I got some time and tweaked the driver a little to make those 2 events independent as this better served my situation. During my debugging I came across a scenario that, I think, affects the original version, too. Maybe it's by design I don't know.

Assuming you have the number of repeat 'below threshold' events set. After the cycle has started the first 'below' event triggers fine but then if the power goes back above the threshold I do not believe that count gets reset. Because if another 'below' event occurs then the 'number of repeat' events gets satisfied and the cycle ending timer (if set) starts or the cycle ends immediately (if timer not set).

I had it in my mind that if the power goes back above the low threshold then that would reset the counter, but maybe there is a reason not to.

Thanks again for the great work!

Screenshot 2024-09-18 at 7.35.18 PM

It works that way to implement Sequential Reportings. In my example above, it needs two reports in a row without a report that is above the threshold.

I made three experiments:
First, with the following settings:
Screenshot 2024-09-19 at 4.08.53 AM

The log results are:

app:904 2024-09-19 04:05:13.468 AM info  Cycle finished.
app:904 2024-09-19 04:05:13.463 AM debug banner: today at 4:05am
app:904 2024-09-19 04:05:13.459 AM debug send: Washing is done!
app:904 2024-09-19 04:05:13.450 AM debug Power: 1W, State: true, thresholds: 10.0 4.0 2 0 optional: 500.0 null 6
dev:464 2024-09-19 04:05:13.416 AM debug pseudoPowerPlug setPower: 1
app:904 2024-09-19 04:05:10.299 AM debug We hit Power Delay 1 times
app:904 2024-09-19 04:05:10.279 AM debug Power: 2W, State: true, thresholds: 10.0 4.0 2 0 optional: 500.0 null 6
dev:464 2024-09-19 04:05:10.201 AM debug pseudoPowerPlug setPower: 2
app:904 2024-09-19 04:05:06.664 AM debug We hit the Power Delay 1 times but cleared it
app:904 2024-09-19 04:05:06.657 AM debug Power: 5W, State: true, thresholds: 10.0 4.0 2 0 optional: 500.0 null 6
dev:464 2024-09-19 04:05:06.608 AM debug pseudoPowerPlug setPower: 5
app:904 2024-09-19 04:05:02.706 AM debug We hit Power Delay 1 times
app:904 2024-09-19 04:05:02.701 AM debug Power: 3W, State: true, thresholds: 10.0 4.0 2 0 optional: 500.0 null 6
dev:464 2024-09-19 04:05:02.652 AM debug pseudoPowerPlug setPower: 3
app:904 2024-09-19 04:04:55.074 AM debug Power: 4W, State: true, thresholds: 10.0 4.0 2 0 optional: 500.0 null 6
dev:464 2024-09-19 04:04:55.025 AM debug pseudoPowerPlug setPower: 4
app:904 2024-09-19 04:04:49.548 AM debug Power: 77W, State: true, thresholds: 10.0 4.0 2 0 optional: 500.0 null 6
dev:464 2024-09-19 04:04:49.392 AM debug pseudoPowerPlug setPower: 77
app:904 2024-09-19 04:04:39.978 AM info  Cycle started.
app:904 2024-09-19 04:04:39.964 AM debug banner: today at 4:04am
app:904 2024-09-19 04:04:39.928 AM debug send: Washing has started!
app:904 2024-09-19 04:04:39.922 AM debug Power: 90W, State: false, thresholds: 10.0 4.0 2 0 optional: 500.0 null 6
dev:464 2024-09-19 04:04:39.658 AM debug pseudoPowerPlug setPower: 90
  • Power hit 90 watts and started the Cycle because it is higher than the Start Cycle value of 10 watts.
  • Power hit 77 watts and nothing changed, still higher than the Start Cycle value of 10 watts.
  • Power hit 4 watts and nothing changed, not below the End Cycle value of 4 watts.
  • Power hit 3 watts, below the End Cycle value of 4 watts for 1 time.
  • Power hit 5 watts, above the End Cycle value and the counter was reset.
  • Power hit 2 watts, below the End Cycle value of 4 watts for 1 time.
  • Power hit 1 watts, below the End Cycle value of 4 watts for a 2nd time and the Cycle ended.

Second, with the following settings:
Screenshot 2024-09-19 at 4.09.19 AM

The difference is "Stop after power has been below the threshold for this many minutes" was set to 2.

The log results are:

app:904 2024-09-19 04:12:26.308 AM info  Cycle finished after delay.
app:904 2024-09-19 04:12:26.303 AM debug banner: today at 4:12am
app:904 2024-09-19 04:12:26.290 AM debug send: Washing is done!
app:904 2024-09-19 04:10:26.256 AM debug Ending duration is set, waiting 2 minutes
app:904 2024-09-19 04:10:26.248 AM debug Power: 1W, State: true, thresholds: 10.0 4.0 2 2 optional: 500.0 null 6
dev:464 2024-09-19 04:10:26.206 AM debug pseudoPowerPlug setPower: 1
app:904 2024-09-19 04:10:21.728 AM debug We hit Power Delay 1 times
app:904 2024-09-19 04:10:21.719 AM debug Power: 2W, State: true, thresholds: 10.0 4.0 2 2 optional: 500.0 null 6
dev:464 2024-09-19 04:10:21.667 AM debug pseudoPowerPlug setPower: 2
app:904 2024-09-19 04:10:14.088 AM debug We hit the Power Delay 1 times but cleared it
app:904 2024-09-19 04:10:14.082 AM debug Power: 5W, State: true, thresholds: 10.0 4.0 2 2 optional: 500.0 null 6
dev:464 2024-09-19 04:10:13.941 AM debug pseudoPowerPlug setPower: 5
app:904 2024-09-19 04:10:10.747 AM debug We hit Power Delay 1 times
app:904 2024-09-19 04:10:10.743 AM debug Power: 3W, State: true, thresholds: 10.0 4.0 2 2 optional: 500.0 null 6
dev:464 2024-09-19 04:10:10.685 AM debug pseudoPowerPlug setPower: 3
app:904 2024-09-19 04:10:07.093 AM debug Power: 4W, State: true, thresholds: 10.0 4.0 2 2 optional: 500.0 null 6
dev:464 2024-09-19 04:10:06.948 AM debug pseudoPowerPlug setPower: 4
app:904 2024-09-19 04:09:58.028 AM debug Power: 78W, State: true, thresholds: 10.0 4.0 2 2 optional: 500.0 null 6
dev:464 2024-09-19 04:09:57.978 AM debug pseudoPowerPlug setPower: 78
app:904 2024-09-19 04:09:49.499 AM info  Cycle started.
app:904 2024-09-19 04:09:49.494 AM debug banner: today at 4:09am
app:904 2024-09-19 04:09:49.487 AM debug send: Washing has started!
app:904 2024-09-19 04:09:49.482 AM debug Power: 98W, State: false, thresholds: 10.0 4.0 2 2 optional: 500.0 null 6
dev:464 2024-09-19 04:09:49.411 AM debug pseudoPowerPlug setPower: 98
  • Power hit 98 watts and started the Cycle because it is higher than the Start Cycle value of 10 watts.
  • Power hit 78 watts and nothing changed, still higher than the Start Cycle value of 10 watts.
  • Power hit 4 watts and nothing changed, not below the End Cycle value of 4 watts.
  • Power hit 3 watts, below the End Cycle value of 4 watts for 1 time.
  • Power hit 5 watts, above the End Cycle value and the counter was reset.
  • Power hit 2 watts, below the End Cycle value of 4 watts for 1 time.
  • Power hit 1 watts, below the End Cycle value of 4 watts for a 2nd time and the EndCycleDelay started.
  • 2 minutes later, the Cycle ended.

Third, with the exact same settings:

The log results are:

app:904 2024-09-19 04:36:09.917 AM info  Cycle finished after delay.
app:904 2024-09-19 04:36:09.913 AM debug banner: today at 4:36am
app:904 2024-09-19 04:36:09.905 AM debug send: Washing is done!
app:904 2024-09-19 04:34:09.885 AM debug Ending duration is set, waiting 2 minutes
app:904 2024-09-19 04:34:09.861 AM debug Power: 2W, State: true, thresholds: 10.0 4.0 2 2 optional: 500.0 null 6
dev:464 2024-09-19 04:34:09.831 AM debug pseudoPowerPlug setPower: 2
app:904 2024-09-19 04:34:05.427 AM debug We hit Power Delay 1 times
app:904 2024-09-19 04:34:05.389 AM debug Power: 3W, State: true, thresholds: 10.0 4.0 2 2 optional: 500.0 null 6
dev:464 2024-09-19 04:34:05.353 AM debug pseudoPowerPlug setPower: 3
app:904 2024-09-19 04:33:33.751 AM debug Power resumed during timeout
app:904 2024-09-19 04:31:57.843 AM debug We hit the Power Delay 1 times but cleared it
app:904 2024-09-19 04:31:57.839 AM debug Power: 33W, State: true, thresholds: 10.0 4.0 2 2 optional: 500.0 null 6
dev:464 2024-09-19 04:31:57.796 AM debug pseudoPowerPlug setPower: 33
app:904 2024-09-19 04:31:50.773 AM debug Resetting end timer
app:904 2024-09-19 04:31:50.758 AM debug Power: 6W, State: true, thresholds: 10.0 4.0 2 2 optional: 500.0 null 6
dev:464 2024-09-19 04:31:50.707 AM debug pseudoPowerPlug setPower: 6
app:904 2024-09-19 04:31:33.728 AM debug Ending duration is set, waiting 2 minutes
app:904 2024-09-19 04:31:33.716 AM debug Power: 1W, State: true, thresholds: 10.0 4.0 2 2 optional: 500.0 null 6
dev:464 2024-09-19 04:31:33.690 AM debug pseudoPowerPlug setPower: 1
app:904 2024-09-19 04:31:29.631 AM debug We hit Power Delay 1 times
app:904 2024-09-19 04:31:29.625 AM debug Power: 2W, State: true, thresholds: 10.0 4.0 2 2 optional: 500.0 null 6
dev:464 2024-09-19 04:31:29.522 AM debug pseudoPowerPlug setPower: 2
app:904 2024-09-19 04:31:25.975 AM debug We hit the Power Delay 1 times but cleared it
app:904 2024-09-19 04:31:25.971 AM debug Power: 5W, State: true, thresholds: 10.0 4.0 2 2 optional: 500.0 null 6
dev:464 2024-09-19 04:31:25.913 AM debug pseudoPowerPlug setPower: 5
app:904 2024-09-19 04:31:22.332 AM debug We hit Power Delay 1 times
app:904 2024-09-19 04:31:22.327 AM debug Power: 3W, State: true, thresholds: 10.0 4.0 2 2 optional: 500.0 null 6
dev:464 2024-09-19 04:31:22.192 AM debug pseudoPowerPlug setPower: 3
app:904 2024-09-19 04:31:18.555 AM debug Power: 4W, State: true, thresholds: 10.0 4.0 2 2 optional: 500.0 null 6
dev:464 2024-09-19 04:31:18.419 AM debug pseudoPowerPlug setPower: 4
app:904 2024-09-19 04:30:55.949 AM debug Power: 73W, State: true, thresholds: 10.0 4.0 2 2 optional: 500.0 null 6
dev:464 2024-09-19 04:30:55.889 AM debug pseudoPowerPlug setPower: 73
app:904 2024-09-19 04:30:42.254 AM info  Cycle started.
app:904 2024-09-19 04:30:42.248 AM debug banner: today at 4:30am
app:904 2024-09-19 04:30:42.200 AM debug send: Washing has started!
app:904 2024-09-19 04:30:42.116 AM debug Power: 93W, State: false, thresholds: 10.0 4.0 2 2 optional: 500.0 null 6
dev:464 2024-09-19 04:30:42.067 AM debug pseudoPowerPlug setPower: 93
  • Power hit 93 watts and started the Cycle because it is higher than the Start Cycle value of 10 watts.
  • Power hit 73 watts and nothing changed, still higher than the Start Cycle value of 10 watts.
  • Power hit 4 watts and nothing changed, not below the End Cycle value of 4 watts.
  • Power hit 3 watts, below the End Cycle value of 4 watts for 1 time.
  • Power hit 5 watts, above the End Cycle value and the counter was reset.
  • Power hit 2 watts, below the End Cycle value of 4 watts for 1 time.
  • Power hit 1 watts, below the End Cycle value of 4 watts for a 2nd time and the EndCycleDelay started.
  • Before the Delay could expire, power hit 6 watts and reset the delay.
  • Power hit 33 watts and cleared the cycle end.
  • Power hit 3 watts, below the End Cycle value of 4 watts for 1 time.
  • Power hit 2 watts, below the End Cycle value of 4 watts for a 2nd time and the EndCycleDelay started.
  • 2 minutes later, the Cycle ended.

All the results are what I'm expecting, which isn't surprising since I wrote it to work that way. :slight_smile: Some of the injected power values are 'invisible' in the sense that they don't alter the trajectory of the cycle. Dropping power to the exact threshold and having it be ignored, just proves that "below" is actually coded correctly, for example.

Thanks for the detailed reply, I'm sure it works how you intened, i must have missed something.

When i was looking at/debugging my version (which didn't alter the structure too much, but obviously i must have) I was noticing that if the the cycleEnding was set (due to 1 event below threshold) and an 'above' event happened the first 'if' statement triggered but then the remaining 'else if's were skipped (obviously) therefore skipping the reset of the powerDelay. Then on the next 'below' event the end of the cycle was triggered.

So then it's obvious that I introduced the issue, it works ok now in my version which better suits my operating/reporting conditions.

In any event, thanks again and sorry to have bugged you. Next beer's on me
Happy Hour Drinking GIF

2 Likes