Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
110 commits
Select commit Hold shift + click to select a range
b5d00f7
Initial implementation of Gree climate integration component rewrite
p-monteiro Sep 16, 2025
187ef3c
Add support for external temperature and humidity sensors
p-monteiro Sep 16, 2025
1188118
Make manifest compliant with HA requirements
p-monteiro Sep 16, 2025
c71392f
Cleanup old code in preparation for backporting features
p-monteiro Sep 17, 2025
73ebfe2
Use encryption version as enum and cleanup
p-monteiro Sep 17, 2025
e0d9886
Multiple config_flow enhancements:
p-monteiro Sep 18, 2025
74809e9
Listen to external sensor states if using them
p-monteiro Sep 18, 2025
f088882
Try to fix external entities not being unselectable
p-monteiro Sep 18, 2025
9a78e8f
Reimplement Auto Light and X-Fan
p-monteiro Sep 19, 2025
29cbd31
Remove timeout from the coordinator
p-monteiro Sep 19, 2025
97201de
Feature: Restore entity states configurable by user
p-monteiro Sep 19, 2025
03b9597
Change set_fan debug
p-monteiro Sep 19, 2025
98ce923
Fix auto x-fan logic
p-monteiro Sep 20, 2025
5425b80
Improve Temperature Units select and restore state
p-monteiro Sep 20, 2025
8686f44
Realign with main branch for easier migrations
p-monteiro Sep 22, 2025
4f0876b
Add API support for device discovery
p-monteiro Sep 22, 2025
ce79013
Gree API: Reuse pack decryption code
p-monteiro Sep 22, 2025
3adef52
Fix translations
p-monteiro Sep 22, 2025
f779529
Fix imports
p-monteiro Sep 22, 2025
3a9f0b2
Bring back add device by discovery
p-monteiro Sep 22, 2025
034c93d
Fix Temperature Unit selector
p-monteiro Sep 24, 2025
6ff856d
Fix current temperature units in Climate Entity
p-monteiro Sep 24, 2025
4622516
Request a update when system units are changed
p-monteiro Sep 24, 2025
fd5a17e
Implement RestoreEntity in GreeClimate
p-monteiro Sep 24, 2025
e013a19
Use _attr_ instead of the cached property
p-monteiro Sep 24, 2025
58856aa
Implement availability check based on coordinator data update success…
p-monteiro Sep 25, 2025
6181526
Improve README
p-monteiro Sep 26, 2025
2f53486
Fix LICENSE links
p-monteiro Sep 26, 2025
679283c
Add contributing iinstructions to setup the devcontainer
p-monteiro Sep 26, 2025
1200efc
Fix CONTRIBUTING mistake
p-monteiro Sep 26, 2025
a2ef9d1
Fix sensor translation
p-monteiro Sep 26, 2025
b3e3008
Remove limitation of hvac on to change parameters
p-monteiro Sep 27, 2025
9bb9338
Support hvac_mode in the set_target_temperature action
p-monteiro Sep 27, 2025
2762017
Fix the use of a sub device (for VRF)
p-monteiro Oct 2, 2025
593ea5b
Added support for discovery of VRF devices (@meirlo)
p-monteiro Oct 2, 2025
d6e0a48
Add further debug to pack decoding
p-monteiro Oct 3, 2025
eac1fc8
Do not leak device key to debug output
p-monteiro Oct 3, 2025
c6540e0
Use default cipher for ffetching subdevice list
p-monteiro Oct 7, 2025
6869d0f
Fix payload with incorrect t parameter
p-monteiro Oct 7, 2025
660f18e
Simplify payload creation to avoid duplicate code
p-monteiro Oct 7, 2025
bdeb7d2
Fix entity selectors for external sensors
p-monteiro Oct 7, 2025
c29d5c6
Changed domain and bump version
p-monteiro Oct 7, 2025
964f389
Readd Temperature Step and move connection settings to the advanced s…
p-monteiro Oct 8, 2025
8391d5f
More debug logs for VRF
p-monteiro Oct 8, 2025
abc6f10
Log exceptions during device add
p-monteiro Oct 8, 2025
e934a92
Fix get status when the device returns an empty string
p-monteiro Oct 9, 2025
dfab2d5
Use stable entity ids
p-monteiro Oct 11, 2025
2b94488
Allow to reconfigure main options and add more error checking
p-monteiro Oct 11, 2025
fdc041d
Make device key a password field
p-monteiro Oct 11, 2025
8a4ae3c
Support importing from configuration YAML
p-monteiro Oct 11, 2025
ef00776
Also add main VRF to the discovered devices
p-monteiro Oct 12, 2025
20d3a6f
General cleanup of device code in preparation for VRF adjustments
p-monteiro Oct 15, 2025
67ceed0
Rework config entry and schema in preparation for multiple devices (V…
p-monteiro Nov 4, 2025
513ca7a
Move api code to its own namespace
p-monteiro Nov 6, 2025
20d74e8
Add support for deleting individual devices
p-monteiro Nov 6, 2025
b391b16
Fix climate init after move to new config schema
p-monteiro Nov 6, 2025
3927f89
Fix unique ids not being unique enough
p-monteiro Nov 11, 2025
4b5a672
Fix for config_flow repeating fan modes between flows
p-monteiro Nov 11, 2025
304d1b2
Add GitHub Actions workflow for hassfest validation
p-monteiro Jan 20, 2026
654039c
Obtain key before device_info in case the latter requires the device …
p-monteiro Jan 20, 2026
39a40bd
Use HA convention for state names
p-monteiro Jan 20, 2026
87c04c2
Add pt translation
p-monteiro Jan 20, 2026
3ec5c5b
Remove invalid translation keys and move unverified to a different fo…
p-monteiro Jan 20, 2026
aeecaa7
Remove more invalid translation keys
p-monteiro Jan 20, 2026
2b7617e
Remove unused aiofiles dependency
p-monteiro Jan 20, 2026
0b1cef1
Add missing manifest iot_class and dependencies
p-monteiro Jan 20, 2026
58c2518
Updated pt Translation
p-monteiro Jan 20, 2026
88d772e
Sort manifest keys
p-monteiro Jan 20, 2026
1471b1c
Ignore and log case when temperature is set with AUTO mode
p-monteiro Mar 2, 2026
2c6d6d4
Abstract the encryption to a Cipher class
p-monteiro Mar 2, 2026
9d2b313
Add suport for diagnostics
p-monteiro Mar 12, 2026
a6b64ef
Add custom branding
p-monteiro Mar 12, 2026
1e630dd
General cleanup
p-monteiro Mar 12, 2026
3581ec0
Fix Beeper on newer firmwares
p-monteiro Mar 13, 2026
f52c4ac
Fix: Don't change config entry on diagnostics download
p-monteiro Mar 13, 2026
0468123
Improve error handling and file organization
p-monteiro Mar 15, 2026
ca7c9f6
Bump checkout action version
p-monteiro Mar 16, 2026
8753890
Fix restore state config keys
p-monteiro Mar 17, 2026
da8dcdc
Add alpha tag and version
p-monteiro Mar 17, 2026
4def4fc
Improve binding logic
p-monteiro Mar 17, 2026
d8d6126
Bump version
p-monteiro Mar 17, 2026
d9aa764
Encapsulate communication in GreeTransport
p-monteiro Mar 17, 2026
c827321
Implement async device discovery
p-monteiro Mar 17, 2026
5e3c35f
Add debug for fetch_device_info()
p-monteiro Mar 17, 2026
6ef40a1
Revert fetch_device_info tests and prevent device key in logs
p-monteiro Mar 24, 2026
6951d75
Add initial support for Fault Detection feature
p-monteiro Mar 24, 2026
21f74e1
Code cleanup
p-monteiro Mar 24, 2026
fb7d5a1
Update readme on UDP protocol requirement
p-monteiro Mar 24, 2026
d52318e
Fix config timeout and use full mac
p-monteiro Mar 26, 2026
54ea633
Updated PT translation
p-monteiro Mar 26, 2026
fd95bb5
Change mac address naming to clarify functions
p-monteiro Mar 27, 2026
9e79d2a
Fix mac split variable
p-monteiro Mar 27, 2026
cde3856
Improve device removal and use only device mac for coordinator
p-monteiro Mar 27, 2026
28ee5eb
Fix entity creation, availability and restore configs
p-monteiro Apr 3, 2026
a5722f6
Add device polling rate to the config
p-monteiro Apr 3, 2026
bd11d65
Align with recommended HACS actions
p-monteiro Apr 3, 2026
dc3f7c3
Add hacs.json and required manifest fields
p-monteiro Apr 3, 2026
0f37e8f
Only validate master branch
p-monteiro Apr 3, 2026
d66e08d
Update Readme
p-monteiro Apr 3, 2026
f527344
Add a release workflow
p-monteiro Apr 3, 2026
51b221e
Readme typo
p-monteiro Apr 3, 2026
39de394
Improve issue templates
p-monteiro Apr 3, 2026
73c86fc
Improve cipher code
p-monteiro Apr 3, 2026
be338c8
More cipher cleanups
p-monteiro Apr 3, 2026
7f8a562
Correct info
p-monteiro Apr 11, 2026
10cf27b
Proxy update_state through coordinator
p-monteiro Apr 11, 2026
fdcd2da
Add capability of self correcting IP
p-monteiro Apr 11, 2026
657882a
Bump version
p-monteiro Apr 11, 2026
90cbb0a
Fix auto IP recovery config save and lower timeouts
p-monteiro Apr 12, 2026
0840276
Add clamping to temperature helpers
p-monteiro Apr 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 28 additions & 10 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -1,38 +1,56 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
title: 'Bug: '
labels: ''
assignees: ''

---

**Describe the bug**

A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior:

1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Configuration**
Share your YAML here

**Expected behavior**

A clear and concise description of what you expected to happen.

**Screenshots**

If applicable, add screenshots to help explain your problem.

**Platform:**
- OS: [e.g. HASSIO, Hassbian]
- Browser [e.g. chrome, safari]
- Version [e.g. 0.92.1]
**Runtime Information:**

- OS: [e.g. HASSIO, Hassbian, Docker]
- Home Assistant Version: [e.g. 2026.4]
- Integration Version: [e.g. 0.92.1]
- Device Firmware Version: [e.g. 1.44]
- Device model: [e.g., Gree GWH12ACC-K6DNA1D]
- Does the device respond to pings? Yes/No

**Additional context**

Add any other context about the problem here.

**Configuration**

Share your configuration entry diagnostics download or YAML here

```json
Paste the diagnostics json here
```

```yaml
If applicable, paste the config here
```

**Logs**
Please share your Home Assistant logs here. Make sure to remove any personal/secret information.

Please share your Home Assistant logs here. Make sure to remove any personal/secret information. See [here](https://github.com/p-monteiro/HomeAssistant-GreeClimateComponent-Rewrite/tree/gree-rewrite?tab=readme-ov-file#debugging).
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
title: 'Feature Request: '
labels: ''
assignees: ''

Expand Down
77 changes: 77 additions & 0 deletions .github/workflows/manual_release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: Manual Release

on:
workflow_dispatch:
inputs:
summary:
description: "Optional summary (markdown supported)"
required: false
default: ""

jobs:
release:
runs-on: ubuntu-latest

steps:
- name: Checkout repo
uses: actions/checkout@v6
with:
fetch-depth: 0

- name: Get version from manifest
id: get_version
run: |
VERSION=$(jq -r .version custom_components/gree_custom/manifest.json)
echo "version=$VERSION" >> $GITHUB_OUTPUT

- name: Get latest tag
id: latest_tag
run: |
git fetch --tags
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
echo "tag=$TAG" >> $GITHUB_OUTPUT

- name: Check if version already released
run: |
VERSION="v${{ steps.get_version.outputs.version }}"
TAG="${{ steps.latest_tag.outputs.tag }}"

if [ "$VERSION" = "$TAG" ]; then
echo "[ERROR] Version $VERSION already released"
exit 1
else
echo "New version: $VERSION (latest was: $TAG)"
fi

- name: Determine if prerelease
id: prerelease
run: |
VERSION="${{ steps.get_version.outputs.version }}"
if [[ "$VERSION" == *"alpha"* || "$VERSION" == *"beta"* || "$VERSION" == *"rc"* ]]; then
echo "prerelease=true" >> $GITHUB_OUTPUT
else
echo "prerelease=false" >> $GITHUB_OUTPUT
fi

- name: Prepare body
id: body
run: |
if [ -z "${{ github.event.inputs.summary }}" ]; then
echo "body=" >> $GITHUB_OUTPUT
else
echo "body=${{ github.event.inputs.summary }}\n\n---" >> $GITHUB_OUTPUT
fi

- name: Create Release
uses: softprops/action-gh-release@v2
with:
tag_name: v${{ steps.get_version.outputs.version }}
name: v${{ steps.get_version.outputs.version }}

body: ${{ steps.body.outputs.body }}
generate_release_notes: true

prerelease: ${{ steps.prerelease.outputs.prerelease }}

env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
32 changes: 32 additions & 0 deletions .github/workflows/validate.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Validate

on:
workflow_dispatch:
push:
branches:
- master
pull_request:
branches:
- master
schedule:
- cron: "0 0 * * *"

jobs:
hassfest: # https://developers.home-assistant.io/blog/2020/04/16/hassfest/
name: Hassfest validation
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: "actions/checkout@v6"

- name: Run hassfest validation
uses: home-assistant/actions/hassfest@master

hacs: # https://github.com/hacs/action
name: HACS validation
runs-on: ubuntu-latest
steps:
- name: Run HACS validation
uses: hacs/action@22.5.0
with:
category: integration
41 changes: 41 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Contributing

This integration follows the development guidelines for Home Assistant integrations, while keeping the repository compatible with HACS.

## Development Environment

Home Assistant provides [several guidelines](https://developers.home-assistant.io/docs/development_environment) regarding the setup of the development environment. Because we are not contributing to the official integrations, there is no need to fork the official [Home Assistant Core](https://github.com/home-assistant/core) repository. However, it is useful to use it as it provides a preconfigured VSCode development environment with the necessary tools.

Here's a general guide to get it working with this integration repository:

1. Create a folder for the development (for example `development/`)
2. Clone [home-assistant/core ](https://github.com/home-assistant/core) inside of it (`development/core`)
3. Follow the [guidelines](https://developers.home-assistant.io/docs/development_environment) on getting the devcontainer working
4. Fork [this](https://github.com/RobHofmann/HomeAssistant-GreeClimateComponent) repository and clone your fork inside of the same folder (`development/YourForkName`)
5. Create a branch for your changes in the cloned repo `git checkout -b my-branch-name`
6. Create a mount point for this integration in the devcontainer
1. Open `development/core/devcontainer/devcontainer.json`
2. Add the mounting:
```json
"mounts": [
"source=${localWorkspaceFolder}/../YourForkName/custom_components/gree_custom,target=/workspaces/core/config/custom_components/gree_custom,type=bind"
],
```
7. Open `development/core` with VSCode
8. Use the command **"Dev Containers: Reopen in Container"**
9. Once inside the container make sure the folder `config/custom_components/gree_custom` exists
10. You should be now be able to edit the integration files from inside the devcontainer
11. Make your changes
12. Push to your fork, rebase with the latest upstream version and submit a pull request

## Testing

Use the **Run Home Assistant Core** Task to start Home Assistant.

You should also be able to set and hit breakpoints in your code.

If you change your code, you have to restart Home Assistant (rerun the Task)

## Styling

Please adhere to the recomended coding style: https://developers.home-assistant.io/docs/development_guidelines
8 changes: 4 additions & 4 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007

Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

Expand Down Expand Up @@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found.
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
along with this program. If not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

Expand All @@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
<https://www.gnu.org/licenses/>.

The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
<https://www.gnu.org/licenses/why-not-lgpl.html>.
Loading