diff --git a/extras/HASSIO.Implementation.txt b/extras/HASSIO.Implementation.txt index 6f4cdab..2d89f34 100644 --- a/extras/HASSIO.Implementation.txt +++ b/extras/HASSIO.Implementation.txt @@ -5,6 +5,7 @@ climate: - platform: mqtt + unique_id: aqualink_pool_heater name: Pool Heater modes: - "off" @@ -18,7 +19,7 @@ climate: min_temp: 70 max_temp: 90 mode_command_topic: "aqualinkd/Pool_Heater/set" - mode_state_topic: "aqualinkd/Pool_Heater" + mode_state_topic: "aqualinkd/Pool_Heater/enabled" mode_state_template: >- {% set values1 = { '0':'off', '1':'heat'} %} {{ values1[value] if value in values1.keys() else 'off' }} @@ -27,6 +28,7 @@ climate: temperature_state_template: "{{ value_json }}" - platform: mqtt + unique_id: aqualink_spa_heater name: Spa Heater modes: - "off" @@ -49,6 +51,7 @@ climate: temperature_state_template: "{{ value_json }}" - platform: mqtt + unique_id: aqualink_freeze_protect name: Freeze Protect modes: - "off" @@ -70,235 +73,285 @@ climate: temperature_state_topic: "aqualinkd/Freeze_Protect/setpoint" temperature_state_template: "{{ value_json }}" -#---- AQUALINK GROUPS ------------- -group: - - ARS: - name: Pool - view: yes - entities: - - sensor.Air_Temp - - sensor.Pool_Temp - - sensor.Spa_Temp - - binary_sensor.AqualinkD - - sensor.battery_check - - binary_sensor.Pool_Heat - - binary_sensor.Spa_Heat - - binary_sensor.Freeze - - group.PL1 - - group.SP1 - - group.TC1 - - PL1: - name: Pool Control - view: no - entities: - - switch.Filter_Pump - - switch.Cleaner - - switch.Low_Speed - - light.Pool_Light - - switch.Waterfall - - SP1: - name: Spa Control - view: no - entities: - - switch.Spa_Mode - - switch.Spa_Blower - - light.Spa_Light - - TC1: - name: Temp Control - view: no - entities: - - climate.Pool_Heater - - climate.Spa_Heater - - climate.Freeze_Protect - -#---- AQUALINK LIGHTS ------------- - -light: - - - platform: mqtt - name: "Spa Light" - state_topic: "aqualinkd/Aux_4" - command_topic: "aqualinkd/Aux_4/set" - qos: 1 - payload_on: "1" - payload_off: "0" - retain: false - - platform: mqtt - name: "Pool Light" - state_topic: "aqualinkd/Aux_5" - command_topic: "aqualinkd/Aux_5/set" - qos: 1 - payload_on: "1" - payload_off: "0" - retain: false - #----AQUALINK SWITCHES switch: - platform: mqtt - name: "Freeze" - state_topic: "aqualinkd/Freeze_Protect" - command_topic: "aqualinkd/Freeze_Protect/set" + unique_id: aqualink_freeze_protect + name: "Freeze Protection" + state_topic: "aqualinkd/Freeze_Protect/enabled" + command_topic: "aqualinkd/Freeze_Protect/set" #NOTE: aqualinkd does not support toggling Freeze Protect due to being a menu option rather than a simple command. Use your RS controller to change the setting. This should be configured as a binary_sensor instead of a switch to make it more obvious but I kept it a switch in case the limitation changes in the future. + json_attributes_topic: "aqualinkd/Freeze_Protect" + json_attributes_template: "{{ {'active': value|int} | tojson }}" qos: 1 - payload_on: "0" - payload_off: "1" + payload_on: "1" + payload_off: "0" retain: false + icon: mdi:snowflake - platform: mqtt + unique_id: aqualink_filter_pump name: "Filter Pump" state_topic: "aqualinkd/Filter_Pump" command_topic: "aqualinkd/Filter_Pump/set" + json_attributes_topic: "aqualinkd/Filter_Pump/delay" + json_attributes_template: "{{ {'delay': value|int} | tojson }}" qos: 1 payload_on: "1" payload_off: "0" retain: false - platform: mqtt - name: "Waterfall" + unique_id: aqualink_pool_light + name: "Pool Light" state_topic: "aqualinkd/Solar_Heater" command_topic: "aqualinkd/Solar_Heater/set" + json_attributes_topic: "aqualinkd/Solar_Heater/delay" + json_attributes_template: "{{ {'delay': value|int} | tojson }}" qos: 1 payload_on: "1" payload_off: "0" retain: false + icon: mdi:lightbulb - platform: mqtt + unique_id: aqualink_spa_mode name: "Spa Mode" state_topic: "aqualinkd/Spa_Mode" command_topic: "aqualinkd/Spa_Mode/set" + json_attributes_topic: "aqualinkd/Spa_Mode/delay" + json_attributes_template: "{{ {'delay': value|int} | tojson }}" qos: 1 payload_on: "1" payload_off: "0" retain: false + icon: mdi:hot-tub - platform: mqtt + unique_id: aqualink_cleaner name: "Cleaner" state_topic: "aqualinkd/Aux_1" command_topic: "aqualinkd/Aux_1/set" + json_attributes_topic: "aqualinkd/Aux_1/delay" + json_attributes_template: "{{ {'delay': value|int} | tojson }}" qos: 1 payload_on: "1" payload_off: "0" retain: false + icon: mdi:broom - platform: mqtt - name: "Low Speed" + unique_id: aqualink_spa_blower + name: "Spa Blower" state_topic: "aqualinkd/Aux_2" command_topic: "aqualinkd/Aux_2/set" + json_attributes_topic: "aqualinkd/Aux_2/delay" + json_attributes_template: "{{ {'delay': value|int} | tojson }}" qos: 1 payload_on: "1" payload_off: "0" retain: false + icon: mdi:fan - platform: mqtt - name: "Spa Blower" + unique_id: aqualink_spa_light + name: "Spa Light" state_topic: "aqualinkd/Aux_3" command_topic: "aqualinkd/Aux_3/set" + json_attributes_topic: "aqualinkd/Aux_3/delay" + json_attributes_template: "{{ {'delay': value|int} | tojson }}" qos: 1 payload_on: "1" payload_off: "0" retain: false + icon: mdi:lightbulb - platform: mqtt + unique_id: aqualink_pool_heater name: "Pool Heater" - state_topic: "aqualinkd/Pool_Heater" + state_topic: "aqualinkd/Pool_Heater/enabled" command_topic: "aqualinkd/Pool_Heater/set" + json_attributes_topic: "aqualinkd/Pool_Heater" + json_attributes_template: "{{ {'active': value|int} | tojson }}" qos: 1 payload_on: "1" payload_off: "0" retain: false + icon: mdi:fire - platform: mqtt + unique_id: aqualink_spa_heater name: "Spa Heater" - state_topic: "aqualinkd/Spa_Heater" + state_topic: "aqualinkd/Spa_Heater/enabled" command_topic: "aqualinkd/Spa_Heater/set" + json_attributes_topic: "aqualinkd/Spa_Heater" + json_attributes_template: "{{ {'active': value|int} | tojson }}" qos: 1 payload_on: "1" payload_off: "0" retain: false - + icon: mdi:fire + #----AQUALINK SENSORS sensor: - platform: mqtt - state_topic: "aqualinkd/Aux_1" - name: "Pool State" + unique_id: aqualink_pool_state + state_topic: "aqualinkd/Service_Mode" + name: "Aqualink Mode" value_template: "{{ value }}" + icon: mdi:wrench - platform: mqtt + unique_id: aqualink_air_temp state_topic: "aqualinkd/Temperature/Air" name: "Air Temp" value_template: "{{ value_json }}" - unit_of_measurement: "°F" + unit_of_measurement: "°F" + device_class: temperature - platform: mqtt + unique_id: aqualink_spa_temp state_topic: "aqualinkd/Temperature/Spa" name: "Spa Temp" value_template: "{{ value_json }}" unit_of_measurement: "°F" + device_class: temperature - platform: mqtt + unique_id: aqualink_pool_temp state_topic: "aqualinkd/Temperature/Pool" name: "Pool Temp" value_template: "{{ value_json }}" unit_of_measurement: "°F" + device_class: temperature - platform: mqtt + unique_id: aqualink_pool_heater_temp state_topic: "aqualinkd/Pool_Heater/setpoint" - name: "Pool Temp Set" + name: "Pool Heater Temp" value_template: "{{ value_json }}" unit_of_measurement: "°F" + device_class: temperature - platform: mqtt + unique_id: aqualink_spa_heater_temp state_topic: "aqualinkd/Spa_Heater/setpoint" - name: "Spa Temp Set" + name: "Spa Heater Temp" value_template: "{{ value_json }}" unit_of_measurement: "°F" + device_class: temperature -# This simple sensor shows the current state of the Aqualink battery... - platform: template sensors: - battery_check: + #this sensor simulates a numeric state, but since we only get NORMAL or LOW from Aqualink we can't do a true range + aqualink_battery_level: value_template: >- - {%- if states('binary_sensor.Battery') == "on" %} - OK + {%- if states('binary_sensor.aqualink_battery') == "off" %} + 80 {% else %} - LOW + 5 {%- endif %} icon_template: >- - {%- if states('binary_sensor.Battery') == "on" %} - mdi:battery + {%- if states('binary_sensor.aqualink_battery') == "off" %} + mdi:battery {% else %} - mdi:battery-alert + mdi:battery-alert {%- endif %} - friendly_name: 'Pool Batt' + friendly_name: 'Aqualink Battery Level' + unit_of_measurement: '%' + device_class: battery + #this sensor translates the service mode values + aqualink_run_mode: + value_template: >- + {%- if states('sensor.aqualink_mode') == '0' %} + AUTO + {% elif states('sensor.aqualink_mode') == '1' %} + SERVICE + {% elif states('sensor.aqualink_mode') == '2' %} + TIMEOUT + {%- endif %} + icon_template: >- + {%- if states('sensor.aqualink_mode') == '0' %} + mdi:robot + {% elif states('sensor.aqualink_mode') == '1' %} + mdi:cog + {% elif states('sensor.aqualink_mode') == '2' %} + mdi:clock + {%- endif %} + friendly_name: 'Aqualink Run Mode' #----AQUALINK BINARY SENSORS binary_sensor: - - platform: mqtt - state_topic: "aqualinkd/Pool_Heater/enabled" - name: "Pool Heat" - qos: 0 - payload_on: "1" - payload_off: "0" - - platform: mqtt - state_topic: "aqualinkd/Spa_Heater/enabled" - name: "Spa Heat" - qos: 0 - payload_on: "1" - payload_off: "0" - - platform: mqtt - state_topic: "aqualinkd/Freeze_Protect" - name: "Freeze" - qos: 0 - payload_on: "1" - payload_off: "0" - - platform: mqtt - state_topic: "aqualinkd/Alive" - name: "AqualinkD" - qos: 0 - payload_on: "1" - payload_off: "0" - - platform: mqtt - state_topic: "aqualinkd/Battery" - name: "Battery" - qos: 0 - payload_on: "1" - payload_off: "0" +- platform: mqtt + unique_id: aqualink_pool_heater + state_topic: "aqualinkd/Pool_Heater" + name: "Pool Heating" + qos: 0 + payload_on: "1" + payload_off: "0" +- platform: mqtt + unique_id: aqualink_spa_heater + state_topic: "aqualinkd/Spa_Heater" + name: "Spa Heating" + qos: 0 + payload_on: "1" + payload_off: "0" +- platform: mqtt + unique_id: aqualink_freeze_protection + state_topic: "aqualinkd/Freeze_Protect" + name: "Freeze Protecting" + qos: 0 + payload_on: "1" + payload_off: "0" +- platform: mqtt + unique_id: aqualink_alive + state_topic: "aqualinkd/Alive" + name: "AqualinkD Alive" + qos: 0 + payload_on: "1" + payload_off: "0" +- platform: mqtt + unique_id: aqualink_battery + state_topic: "aqualinkd/Battery" + name: "Aqualink Battery" + qos: 0 + payload_on: "0" + payload_off: "1" + device_class: battery +- platform: mqtt + unique_id: filter_pump_delay + state_topic: "aqualinkd/Filter_Pump/delay" + name: "Filter Pump Delay" + qos: 0 + payload_on: "1" + payload_off: "0" +- platform: mqtt + unique_id: spa_mode_delay + state_topic: "aqualinkd/Spa_Mode/delay" + name: "Spa Mode Delay" + qos: 0 + payload_on: "1" + payload_off: "0" +- platform: mqtt + unique_id: pool_light_delay + state_topic: "aqualinkd/Solar_Heater/delay" + name: "Pool Light Delay" + qos: 0 + payload_on: "1" + payload_off: "0" +- platform: mqtt + unique_id: cleaner_delay + state_topic: "aqualinkd/Aux_1/delay" + name: "Cleaner Delay" + qos: 0 + payload_on: "1" + payload_off: "0" +- platform: mqtt + unique_id: spa_blower_delay + state_topic: "aqualinkd/Aux_2/delay" + name: "Spa Blower Delay" + qos: 0 + payload_on: "1" + payload_off: "0" +- platform: mqtt + unique_id: spa_light_delay + state_topic: "aqualinkd/Aux_3/delay" + name: "Spa Light Delay" + qos: 0 + payload_on: "1" + payload_off: "0" #-----Automation Entries--------- @@ -320,4 +373,18 @@ automation: - service: notify.ios_brianphone data: message: 'The Aqualink Pool Controller Battery is LOW' - title: 'Home Assistant' \ No newline at end of file + title: 'Home Assistant' + + - id: disable-heater-when-pool-off + alias: Disable heater when pool off + initial_state: on + trigger: + platform: state + entity_id: switch.filter_pump + from: 'on' + to: 'off' + action: + - service: switch.turn_off + entity_id: + - switch.pool_heater + - switch.spa_heater