## Heatmiser neohub "v3" (websocket/token) client

A (currently) low-level wrapper for the neoHub websocket API.

Upstream docs are available, with a free account, from https://dev.heatmiser.com/.
They are not very complete or accurate.


### Warning

All certificate information is ignored. The hub does not have a valid cert, and
the client is set up to accept this. You must not trust data transmitted over an
untrusted network.


### Usage

Find your hub's address. Supposedly they respond to broadcast, but mine won't:
```bash
echo -n "hubseek" | nc -b -u 255.255.255.255 19790
```

I pulled the IP from my router's dashboard. Let's say the IP is `192.168.13.37`.

Next, create a token in the mobile app. The name doesn't matter. It looks like a `uuidv4`.

Export both of these as environment variables:

```bash
export NEOHUB_URL=wss://192.168.13.37:4243
export NEOHUB_TOKEN=69696969-6969-4969-6969-696969696969
```

Then, you can use the library:
```rust
let mut client = Client::from_env()?;
let result: Value = client.command_void(commands::GET_LIVE_DATA).await?;
println!("{}", result.to_string()));
```

Or one of the examples:
```bash
cargo run --example neohub-cli
```

```
>> GET_LIVE_DATA
{
  "CLOSE_DELAY": 0,
  "COOL_INPUT": false,
  "HOLIDAY_END": 0,
  "HUB_AWAY": false,
  "HUB_HOLIDAY": false,
```


### Examples

 * `dump-live-data` continually exports the GET_LIVE_DATA to `zstd`'d `jsonlines` files.


### Contributing / Future

I don't think the API is stable enough to provide structs, like the (generated)
`LiveData` struct, so I don't think adding those to the crate's API is a good idea.

Github issues or PRs, please.


### License

MIT OR Apache-2.0
