Skip to content

Tested configurations

Daniel Caspi edited this page Dec 27, 2023 · 15 revisions

Bond and Bond Bridge Pro

Sample config.json, noting that you need to replace 1.2.3.4 with your Bond IP address, <deviceId> with your deviceId, and <BondToken> with your Bond token.

These values can be obtained from the Bond app, under Device settings for any individual shades.

Bond

{
  "accessory": "BlindsHTTP",
  "name": "Dining Room Shades",
  "up_url": {
    "url": "http://1.2.3.4/v2/devices/<deviceId>/actions/Open",
    "body": "{}",
    "headers": {
      "BOND-Token": "<BondToken>"
    },
    "method": "PUT"
  },
  "down_url": {
    "url": "http://1.2.3.4/v2/devices/<deviceId>/actions/Close",
    "body": "{}",
    "headers": {
      "BOND-Token": "<BondToken>"
    },
    "method": "PUT"
  },
  "stop_url": {
    "url": "http://1.2.3.4/v2/devices/<deviceId>/actions/Hold",
    "body": "{}",
    "headers": {
      "BOND-Token": "<BondToken>"
    },
    "method": "PUT"
  },
  "http_success_codes": [200, 204],
  "motion_time": 11000,
  "response_lag_ms": 1000,
  "trigger_stop_at_boundaries": false
}

Bond Bridge Pro

Bond Bridge Pro supports the SetPosition command, which allows for finer-tuned control. Note that Bond's convention for 0-100% is exactly opposite of HomeKit's convention, so JSONata was used to remap the values.

{
  "accessory": "BlindsHTTP",
  "name": "Dining Room Shades",
  "up_url": {
    "url": "http://1.2.3.4/v2/devices/36ecfde3/actions/SetPosition",
    "body": "{\"argument\": %%POS%%}",
    "headers": {
      "BOND-Token": "<BondToken>"
    },
    "method": "PUT"
  },
  "down_url": {
    "url": "http://1.2.3.4/v2/devices/36ecfde3/actions/SetPosition",
    "body": "{\"argument\": %%POS%%}",
    "headers": {
      "BOND-Token": "<BondToken>"
    },
    "method": "PUT"
  },
  "pos_url": {
    "url": "http://1.2.3.4/v2/devices/36ecfde3/state",
    "headers": {
      "BOND-Token": "<BondToken>"
    },
    "method": "GET"
  },
  "pos_poll_ms": 15000,
  "pos_jsonata": "$round( 100 - $number(position) )",
  "send_pos_jsonata": "$round( 100 - $number($) )",
  "stop_url": {
    "url": "http://1.2.3.4/v2/devices/36ecfde3/actions/Hold",
    "body": "{}",
    "headers": {
      "BOND-Token": "<BondToken>"
    },
    "method": "PUT"
  },
  "motion_time": 24000,
  "response_lag_ms": 1000,
  "http_success_codes": [200, 204]
}

Bond Bridge Groups

If you prefer instead, you can trigger Groups instead of individual devices. The groups need to be configured within the Bond app itself. To use a group, just replace the devices/<deviceId> in all of the URLs with groups/<groupId>.

E.g.,

  "up_url": {
    "url": "http://1.2.3.4/v2/groups/<groupId>/actions/Open",
    "body": "{}",
    "headers": {
      "BOND-Token": "<BondToken>"
    },
    "method": "PUT"
  },

This applies for the Pro configuration as well.

Troubleshooting

If you are having difficulty finding the settings, you can test your Bond device from the command line directly first (substituting your IP address, BOND-Token, and deviceId, e.g.:

curl -H "BOND-Token: f074b61f628018fd" -i http://1.2.3.4/v2/devices/79135791/actions/Open -X PUT -d "{}"

Alternatively, sample shell script to retrieve the list of Bond deviceId's using the local API, replacing 1.2.3.4 with your Bond IP address, and <BondToken> with your Bond token:

#!/bin/sh

# CONFIGURE BOND_IP AND BOND_TOKEN TO MATCH YOUR CONFIGURATION
BOND_IP="1.2.3.4"
BOND_TOKEN="<BondToken>"

if ! [ -x "$(command -v jq)" ]; then
  echo 'Error: jq is not installed.' >&2
  exit 1
fi

BOND_DEVICES=$( curl -s "http://${BOND_IP}/v2/devices" -X GET -d "{\"_token\": \"${BOND_TOKEN}\"}" | jq -r 'keys[]' | grep -v '_' )

while read -r line; do
   DEVICE_DETAILS=$( curl -sH "BOND-Token: ${BOND_TOKEN}" "http://${BOND_IP}/v2/devices/${line}" | jq '.name' )
   echo "${DEVICE_DETAILS} ${line}"
done <<< "${BOND_DEVICES}"

Tasmota

Sample config.json, noting that you need to replace 1.2.3.4 with your Tasmota IP address. As described above, %%POS%% is used to supply the target position (0-100) to the plugin.

{
  "accessory": "BlindsHTTP",
  "name": "Window",
  "up_url": {
    "url": "http://1.2.3.4/cm?cmnd=ShutterPosition%20%%POS%%",
    "method": "GET"
  },
  "down_url": {
    "url": "http://1.2.3.4/cm?cmnd=ShutterPosition%20%%POS%%",
    "method": "GET"
  },
  "stop_url": {
    "url": "http://1.2.3.4/cm?cmnd=Power3%20ON",
    "method": "GET"
  },
  "http_success_codes": [200],
  "show_stop_button": true,
  "motion_time": 20000
}

Louvolite One Touch (Neo Smart Blinds)

Louvolite's smart home system seems to be build on top of Neo Smart Blinds platform, so this configuration is likely to work with other manufacturers utilising Neo. You will need the following values for the config:

  • <controller_ip> is the IP address of Louvolite's One Touch (or other Neo-based hub), e.g. 1.2.3.4;
  • <controller_id> is the controller identifier, composed of 20+ characters, which you can find in the Neo app on the controller page, this is a long alphanumeric identifier;
  • <command> Expression containing group_id, channel_id and action syntax. Syntax: ID1.ID2-CHANNEL-ACTION!MOTORCODE (16 characters). You can also find in the Neo app at the bottom of the blind page — it looks something like 123.456-01.

Earlier versions of the API may not require the !MOTORCODE.

<command> Details

Note: All of the functionality should be tested/confirmed from the command line as follows, e.g.:

curl -v 'http://10.0.10.185:8838/neo/v1/transmit?command=041.240-03-up!k2&id=xxxxxxxxxxxxxxxxxxxxxx'
  • ID1 : controller byte 1, from integer “000” to “255”
  • . : address separator
  • ID2 : controller byte 2, from integer “000” to “255”
  • - : channel separator
  • CHANNEL : channel, individual channel from integer “01” to “14”, use channel “15” for a group
  • - : command separator
  • ACTION : action, as follows
  • "up” : blinds move UP
  • “dn” : blinds move DOWN
  • “sp” : blinds STOP moving
  • “gp” : go to favourite position
  • “mu” : micro-step up
  • “md” : micro-step down
  • “XX” : go to a specific position from 01 to 99. ONLY available for use with motors which motor code is “no”.

Options only available when using motor code = “tb”, TopDown-BottomUp blinds:

  • "op” : open shades, move both rails UP
  • "cl” : close shades, move top rail UP and lower rail down
  • "u3” : move both rails UP
  • "u2” : move lower rail UP
  • "u3” : move both rails UP
  • “d2” : blinds lower rail DOWN
  • “d3” : blinds both rails DOWN
  • “o2” : micro-step lower rail UP
  • “c2” : micro-step lower rail DOWN
  • ! : exclamation symbol, command separator preceding the motor code
  • MOTORCODE: code designation to indicate the motor protocol to be transmitted
  • “bf” : standard Bofu motor
  • “vb” : vertical Bofu motor
  • “tb” : top-down/bottom-up Bofu motor
  • “no” : NEO motor
  • “rx” : Raex motor
  • “nc” : Nice motor
  • “k1” : standard A-OK motor
  • “k2” : version 2 A-OK motor (louvolite exclusive)
  • “dy” : standard unidirectional Dooya motor
  • “by” : special code compatible with both Bofu and Dooya standard motors
  • “wt” : standard Wistar and Alpha motor
{
  "accessory": "BlindsHTTP",
  "name": "Louvolite Blind",
  "up_url": {
    "url": "http://<controller_ip>:8838/neo/v1/transmit?command=<blind_code>-up&id=<controller_id>",
    "method": "GET"
  },
  "down_url": {
    "url": "http://<controller_ip>:8838/neo/v1/transmit?command=<blind_code>-dn&id=<controller_id>",
    "method": "GET"
  },
  "stop_url": {
    "url": "http://<controller_ip>:8838/neo/v1/transmit?command=<blind_code>-sp&id=<controller_id>",
    "method": "GET"
  }
}

Troubleshooting

  • In some instances, the ordering of the id and command GET parameters appear to be critical, otherwise it crashes the Neo box.
  • HTTP 400 = Command not found or not valid
  • HTTP 401 = Device_ID was not found or not valid
  • HTTP 404 = “/neo/v1/transmit” not found or not valid

Integration with ESPSomfy-RTS

The homebridge-blinds plugin can be integrated with ESPSomfy-RTS, an affordable hardware solution for WiFi control of Somfy blinds using the RTS protocol. The device accepts commands via HTTP POST/GET and MQTT.

Configuration Steps

  • Specify the IP/DNS of the ESP.
  • Define the shade identifier from ESPSomfyRTS (1 to 32).

Replace <IP_ADDRESS> and <SHADE_ID> in the following configuration with the appropriate values.

{
  "name": "Shade1",
  "up_url": {
    "url": "http://<IP_ADDRESS>/shadeCommand?shadeId=<SHADE_ID>&target=%%POS%%",
    "method": "GET"
  },
  "down_url": {
    "url": "http://<IP_ADDRESS>/shadeCommand?shadeId=<SHADE_ID>&target=%%POS%%",
    "method": "GET"
  },
  "motion_time": 28000,
  "stop_url": {
    "url": "http://<IP_ADDRESS>/shadeCommand?shadeId=<SHADE_ID>&command=my",
    "method": "GET"
  },
  "pos_url": "http://<IP_ADDRESS>/shades",
  "pos_jsonata": "100-position[<SHADE_ID - 1>]",
  "send_pos_jsonata": "( 100 - $number($) )",
  "verbose": true,
  "accessory": "BlindsHTTP"
}