openhab-addons/bundles/org.openhab.binding.bondhome
Cody Cutrer 52b7b7981f
[bondhome] Initial contribution (#13459)
* First commit on newly created branch, taking code from c8b8e210dfd23f98526763782eadbca49509baf9
* [bondhome] update snapshot version, and some typos
* [bondhome] Address (most) comments from prior review from #7260
* [bondhome] simplify channels

 * lastUpdate is unnecessary; turn on persistence or add a rule on update if
   you care to keep track of it
 * use a single string command channel for all shoot-and-forget commands, instead
   of multiple switch channels
 * use a rollershutter channel for shades (accepting UP, DOWN, STOP, 0%, and 100%)
 * on all dimmer channels, accept ON and OFF, as well as 0% to imply OFF, instead
   of having to write rules to control ON/OFF state separately.
 * if the dimmer channel exists, prune the corresponding power channel, since
   the dimmer channel is now a pure superset of its functionality
 * overload fan#speed to be ceiling fan or a fireplace's fan, depending on the
   device type
* [bondhome] add bundle to the BOM pom
* [bondhome] clean up BondDeviceHandler a bit

 * there's no need to delay initialization; ThingManager won't
   even attempt to initialize a child thing until its bridge is online
 * Remove some extra initialization checks that can never be false
 * slightly refactor some methods to return early, rather than
   nest a giant `else`
 * remove some info logging that will get triggered in normal usage
* [bondhome] fix bridge discovery

 * Bridge property and config serial number need to be the same name
 * Don't arbitrarily delay the BPUPListener
 * Automatically update the IP if the BPUPListener finds it
 * Provide the new bridge with its discovered IP to avoid an additional
   DNS query
 * Don't get the bridge version after every keep-alive response
* [bondhome] trigger end-device discovery as soon as the bridge comes online
* [bondhome] remove internal binding version
* [bondhome] change addr property to string

Certain values seen in the wild when interpreted as a long are too big for that
storage. Also, the Bond API documentation describes the addr property on a
device to be a string.

OpenHAB already has infrastructure to have things update their
channel definitions when a binding is updated.

* [bondhome] ignore any device that starts with _

In v3 of their API, Bond added a new special entry of __. Because no valid
device id would start with an underscore, ignore everything that starts with an
underscore to fix v3 and maybe futureproof.

* address review comments

mostly adding i18n to error states, and cleaning up error handling of
HTTP requests.

* use builtin translation services

instead of plumbing our own provider through

* use System.nanoTime instead of currentTimeMillis

so that it will be a monotonic clock, not (as) susceptible to the clock
changing

* [bondhome] ignore BPUP messasges that aren't state

In recent firmware, bond is now sending action messages via BPUP as well as state.
This change ignores all messages that aren't state.

* [bondhome] Improve error handling, and remove dummy constants

Just use a single BondException class to communicate any sort of
error from within bond, and avoid throwing, catching, and re-throwing
the same (or slightly modified) exception.

Also remove dummy constants that might give the wrong impression
of the details of your Bond device. Then implement proper null checks,
especially setting a configuration error if key config properties
aren't set on the thing.

* [bondhome] avoid setting device status when bridge just went offline

* address static analysis tool problems

Also-by: Sara Damiano <sdamiano@stroudcenter.org>
Also-by: Keith T. Garner <kgarner@kgarner.com>
Signed-off-by: Cody Cutrer <cody@cutrer.us>
2022-12-05 17:19:35 +01:00
..
src/main [bondhome] Initial contribution (#13459) 2022-12-05 17:19:35 +01:00
NOTICE [bondhome] Initial contribution (#13459) 2022-12-05 17:19:35 +01:00
README.md [bondhome] Initial contribution (#13459) 2022-12-05 17:19:35 +01:00
pom.xml [bondhome] Initial contribution (#13459) 2022-12-05 17:19:35 +01:00

README.md

Bond Home Binding

This binding connects the Bond Home Bridge to openHAB using the BOND V2 Local HTTP API. You'll need to acquire your Local Token. The easiest way is to open the Bond Home app on your mobile device, tap on your bridge device, open the Advanced Settings, and copy it from the Local Token entry.

Supported Things

Thing Type Description
bondBridge The RF/IR/WiFi Bridge
bondFan An RF or IR remote controlled ceiling fan with or without a light
bondFireplace An RF or IR remote controlled fireplace with or without a fan
bondGenericThing A generic RF or IR remote controlled device
bondShades An RF or IR remote controlled motorized shade

Discovery

Once the bridge has been added, individual devices will be auto-discovered and added to the inbox.

Thing Configuration

bondBridge

Parameter Description Required
bondId The Bond ID of the bridge from the Bond Home app. Yes
localToken The authentication token for the local API. Yes
bondIpAddress The exact IP address to connect to the Bond Hub on the local network No

Channels

Not all channels will be available for every device. They are dependent on how the device is configured in the Bond Home app.

common Group

Channel Type Description
power Switch Device Power
command String Send a command to the device

Available commands:

Command Description
STOP Stop any in-progress dimming operation
PRESET Move a shade to a preset
DIM_START_STOP Dim the fan light (cyclically)
DIM_INCREASE Start increasing the brightness of the fan light
DIM_DECREASE Start decreasing the brightness of the fan light
UP_LIGHT_DIM_START_STOP Dim the fan light (cyclically)
UP_LIGHT_DIM_INCREASE Start increasing the brightness of the up light
UP_LIGHT_DIM_DECREASE Start decreasing the brightness of the up light
DOWN_LIGHT_DIM_START_STOP Dim the fan light (cyclically)
DOWN_LIGHT_DIM_INCREASE Start increasing the brightness of the down light
DOWN_LIGHT_DIM_DECREASE Start decreasing the brightness of the down light

fan Group

Channel Type Description
power Switch Fan power (only applicable to fireplace fans)
speed Dimmer Sets the fan speed. The 0-100% value will be scaled to however many speeds the fan actually has. Note that you cannot set the fan to speed 0 - you must turn OFF the power channel instead.
breezeState Switch Enables or disables breeze mode
breezeMean Dimmer Sets the average speed in breeze mode
breezeVariability Dimmer Sets the variability of the speed in breeze mode.
direction String Sets the fan direction - "Summer" or "Winter"
timer Number Sets an automatic off timer for s seconds (turning on the fan if necessary)

light, upLight, downLight Groups

Channel Type Description
power Switch Turns the light on or off
brightness Dimmer Adjusts the brightness of the light

fireplace Group

Channel Type Description
flame Dimmer Adjust the flame level

shade Group

Channel Type Description
rollershutter Rollershutter Only UP, DOWN, STOP, 0%, and 100% are supported.

Full Example

bond.things File

bondhome:bondBridge:BD123456 "Bond Bridge" [ ipAddress="192.168.0.10", localToken="abc123", serialNumber="BD123456" ]
bondhome:bondFan:BD123456:0d11f00 "Living Room Fan" (bondhome:bondBridge:BD123456) [ deviceId="0d11f00" ]

bond.items File

Switch GreatFan_Switch "Great Room Fan" { channel="bondhome:bondFan:BD123456:0d11f00:common#power" }
Dimmer GreatFan_Dimmer "Great Room Fan" { channel="bondhome:bondFan:BD123456:0d11f00:fan#speed" }
String GreatFan_Rotation "Great Room Fan Rotation" { channel="bondhome:bondFan:BD123456:0d11f00:fan#direction" }
Switch GreatFanLight_Switch "Great Room Fan Light" { channel="bondhome:bondFan:BD123456:0d11f00:light#power" }