# zwave-js-server-python

Python library for communicating with [zwave-js-server](https://github.com/zwave-js/zwave-js-server/). Goal for this library is to replicate the structure and the events of Z-Wave JS 1:1. So it has a `Driver`, `Controller` and `Node` classes.

## Setup development environment

To setup your development environment, run `scripts/setup`, which will install all requirements and set up pre-commit checks.

## Trying it out

```shell
python3 -m zwave_js_server ws://localhost:3000
```

Or get the version of the server

```shell
python3 -m zwave_js_server ws://localhost:3000 --server-version
```

Or dump the state. Optionally add `--event-timeout 5` if you want to listen 5 seconds extra for events.

```shell
python3 -m zwave_js_server ws://localhost:3000 --dump-state
```

## Sending commands

```python
try:
    result = await client.async_send_command({ "command": "start_listening" })
except zwave_js_server.client.FailedCommand as err:
    print("Command failed with", err.error_code)
```

## Access control

Schema 48 adds typed access-control helpers exposed via the `AccessControlAPI`
wrapper:

- `node.access_control`: shortcut for the root endpoint API.
- `endpoint.access_control`: API for a specific endpoint.
- Call `await endpoint.access_control.is_supported()` before using other
  methods.
- Credential payloads accept `str | bytes`; binary credentials are converted to
  the websocket Buffer transport shape internally.
