Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature Request: Support for Jandy Heat Pump / Chillers #395

Open
TequilaSagara opened this issue Mar 21, 2025 · 5 comments
Open

Feature Request: Support for Jandy Heat Pump / Chillers #395

TequilaSagara opened this issue Mar 21, 2025 · 5 comments

Comments

@TequilaSagara
Copy link

TequilaSagara commented Mar 21, 2025

I have a Jandy JRT300R heat pump / chiller. I can use AqualinkD to control the on/off of the heat pump (via an iAqualink virtual button), and can set temp1/temp2 for the heat pump, but I don't have any chiller controls. Additionally, I think the lack of official support for it is causing a bunch of erroneous BAD PACKET logs in my journal:

Mar 21 18:00:12 raspberrypi aqualinkd[63024]: RS Serial: Read Jandy packet BAD PACKET To 0x00 of type LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03|
Mar 21 18:00:13 raspberrypi aqualinkd[63024]: RS Serial: Serial read bad Jandy checksum, ignoring
Mar 21 18:00:13 raspberrypi aqualinkd[63024]: RS Serial: Read Jandy packet BAD PACKET To 0x00 of type LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03|
Mar 21 18:00:16 raspberrypi aqualinkd[63024]: RS Serial: Serial read bad Jandy checksum, ignoring
Mar 21 18:00:16 raspberrypi aqualinkd[63024]: RS Serial: Read Jandy packet BAD PACKET To 0x00 of type LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03|
Mar 21 18:00:17 raspberrypi aqualinkd[63024]: RS Serial: Serial read bad Jandy checksum, ignoring
Mar 21 18:00:17 raspberrypi aqualinkd[63024]: RS Serial: Read Jandy packet BAD PACKET To 0x00 of type LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03|
Mar 21 18:00:20 raspberrypi aqualinkd[63024]: RS Serial: Serial read bad Jandy checksum, ignoring
Mar 21 18:00:20 raspberrypi aqualinkd[63024]: RS Serial: Read Jandy packet BAD PACKET To 0x00 of type LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03|
Mar 21 18:00:20 raspberrypi aqualinkd[63024]: RS Serial: Serial read bad Jandy checksum, ignoring
Mar 21 18:00:20 raspberrypi aqualinkd[63024]: RS Serial: Read Jandy packet BAD PACKET To 0x00 of type LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03|

@sfeakes
Copy link
Owner

sfeakes commented Mar 21, 2025

Chiller is supported in the current dev release. But there is no web UI, (can only be controlled through HA or MQTT). I'm currently building the web UI and will post an update over the weekend.

Interesting on the bad packet, someone else (with chiller) was getting the same error. Theirs was due to the chiller sending packets late, and causing the frames to overlap. Yours looks to be the same.

0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|<Error here>|0x10|0x02|0x33|0x30|0x75|0x10|0x03|
                                                                            

This is the Chiller sending a reply packet
0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10.  <- This needed |0x03| to complete the frame

This is the Panel sending a packet to the next device (ie it didn't receive the reply in time so started sending the next packet)
|0x10|0x02|0x33|0x30|0x75|0x10|0x03|

If you can send me some logs, I can look into this further. But first can you post your aqualinkd.conf and output of serial_logger?

@TequilaSagara
Copy link
Author

TequilaSagara commented Mar 22, 2025

Thanks for the quick response. Here's the serial logger:

Notice:  RS Serial: Port /dev/ttyUSB0 low latency mode is set
Notice:  Serial Log:Logging serial information!
Please wait.Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x78|0x44|0x00|0x28|0x23|0x19|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
Warning: RS Serial: Serial read bad Jandy checksum, ignoring
Warning: RS Serial: Read  Jandy   packet BAD PACKET To 0x00 of type       LXi status | HEX: 0x10|0x02|0x00|0x0d|0x40|0x00|0x00|0x5f|0x10|0x10|0x02|0x33|0x30|0x75|0x10|0x03| 
|

Notice:  Serial Log:RS485 interface received 800 packets in 30 seconds ( 26.67 Msg/Sec)
Notice:  Serial Log:Jandy Control Panel Model   :  RS-4 Only
Notice:  Serial Log:Jandy Control Panel Version :  REV T.2g
Notice:  Serial Log:Jandy ID's found
Notice:  Serial Log:ID 0x60 is not used  <-- can use for Aqualinkd (PDA mode only)
Notice:  Serial Log:ID 0x70 is in use    <-- Heat Pump
Notice:  Serial Log:ID 0x33 is in use    <-- Aqualink (iAqualink / Touch)
Notice:  Serial Log:ID 0xa3 is in use    <-- iAqualink 2.0
Notice:  Serial Log:ID 0x48 is not used  <-- can use for Aqualinkd (RSSA ID)
Notice:  Serial Log:ID 0x78 is in use    <-- Jandy VSP ePump
Notice:  Serial Log:ID 0x08 is not used  <-- can use for Aqualinkd
Notice:  Serial Log:ID 0x09 is not used  <-- can use for Aqualinkd
Notice:  Serial Log:ID 0x0a is not used  <-- can use for Aqualinkd
Notice:  Serial Log:ID 0x0b is not used  <-- can use for Aqualinkd
Notice:  Serial Log:ID 0x40 is not used  <-- can use for Aqualinkd (Extended Device ID)
Notice:  Serial Log:ID 0x41 is not used  <-- can use for Aqualinkd (Extended Device ID)
Notice:  Serial Log:ID 0x42 is not used  <-- can use for Aqualinkd (Extended Device ID)
Notice:  Serial Log:ID 0x43 is not used  <-- can use for Aqualinkd (Extended Device ID)
Notice:  Serial Log:ID 0x30 is not used  <-- can use for Aqualinkd (Prefered Extended Device ID)
Notice:  Serial Log:ID 0x31 is not used  <-- can use for Aqualinkd (Prefered Extended Device ID)
Notice:  Serial Log:ID 0x32 is not used  <-- can use for Aqualinkd (Prefered Extended Device ID)
Notice:  Serial Log:

Notice:  Serial Log:Suggested aqualinkd.conf values
Notice:  Serial Log:-------------------------
Notice:  Serial Log:panel_type =  RS-4 Only
Notice:  Serial Log:device_id = 0x08
Notice:  Serial Log:rssa_device_id = 0x48
Notice:  Serial Log:extended_device_id = 0x30
Notice:  Serial Log:read_RS485_ePump = yes
Notice:  Serial Log:-------------------------```

And here's the aqualinkd.conf:

#

# The directory where the web files are stored

web_directory=/var/www/aqualinkd/

# Log to file, comment out if you do not want to log to file
#log_file=/var/log/aqualinkd.log

# The log level. [DEBUG_DERIAL, DEBUG, INFO, NOTICE, WARNING, ERROR]
# Pick the highest level, and all levels below will be sent to syslog.
# your syslog settings may be set to only display messages above a certian level
# in which case make sure you use the log_file settings to capture everything
# you want when debugging
# so, NOTICE also prints WARNING & ERROR
#     DEBUG_SERIAL would print everything possible

#log_level=DEBUG
#log_level=INFO
log_level=NOTICE
#log_level=WARNING

# Display any ERROR & Warning messages in web interface. 
display_warnings_in_web=true

# The socket port that the daemon listens to
# If you change this from 80, remember to update aqualink.service.avahi
socket_port=80


# Note on serial port below. If you want aqualinkd to start and run without connecting to a panel or port
# use 0x00 for device_id and a dummy serial_port like /dev/tty0.

# The serial port the daemon access to read the Aqualink RS8
serial_port=/dev/ttyUSB0

# Your RS panel size. ie 4, 6, 8, 12 or 16 relates to RS4, RS6, RS8, RS12 or RS16.
# VERY important that you select 12 or 16, if you have either of those size panels.
# Also don't think setting a 12 when you have a 8 will give you 4 more accessories to control, it won't the
# panel information is needed as different panels use different bits within the RS protocol for status and key
# presses.
# serial_logger will get the panel type string if you don't know it, below are examples.
# Must be in format `XX-N ????`  (XX=RS or PD, N=Circuits, ????=Combo or Only or Dual)
panel_type = RS-4 Only
#panel_type = PD-8 Combo
#panel_type = RS-16 Combo
#panel_type = RS-2/14 Dual
#panel_type = RS-4 Combo
#panel_type = RS-8 Only
#
# If serial_logger doesn't give you a type string in the format above, you can use the next options to set the specifics.
# 
# panel_type_size = (6, 8, 10, 12, 14 or 16)  (Number of supported accessories / buttons)
#panel_type_combo = no            
# panel_type_dual = (yes or no)               (dual circuit panel)
# panel_type_pda = (yes or no)                (PDA panel. only set this if you have to. Panel ONLY supports the PDA protocol)
# panel_type_rs = (yes or no)                 (RS panel. Panel Supports all protocols)


# The ID of the Aqualink terminal device. Devices probed by RS8 master are:
# 08-0b, 10-13, 18-1b, 20-23, 28-2b, 30-33, 38-3b, 40-43
# Working RS ID's are 0x0a 0x0b 0x09 0x08    <- 0x08 is usually taken
# If your panel is a PDA only model, then PDA device ID's are 0x60, 0x61, 0x62, 0x63.
# (These are NOT recomended to use unless you absolutly have no other option)
device_id=0x08


# The ID of Jandy SerialInterface device. These is only one usable ID, if serial_logger
# picks up your panel supports this, uncomment, as it will speed up heater setpoints & RS16 panels.
rssa_device_id=0x48

# The ID for extended settings to allow for faster programming
# VARIABLE SPEED PUMP are only supported with this option.
# Do not enable this if you don't use either, you'll just waste memory and cpu cycles
# Valid ID's are 0x40, 0x41, 0x42 & 0x43. for ONE Touch
# Valid ID's are 0x30, 0x31, 0x32 & 0x33. for Aqualink Touch
extended_device_id=0x30

# If using 0x30 to 0x33 for extended_device_id, then enable below if you want to use virtual buttons
enable_iaqualink=yes


# If you have extended_device_id set, then you can also use that ID for programming some features.
# This means that you can turn things on/off while AqualinkD is programming certian features.
# If you are using Aqualink Touch protocol for extended_device_id then this is highly recomended
# as it will speed up programming substantially. if One Touch it's 50/50.
extended_device_id_programming = yes

# Read information from these devices directly from the RS485 bus as well as control panel.
# swg = Salt Water Generator
# ePump = Jandy ePump or ePump AC
# vsfPump = Pentair VS,VF,VSF pump
# JXi = Jandy JXi heater (might also be LXi heaters)
# LX = Jandy LX & LT heaters
# Chem = Jandy Chemical Feeder
# iAqualink = Read iAqualink2 (wifi device). Only relivent in PDA mode IF you have iAqualink2/3 device
#read_RS485_swg = yes
read_RS485_ePump = yes 
#read_RS485_vsfPump = yes
#read_RS485_JXi = yes
#read_RS485_LX = yes
#read_RS485_Chem = yes
read_RS485_iAqualink = yes

# Keep the panel time synced with systemtime.  Make sure to set systemtime / NTP correctly. 
keep_paneltime_synced = yes

# If equiptment is in freeze protect mode some commands like pump_off / spa_on are
# ignored.  You can force these to work by setting the below.
override_freeze_protect = no

# Convert Deg F to Deg C when posting to Domoticz or MQTT.
# If using homebridge-aqualinkd convert_mqtt_temp_to_c must be set to yes.
convert_mqtt_temp_to_c = no 
convert_dz_temp_to_c = yes

# default is to use pool water temp as spa water temp when spa is off (and there for not able to report water temp)
# enable below to report 0 as the spa temp when spa is off.
# This is for MQTT cnnections only, WEB socket and WEB API always report TEMP_UNKNOWN (-999) allowing the consumer to
# decide how to report.
#report_zero_spa_temp = yes

# When pool or spa is off, report 0deg for water temp. If set to no, last known value will be used.
report_zero_pool_temp = yes
report_zero_spa_temp = yes

# mqtt stuff
mqtt_address = 192.168.93.201:1883
mqtt_user = aqualinkd    
mqtt_passwd = REDACTED
#mqtt_dz_pub_topic = domoticz/in
#mqtt_dz_sub_topic = domoticz/out
mqtt_aq_topic = aqualinkd
mqtt_hassio_discover_topic = homeassistant

# MQTT will only post updated information, this option AqualinkD will re-post all MQTT information every ~5 minutes.
mqtt_timed_update = yes

# Please see forum for this, only set to yes when logging information to support new devices. (or debugging protocol)
# Information will be written to /tmp/RS485.log & /tmp/RS485_raw.log respectively
#debug_RSProtocol_packets = no
#debug_RSProtocol_bytes = no

# Log any packets from this device.
#serial_debug_filter = 0x00

# Will change how RS485 / Serial works, Only use if asked to for problem solving purposes.
# Delay between RS485 frame (set or packets that make up a command), reply too quickly can
# cause slow panels (like PDA only) issues, reply too slowly and the control panel will think we are
# dead.  
# ~40 and we will be replying too slowley, so keep below that.
# 10~20 is about what most device reply in. But 0-4 works well.
rs485_frame_delay = 0

# Get rid of the startup warning message about no low latency. BETTER option is to buy a better adapter.
#ftdi_low_latency = no

# Enable AqualinkD scheduler.
# A version of cron that supports cron.d must be installed for the scheduler to work.
# If you used the install script and didn;t receive any cron warnings, you should be good to go.
enable_scheduler = no

# Check if button_01 (usually Pump) is scheduled to run after an event that may have turned it off, and set it to run.
# Only for RS panels, Will not work for PDA panles.
# Example below is if pump is off due to power reset, freezeprotect or swg boots is turned off between 6am and 11pm then turn the pump on.
# You can leave scheduler_check_pumpon_hour & scheduler_check_pumpoff_hour commented out and AqualinkD will try to find the hours from the actual schedule
# that's been set in scheduler.  This only works if you have the same schedule for every day of the week. 
#scheduler_check_pumpon_hour = 6
#scheduler_check_pumpoff_hour = 23
#scheduler_check_poweron = yes
#scheduler_check_freezeprotectoff = yes
#scheduler_check_boostoff = yes

# Put AqualinkD to sleep when in PDA mode after inactivity. 
# Ignore if you are not using PDA mode.
# If you have Jandy PDA then this MUST be set to yes as the controller can only support one PDA.
# If you don't have a Jandy PDA leave this at no as AqualinkD will be a lot quicker.
#pda_sleep_mode = yes

# If you have a SWG connected to the control panel, set this to yes. 
# AqualinkD can only detect a SWG if it's on, so after a restart you will not see/access a SWG until the the next time the pump is on. 
force_SWG = no

# AqualinkD can take sime time to find heater setpoints (if they exist), This will force the pool & spa
# heaters to be listed as thermostats vs switches on startup, helps with homekit.
force_PS_setpoints = yes

# AqualinkD can take sime time to find freeze protect (if panel supports it), This will force the freeze protect
# to be listed as thermostat on startup.
force_Frzprotect_setpoints = yes

# AqualinkD can take sime time to find chemical feeder (if panel supports it), This will force the chemical feeder
# to be listed on startup.
force_chem_feeder = no

# Lights can be programmed by control panel or AqualinkD (if controlpanel doesn;t support specific light or light mode you want)
# IF YOU WANT AQUALINKD TO PROGRAM THE LIGHT, IT MUST NOT BE CONFIGURED AS A COLOR LIGHT IN THE JANDY CONTROL PANEL.
# Light probramming mode. 0=safe mode, but slow. 
# any number greater is seconds to wait between button presses.  
# 0.4 seems to be the minimum. (workd for light modes below 10 presses)
# 0.6 seems to work about 95% of the time, but above 20 presses can be hit or miss.
# 0 will simply wait for the controler to send the response back before sending the next, so is equivelent to about 1.2
light_programming_mode=0.6

# Light programming assumes light needs to be on before sending pulse (above setting)
# If the light is off when request is made to change "light show", then the below value are used
light_programming_initial_on=15

# Turn the light off for below time before start programmig puleses.
light_programming_initial_off=12

# Everything below here, if it ends with dzidx, then that's the ID for domoticz,
# so not needed if you are not suing dooticz.
# Domoticz ID's for temps.
# All below are Virtual Sensors
#air_temp_dzidx=0
#pool_water_temp_dzidx=0
#spa_water_temp_dzidx=0
#SWG_percent_dzidx=0
#SWG_PPM_dzidx=0
# Must be Virtual Alert Sensor
#SWG_Status_dzidx=0


# Use/find labels from Control Panel, these will overwrite the button_xx_label below, 
# it noes NOT work in PDA mode, and it also considerable slows down AqualinkD startup process.
use_panel_aux_labels=no

# These are all the button labels / options / pump and light configurations you want to use.
# Simply change these to your setup, valid options for wach button are :-
# None of these are mandatory unless you have PDA or RS16 panel, then _label is mandatory
# button_??_label=Filter Pump    <Label you want to see>
# button_??_dzidx=37             <Domoticz IDX>
# button_??_pumpID=0x60          <RS485 ID of VSP>
# button_??_pumpIndex=1          <Pump index Jandy panel is configured to use>
# button_??_pumpType=Pentair VF  <Pump Type, one of the folowing :- JANDY ePUMP, Pentair VF, Pentair VS>
# button_??_pumpName=My Pump     <Panel Rev Y supports renaming VSP, use the name here>
# button_??_lightMode=4          <Color light mode>
#
# In most cases the label is just what you want to see in web UI/MQTT/API. ie you don't need to use Jandy's labeling. There are 2 exaeptions to the labeling listed below
# 1) If using PDA mode, The Labels below are of the utmost importance, the labels MUST exactly match the labels in the "EQUIPTMENT ON/OFF" menu of the PDA device.
# 2) RS 16 Panels have no protocol bit representation for AUXB5 to AUXB8, only text, so as with PDA Those labels MUST match the control panel.
# Use NONE for label if you don't have anything connected to that circuit and don't want to see the button in the UI.
#
# Below is an example of how different Panels map into the buttons.
#
#             |  RS-4 Combo  |  RS-6 Combo  |  RS-6 Only   | RS-8 Combo   | RS-2/6 Dual  | RS-2/10 Dual |  RS-16 Combo |
#             ----------------------------------------------------------------------------------------------------------
# Button_01   | Filter Pump  | Filter Pump  | Filter Pump  | Filter Pump  | Filter Pump  | Filter Pump  | Filter Pump  |
# Button_02   | Spa          | Spa          | Aux_1        | Spa          | Spa          | Spa          | Spa          |
# Button_03   | Aux 1        | Aux 1        | Aux 2        | Aux 1        | Aux 1        | Aux 1        | Aux 1        |
# Button_04   | Aux 2        | Aux 2        | Aux 3        | Aux 2        | Aux 2        | Aux 2        | Aux 2        |
# Button_05   | Aux 3        | Aux 3        | Aux 4        | Aux 3        | Aux 3        | Aux 3        | Aux 3        |
# Button_06   | Pool Heater  | Aux 4        | Aux 5        | Aux 4        | Aux 4        | Aux 4        | Aux 4        |
# Button_07   | Spa Heater   | Aux 5        | Temp 1       | Aux 5        | Aux 5        | Aux 5        | Aux 5        |
# Button_08   | Solar Heater | Pool Heater  | Temp 2       | Aux 6        | Aux 6        | Aux 6        | Aux 6        |
# Button_09   |              | Spa Heater   | Solar Heater | Aux 7        | Pool Heater  | Aux B1       | Aux 7        |
# Button_10   |              | Solar Heater |              | Pool Heater  | Spa Heater   | Aux B2       | Aux B1       |
# Button_11   |              |              |              | Spa Heater   | Solar Heater | Aux B3       | Aux B2       |
# Button_12   |              |              |              | Solar Heater |              | Aux B4       | Aux B3       |
# Button_13   |              |              |              |              |              | Pool Heater  | Aux B4       |
# Button_14   |              |              |              |              |              | Spa Heater   | Aux B5       |
# Button_15   |              |              |              |              |              | Solar Heater | Aux B6       |
# Button_16   |              |              |              |              |              |              | Aux B7       |
# Button_17   |              |              |              |              |              |              | Aux B8       |
# Button_18   |              |              |              |              |              |              | Pool Heater  |
# Button_19   |              |              |              |              |              |              | Spa Heater   |
# Button_20   |              |              |              |              |              |              | Solar Heater |

#
# Optional, ( button_01_pumpID & button_01_pumpIndex )
# If you have a Variable Speed Pump, then assign the RS485 ID to the button below so RPM/GPH/WATTS are displayed
# Format is button_01_pumpID=0x60.   Leave blank if you don't have a VSP.
#  Pentair pump ID's
#  0x60 to 0x6F (0x60, 0x61 0x62, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F)
#  Jandy pump ID's
#  0x78, 0x79, 0x7A, 0x7B
#
# button_01_pumpIndex=1
# If you have assigned this pump an index number in your Aqualink control panel, (Between 1 & 4), put it here for VSP, RPM, Primp information to be captured.
#
# button_xx_lightMode = (0=Aqualink program, 1=Jandy, 2=Jandy LED, 3=SAm/SAL, 4=Color Logic, 5=Intellibrite, 6=Hayw Univ Color, 7,8,9(future), 10=Dimmer, 11=Full Range Dimmer)
# 
# Below are settings for standard buttons on RS-8 Combo panel used as example.
button_01_label=Filter Pump
button_01_pumpID=0x78
button_01_pumpIndex=1
button_01_pumpType=JANDY ePUMP

button_02_label=Cleaner

button_03_label=Pool Light
button_03_lightMode=2

button_04_label=Bubblers

button_05_label=Temp 1

button_06_label=Temp 2
#button_05_lightMode=0

button_07_label=Waterfalls
#button_05_lightMode=0

button_08_label=NONE
button_09_label=NONE

button_10_label=NONE

button_11_label=NONE

button_12_label=Waterfalls

# Virtual buttons.
# To use these you must have extended_device_id set to AqualnkTouch protocol, ie 0x31, 0x31, 0x32, 0x33
# These are the One Touch buttons. By default below are the labels
# Panels rev Yg and newer support custom virtual buttons as well, simply add these here
# Add the ones you would like to use below, making sure to
#    a) Sequential order of the button number starting 01
#    b) Label must be IDENTICAL to how it's displayed on a AqualinkTouch device (or web)
#
virtual_button_01_label=Heat Pump
#virtual_button_02_label=Clean Mode
#virtual_button_03_label = OneTouch 4
#virtual_button_04_label = OneTouch 5
#virtual_button_05_label = OneTouch 6

@sfeakes
Copy link
Owner

sfeakes commented Mar 22, 2025

Thanks for the above.

I have just posted version 2.6.0 that has Heat Pump / Chiller support.
You will need to add the following to aqualinkd.conf

read_RS485_HeatPump = yes
force_chiller = yes

virtual_button_01_label=Heat Pump
virtual_button_01_altLabel=Chiller

I'd also like to get some information from your panel to make this support better, Since you have a pool only panel (no spa) I'm not sure how some of these settings work.

With REV T.2g can you change the chiller setpoint on the mobile app? I know you can with AqualinkTouch protocol (ie the web app), but not sure with the iAqualink protocol (the phone app)

In aqmanager can you do the following.

  • in Debug Masks
  • set RS Serial Filter to 0x33,0x3a,0x70
  • Turn on iAQ Touch
  • Turn on RS Serial

Go to your Jandy mobile app

  • change the chiller setpoint.
  • wait ~10 seconds
  • change the chiller setpoint again.
  • wait ~10 seconds

In aqmanager turn off RS Serial and iAQ Touch

Download the log and post it here. And let me know what Setpoint call you used.

@TequilaSagara
Copy link
Author

TequilaSagara commented Mar 23, 2025

I've made the edits to the aqualinkd.conf and I can now see the chiller temp in Home Assistant! This is awesome, thanks for the quick update!

I did notice that heat pump disappeared from the web page after the change, but it still shows on Home Assistant.

Image

As for the chiller setpoint, I can't do it through the app, only through the web page. Heck, I can't even turn on the heat pump from the app. I've always had to use the webpage which is what started me down this whole rabbit hole.

Image
Image
Image

If I can help in any other way, though, please let me know!

@sfeakes
Copy link
Owner

sfeakes commented Mar 23, 2025

Thanks for the information. I am working on the HeatPump in AqualinkD Web UI & HomeKit. (So it shows up as a thermostat and not a button). I'll post that update soon.
It's good to know that with Rev T.2g you can't change the Chiller through the app. I know you can with Rev Yg, but that's like a $1k upgrade.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants