AqualinkD icon indicating copy to clipboard operation
AqualinkD copied to clipboard

Speeds not changing for scheduled pump tasks

Open johntdyer opened this issue 1 week ago • 5 comments

When I check the schedule I get the folllowing

nfo:  Sched/Timr:Read from cron. Enabled:1 Min:0 Hour:0 DayM:* Month:* DayW:* URL:/api/Filter_Pump/RPM/set Value:1250
Info:  Sched/Timr:Read from cron. Enabled:1 Min:0 Hour:7 DayM:* Month:* DayW:* URL:/api/Filter_Pump/RPM/set Value:1750
Info:  Sched/Timr:Read from cron. Enabled:1 Min:0 Hour:11 DayM:* Month:* DayW:* URL:/api/Filter_Pump/RPM/set Value:3250
Info:  Sched/Timr:Read from cron. Enabled:1 Min:0 Hour:16 DayM:* Month:* DayW:* URL:/api/Filter_Pump/RPM/set Value:1750
Info:  Sched/Timr:Read from cron. Enabled:1 Min:40 Hour:18 DayM:* Month:* DayW:* URL:/api/Filter_Pump/RPM/set Value:1450
Info:  Sched/Timr:Read from cron. Enabled:1 Min:0 Hour:22 DayM:* Month:* DayW:* URL:/api/Filter_Pump/RPM/set Value:1250
Image

and when I set one of the schedule items for 2-3 mins in the future I never see the pool pump speed change from 3250 to 1450. Am I misunderstanding the intention of this feature ?

johntdyer avatar Dec 14 '25 00:12 johntdyer

I set the pump to 3450 and then in 5 mins from now I set the pump to lower to 1750

Notice:Sched/Timr:Saving Schedule:
Info:  AqualinkD: reMounting root RW
Info:  Sched/Timr:0 0 * * * curl -s -S --show-error -o /dev/null localhost:80/api/Filter_Pump/RPM/set -d value=1250 -X PUT
Info:  Sched/Timr:0 7 * * * curl -s -S --show-error -o /dev/null localhost:80/api/Filter_Pump/RPM/set -d value=1750 -X PUT
Info:  Sched/Timr:0 11 * * * curl -s -S --show-error -o /dev/null localhost:80/api/Filter_Pump/RPM/set -d value=3250 -X PUT
Info:  Sched/Timr:0 16 * * * curl -s -S --show-error -o /dev/null localhost:80/api/Filter_Pump/RPM/set -d value=1750 -X PUT
Info:  Sched/Timr:32 19 * * * curl -s -S --show-error -o /dev/null localhost:80/api/Filter_Pump/RPM/set -d value=1450 -X PUT
Info:  Sched/Timr:0 22 * * * curl -s -S --show-error -o /dev/null localhost:80/api/Filter_Pump/RPM/set -d value=1250 -X PUT
Info:  AqualinkD: reMounting root RO
Info:  AllButton: RS Message :- '12/13/25 Sat'
Info:  JandyDvce: ControlPanel request Pump ID 0x78 set RPM to 2500

I wait at the pump primes

nfo:  AllButton: RS Message :- '7:28 PM'
Info:  JandyDvce: ControlPanel request Pump ID 0x78 get watts
Info:  JandyDvce: Jandy Pump Status message = WATTS 783
Info:  AllButton: RS Message :- 'Air Temp 61 F'
Info:  NetService:MQTT: Published id=63517: aqualinkd/Filter_Pump/Watts 783
Info:  iAQ Touch: Page: HOME | 0x01
Info:  iAQ Touch: Home Status page 00| 47
Info:  iAQ Touch: Home Status page 01| 61
Info:  iAQ Touch: Home Status page 04| Pool Temp
Info:  iAQ Touch: Home Status page 05| Air Temp
Info:  iAQ Touch: Page: HOME | 0x01
Info:  iAQ Touch: Home Status page 00| 47
Info:  iAQ Touch: Home Status page 01| 61
Info:  iAQ Touch: Home Status page 04| Pool Temp
Info:  iAQ Touch: Home Status page 05| Air Temp
Info:  AllButton: RS Message :- 'Pool Temp  47 F'
Info:  iAQ Touch: Page: Devices #1 | 0x36
Info:  AllButton: RS Message :- '12/13/25 Sat'
Info:  JandyDvce: ControlPanel request Pump ID 0x78 set RPM to 2500
Info:  JandyDvce: Jandy Pump Status message = RPM 2500
Info:  AllButton: RS Message :- '7:28 PM'
Info:  AllButton: RS Message :- 'Air Temp 61 F'
Info:  iAQ Touch: Page: Devices #1 | 0x36
Info:  NetService:URI request: : '/ '
Info:  iAQ Touch: Not sure where to add Button 1  - LoadingPage = Status (diff ID)
Info:  iAQ Touch: Page: Status (diff ID) | 0x2a
Info:  iAQ Touch: Status page 00| Filter Pump
Info:  iAQ Touch: Status page 01| Jandy ePUMP   1
Info:  iAQ Touch: Status page 02|  *** Priming ***
Info:  iAQ Touch: Status page 03|   Watts: 783
Info:  AllButton: RS Message :- 'Pool Temp  47 F'
Info:  JandyDvce: ControlPanel request Pump ID 0x78 get watts
Info:  JandyDvce: Jandy Pump Status message = WATTS 783
Info:  AllButton: RS Message :- '12/13/25 Sat'
Info:  AllButton: RS Message :- '7:29 PM'

Then it his 3450

AQ Touch: Page: HOME | 0x01
Info:  iAQ Touch: Home Status page 00| 47
Info:  iAQ Touch: Home Status page 01| 61
Info:  iAQ Touch: Home Status page 04| Pool Temp
Info:  iAQ Touch: Home Status page 05| Air Temp
Info:  AllButton: RS Message :- '7:30 PM'
Info:  iAQ Touch: Page: Devices #1 | 0x36
Info:  JandyDvce: ControlPanel request Pump ID 0x78 get watts
Info:  JandyDvce: Jandy Pump Status message = WATTS 798
Info:  NetService:MQTT: Published id=63528: aqualinkd/Filter_Pump/Watts 798
Info:  AllButton: RS Received message loop start
Info:  AllButton: RS Message :- 'Jandy AquaLinkRS'
Info:  AllButton: RS Message :- 'Air Temp 61 F'
Info:  JandyDvce: ControlPanel request Pump ID 0x78 set RPM to 3250
Info:  JandyDvce: Jandy Pump Status message = RPM 3250
Info:  NetService:MQTT: Published id=63529: aqualinkd/Filter_Pump/RPM 3250
Info:  NetService:MQTT: Published id=63530: aqualinkd/Filter_Pump/Speed 92
Info:  AllButton: RS Message :- 'Pool Temp  47 F'
Info:  NetService:URI request: : '/ '
Info:  NetService:MQTT: Published id=63531: aqualinkd/Service_Mode 0
Info:  NetService:MQTT: Published id=63532: aqualinkd/Display_Message
Info:  NetService:MQTT: Published id=63533: aqualinkd/Temperature/Air 16.11
Info:  NetService:MQTT: Published id=63534: aqualinkd/Temperature/Pool 8.33
Info:  NetService:MQTT: Published id=63535: aqualinkd/Temperature/Spa -17.78
Info:  NetService:MQTT: Published id=63536: aqualinkd/Pool_Heater/setpoint 27.22
Info:  NetService:MQTT: Published id=63537: aqualinkd/Spa_Heater/setpoint 40.00
Info:  NetService:MQTT: Published id=63538: aqualinkd/Freeze_Protect/setpoint 2.78
Info:  NetService:MQTT: Published id=63539: aqualinkd/Freeze_Protect/enabled 1
Info:  NetService:MQTT: Published id=63540: aqualinkd/Freeze_Protect 0
Info:  NetService:MQTT: Published id=63541: aqualinkd/Battery 1
Info:  NetService:MQTT: Published id=63542: aqualinkd/Filter_Pump/delay 0
Info:  NetService:MQTT: Published id=63543: aqualinkd/Filter_Pump 1
Info:  NetService:MQTT: Published id=63544: aqualinkd/Filter_Pump/timer 0
Info:  NetService:MQTT: Published id=63545: aqualinkd/Filter_Pump/timer/duration 0
Info:  NetService:MQTT: Published id=63546: aqualinkd/Spa/delay 0
Info:  NetService:MQTT: Published id=63547: aqualinkd/Spa 0
Info:  NetService:MQTT: Published id=63548: aqualinkd/Spa/timer 0
Info:  NetService:MQTT: Published id=63549: aqualinkd/Spa/timer/duration 0
Info:  NetService:MQTT: Published id=63550: aqualinkd/Aux_1/delay 0
Info:  NetService:MQTT: Published id=63551: aqualinkd/Aux_1 0
Info:  NetService:MQTT: Published id=63552: aqualinkd/Aux_1/timer 0
Info:  NetService:MQTT: Published id=63553: aqualinkd/Aux_1/timer/duration 0
Info:  NetService:MQTT: Published id=63554: aqualinkd/Aux_2/delay 0
Info:  NetService:MQTT: Published id=63555: aqualinkd/Aux_2 0
Info:  NetService:MQTT: Published id=63556: aqualinkd/Aux_2/timer 0
Info:  NetService:MQTT: Published id=63557: aqualinkd/Aux_2/timer/duration 0
Info:  NetService:MQTT: Published id=63558: aqualinkd/Aux_3/delay 0
Info:  NetService:MQTT: Published id=63559: aqualinkd/Aux_3 0
Info:  NetService:MQTT: Published id=63560: aqualinkd/Aux_3/timer 0
Info:  NetService:MQTT: Published id=63561: aqualinkd/Aux_3/timer/duration 0
Info:  NetService:MQTT: Published id=63562: aqualinkd/Aux_4/delay 0
Info:  NetService:MQTT: Published id=63563: aqualinkd/Aux_4 0
Info:  NetService:MQTT: Published id=63564: aqualinkd/Aux_4/timer 0
Info:  NetService:MQTT: Published id=63565: aqualinkd/Aux_4/timer/duration 0
Info:  NetService:MQTT: Published id=63566: aqualinkd/Aux_5/delay 0
Info:  NetService:MQTT: Published id=63567: aqualinkd/Aux_5 0
Info:  NetService:MQTT: Published id=63568: aqualinkd/Aux_5/timer 0
Info:  NetService:MQTT: Published id=63569: aqualinkd/Aux_5/timer/duration 0
Info:  NetService:MQTT: Published id=63570: aqualinkd/Pool_Heater 0
Info:  NetService:MQTT: Published id=63571: aqualinkd/Pool_Heater/enabled 0
Info:  NetService:MQTT: Published id=63572: aqualinkd/Pool_Heater/timer 0
Info:  NetService:MQTT: Published id=63573: aqualinkd/Pool_Heater/timer/duration 0
Info:  NetService:MQTT: Published id=63574: aqualinkd/Spa_Heater 0
Info:  NetService:MQTT: Published id=63575: aqualinkd/Spa_Heater/enabled 0
Info:  NetService:MQTT: Published id=63576: aqualinkd/Spa_Heater/timer 0
Info:  NetService:MQTT: Published id=63577: aqualinkd/Spa_Heater/timer/duration 0
Info:  NetService:MQTT: Published id=63578: aqualinkd/Extra_Aux/delay 0
Info:  NetService:MQTT: Published id=63579: aqualinkd/Extra_Aux 0
Info:  NetService:MQTT: Published id=63580: aqualinkd/Extra_Aux/timer 0
Info:  NetService:MQTT: Published id=63581: aqualinkd/Extra_Aux/timer/duration 0
Info:  NetService:MQTT: Published id=63582: aqualinkd/Filter_Pump/RPM 3250
Info:  NetService:MQTT: Published id=63583: aqualinkd/Filter_Pump/Speed 92
Info:  NetService:MQTT: Published id=63584: aqualinkd/Filter_Pump/GPM 0
Info:  NetService:MQTT: Published id=63585: aqualinkd/Filter_Pump/Watts 798
Info:  NetService:MQTT: Published id=63586: aqualinkd/Filter_Pump/Status -2
Info:  NetService:MQTT: Published id=63587: aqualinkd/Aux_3/program 0
Info:  NetService:MQTT: Published id=63588: aqualinkd/Aux_3/program/name Off
Info:  iAQ Touch: Not sure where to add Button 1  - LoadingPage = Status (diff ID)
Info:  iAQ Touch: Page: Status (diff ID) | 0x2a
Info:  iAQ Touch: Status page 00| Filter Pump
Info:  iAQ Touch: Status page 01| Jandy ePUMP   1
Info:  iAQ Touch: Status page 02|     RPM: 3250
Info:  iAQ Touch: Status page 03|   Watts: 798
Info:  NetService:MQTT: Published id=63589: aqualinkd/Filter_Pump/Status 0
Info:  AllButton: RS Message :- '12/13/25 Sat'
Info:  iAQ Touch: Page: Status (diff ID) | 0x2a
Info:  iAQ Touch: Status page 00| Filter Pump
Info:  iAQ Touch: Status page 01| Jandy ePUMP   1
Info:  iAQ Touch: Status page 02|     RPM: 3250
Info:  iAQ Touch: Status page 03|   Watts: 798
Info:  JandyDvce: ControlPanel request Pump ID 0x78 get watts
Info:  JandyDvce: Jandy Pump Status message = WATTS 1684
Info:  AllButton: RS Message :- '7:31 PM'
Info:  AllButton: RS Message :- 'Air Temp 61 F'
Info:  NetService:MQTT: Published id=63590: aqualinkd/Filter_Pump/Watts 1684
Info:  AllButton: RS Message :- 'Pool Temp  47 F'
Info:  JandyDvce: ControlPanel request Pump ID 0x78 set RPM to 3250
Info:  JandyDvce: Jandy Pump Status message = RPM 3250
Info:  AllButton: RS Message :- '12/13/25 Sat'
Info:  AllButton: RS Message :- '7:31 PM'
Info:  AllButton: RS Message :- 'Air Temp 61 F'
Info:  JandyDvce: ControlPanel request Pump ID 0x78 get watts
Info:  JandyDvce: Jandy Pump Status message = WATTS 1674
Info:  NetService:MQTT: Published id=63591: aqualinkd/Filter_Pump/Watts 1674
Info:  AllButton: RS Message :- 'Pool Temp  47 F'
Info:  AllButton: RS Message :- '12/13/25 Sat'

And then at 7:32pm nothing seems to happen

Info:  AllButton: RS Message :- '7:31 PM'
Info:  JandyDvce: ControlPanel request Pump ID 0x78 get watts
Info:  JandyDvce: Jandy Pump Status message = WATTS 1674
Info:  AllButton: RS Message :- 'Air Temp 61 F'
Info:  AllButton: RS Message :- 'Pool Temp  47 F'
Info:  iAQ Touch: Page: Status (diff ID) | 0x2a
Info:  iAQ Touch: Status page 00| Filter Pump
Info:  iAQ Touch: Status page 01| Jandy ePUMP   1
Info:  iAQ Touch: Status page 02|     RPM: 3250
Info:  iAQ Touch: Status page 03|   Watts: 1674
Info:  NetService:URI request: : '/ '
Info:  AllButton: RS Message :- '12/13/25 Sat'
Info:  JandyDvce: ControlPanel request Pump ID 0x78 set RPM to 3250
Info:  JandyDvce: Jandy Pump Status message = RPM 3250
Info:  AllButton: RS Message :- '7:32 PM'
Info:  AllButton: RS Message :- 'Air Temp 61 F'
Info:  AllButton: RS Message :- 'Pool Temp  47 F'
Info:  JandyDvce: ControlPanel request Pump ID 0x78 get watts
Info:  JandyDvce: Jandy Pump Status message = WATTS 1675
Info:  NetService:MQTT: Published id=63595: aqualinkd/Filter_Pump/Watts 1675
Info:  AllButton: RS Message :- '12/13/25 Sat'
Info:  AllButton: RS Message :- '7:32 PM'
Info:  JandyDvce: ControlPanel request Pump ID 0x78 set RPM to 3250
Info:  JandyDvce: Jandy Pump Status message = RPM 3250
Info:  AllButton: RS Received message loop start
Info:  AllButton: RS Message :- 'Jandy AquaLinkRS'
Info:  iAQ Touch: Page: Devices #1 | 0x36
Info:  AllButton: RS Message :- 'Air Temp 61 F'
Info:  AllButton: RS Message :- 'Pool Temp  47 F'
Info:  AllButton: RS Message :- '12/13/25 Sat'
Info:  JandyDvce: ControlPanel request Pump ID 0x78 get watts
Info:  JandyDvce: Jandy Pump Status message = WATTS 1675
Info:  iAQ Touch: Not sure where to add Button 1  - LoadingPage = Status (diff ID)
Info:  iAQ Touch: Page: Status (diff ID) | 0x2a
Info:  iAQ Touch: Status page 00| Filter Pump
Info:  iAQ Touch: Status page 01| Jandy ePUMP   1
Info:  iAQ Touch: Status page 02|     RPM: 3250
Info:  iAQ Touch: Status page 03|   Watts: 1675
Info:  AllButton: RS Message :- '7:32 PM'
Info:  JandyDvce: ControlPanel request Pump ID 0x78 set RPM to 3250
Info:  JandyDvce: Jandy Pump Status message = RPM 3250
Info:  AllButton: RS Message :- 'Air Temp 61 F'
Info:  AllButton: RS Message :- 'Pool Temp  47 F'
Info:  AllButton: RS Message :- '12/13/25 Sat'
Info:  JandyDvce: ControlPanel request Pump ID 0x78 get watts
Info:  JandyDvce: Jandy Pump Status message = WATTS 1665
Info:  AllButton: RS Message :- '7:32 PM'

johntdyer avatar Dec 14 '25 00:12 johntdyer

I don’t see anything in the log where something requested AqualinkD to change RPM. That makes me believe there is something up with cron on your system.

Is cron running? systemctl status cron

There is some information here n the below URl. https://github.com/aqualinkd/AqualinkD/wiki#Scheduler

One thing the documentation is missed is the permissions of the cron file, it must be RW only for root. -rw------- 1 root root ……….. /etc/cron.d/aqualinkd

Also, while cron is extremely powerful, it’s not great at scheduling things a few mins in the future, you should use a min of 10 mins while testing. Also try something easy like turning a light / cleaner on.

You should also check your system logs for any cron errors.

What OS / version are you running?

sfeakes avatar Dec 14 '25 03:12 sfeakes

Its Debian 11

pi@aqualinkd(ro):~$ cat /etc/debian_version
11.11
pi@aqualinkd(ro):~$

Cron is running

pi@aqualinkd(ro):~$ systemctl status cron
● cron.service - Regular background program processing daemon
     Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2025-12-08 09:47:32 EST; 6 days ago
       Docs: man:cron(8)
   Main PID: 347 (cron)
      Tasks: 1 (limit: 407)
        CPU: 13.863s
     CGroup: /system.slice/cron.service
             └─347 /usr/sbin/cron -f -l

Dec 14 10:19:01 aqualinkd cron[347]: (*system*aqualinkd) INSECURE MODE (group/other writable) (/etc/cron.d/aqualinkd)
Dec 14 10:20:01 aqualinkd cron[347]: (*system*aqualinkd) INSECURE MODE (group/other writable) (/etc/cron.d/aqualinkd)
Dec 14 10:21:01 aqualinkd cron[347]: (*system*aqualinkd) INSECURE MODE (group/other writable) (/etc/cron.d/aqualinkd)
Dec 14 10:22:01 aqualinkd cron[347]: (*system*aqualinkd) INSECURE MODE (group/other writable) (/etc/cron.d/aqualinkd)
Dec 14 10:23:01 aqualinkd cron[347]: (*system*aqualinkd) INSECURE MODE (group/other writable) (/etc/cron.d/aqualinkd)
Dec 14 10:24:01 aqualinkd cron[347]: (*system*aqualinkd) INSECURE MODE (group/other writable) (/etc/cron.d/aqualinkd)
Dec 14 10:25:01 aqualinkd cron[347]: (*system*aqualinkd) INSECURE MODE (group/other writable) (/etc/cron.d/aqualinkd)
Dec 14 10:26:01 aqualinkd cron[347]: (*system*aqualinkd) INSECURE MODE (group/other writable) (/etc/cron.d/aqualinkd)
Dec 14 10:27:01 aqualinkd cron[347]: (*system*aqualinkd) INSECURE MODE (group/other writable) (/etc/cron.d/aqualinkd)
Dec 14 10:28:01 aqualinkd cron[347]: (*system*aqualinkd) INSECURE MODE (group/other writable) (/etc/cron.d/aqualinkd)
pi@aqualinkd(ro):~$

there is no /etc/defaults/cron file

pi@aqualinkd(ro):~$ sudo ls -la  /etc/defaults/cron
ls: cannot access '/etc/defaults/cron': No such file or directory

but there is a /etc/default/cron file referenced in the systemd unit file

Unit

[Unit]
Description=Regular background program processing daemon
Documentation=man:cron(8)
After=remote-fs.target nss-user-lookup.target

[Service]
EnvironmentFile=-/etc/default/cron
ExecStart=/usr/sbin/cron -f $EXTRA_OPTS
IgnoreSIGPIPE=false
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

Env file

pi@aqualinkd(ro):~$ cat /etc/default/cron
# Cron configuration options

# Whether to read the system's default environment files (if present)
# If set to "yes", cron will set a proper mail charset from the
# locale information. If set to something other than 'yes', the default
# charset 'C' (canonical name: ANSI_X3.4-1968) will be used.
#
# This has no effect on tasks running under cron; their environment can
# only be changed via PAM or from within the crontab; see crontab(5).
READ_ENV="yes"

# Extra options for cron, see cron(8)
#
# For example, to enable LSB name support in /etc/cron.d/, use
EXTRA_OPTS='-l'
#
# Or, to log standard messages, plus jobs with exit status != 0:
# EXTRA_OPTS='-L 5'
#
# For quick reference, the currently available log levels are:
#   0   no logging (errors are logged regardless)
#   1   log start of jobs
#   2   log end of jobs
#   4   log jobs with exit status != 0
#   8   log the process identifier of child process (in all logs)
#
#EXTRA_OPTS=""

pi@aqualinkd(ro):~$

johntdyer avatar Dec 14 '25 15:12 johntdyer

INSECURE MODE (group/other writable) (/etc/cron.d/aqualinkd)

Permissions are incorrect in /etc/cron.d/aqualinkd file. It needs to be owned by root:root and NOT writable by anyone other than the owner (root). Try sudo chmod 600 /etc/cron.d/aqualinkd

You want it it look like this.

ls -al /etc/cron.d/aqualinkd 
-rw------- 1 root root 561 Dec 21  2024 /etc/cron.d/aqualinkd

The first time AqualinkD creates that file, it will try to set the permissions, if it fails you should have seen an error in the log.

sfeakes avatar Dec 14 '25 18:12 sfeakes

ok, here is where I stand now...

pi@aqualinkd(ro):~$ sud^C
pi@aqualinkd(ro):~$ sudo su -
root@aqualinkd(ro):~# rw
root@aqualinkd(rw):~# /etc/cron.d/aqualinkd^C
root@aqualinkd(rw):~# ls -la /etc/cron.d/aqualinkd
-rw-rw-rw- 1 root root 811 Dec 13 19:30 /etc/cron.d/aqualinkd
root@aqualinkd(rw):~# sudo chmod 600 /etc/cron.d/aqualinkd

root@aqualinkd(rw):~# ls -la /etc/cron.d/aqualinkd
-rw------- 1 root root 811 Dec 13 19:30 /etc/cron.d/aqualinkd
root@aqualinkd(rw):~#

Will test shortly, thank you for your helpe

johntdyer avatar Dec 15 '25 16:12 johntdyer