meteocat 2.3.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +8 -2
  2. package/.github/ISSUE_TEMPLATE/config.yml +7 -0
  3. package/.github/ISSUE_TEMPLATE/improvement.md +39 -0
  4. package/.github/ISSUE_TEMPLATE/new_function.md +41 -0
  5. package/.github/labels.yml +63 -0
  6. package/.github/workflows/autocloser.yaml +11 -9
  7. package/.github/workflows/close-on-label.yml +48 -0
  8. package/.github/workflows/force-sync-labels.yml +18 -0
  9. package/.github/workflows/release.yml +1 -31
  10. package/.github/workflows/sync-gitlab.yml +17 -4
  11. package/.github/workflows/sync-labels.yml +21 -0
  12. package/.releaserc +21 -0
  13. package/AUTHORS.md +1 -0
  14. package/CHANGELOG.md +58 -1
  15. package/README.md +81 -6
  16. package/custom_components/meteocat/__init__.py +51 -41
  17. package/custom_components/meteocat/config_flow.py +52 -3
  18. package/custom_components/meteocat/const.py +3 -0
  19. package/custom_components/meteocat/coordinator.py +188 -2
  20. package/custom_components/meteocat/manifest.json +1 -1
  21. package/custom_components/meteocat/options_flow.py +61 -3
  22. package/custom_components/meteocat/sensor.py +305 -254
  23. package/custom_components/meteocat/strings.json +61 -15
  24. package/custom_components/meteocat/translations/ca.json +67 -22
  25. package/custom_components/meteocat/translations/en.json +61 -15
  26. package/custom_components/meteocat/translations/es.json +61 -15
  27. package/custom_components/meteocat/version.py +1 -1
  28. package/custom_components/meteocat/weather.py +1 -1
  29. package/hacs.json +1 -1
  30. package/images/daily_forecast_2_alerts.png +0 -0
  31. package/images/regenerate_assets.png +0 -0
  32. package/images/setup_options.png +0 -0
  33. package/images/system_options.png +0 -0
  34. package/package.json +1 -1
  35. package/pyproject.toml +1 -1
  36. package/scripts/update_version.sh +22 -0
  37. package/.github/workflows/close-duplicates.yml +0 -57
@@ -6,8 +6,14 @@ labels: bug
6
6
  assignees: ""
7
7
  ---
8
8
 
9
- **IMPORTANT: Please search the issues, including closed issues before opening a new issue.
10
- The template is mandatory; failure to use it will result in issue closure.**
9
+ ⚠️ **IMPORTANT:**
10
+ - This template is **only** for reporting bugs, errors, or malfunctions.
11
+ - Do **not** use it for improvements → use the ♻️ Improvement request template.
12
+ - Do **not** use it for new features or new API data → use the 🆕 New function template.
13
+
14
+ ❌ The template is mandatory; failure to follow it will result in the issue being **closed without assistance**.
15
+
16
+ Before opening a bug report, please search existing issues (including closed ones) and check the [Wiki - Troubleshooting](https://github.com/figorr/meteocat/wiki/Troubleshooting) page.
11
17
 
12
18
  ---
13
19
 
@@ -1 +1,8 @@
1
1
  blank_issues_enabled: false
2
+ contact_links:
3
+ - name: 📖 Wiki - Troubleshooting
4
+ url: https://github.com/figorr/meteocat/wiki/Troubleshooting
5
+ about: Please check the Wiki before opening an issue.
6
+ - name: 💬 Discussions
7
+ url: https://github.com/figorr/meteocat/discussions
8
+ about: Ask questions, share ideas, or get help from the community.
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: "♻️ Improvement request"
3
+ about: Suggest an improvement or change to the current behavior of the integration
4
+ title: "[Improvement] "
5
+ labels: enhancement
6
+ assignees: ""
7
+ ---
8
+
9
+ ⚠️ **NOTE:** This template is for improvements or changes to the **current behavior of the integration**.
10
+
11
+ - It is **not** for bugs, errors, or malfunctions → use the 🐞 Bug report template.
12
+ - It is **not** for requesting new features or new API data → use the 🆕 New function template.
13
+
14
+ ❌ Any request that does not follow these rules (e.g. bug reports or feature requests submitted here) will be **closed without assistance**.
15
+
16
+ ---
17
+
18
+ ### Current behavior
19
+ <!-- Describe the current behavior of the integration. -->
20
+
21
+ ### Expected behavior
22
+ <!-- Describe what you would expect instead. -->
23
+
24
+ ### Suggested solution
25
+ <!-- If you have an idea of how it could be improved, describe it here. -->
26
+
27
+ ### Alternatives considered
28
+ <!-- Mention other approaches you thought about. -->
29
+
30
+ ### Additional context
31
+ <!-- Add any other context, screenshots, or examples related to your request. -->
32
+
33
+ ---
34
+
35
+ ### Checklist
36
+ - [ ] I have searched existing issues (including closed ones).
37
+ - [ ] I have checked the [Wiki](https://github.com/figorr/meteocat/wiki).
38
+ - [ ] **I confirm this is not a bug or malfunction, but a request for improvement.**
39
+ - [ ] This request is not a duplicate.
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: "🆕 New function (API-based)"
3
+ about: Suggest a new function that uses data available from the Meteocat API
4
+ title: "[Function] "
5
+ labels: enhancement
6
+ assignees: ""
7
+ ---
8
+
9
+ **IMPORTANT: Please check that the data you are requesting is available in the [Meteocat API Reference](https://apidocs.meteocat.gencat.cat/documentacio/).**
10
+
11
+ ⚠️ **NOTE:** This template is for new functions or new API data for the **integration**.
12
+
13
+ - It is **not** for bugs, errors, or malfunctions → use the 🐞 Bug report template.
14
+ - It is **not** for requesting improvements or changes to the current behavior of the integration → use the ♻️ Improvement request template.
15
+
16
+ ❌ Any request that does not follow these rules (e.g. bug reports or improvements requests submitted here) will be **closed without assistance**.
17
+
18
+ ⚠️ **Note on API limits:** Each additional call to retrieve new or extra resources may cause the monthly API quota to be exhausted earlier than expected.
19
+ Keep in mind that the available limits are relatively low, especially with the basic plan.
20
+
21
+ ---
22
+
23
+ ### Describe the function
24
+ <!-- Clear and concise description of the new function you want to add. -->
25
+
26
+ ### API endpoint / resource
27
+ <!-- Indicate which API endpoint/resource provides this data. -->
28
+
29
+ ### Why is it useful?
30
+ <!-- Explain the value of this function for Home Assistant users. -->
31
+
32
+ ### Additional context
33
+ <!-- Add any other context, screenshots, or examples related to your request. -->
34
+
35
+ ---
36
+
37
+ ### Checklist
38
+ - [ ] I have searched existing issues (including closed ones).
39
+ - [ ] I have checked the [Wiki](https://github.com/figorr/meteocat/wiki).
40
+ - [ ] **I have verified that the requested data is available in the [Meteocat API Reference](https://apidocs.meteocat.gencat.cat/documentacio/).**
41
+ - [ ] This request is not a duplicate.
@@ -0,0 +1,63 @@
1
+ - name: breaking-change
2
+ color: d73a4a
3
+ description: Indicates a breaking change affecting upgrade or usage.
4
+
5
+ - name: bug
6
+ color: d73a4a
7
+ description: Something isn't working.
8
+
9
+ - name: documentation
10
+ color: 0075ca
11
+ description: Improvements or additions to documentation.
12
+
13
+ - name: duplicate
14
+ color: cfd3d7
15
+ description: This issue or pull request already exists.
16
+
17
+ - name: enhancement
18
+ color: a2eeef
19
+ description: New feature or request.
20
+
21
+ - name: first read
22
+ color: 0052cc
23
+ description: Mandatory reading before opening issues.
24
+
25
+ - name: good first issue
26
+ color: 7057ff
27
+ description: Good for newcomers.
28
+
29
+ - name: help wanted
30
+ color: 008672
31
+ description: Extra attention is needed.
32
+
33
+ - name: invalid
34
+ color: e4e669
35
+ description: This doesn't seem right.
36
+
37
+ - name: logs required
38
+ color: b60205
39
+ description: Logs are required.
40
+
41
+ - name: merged
42
+ color: b337b8
43
+ description: Solution merged.
44
+
45
+ - name: question
46
+ color: d876e3
47
+ description: Further information is requested.
48
+
49
+ - name: solved
50
+ color: 0e8a16
51
+ description: Solved issue.
52
+
53
+ - name: stale
54
+ color: ededed
55
+ description: Marked as stale due to inactivity.
56
+
57
+ - name: wiki
58
+ color: fbca04
59
+ description: Documented at Wiki.
60
+
61
+ - name: wontfix
62
+ color: ffffff
63
+ description: This will not be worked on.
@@ -3,23 +3,25 @@ name: Autocloser
3
3
  on:
4
4
  issues:
5
5
  types: [opened, edited, reopened]
6
- issue_comment:
7
- types: [created]
8
6
 
9
7
  jobs:
10
8
  autoclose:
11
9
  runs-on: ubuntu-latest
12
10
  steps:
13
- - name: Autoclose issues that did not follow issue template
11
+ - name: Autoclose issues that did not follow any template
14
12
  uses: roots/issue-closer@v1.1
15
13
  with:
16
14
  repo-token: ${{ secrets.GITHUB_TOKEN }}
17
15
  issue-close-message: >
18
- 👋 @${{ github.event.issue.user.login }} this issue was automatically closed because it did not follow the
19
- [issue template](https://github.com/figorr/meteocat/issues/new/choose).
16
+ 👋 @${{ github.event.issue.user.login }} this issue was automatically closed because it did not follow any of the required templates.
20
17
 
21
- ⚠️ Reminder:
22
- **IMPORTANT: Please search the issues, including closed issues before opening a new issue.
23
- The template is mandatory; failure to use it will result in issue closure.**
18
+ ⚠️ Reminder:
19
+ - Use the [🐞 Bug report template](https://github.com/figorr/meteocat/issues/new?template=bug_report.md) for errors or malfunctions.
20
+ - Use the [♻️ Improvement request template](https://github.com/figorr/meteocat/issues/new?template=improvement.md) for changes to current behavior.
21
+ - Use the [🆕 New function template](https://github.com/figorr/meteocat/issues/new?template=new_function.md) for API-based new features.
22
+
23
+ The template is mandatory; failure to use it will result in issue closure.
24
24
  issue-pattern: >
25
- (Describe the bug|To Reproduce|Expected behavior|System details|Debug Logs)
25
+ (### Describe the bug|### To Reproduce|### Expected behavior|### System details|### Debug Logs|
26
+ I confirm this is not a bug or malfunction, but a request for improvement|
27
+ I have verified that the requested data is available)
@@ -0,0 +1,48 @@
1
+ name: Close on labels
2
+
3
+ on:
4
+ issues:
5
+ types:
6
+ - labeled
7
+
8
+ jobs:
9
+ close-and-comment:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - name: Filter relevant labels
13
+ if: ${{ contains('wiki,solved,merged,duplicate', github.event.label.name) }}
14
+ id: check
15
+ run: echo "label=${{ github.event.label.name }}" >> $GITHUB_OUTPUT
16
+
17
+ - name: Determine message based on label
18
+ if: ${{ steps.check.outputs.label }}
19
+ id: message
20
+ run: |
21
+ case "${{ github.event.label.name }}" in
22
+ wiki)
23
+ echo "message=👋 This issue is covered in the [Meteocat Wiki](https://github.com/figorr/meteocat/wiki). Please check the documentation there for guidance." >> $GITHUB_OUTPUT
24
+ ;;
25
+ solved)
26
+ echo "message=✅ This issue has been solved. Closing now." >> $GITHUB_OUTPUT
27
+ ;;
28
+ merged)
29
+ echo "message=🔀 This issue has been merged manually. 'Merged manually in master [commit_hash]'." >> $GITHUB_OUTPUT
30
+ ;;
31
+ duplicate)
32
+ echo "message=📄 This issue is marked as a duplicate. 'Closed as duplicate of #<issue_number>'." >> $GITHUB_OUTPUT
33
+ ;;
34
+ esac
35
+
36
+ - name: Add comment
37
+ if: ${{ steps.check.outputs.label }}
38
+ uses: peter-evans/create-or-update-comment@v4
39
+ with:
40
+ token: ${{ secrets.GITHUB_TOKEN }}
41
+ issue-number: ${{ github.event.issue.number }}
42
+ body: ${{ steps.message.outputs.message }}
43
+
44
+ - name: Close issue if open
45
+ if: ${{ github.event.issue.state == 'open' && steps.check.outputs.label }}
46
+ uses: peter-evans/close-issue@v2
47
+ with:
48
+ issue-number: ${{ github.event.issue.number }}
@@ -0,0 +1,18 @@
1
+ name: Force sync labels
2
+
3
+ on:
4
+ workflow_dispatch: # solo se ejecuta manualmente
5
+
6
+ jobs:
7
+ labels:
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - uses: actions/checkout@v4
11
+
12
+ - name: Force sync GitHub labels
13
+ uses: crazy-max/ghaction-github-labeler@v5
14
+ with:
15
+ github-token: ${{ secrets.GITHUB_TOKEN }}
16
+ yaml-file: .github/labels.yml
17
+ skip-delete: false # elimina labels que no estén en el YAML
18
+ dry-run: false # aplica cambios realmente
@@ -33,37 +33,7 @@ jobs:
33
33
  git config user.name "semantic-release-bot"
34
34
  git config user.email "jdcuartero@yahoo.es"
35
35
 
36
- # Paso 5: Obtener próxima versión (dry-run)
37
- - name: Get next version
38
- id: nextver
39
- run: |
40
- version=$(npx semantic-release --dry-run | grep "The next release version is" | awk '{print $NF}')
41
- echo "next_version=$version" >> $GITHUB_OUTPUT
42
- echo "Next version: $version"
43
-
44
- # Paso 6: Actualizar archivos de versión antes del release
45
- - name: Update version in files
46
- run: |
47
- version=${{ steps.nextver.outputs.next_version }}
48
-
49
- # pyproject.toml
50
- sed -i "s/^version = \".*\"/version = \"$version\"/" pyproject.toml
51
-
52
- # manifest.json
53
- jq --arg ver "$version" '.version = $ver' custom_components/meteocat/manifest.json > tmp.json && mv tmp.json custom_components/meteocat/manifest.json
54
-
55
- # version.py
56
- echo "__version__ = \"$version\"" > custom_components/meteocat/version.py
57
-
58
- # __init__.py
59
- sed -i "s/^__version__ = \".*\"/__version__ = \"$version\"/" custom_components/meteocat/__init__.py
60
-
61
- # Commit con [skip ci] para no reiniciar workflow
62
- git add pyproject.toml custom_components/meteocat/manifest.json custom_components/meteocat/version.py custom_components/meteocat/__init__.py
63
- git commit -m "chore: bump version to $version [skip ci]" || echo "No changes to commit"
64
- git push origin master
65
-
66
- # Paso 7: Ejecutar semantic-release (generación de release, changelog, assets)
36
+ # Paso 5: Ejecutar semantic-release (se encargará de actualizar versiones, changelog, y release)
67
37
  - name: Run semantic-release
68
38
  env:
69
39
  GITHUB_TOKEN: ${{ secrets.WORKFLOW_TOKEN }}
@@ -3,6 +3,7 @@ name: Sync to GitLab
3
3
  on:
4
4
  release:
5
5
  types: [published] # Se dispara al publicarse un release en GitHub
6
+ workflow_dispatch: # Permite ejecución manual desde la interfaz
6
7
 
7
8
  jobs:
8
9
  sync:
@@ -32,10 +33,22 @@ jobs:
32
33
  # Paso 4: Comprobar divergencias en master
33
34
  - name: Check for diverging commits
34
35
  run: |
35
- git fetch gitlab master
36
- if ! git merge-base --is-ancestor gitlab/master master; then
37
- echo "❌ GitLab master tiene commits que GitHub no tiene. Revisar antes de sincronizar."
38
- exit 1
36
+ # Trae todas las ramas del remoto GitLab y crea referencias locales
37
+ git fetch gitlab +refs/heads/*:refs/remotes/gitlab/*
38
+
39
+ # Comprueba que la rama gitlab/master exista
40
+ if git show-ref --verify --quiet refs/remotes/gitlab/master; then
41
+ # Comprueba si GitLab master tiene commits que GitHub no tiene
42
+ if ! git merge-base --is-ancestor gitlab/master master; then
43
+ echo "❌ GitLab master tiene commits que GitHub no tiene. Revisar antes de sincronizar."
44
+ exit 1
45
+ else
46
+ echo "GitLab master está alineado con GitHub master ✅"
47
+ fi
48
+ else
49
+ echo "❌ La rama gitlab/master no se pudo encontrar localmente. Abortando."
50
+ exit 1
51
+ fi
39
52
 
40
53
  # Paso 5: Push de commits y tags a GitLab
41
54
  - name: Push commits and tags to GitLab
@@ -0,0 +1,21 @@
1
+ name: Sync labels
2
+
3
+ on:
4
+ push:
5
+ paths:
6
+ - .github/labels.yml
7
+ workflow_dispatch:
8
+
9
+ jobs:
10
+ labels:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+
15
+ - name: Sync GitHub labels (safe)
16
+ uses: crazy-max/ghaction-github-labeler@v5
17
+ with:
18
+ github-token: ${{ secrets.GITHUB_TOKEN }}
19
+ yaml-file: .github/labels.yml
20
+ skip-delete: true # no elimina labels que no estén en el YAML
21
+ dry-run: false # aplica cambios realmente
package/.releaserc CHANGED
@@ -9,6 +9,27 @@
9
9
  "changelogFile": "CHANGELOG.md"
10
10
  }
11
11
  ],
12
+ [
13
+ "@semantic-release/exec",
14
+ {
15
+ "prepareCmd": "bash ./scripts/update_version.sh ${nextRelease.version}"
16
+ }
17
+ ],
18
+ [
19
+ "@semantic-release/git",
20
+ {
21
+ "assets": [
22
+ "pyproject.toml",
23
+ "custom_components/meteocat/manifest.json",
24
+ "custom_components/meteocat/version.py",
25
+ "custom_components/meteocat/__init__.py",
26
+ "CHANGELOG.md",
27
+ "package.json",
28
+ "package-lock.json"
29
+ ],
30
+ "message": "chore(release): v${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
31
+ }
32
+ ],
12
33
  "@semantic-release/npm",
13
34
  "@semantic-release/github"
14
35
  ],
package/AUTHORS.md CHANGED
@@ -10,3 +10,4 @@
10
10
 
11
11
  ## Contributors
12
12
 
13
+ - mcasellas [GitHub](https://github.com/mcasellas)
package/CHANGELOG.md CHANGED
@@ -1,4 +1,60 @@
1
- # [2.3.0](https://github.com/figorr/meteocat/compare/v2.2.7...v2.3.0) (2025-09-10)
1
+ # [3.1.0](https://github.com/figorr/meteocat/compare/v3.0.0...v3.1.0) (2025-09-27)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * fix unknown threshold translation ([6fa7964](https://github.com/figorr/meteocat/commit/6fa79644e3ebbdf9a44826f6071af6009cd2d02d))
7
+ * include Meteocat Card ([513d9ed](https://github.com/figorr/meteocat/commit/513d9ed50fcd9127ac64f0388ed1017db938f378))
8
+
9
+
10
+ ### Features
11
+
12
+ * ✨ Add native sunrise and sunset sensors to Meteocat integration ([7bb70c6](https://github.com/figorr/meteocat/commit/7bb70c681c90773275e496f938f455c3688fb4c0))
13
+
14
+ ## [3.0.0](https://github.com/figorr/meteocat/compare/v2.3.0...v3.0.0) (2025-09-14)
15
+
16
+
17
+ ### ⚠️ BREAKING CHANGES
18
+
19
+ * Version **3.0.0 and later** introduces a **breaking change** in how entities are identified.
20
+
21
+ ## ⚠️ What this affects
22
+ - This affects any update **from a version prior to 3.0.0** to **any version 3.x or later**.
23
+ - Entities now use **`town_id`** instead of `region_id` in their `unique_id`.
24
+ - This change allows multiple integration entries that share the same `region_id` but different towns.
25
+
26
+ ### ✅ Recommended upgrade procedure
27
+ To avoid issues with duplicated or unavailable entities:
28
+
29
+ 1. **Uninstall** the existing integration (v2.x).
30
+ 2. **Restart** Home Assistant.
31
+ 3. **Install v3.0.0 or later** and configure the integration again.
32
+
33
+ ### 🚨 If you update directly
34
+ If you update without uninstalling first:
35
+
36
+ - Old entities will remain as **Unavailable**.
37
+ - New entities will be created (sometimes with a suffix like `2`).
38
+ - You may need to manually **remove old entities** and update your automations, dashboards, or scripts to point to the new entities.
39
+
40
+ ### 📑 Additional notes
41
+
42
+ - This change affects all entity types, including **sensors, diagnostic sensors, and alerts**.
43
+ - Always backup your **Home Assistant configuration** before performing major upgrades.
44
+
45
+ ℹ️ More details:
46
+ - [README – Breaking changes](https://github.com/figorr/meteocat#-breaking-changes---upgrade-to-3x)
47
+ - [Wiki – Breaking changes](https://github.com/figorr/meteocat/wiki/Breaking-Changes)
48
+
49
+ ### Features
50
+
51
+ * change unique_id to use town_id ([3a048ce](https://github.com/figorr/meteocat/commit/3a048ce48a0e1f3ee7642c28bbe7ac6e6e3fc298))
52
+
53
+ ### Contributors:
54
+ - [mcasellas](https://github.com/mcasellas) – contributed [c505f27](https://github.com/figorr/meteocat/commit/c505f27) - Improve Catalan translations
55
+
56
+
57
+ ## [2.3.0](https://github.com/figorr/meteocat/compare/v2.2.7...v2.3.0) (2025-09-10)
2
58
 
3
59
 
4
60
  ### Features
@@ -15,6 +71,7 @@
15
71
  * update README ([9855939](https://github.com/figorr/meteocat/commit/98559398e6bae30e8e9c9ff2b2fe27409a3930bd))
16
72
  * update repo files structure ([0778679](https://github.com/figorr/meteocat/commit/0778679d218a89e89bb18791f1245c5c9f7b188f))
17
73
 
74
+
18
75
  ## [2.2.7](https://github.com/figorr/meteocat/compare/v2.2.6...v2.2.7) (2025-08-29)
19
76
 
20
77
 
package/README.md CHANGED
@@ -6,8 +6,9 @@
6
6
  [![Validate](https://github.com/figorr/meteocat/actions/workflows/validate.yaml/badge.svg)](https://github.com/figorr/meteocat/actions/workflows/validate.yaml)
7
7
  [![Release](https://github.com/figorr/meteocat/actions/workflows/release.yml/badge.svg)](https://github.com/figorr/meteocat/actions/workflows/release.yml)
8
8
  ![GitHub all releases](https://img.shields.io/github/downloads/figorr/meteocat/total)
9
- ![GitHub release (latest by SemVer)](https://img.shields.io/github/downloads/figorr/meteocat/latest/total)
10
-
9
+ ![GitHub release](https://img.shields.io/github/downloads/figorr/meteocat/latest/total)
10
+ ![Latest release](https://img.shields.io/github/v/release/figorr/meteocat?label=latest)
11
+ [![Breaking Changes](https://img.shields.io/badge/Breaking%20Changes-critical?logo=data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjIuODggMTExLjU0Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6IzFhMWExYTt9LmNscy0ye2ZpbGw6I2ZmZWYxMTtmaWxsLXJ1bGU6ZXZlbm9kZDt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPmNhdXRpb248L3RpdGxlPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTIuMzUsODQuNDIsNDUuMjgsMTAuMmwuMTctLjI3aDBBMjMsMjMsMCwwLDEsNTIuNSwyLjY5LDE3LDE3LDAsMCwxLDYxLjU3LDBhMTYuNywxNi43LDAsMCwxLDkuMTEsMi42OSwyMi43OSwyMi43OSwwLDAsMSw3LDcuMjZxLjE5LjMyLjM2LjYzbDQyLjIzLDczLjM0LjI0LjQ0aDBhMjIuNDgsMjIuNDgsMCwwLDEsMi4zNywxMC4xOSwxNy42MywxNy42MywwLDAsMS0yLjE3LDguMzUsMTUuOTQsMTUuOTQsMCwwLDEtNi45Myw2LjZjLS4xOS4xLS4zOS4xOC0uNTguMjZhMjEuMTksMjEuMTksMCwwLDEtOS4xMSwxLjc1djBIMTcuNjFjLS4yMiwwLS40NCwwLS42NSwwYTE4LjA3LDE4LjA3LDAsMCwxLTYuMi0xLjE1QTE2LjQyLDE2LjQyLDAsMCwxLDMsMTA0LjI0YTE3LjUzLDE3LjUzLDAsMCwxLTMtOS41NywyMywyMywwLDAsMSwxLjU3LTguNzQsNy42Niw3LjY2LDAsMCwxLC43Ny0xLjUxWiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTksODguNzUsNTIuMTIsMTQuMTZjNS4yNC04LjI1LDEzLjU0LTguNDYsMTguODcsMGw0Mi40Myw3My42OWMzLjM5LDYuODEsMS43MSwxNi05LjMzLDE1Ljc3SDE3LjYxQzEwLjM1LDEwMy44LDUuNjcsOTcuNDMsOSw4OC43NVoiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik01Ny41Nyw4Mi42OUE1LjQ4LDUuNDgsMCwwLDEsNjEsODEuMTFhNS42Niw1LjY2LDAsMCwxLDQuNDIsMS42Niw1LjUzLDUuNTMsMCwwLDEsMS42MiwzLjU0QTUuNiw1LjYsMCwwLDEsNjcsODcuNzJhNiw2LDAsMCwxLS40MiwxLjM0LDUuNTMsNS41MywwLDAsMS0yLjkyLDIuODQsNS43OSw1Ljc5LDAsMCwxLTQuNTctLjEsNS41MSw1LjUxLDAsMCwxLTIuODEtMi45NCw1LjMxLDUuMzEsMCwwLDEtLjM2LTEuMjcsNS45LDUuOSwwLDAsMS0uMDYtMS4zMmgwYTYuNDUsNi40NSwwLDAsMSwuNTctMiw0LjYsNC42LDAsMCwxLDEuMTQtMS41NlptOC4xNS0xMC4yNGMtLjE5LDQuNzktOC4zMSw0LjgtOC40OSwwLS44Mi04LjIxLTIuOTItMjcuNy0yLjg2LTM1LjQyLjA3LTIuMzgsMi0zLjc4LDQuNTYtNC4zMmExMS4xOSwxMS4xOSwwLDAsMSwyLjQ5LS4yNCwxMS43NywxMS43NywwLDAsMSwyLjUuMjVjMi42MS41NSw0LjY1LDIsNC42NSw0LjQ0di4yNEw2NS43Miw3Mi40NVoiLz48L3N2Zz4=&logoColor=white)](#-breaking-changes---upgrade-to-3x)
11
12
 
12
13
  This is a project to obtain meteorological data from the Meteocat API inside the Home Assistant environment.
13
14
 
@@ -21,8 +22,40 @@ Commercial use of this project or the data obtained from the API is not allowed
21
22
 
22
23
  This is a personal project.
23
24
 
24
- Authors:
25
- - Figorr
25
+ **Authors:**
26
+ - [Figorr](https://github.com/figorr)
27
+
28
+ **Contributors:**
29
+ - [mcasellas](https://github.com/mcasellas) – contributed [c505f27](https://github.com/figorr/meteocat/commit/c505f27) - Improve Catalan translations
30
+
31
+ ## ⚠️ Breaking changes - Upgrade to 3.0.0 or later coming from prior versions
32
+
33
+ Version **3.0.0 and later** introduces a **breaking change** in how entities are identified.
34
+
35
+ ### ⚠️ What this affects
36
+ - This affects any update **from a version prior to 3.0.0** to **any version 3.x or later**.
37
+ - Entities now use **`town_id`** instead of `region_id` in their `unique_id`.
38
+ - This change allows multiple integration entries that share the same `region_id` but different towns.
39
+
40
+ ### ✅ Recommended upgrade procedure
41
+ To avoid issues with duplicated or unavailable entities:
42
+
43
+ 1. **Uninstall** the existing integration (v2.x).<br>
44
+ 🔗 See [Uninstallation Guide](https://github.com/figorr/meteocat/wiki/Uninstallation) for the proper way of removing prior versions.
45
+ 2. **Restart** Home Assistant.
46
+ 3. **Install v3.0.0 or later** and configure the integration again.
47
+
48
+ ### 🚨 If you update directly
49
+ If you update without uninstalling first:
50
+
51
+ - Old entities will remain as **Unavailable**.
52
+ - New entities will be created (sometimes with a suffix like `2`).
53
+ - You may need to manually **remove old entities** and update your automations, dashboards, or scripts to point to the new entities.
54
+
55
+ ### 📑 Additional notes
56
+
57
+ - This change affects all entity types, including **sensors, diagnostic sensors, and alerts**.
58
+ - Always backup your **Home Assistant configuration** before performing major upgrades.
26
59
 
27
60
  ## Installation
28
61
 
@@ -35,7 +68,6 @@ Authors:
35
68
  1. Click `+ Add Integration`
36
69
  1. Search for `Meteocat` and follow the configuration instructions
37
70
 
38
-
39
71
  #### HACS - Install from the store
40
72
  1. Go to `HACS`
41
73
  1. Search for `Meteocat` and add it to HACS
@@ -103,7 +135,50 @@ You will see three available options:
103
135
  If for any reason some files in the `assets` folder (`towns.json`, `stations.json`, `variables.json`, `symbols.json`, or `stations_<town_id>.json`) are missing or outdated, you can regenerate them directly from the options menu.
104
136
  > ℹ️ If the Meteocat API is not available at that moment, the integration will still start, and you can retry regeneration later.
105
137
 
106
- ![Options](images/options.png)
138
+ ### Accessing the Options Menu
139
+
140
+ You can access the Options Menu in two ways, both inside the integration:
141
+
142
+ - **Setup Options**
143
+
144
+ ![Setup Options menu](images/setup_options.png)
145
+
146
+ - **System Options**
147
+
148
+ ![System Options menu](images/system_options.png)
149
+
150
+ Once you are inside, you will see the following options:
151
+
152
+ ![Available Options](images/options.png)
153
+
154
+
155
+ ## Uninstallation
156
+
157
+ To correctly uninstall the integration:
158
+
159
+ - If you are upgrading due to **breaking changes**, remove all configured entries from
160
+ **Settings > Devices & Services > Integrations**, restart Home Assistant, and reinstall the new version.
161
+ - If you want to **completely remove Meteocat**, after removing the entries and restarting, also uninstall the integration from **HACS > Integrations**.
162
+
163
+ 👉 For detailed steps with screenshots, check the [Uninstallation Guide](https://github.com/figorr/meteocat/wiki/Uninstallation).
164
+
165
+ ## Custom Meteocat Card available
166
+
167
+ Meteocat integration has its own weather card.
168
+
169
+ To install the card, please follow the instructions from its own repository, [🎫 Meteocat Card](https://github.com/figorr/meteocat-card).
170
+
171
+ ![Meteocat Card](images/daily_forecast_2_alerts.png)
172
+
173
+ # Documentation
174
+
175
+ For more detailed information about:
176
+ - Installation and configuration
177
+ - Usage examples
178
+ - Extra attributes in sensors
179
+ - Known issues and troubleshooting
180
+
181
+ please visit the [📖 Meteocat Wiki](https://github.com/figorr/meteocat/wiki).
107
182
 
108
183
  # Contributing
109
184