Adding group support into the integration, group support is already present in bond_async in python. See here: Bond Integration - Groups unavailable · Issue #143004 · home-assistant/core · GitHub and here: Bond - Group devices and entities are missing · Issue #127367 · home-assistant/core · GitHub
A simple workaround that may help is to create the group by pairing at the shade remote control level. The teach bond that channel. I’ve run a bank of roller shades that way for years now. To HA it just appears as another shade. So in my case HA sees left bay, mid bay, right bay, and all bay as 4 devices. All bay runs all the shades together.
Wow, I wish I knew about the group channels before I started my workaround yesterday!
For anyone who wants a different, much more complicated, workaround… Here’s what I did:
-
Find your Bond token; you can go into the app and see it under advanced in your bridge
-
Find your Group ID. You can use curl with your token: curl -H “BOND-Token: YOUR_BOND_TOKEN” -i http://YOUR_BOND_IP_ADDRESS/v2/groups
-
Add some secrets in secrets.yaml:
bond_token: YOUR_BOND_TOKEN
bond_kitchen_shades_close_url: http://YOUR_BOND_IP_ADDRESS/v2/groups/YOUR_BOND_GROUP_ID/actions/Close
bond_kitchen_shades_open_url: http://YOUR_BOND_IP_ADDRESS/v2/groups/YOUR_BOND_GROUP_ID/actions/Open
bond_kitchen_shades_set_position_url: http://YOUR_BOND_IP_ADDRESS/v2/groups/YOUR_BOND_GROUP_ID/actions/SetPosition
- Now edit your configuration.yaml
# These REST commands are the API calls to close, open, and set position
rest_command:
kitchen_shades_close:
url: !secret bond_kitchen_shades_close_url
method: put
content_type: "application/json"
payload: "{}"
headers:
BOND-Token: !secret bond_token
kitchen_shades_open:
url: !secret bond_kitchen_shades_open_url
method: put
content_type: "application/json"
payload: "{}"
headers:
BOND-Token: !secret bond_token
kitchen_shades_set_position:
url: !secret bond_kitchen_shades_set_position_url
method: PUT
headers:
BOND-Token: !secret bond_token
Content-Type: "application/json"
content_type: "application/json"
payload: >
{
"argument": {{ position }}
}
# This is a sensor to determine the current position of the shades
sensor:
- platform: rest
name: Kitchen Shades Position
resource: http://BOND_IP_ADDRESS/v2/groups/BOND_GROUP_ID/state
method: GET
headers:
BOND-Token: !secret bond_token
value_template: "{{ value_json.position }}"
unit_of_measurement: "%"
scan_interval: 10 How often to poll (in seconds)
# This is the cover template
cover:
- platform: template
covers:
kitchen_shades:
friendly_name: "Kitchen Shades"
open_cover:
service: rest_command.kitchen_shades_open
close_cover:
service: rest_command.kitchen_shades_close
position_template: >
{{ 100 - (states('sensor.kitchen_shades_position') | int) }}
set_cover_position:
service: rest_command.kitchen_shades_set_position
data:
position: "{{ 100 - position }}"
There you go!