mikekap / wink-mqtt-rs

MQTT Relay for the Jailbroken Wink Hub v1, with Home Assistant MQTT autodiscovery support
Other
14 stars 0 forks source link
mqtt wink

wink-mqtt-rs

This is a rust implementation of an MQTT daemon to run on the wink hub (1, not 2). This turns your wink hub into a mqtt "radio" that can control attached devices.

This version also includes support for home-assistant autodiscovery so you don't have to configure your devices by hand.

There is also a guide for HomeSeer if you prefer that integration.

Installation

First you need to have root on your wink hub. This tutorial has instructions on how to root your hub. If you, like me, don't want to buy a UART->USB dongle, you can use the UART port on a Raspberry PI (since both UARTs are 3.3V). This worked for me, but I make no guarantees otherwise.

Once you have root on your hub, run the following command on your wink hub:

curl -L --cacert /etc/ssl/certs/ca-certificates.crt https://github.com/mikekap/wink-mqtt-rs/releases/latest/download/wink-mqtt-rs.tar.gz | tar -C / -zxvf - && /opt/wink-mqtt-rs/setup.sh

and follow the prompts!

You can configure more options by editing the /opt/wink-mqtt-rs/config file after installation (it's just the CLI args to the process).

Options

wink-mqtt-rs 0.2.1
Mike Kaplinskiy <mike.kaplinskiy@gmail.com>
wink hub v1 mqtt bridge

USAGE:
    wink-mqtt-rs [FLAGS] [OPTIONS]

FLAGS:
    -h, --help       Prints help information
    -v               verbosity level
    -V, --version    Prints version information

OPTIONS:
        --discovery-listen-topic <discovery-listen-topic>
            Topic to listen to in order to (re)broadcast discovery information. Only applies if
            --discovery-prefix is set. [default: homeassistant/status]

    -d <discovery-prefix>
            Prefix (applied independently of --topic-prefix) to broadcast mqtt discovery information
            (see https://www.home-assistant.io/docs/mqtt/discovery/)

        --http-port <http-port>
            If you'd like an http server, this is the port on which to start it [default: 3000]

    -s <mqtt-uri>
            mqtt server to connect to. Should be of the form
            mqtt[s]://[username:password@]host:port/[?connection_options]

    -i <resync-interval>
            how frequently to check if the light changed state (e.g. via Wink or other external
            means) [default: 10000]

    -t <topic-prefix>
            Prefix for the mqtt topic used for device status/control [default: home/wink/]

The default setup above will read these options from /opt/wink-mqtt-rs/config . You can also see this by running cargo +nightly run.

Logs

If you're having issues, you can find logs at /var/log/wink-mqtt-rs.log. Adding -vvv to the config mentioned above will increase the verbosity of logs.

MQTT Messages

If you have a topic prefix of home/wink/, and a device id with 1 named Fan:

Messages on the discovery topic follow a format that works with home assistant MQTT discovery. For details, see converter.rs.

HTTP Server

An HTTP server is started (by default on port 3000) to let you see a quick UI of what your wink sees. Visit http://192.168.1.123:3000/ in your browser to see it (replacing 192.168.1.123 with however you reach your wink).

In addition, there's an (unstable) REST API to control the wink exposed via this server. The endpoints are:

# List of devices, as well as current attribute values
curl http://wink:3000/api/devices

# Set device id 2's attribute id 3 to 255.
curl http://wink:3000/api/devices/2/3 -d '{"value": 255}' -H "Content-Type: application/json"

Known Issues

Uninstalling

To uninstall, run:

/opt/wink-mqtt-rs/uninstall.sh

Developing

This is a vanilla Rust project - just use cargo nightly.

Running Locally

You can run wink-mqtt-rs locally, though obviously it won't control any lights. There's a fake implementation of aprontest for local use that mostly just pretends whatever you do to it succeeded.

Running on the Wink

Use ./release/build_release.sh to build a ARM binary (requires docker). Then you can:

ssh root@wink /etc/rc.d/init.d/wink-mqtt-rs stop
scp target/armv5te-unknown-linux-musleabi/release/wink-mqtt-rs root@wink:/opt/wink-mqtt-rs/
ssh root@wink /etc/rc.d/init.d/wink-mqtt-rs start

License

See LICENSE.md