# Changelog
All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]
### Added
- declare compatibility with `python3.11`

### Changed
- TLS now enabled by default (disable via `--mqtt-disable-tls`)
- require `PySwitchbot>=0.14.0,<0.41` instead of `PySwitchbot>=0.10.0,<0.13`
- switchbot-mqtt now requires access to the D-Bus' system socket
  `/var/run/dbus/system_bus_socket`
  as `bleak` controls bluetooth via BlueZ over D-Bus.
  access to network namespace containing bluetooth interface is thus
  no longer required.
- `--fetch-device-info` no longer requires `CAP_NET_ADMIN`
  (bluepy-helper replaced with bleak)
- replaced [paho-mqtt](https://github.com/eclipse/paho.mqtt.python)
  with its async wrapper [aiomqtt](https://github.com/sbtinstruments/aiomqtt)
- container image: upgraded alpine base image from v3.13.1 to v3.18.4

### Removed
- command-line option `--mqtt-enable-tls` (TLS now enabled by default)
- compatibility with `python3.7`
- compatibility with `python3.8`
  (pySwitchbot v0.17.2 added constraint `bleak-retry-connector>=1.1.1`
  requiring `python>=3.9`)

## [3.3.1] - 2022-08-31
### Fixed
- Publish birth and last will message on expected/documented topic
  `homeassistant/switchbot-mqtt/status` instead of topic
  `homeassistant/switchbot_mqtt/status`.

## [3.3.0] - 2022-08-30
### Added
- Birth ("online") and last will ("offline") message on topic
  `homeassistant/switchbot-mqtt/status`
  (@phbasler, https://github.com/fphammerle/switchbot-mqtt/pull/105)

## [3.2.1] - 2022-07-09
### Fixed
- `ValueError: too many values to unpack` when connecting to MQTT broker via IPv6
  (https://github.com/fphammerle/switchbot-mqtt/issues/42)

## [3.2.0] - 2022-04-18
### Added
- command-line option `--mqtt-topic-prefix`

## [3.1.0] - 2022-04-02
### Added
- command-line option `--mqtt-enable-tls`
- command-line option `--mqtt-disable-tls` (enabled by default)

### Deprecated
- invocation without `--mqtt-enable-tls` and `--mqtt-disable-tls`

## [3.0.0] - 2022-02-05
### Added
- MQTT messages on topic `homeassistant/cover/switchbot-curtain/MAC_ADDRESS/position/set-percent`
  trigger command to set curtain motors' position (payload: decimal integer in range `[0, 100]`)
- support `PySwitchbot` `v0.11.0` and `v0.12.0`

### Removed
- compatibility with `python3.6`
- no longer report button automator's battery percentage on deprecated topic
  `homeassistant/cover/switchbot/+/battery-percentage`
  (use `homeassistant/switch/switchbot/+/battery-percentage` instead, see `v2.1.0`)

## [2.2.0] - 2021-10-23
### Added
- MQTT messages on topic `homeassistant/switch/switchbot/MAC_ADDRESS/request-device-info`
  and `homeassistant/cover/switchbot-curtain/MAC_ADDRESS/request-device-info` trigger
  update and reporting of device information (battery level, and curtains' position).
  Requires `--fetch-device-info`.

## [2.1.0] - 2021-10-19
### Added
- `--fetch-device-info` can alternatively be enabled by assigning a non-empty value
  to the environment variable `FETCH_DEVICE_INFO`
- battery level of button automators will additionally be reported on topic
  `homeassistant/switch/switchbot/MAC_ADDRESS/battery-percentage`
  (old topic kept for downward compatibility)

## [2.0.0] - 2021-10-16
### Added
- command-line option `--fetch-device-info` enables battery level reports on topics
  `homeassistant/cover/{switchbot,switchbot-curtain}/MAC_ADDRESS/battery-percentage`
  after every command.
- option `--debug` to change log level to `DEBUG`

### Changed
- changed default log level from `DEBUG` to `INFO`
- shortened log format (revert with `--debug`)

### Removed
- compatibility with `python3.5`

## [1.1.0] - 2021-10-06
### Added
- command-line option `--fetch-device-info` enables reporting of curtain motors'
  position on topic  `homeassistant/cover/switchbot-curtain/MAC_ADDRESS/position`
  after sending stop command.

## [1.0.0] - 2021-07-25
### Added
- support for password-protected switchbot devices
  via optional command-line parameter `--device-password-file`
  (json file mapping mac addresses to the respective password)

## [0.7.0] - 2021-07-09
### Added
- command-line parameter `--retries` to alter maximum number of attempts to send a command
  to a SwitchBot device (default unchanged)

### Fixed
- dockerfile: split `pipenv install` into two stages to speed up image builds
- dockerfile: `chmod` files copied from host to no longer require `o=rX` perms on host
- dockerfile: add registry to base image specifier for `podman build`
- dockerfile: add `--force` flag to `rm` invocation to avoid interactive questions while running `podman build`

## [0.6.0] - 2020-12-19
### Added
- Control [SwitchBot Curtain](https://www.switch-bot.com/products/switchbot-curtain) motors
  via `OPEN`, `CLOSE`, and `STOP` on topic `homeassistant/cover/switchbot-curtain/aa:bb:cc:dd:ee:ff/set`

### Changed
- Docker image:
  - Upgrade `paho-mqtt` to no longer suppress exceptions occuring in mqtt callbacks
    ( https://github.com/eclipse/paho.mqtt.python/blob/v1.5.1/ChangeLog.txt#L4 )
  - Build stage: revert user after applying `chown` workaround for inter-stage copy
- Log format: added name of logger between level and message

## [0.5.0] - 2020-11-22
### Added
- Docker image: support parametrization via environment variables
  (`MQTT_HOST`, `MQTT_PORT`, `MQTT_USERNAME` & `MQTT_PASSWORD`)

## [0.4.1] - 2020-06-18
### Fixed
- Compatibility with python3.5:
  - Replaced [PEP526](https://www.python.org/dev/peps/pep-0526/#abstract)-style variable type hint
    with [PEP484](https://www.python.org/dev/peps/pep-0484/)-compatible
  - Tests: Fixed `AttributeError` due to unavailable `MagicMock.assert_called_once`

## [0.4.0] - 2020-06-14
### Added
- Added command line parameter `--mqtt-password-file`

### Fixed
- Docker build: fix `pipenv` failing to create cache

## [0.3.0] - 2020-05-08
### Added
- Publish new state to `homeassistant/switch/switchbot/MAC_ADDRESS/state` on success

## [0.2.0] - 2020-05-08
### Added
- Added command line parameters `--mqtt-username` and `--mqtt-password`

### Fixed
- Fixed executable name in command line help
- Docker: no longer require build arg `SWITCHBOT_MQTT_VERSION`
  (fixes auto build on hub.docker.com)

## [0.1.0] - 2020-05-08
### Added
- Subscribe to `homeassistant/switch/switchbot/+/set`.
  Handle `ON` and `OFF` messages.

[Unreleased]: https://github.com/fphammerle/switchbot-mqtt/compare/v3.3.1...HEAD
[3.3.1]: https://github.com/fphammerle/switchbot-mqtt/compare/v3.3.0...v3.3.1
[3.3.0]: https://github.com/fphammerle/switchbot-mqtt/compare/v3.2.1...v3.3.0
[3.2.1]: https://github.com/fphammerle/switchbot-mqtt/compare/v3.2.0...v3.2.1
[3.2.0]: https://github.com/fphammerle/switchbot-mqtt/compare/v3.1.0...v3.2.0
[3.1.0]: https://github.com/fphammerle/switchbot-mqtt/compare/v3.0.0...v3.1.0
[3.0.0]: https://github.com/fphammerle/switchbot-mqtt/compare/v2.2.0...v3.0.0
[2.2.0]: https://github.com/fphammerle/switchbot-mqtt/compare/v2.1.0...v2.2.0
[2.1.0]: https://github.com/fphammerle/switchbot-mqtt/compare/v2.0.0...v2.1.0
[2.0.0]: https://github.com/fphammerle/switchbot-mqtt/compare/v1.1.0...v2.0.0
[1.1.0]: https://github.com/fphammerle/switchbot-mqtt/compare/v1.0.0...v1.1.0
[1.0.0]: https://github.com/fphammerle/switchbot-mqtt/compare/v0.7.0...v1.0.0
[0.7.0]: https://github.com/fphammerle/switchbot-mqtt/compare/v0.6.0...v0.7.0
[0.6.0]: https://github.com/fphammerle/switchbot-mqtt/compare/v0.5.0...v0.6.0
[0.5.0]: https://github.com/fphammerle/switchbot-mqtt/compare/v0.4.1...v0.5.0
[0.4.1]: https://github.com/fphammerle/switchbot-mqtt/compare/v0.4.0...v0.4.1
[0.4.0]: https://github.com/fphammerle/switchbot-mqtt/compare/v0.3.0...v0.4.0
[0.3.0]: https://github.com/fphammerle/switchbot-mqtt/compare/v0.2.0...v0.3.0
[0.2.0]: https://github.com/fphammerle/switchbot-mqtt/compare/v0.1.0...v0.2.0
[0.1.0]: https://github.com/fphammerle/switchbot-mqtt/releases/tag/v0.1.0