rustuya-local 0.1.0.dev5__tar.gz → 0.1.0.dev7__tar.gz

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 (102) hide show
  1. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/.github/workflows/_test.yml +10 -10
  2. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/.github/workflows/release.yml +1 -1
  3. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/CHANGELOG.md +12 -0
  4. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/PKG-INFO +19 -19
  5. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/README.md +15 -15
  6. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/__init__.py +4 -4
  7. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/bridge_supervisor.py +1 -1
  8. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/const.py +1 -1
  9. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/manifest.json +3 -3
  10. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/strings.json +3 -3
  11. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/translations/en.json +3 -3
  12. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/translations/ko.json +3 -3
  13. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/www/rustuya-panel.js +6 -6
  14. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/docs/MIGRATING.md +6 -6
  15. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/docs/REDESIGN.md +49 -49
  16. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/docs/ROADMAP.md +11 -11
  17. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/pyproject.toml +4 -4
  18. rustuya_local-0.1.0.dev7/release-notes.md +3 -0
  19. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/scripts/build_dropin.py +5 -5
  20. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/__init__.py +3 -3
  21. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/bridge_client.py +1 -1
  22. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/config.py +1 -1
  23. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/host/__init__.py +1 -1
  24. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/host/devices.py +1 -1
  25. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/host/hub.py +9 -2
  26. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/host/il.py +2 -2
  27. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/host/overrides.py +2 -2
  28. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/host/pack.py +4 -4
  29. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/host/rules.py +3 -3
  30. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/host/runner.py +3 -3
  31. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/manager_plugin/__init__.py +2 -2
  32. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/manager_plugin/static/index.js +3 -3
  33. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/service.py +4 -4
  34. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/e2e/devices.py +1 -1
  35. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/e2e/test_chain_in_process.py +1 -1
  36. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/e2e/test_chain_mqtt.py +1 -1
  37. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/e2e/test_full_stack_devices.py +3 -3
  38. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/e2e/test_manager_plugin.py +6 -6
  39. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/ha/test_init.py +4 -4
  40. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/unit/test_cover_settings.py +1 -1
  41. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/unit/test_dropin.py +9 -9
  42. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/unit/test_host.py +2 -2
  43. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/unit/test_hub.py +3 -3
  44. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/unit/test_il_vectors.py +2 -2
  45. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/unit/test_pack.py +4 -4
  46. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/unit/test_rule_files.py +7 -7
  47. rustuya_local-0.1.0.dev5/release-notes.md +0 -8
  48. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/.github/dependabot.yml +0 -0
  49. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/.github/workflows/ci.yml +0 -0
  50. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/.github/workflows/hacs.yml +0 -0
  51. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/.github/workflows/hassfest.yml +0 -0
  52. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/.gitignore +0 -0
  53. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/LICENSE +0 -0
  54. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/brand/icon.png +0 -0
  55. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/brand/icon.svg +0 -0
  56. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/brand/icon@2x.png +0 -0
  57. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/brand/logo.png +0 -0
  58. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/brand/logo.svg +0 -0
  59. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/brand/logo@2x.png +0 -0
  60. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/bridge_sync.py +0 -0
  61. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/broker.py +0 -0
  62. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/config_flow.py +0 -0
  63. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/manager_registry.py +0 -0
  64. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/manager_session.py +0 -0
  65. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/panel.py +0 -0
  66. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/panel_bridge.py +0 -0
  67. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/custom_components/rustuya/services.yaml +0 -0
  68. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/docs/STATUS.md +0 -0
  69. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/hacs.json +0 -0
  70. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/scripts/release_notes.py +0 -0
  71. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/__main__.py +0 -0
  72. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/async_tools.py +0 -0
  73. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/cli.py +0 -0
  74. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/files.py +0 -0
  75. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/host/memory.py +0 -0
  76. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/host/mqtt.py +0 -0
  77. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/host/transport.py +0 -0
  78. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/manager_plugin/api.py +0 -0
  79. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/src/rustuya_local/validation.py +0 -0
  80. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/e2e/conftest.py +0 -0
  81. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/e2e/test_bridge_registration.py +0 -0
  82. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/e2e/test_daemon.py +0 -0
  83. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/e2e/test_full_stack.py +0 -0
  84. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/e2e/test_full_stack_custom_templates.py +0 -0
  85. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/e2e/test_purge.py +0 -0
  86. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/e2e/test_service.py +0 -0
  87. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/ha/conftest.py +0 -0
  88. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/ha/fake_manager.py +0 -0
  89. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/ha/test_bridge_probe.py +0 -0
  90. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/ha/test_config_flow.py +0 -0
  91. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/ha/test_manager_registry.py +0 -0
  92. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/ha/test_manager_session.py +0 -0
  93. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/ha/test_migrate.py +0 -0
  94. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/ha/test_panel.py +0 -0
  95. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/unit/test_config.py +0 -0
  96. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/unit/test_files.py +0 -0
  97. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/unit/test_hazardous.py +0 -0
  98. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/unit/test_link_watcher.py +0 -0
  99. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/unit/test_panel_js.py +0 -0
  100. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/unit/test_plugin_api.py +0 -0
  101. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/unit/test_release_notes.py +0 -0
  102. {rustuya_local-0.1.0.dev5 → rustuya_local-0.1.0.dev7}/tests/unit/tuya_samples.py +0 -0
@@ -3,7 +3,7 @@ name: Test (reusable)
3
3
  # Single source of truth for rustuya-local's pre-merge / pre-publish checks. Called from ci.yml
4
4
  # on push/PR and as a gate from release.yml, so a commit that fails these can't reach PyPI.
5
5
  #
6
- # il-ha is not on PyPI yet, so check out ildevice-homeassistant and explicitly
6
+ # ildevice-homeassistant is not on PyPI yet, so check out ildevice-homeassistant and explicitly
7
7
  # install that checkout together with rustuya-local's test extras.
8
8
  # Other package dependencies are installed from PyPI.
9
9
 
@@ -20,7 +20,7 @@ jobs:
20
20
  strategy:
21
21
  fail-fast: false
22
22
  matrix:
23
- # il-ha (the test/fullstack sibling dep) requires Python>=3.14; rustuya-local's own
23
+ # ildevice-homeassistant (the test/fullstack sibling dep) requires Python>=3.14; rustuya-local's own
24
24
  # requires-python floor (3.13, in pyproject.toml) stays lower since only the test extras
25
25
  # need 3.14, not the base package.
26
26
  python-version: ["3.14"]
@@ -31,21 +31,21 @@ jobs:
31
31
  with:
32
32
  path: rustuya-local
33
33
 
34
- # The repository publishes its Python package under the name il-ha.
34
+ # Install the integration checkout as the test consumer package.
35
35
  - name: Check out ildevice-homeassistant
36
36
  uses: actions/checkout@v7
37
37
  with:
38
38
  repository: 3735943886/ildevice-homeassistant
39
39
  path: ildevice-homeassistant
40
40
 
41
- # tuya2ildevice is on PyPI (installed below via uv), so this isn't for dependency
41
+ # tuya-interpreter is on PyPI (installed below via uv), so this isn't for dependency
42
42
  # resolution -- it's so tests/e2e/test_full_stack_devices.py can reach its sibling
43
43
  # checkout's tests/golden fixture data, which isn't shipped in the published package.
44
- - name: Check out tuya2ildevice
44
+ - name: Check out tuya-interpreter
45
45
  uses: actions/checkout@v7
46
46
  with:
47
- repository: 3735943886/tuya2ildevice
48
- path: tuya2ildevice
47
+ repository: 3735943886/tuya-interpreter
48
+ path: tuya-interpreter
49
49
 
50
50
  - name: Set up Python ${{ matrix.python-version }}
51
51
  uses: actions/setup-python@v7
@@ -91,7 +91,7 @@ jobs:
91
91
  run: pytest -q
92
92
 
93
93
  package:
94
- # The test job uses an il-ha checkout; this one checks what a user gets: the wheel in a fresh
94
+ # The test job uses an ildevice-homeassistant checkout; this one checks what a user gets: the wheel in a fresh
95
95
  # environment, every dependency from PyPI, importing and starting the CLI.
96
96
  name: installs from PyPI alone
97
97
  runs-on: ubuntu-latest
@@ -114,7 +114,7 @@ jobs:
114
114
  "$RUNNER_TEMP/smoke/bin/python" -c "
115
115
  import rustuya_local.cli, rustuya_local.manager_plugin, rustuya_local.service
116
116
  from rustuya_local import register
117
- import tuya2ildevice
118
- tuya2ildevice.preload()
117
+ import tuya_interpreter
118
+ tuya_interpreter.preload()
119
119
  print('ok')"
120
120
  "$RUNNER_TEMP/smoke/bin/rustuya-local" --help
@@ -96,7 +96,7 @@ jobs:
96
96
  run: twine check --strict dist/* # --strict: a missing README (long description) fails the release
97
97
 
98
98
  - name: Build the rustuya-manager drop-in zip
99
- # The manager's plugin catalog installs this asset (it cannot pip-install): rustuya_local with the tuya2ildevice
99
+ # The manager's plugin catalog installs this asset (it cannot pip-install): rustuya_local with the tuya-interpreter
100
100
  # the wheel resolves to vendored inside. Kept out of dist/ so it is not uploaded to PyPI.
101
101
  run: |
102
102
  python -m pip install dist/*.whl
@@ -8,6 +8,18 @@ stable release.
8
8
 
9
9
  ## [Unreleased]
10
10
 
11
+ ## [0.1.0.dev7] — 2026-10-12
12
+
13
+ ### Changed
14
+ - Use ildevice-homeassistant consistently in documentation, UI text and code comments.
15
+ - Require tuya-interpreter 0.1.0a2 in the package and the Home Assistant integration.
16
+
17
+ ## [0.1.0.dev6] — 2026-10-12
18
+
19
+ ### Changed
20
+ - Require tuya-interpreter 0.1.0a1 (tuya2ildevice renamed) in place of tuya2ildevice, in the package, the Home Assistant integration and the manager drop-in archive.
21
+ - Fetch builtin rule updates from tuya-interpreter's `master` branch.
22
+
11
23
  ## [0.1.0.dev5] — 2026-10-11
12
24
 
13
25
  ### Fixed
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: rustuya-local
3
- Version: 0.1.0.dev5
4
- Summary: Local Tuya control: rustuya-bridge -> tuya2ildevice -> IL (ildevice). HA-independent core.
3
+ Version: 0.1.0.dev7
4
+ Summary: Local Tuya control: rustuya-bridge -> tuya-interpreter -> IL (ildevice). HA-independent core.
5
5
  Project-URL: Homepage, https://github.com/3735943886/rustuya-local
6
6
  Project-URL: Repository, https://github.com/3735943886/rustuya-local
7
7
  Project-URL: Issues, https://github.com/3735943886/rustuya-local/issues
@@ -10,14 +10,14 @@ License-File: LICENSE
10
10
  Requires-Python: >=3.13
11
11
  Requires-Dist: paho-mqtt>=2.0
12
12
  Requires-Dist: pyrustuyabridge>=0.4
13
- Requires-Dist: tuya2ildevice>=0.4.0.dev4
13
+ Requires-Dist: tuya-interpreter>=0.1.0a2
14
14
  Provides-Extra: fullstack
15
15
  Requires-Dist: tuyamock; extra == 'fullstack'
16
16
  Provides-Extra: manager
17
17
  Requires-Dist: rustuya-manager[web]>=0.2.2; extra == 'manager'
18
18
  Provides-Extra: test
19
19
  Requires-Dist: httpx2; extra == 'test'
20
- Requires-Dist: il-ha; extra == 'test'
20
+ Requires-Dist: ildevice-homeassistant; extra == 'test'
21
21
  Requires-Dist: pytest; extra == 'test'
22
22
  Requires-Dist: pytest-asyncio; extra == 'test'
23
23
  Provides-Extra: test-ha
@@ -32,17 +32,17 @@ Local control of Tuya devices through [rustuya-bridge](https://github.com/373594
32
32
  ([ildevice](https://github.com/3735943886/ildevice)) devices, and in Home Assistant. It replaces rustuya-homeassistant.
33
33
 
34
34
  ```
35
- rustuya-bridge ──MQTT──► rustuya-local ──MQTT (il/…)──► il-ha (Home Assistant integration), or any IL consumer
35
+ rustuya-bridge ──MQTT──► rustuya-local ──MQTT (il/…)──► ildevice-homeassistant (Home Assistant integration), or any IL consumer
36
36
  raw LAN dps Service:
37
37
  BridgeClient + rustuya_local.host.Hub
38
38
  ```
39
39
 
40
- - **[tuya2ildevice](https://github.com/3735943886/tuya2ildevice)** is the only place that interprets Tuya: Home Assistant core's `tuya` behaviour and
40
+ - **[tuya-interpreter](https://github.com/3735943886/tuya-interpreter)** is the only place that interprets Tuya: Home Assistant core's `tuya` behaviour and
41
41
  user overrides for non-standard devices, through its Sans-I/O Rust engine and Python wrapper.
42
42
  - **rustuya-local** is one `Service` (`src/rustuya_local/service.py`) and three thin shells that run it:
43
43
  the `rustuya-local run` daemon, the `custom_components/rustuya` Home Assistant integration, and a rustuya-manager
44
44
  plugin. Its `host` package owns the runner, transports and file watchers. It only produces IL and knows nothing of Home Assistant entities.
45
- - **[il-ha](https://github.com/3735943886/ildevice-homeassistant)** turns IL descriptors into Home Assistant entities.
45
+ - **[ildevice-homeassistant](https://github.com/3735943886/ildevice-homeassistant)** turns IL descriptors into Home Assistant entities.
46
46
 
47
47
  ## Daemon
48
48
 
@@ -62,7 +62,7 @@ Stopping the daemon only marks it `offline`; its devices stay in IL (retained) f
62
62
  and run `rustuya-local purge --config config.json`: the retained descriptors, values and presence of its IL prefix and
63
63
  source are cleared (other sources on the prefix are left alone), so IL consumers drop the devices.
64
64
 
65
- ## tuya2ildevice 0.4 host boundary
65
+ ## tuya-interpreter host boundary
66
66
 
67
67
  The shared Rust core interprets one device and has no MQTT or rule-file loading API.
68
68
  `rustuya_local.host.Hub` owns the device registry and maps `TuyaDriver` outputs to IL MQTT wire data;
@@ -75,7 +75,7 @@ MQTT and in-process transport tests exercise the same adapter and the bidirectio
75
75
 
76
76
  Coming from rustuya-homeassistant: [docs/MIGRATING.md](docs/MIGRATING.md).
77
77
 
78
- Install il-ha, and run one IL producer per bridge: the daemon, the integration below, or the manager plugin. A second
78
+ Install ildevice-homeassistant, and run one IL producer per bridge: the daemon, the integration below, or the manager plugin. A second
79
79
  one with the same IL prefix and source refuses to start while the first runs (every device would show twice): the
80
80
  daemon exits, the integration is retried by Home Assistant, the plugin's tab shows it and retries. To move from one to
81
81
  another, stop the old one first.
@@ -87,7 +87,7 @@ bridge mode, the broker and the IL prefix (it checks an external bridge answers
87
87
  is not on the default one), then offers to fetch the devices from Tuya Cloud (a saved login is reused; a QR login
88
88
  only when there is none), which closing its window skips (it is in *Configure* later, and in the panel); the rest
89
89
  starts at its defaults and is changed in the panel's *Settings*. Deleting the integration takes its devices out of IL
90
- (so il-ha removes them); with the embedded bridge it also clears that bridge's retained topics and its state file.
90
+ (so ildevice-homeassistant removes them); with the embedded bridge it also clears that bridge's retained topics and its state file.
91
91
  The device list and Tuya login it kept under `.storage/rustuya/` are deleted; a device file you pointed elsewhere, and
92
92
  everything on an external bridge, are left as they are.
93
93
 
@@ -96,16 +96,16 @@ everything on an external bridge, are left as they are.
96
96
  Tuya's cloud schemas are fragmented; fixes go in a `custom_converters/` directory (daemon: `custom_converters` in the
97
97
  config; integration: `<config>/rustuya_converters`; manager plugin: its data dir), followed live:
98
98
 
99
- - `*.json`: tuya2ildevice override blocks by product or device id: rename a dp, define one the schema lacks, map the
99
+ - `*.json`: tuya-interpreter override blocks by product or device id: rename a dp, define one the schema lacks, map the
100
100
  device's words to the standard ones (`remap.alias`), fix labels and classes, define a declarative converter. A cover's
101
101
  direction is not set here but with its settings (below). Each file is a rule object with fixes under `overrides`, for example
102
102
  `{"overrides": {"product_id": {"cover": {"invert_position": true}}}}`.
103
103
  - Converters are JSON programs under `converters.declarative`; Python code plugins are not loaded.
104
104
 
105
- See tuya2ildevice's README ("User overrides") for the format. Official builtin rules, including `00-default.json`,
106
- ship with tuya2ildevice and update when that package is upgraded. They are applied before your own rule files.
105
+ See tuya-interpreter's [device customization guide](https://github.com/3735943886/tuya-interpreter/blob/master/docs/device-customization.md#user-overrides) for the format. Official builtin rules, including `00-default.json`,
106
+ ship with tuya-interpreter and update when that package is upgraded. They are applied before your own rule files.
107
107
 
108
- Online updates fetch the latest [builtin rules](https://github.com/3735943886/tuya2ildevice/tree/feat/rust-rule-engine/rules/builtin)
108
+ Online updates fetch the latest [builtin rules](https://github.com/3735943886/tuya-interpreter/tree/master/rules/builtin)
109
109
  into `rules/builtin/` inside the overrides directory at start and daily. In the Rustuya panel, use *Update builtin rules*
110
110
  to fetch them now or *Automatically update builtin rules* to control automatic updates. Opening the panel checks for
111
111
  updates: with automatic updates on, available changes are installed immediately without a yellow dot. With automatic
@@ -158,7 +158,7 @@ language: Korean, or English.
158
158
  ## rustuya-manager plugin
159
159
 
160
160
  Installed next to rustuya-manager, as a pip package (`pip install rustuya-local` in the manager's environment) or as
161
- the drop-in zip each release carries (`rustuya_local-<version>-dropin.zip`, tuya2ildevice binding, native library and builtin rules vendored inside, built by
161
+ the drop-in zip each release carries (`rustuya_local-<version>-dropin.zip`, tuya-interpreter binding, native library and builtin rules vendored inside, built by
162
162
  `scripts/build_dropin.py`; unpack it into the manager's plugin directory, or install it from the manager's plugin
163
163
  catalog once listed there), it appears as a **Tuya (IL)** tab and runs the service under the manager: the manager's broker and bridge root, the manager's device
164
164
  list (followed). Its data dir (`rustuya-local/` next to the manager's plugins) holds `settings.json` (`il`,
@@ -166,7 +166,7 @@ list (followed). Its data dir (`rustuya-local/` next to the manager's plugins) h
166
166
  converter files are picked up while it runs. A settings file it cannot use is shown on the tab until it is fixed.
167
167
 
168
168
  The drop-in zip includes native code for the platform on which it was built; use a matching OS and architecture,
169
- or install with pip to select the appropriate wheel. It freezes the tuya2ildevice it was built with: a tuya2ildevice fix reaches manager users with the next
169
+ or install with pip to select the appropriate wheel. It freezes the tuya-interpreter it was built with: a tuya-interpreter fix reaches manager users with the next
170
170
  rustuya-local release (bump the patch version and tag; the manager's catalog follows the release). Installed both ways
171
171
  (pip and the plugin directory), the plugin runs once.
172
172
 
@@ -178,17 +178,17 @@ rustuya-local release (bump the patch version and tag; the manager's catalog fol
178
178
 
179
179
  Everything here needs the sibling repos and, for the last two groups, `mosquitto`, `pyrustuya-bridge` and `tuyamock`
180
180
  (`pip install -e ".[test,fullstack]"`); those are skipped when missing. Parity with Home Assistant core's fixtures lives in
181
- `tuya2ildevice/tests/chain`, the wire and topic vectors in `ildevice/vectors`.
181
+ `tuya-interpreter/tests/chain`, the wire and topic vectors in `ildevice/vectors`.
182
182
 
183
183
  - `tests/unit/`: the configuration.
184
184
  - `tests/e2e/test_service.py`: the service on in-memory brokers (overrides directory, a failed start).
185
- - `tests/e2e/test_chain_*.py`, `test_daemon.py`: the runner with il-ha's consumer model on the other side, in one process
185
+ - `tests/e2e/test_chain_*.py`, `test_daemon.py`: the runner with ildevice-homeassistant's consumer model on the other side, in one process
186
186
  and over a real broker; the daemon as a subprocess.
187
187
  - `tests/e2e/test_manager_plugin.py`: the plugin under rustuya-manager's real plugin host (skipped without it).
188
188
  - `tests/ha/`: the integration (config flow, setup).
189
189
  - `tests/e2e/test_full_stack*.py`: the real rustuya-bridge (`pyrustuyabridge`, in process) and Tuya device emulators
190
190
  (`tuyamock`) around the daemon: state, commands, rejections, a device dropping off and returning, a daemon restart, and a
191
- differential check that 38 real device shapes come out of the whole chain exactly as `tuya2ildevice` computes them.
191
+ differential check that 38 real device shapes come out of the whole chain exactly as `tuya-interpreter` computes them.
192
192
 
193
193
  ## Status
194
194
 
@@ -6,17 +6,17 @@ Local control of Tuya devices through [rustuya-bridge](https://github.com/373594
6
6
  ([ildevice](https://github.com/3735943886/ildevice)) devices, and in Home Assistant. It replaces rustuya-homeassistant.
7
7
 
8
8
  ```
9
- rustuya-bridge ──MQTT──► rustuya-local ──MQTT (il/…)──► il-ha (Home Assistant integration), or any IL consumer
9
+ rustuya-bridge ──MQTT──► rustuya-local ──MQTT (il/…)──► ildevice-homeassistant (Home Assistant integration), or any IL consumer
10
10
  raw LAN dps Service:
11
11
  BridgeClient + rustuya_local.host.Hub
12
12
  ```
13
13
 
14
- - **[tuya2ildevice](https://github.com/3735943886/tuya2ildevice)** is the only place that interprets Tuya: Home Assistant core's `tuya` behaviour and
14
+ - **[tuya-interpreter](https://github.com/3735943886/tuya-interpreter)** is the only place that interprets Tuya: Home Assistant core's `tuya` behaviour and
15
15
  user overrides for non-standard devices, through its Sans-I/O Rust engine and Python wrapper.
16
16
  - **rustuya-local** is one `Service` (`src/rustuya_local/service.py`) and three thin shells that run it:
17
17
  the `rustuya-local run` daemon, the `custom_components/rustuya` Home Assistant integration, and a rustuya-manager
18
18
  plugin. Its `host` package owns the runner, transports and file watchers. It only produces IL and knows nothing of Home Assistant entities.
19
- - **[il-ha](https://github.com/3735943886/ildevice-homeassistant)** turns IL descriptors into Home Assistant entities.
19
+ - **[ildevice-homeassistant](https://github.com/3735943886/ildevice-homeassistant)** turns IL descriptors into Home Assistant entities.
20
20
 
21
21
  ## Daemon
22
22
 
@@ -36,7 +36,7 @@ Stopping the daemon only marks it `offline`; its devices stay in IL (retained) f
36
36
  and run `rustuya-local purge --config config.json`: the retained descriptors, values and presence of its IL prefix and
37
37
  source are cleared (other sources on the prefix are left alone), so IL consumers drop the devices.
38
38
 
39
- ## tuya2ildevice 0.4 host boundary
39
+ ## tuya-interpreter host boundary
40
40
 
41
41
  The shared Rust core interprets one device and has no MQTT or rule-file loading API.
42
42
  `rustuya_local.host.Hub` owns the device registry and maps `TuyaDriver` outputs to IL MQTT wire data;
@@ -49,7 +49,7 @@ MQTT and in-process transport tests exercise the same adapter and the bidirectio
49
49
 
50
50
  Coming from rustuya-homeassistant: [docs/MIGRATING.md](docs/MIGRATING.md).
51
51
 
52
- Install il-ha, and run one IL producer per bridge: the daemon, the integration below, or the manager plugin. A second
52
+ Install ildevice-homeassistant, and run one IL producer per bridge: the daemon, the integration below, or the manager plugin. A second
53
53
  one with the same IL prefix and source refuses to start while the first runs (every device would show twice): the
54
54
  daemon exits, the integration is retried by Home Assistant, the plugin's tab shows it and retries. To move from one to
55
55
  another, stop the old one first.
@@ -61,7 +61,7 @@ bridge mode, the broker and the IL prefix (it checks an external bridge answers
61
61
  is not on the default one), then offers to fetch the devices from Tuya Cloud (a saved login is reused; a QR login
62
62
  only when there is none), which closing its window skips (it is in *Configure* later, and in the panel); the rest
63
63
  starts at its defaults and is changed in the panel's *Settings*. Deleting the integration takes its devices out of IL
64
- (so il-ha removes them); with the embedded bridge it also clears that bridge's retained topics and its state file.
64
+ (so ildevice-homeassistant removes them); with the embedded bridge it also clears that bridge's retained topics and its state file.
65
65
  The device list and Tuya login it kept under `.storage/rustuya/` are deleted; a device file you pointed elsewhere, and
66
66
  everything on an external bridge, are left as they are.
67
67
 
@@ -70,16 +70,16 @@ everything on an external bridge, are left as they are.
70
70
  Tuya's cloud schemas are fragmented; fixes go in a `custom_converters/` directory (daemon: `custom_converters` in the
71
71
  config; integration: `<config>/rustuya_converters`; manager plugin: its data dir), followed live:
72
72
 
73
- - `*.json`: tuya2ildevice override blocks by product or device id: rename a dp, define one the schema lacks, map the
73
+ - `*.json`: tuya-interpreter override blocks by product or device id: rename a dp, define one the schema lacks, map the
74
74
  device's words to the standard ones (`remap.alias`), fix labels and classes, define a declarative converter. A cover's
75
75
  direction is not set here but with its settings (below). Each file is a rule object with fixes under `overrides`, for example
76
76
  `{"overrides": {"product_id": {"cover": {"invert_position": true}}}}`.
77
77
  - Converters are JSON programs under `converters.declarative`; Python code plugins are not loaded.
78
78
 
79
- See tuya2ildevice's README ("User overrides") for the format. Official builtin rules, including `00-default.json`,
80
- ship with tuya2ildevice and update when that package is upgraded. They are applied before your own rule files.
79
+ See tuya-interpreter's [device customization guide](https://github.com/3735943886/tuya-interpreter/blob/master/docs/device-customization.md#user-overrides) for the format. Official builtin rules, including `00-default.json`,
80
+ ship with tuya-interpreter and update when that package is upgraded. They are applied before your own rule files.
81
81
 
82
- Online updates fetch the latest [builtin rules](https://github.com/3735943886/tuya2ildevice/tree/feat/rust-rule-engine/rules/builtin)
82
+ Online updates fetch the latest [builtin rules](https://github.com/3735943886/tuya-interpreter/tree/master/rules/builtin)
83
83
  into `rules/builtin/` inside the overrides directory at start and daily. In the Rustuya panel, use *Update builtin rules*
84
84
  to fetch them now or *Automatically update builtin rules* to control automatic updates. Opening the panel checks for
85
85
  updates: with automatic updates on, available changes are installed immediately without a yellow dot. With automatic
@@ -132,7 +132,7 @@ language: Korean, or English.
132
132
  ## rustuya-manager plugin
133
133
 
134
134
  Installed next to rustuya-manager, as a pip package (`pip install rustuya-local` in the manager's environment) or as
135
- the drop-in zip each release carries (`rustuya_local-<version>-dropin.zip`, tuya2ildevice binding, native library and builtin rules vendored inside, built by
135
+ the drop-in zip each release carries (`rustuya_local-<version>-dropin.zip`, tuya-interpreter binding, native library and builtin rules vendored inside, built by
136
136
  `scripts/build_dropin.py`; unpack it into the manager's plugin directory, or install it from the manager's plugin
137
137
  catalog once listed there), it appears as a **Tuya (IL)** tab and runs the service under the manager: the manager's broker and bridge root, the manager's device
138
138
  list (followed). Its data dir (`rustuya-local/` next to the manager's plugins) holds `settings.json` (`il`,
@@ -140,7 +140,7 @@ list (followed). Its data dir (`rustuya-local/` next to the manager's plugins) h
140
140
  converter files are picked up while it runs. A settings file it cannot use is shown on the tab until it is fixed.
141
141
 
142
142
  The drop-in zip includes native code for the platform on which it was built; use a matching OS and architecture,
143
- or install with pip to select the appropriate wheel. It freezes the tuya2ildevice it was built with: a tuya2ildevice fix reaches manager users with the next
143
+ or install with pip to select the appropriate wheel. It freezes the tuya-interpreter it was built with: a tuya-interpreter fix reaches manager users with the next
144
144
  rustuya-local release (bump the patch version and tag; the manager's catalog follows the release). Installed both ways
145
145
  (pip and the plugin directory), the plugin runs once.
146
146
 
@@ -152,17 +152,17 @@ rustuya-local release (bump the patch version and tag; the manager's catalog fol
152
152
 
153
153
  Everything here needs the sibling repos and, for the last two groups, `mosquitto`, `pyrustuya-bridge` and `tuyamock`
154
154
  (`pip install -e ".[test,fullstack]"`); those are skipped when missing. Parity with Home Assistant core's fixtures lives in
155
- `tuya2ildevice/tests/chain`, the wire and topic vectors in `ildevice/vectors`.
155
+ `tuya-interpreter/tests/chain`, the wire and topic vectors in `ildevice/vectors`.
156
156
 
157
157
  - `tests/unit/`: the configuration.
158
158
  - `tests/e2e/test_service.py`: the service on in-memory brokers (overrides directory, a failed start).
159
- - `tests/e2e/test_chain_*.py`, `test_daemon.py`: the runner with il-ha's consumer model on the other side, in one process
159
+ - `tests/e2e/test_chain_*.py`, `test_daemon.py`: the runner with ildevice-homeassistant's consumer model on the other side, in one process
160
160
  and over a real broker; the daemon as a subprocess.
161
161
  - `tests/e2e/test_manager_plugin.py`: the plugin under rustuya-manager's real plugin host (skipped without it).
162
162
  - `tests/ha/`: the integration (config flow, setup).
163
163
  - `tests/e2e/test_full_stack*.py`: the real rustuya-bridge (`pyrustuyabridge`, in process) and Tuya device emulators
164
164
  (`tuyamock`) around the daemon: state, commands, rejections, a device dropping off and returning, a daemon restart, and a
165
- differential check that 38 real device shapes come out of the whole chain exactly as `tuya2ildevice` computes them.
165
+ differential check that 38 real device shapes come out of the whole chain exactly as `tuya-interpreter` computes them.
166
166
 
167
167
  ## Status
168
168
 
@@ -1,7 +1,7 @@
1
1
  """Rustuya as a Home Assistant integration: runs the same `rustuya_local.service.Service` the standalone
2
2
  `rustuya-local` daemon does, tied to this config entry, with an optional embedded rustuya-bridge (`pyrustuyabridge`)
3
- and user overrides from `<config>/rustuya_converters`. It creates no entities and does not depend on il-ha: it is only an IL
4
- *producer* — install il-ha (or any IL consumer) separately to turn its devices into entities.
3
+ and user overrides from `<config>/rustuya_converters`. It creates no entities and does not depend on ildevice-homeassistant: it is only an IL
4
+ *producer* — install ildevice-homeassistant (or any IL consumer) separately to turn its devices into entities.
5
5
  """
6
6
 
7
7
  from __future__ import annotations
@@ -105,7 +105,7 @@ async def async_setup(hass: HomeAssistant, config: dict) -> bool:
105
105
 
106
106
  def _tuya_id(hass: HomeAssistant, service: Any, device_id: str) -> str:
107
107
  """`device_id` as the Tuya device id: as given when the service drives it, else a Home Assistant device's. An IL
108
- consumer registers a device with the IL id (the Tuya id) among its identifiers — il-ha as `("ildevice", id)`, under
108
+ consumer registers a device with the IL id (the Tuya id) among its identifiers — ildevice-homeassistant as `("ildevice", id)`, under
109
109
  whatever platform name it runs as — so any identifier value the service drives is taken, when there is exactly one.
110
110
  Unresolved, it is returned as given (and refused as an unknown device)."""
111
111
  from homeassistant.helpers import device_registry as dr
@@ -264,7 +264,7 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
264
264
 
265
265
  async def async_remove_entry(hass: HomeAssistant, entry: ConfigEntry) -> None:
266
266
  """Deleted, not just unloaded (which only says `offline`, keeping everything for the next start). Clears what this
267
- entry leaves behind: its IL devices (retained descriptors and values, so il-ha and other IL consumers drop them),
267
+ entry leaves behind: its IL devices (retained descriptors and values, so ildevice-homeassistant and other IL consumers drop them),
268
268
  with the embedded bridge also that bridge's retained topics and its state file, and the files it kept in its own
269
269
  storage directory (the device list and the Tuya login). A path the user pointed elsewhere is left alone, as is
270
270
  everything on an external bridge. A broker that cannot be reached only leaves the retained topics behind; the
@@ -1,6 +1,6 @@
1
1
  """An embedded rustuya-bridge: `pyrustuyabridge.PyBridgeServer` run in a background thread, tied to this config
2
2
  entry's lifecycle instead of a separate rustuya-bridge process. Same class our own end-to-end tests drive
3
- (tuya2ildevice/rustuya-local tests/e2e/test_full_stack.py) — proven against a real broker and real Tuya-protocol
3
+ (tuya-interpreter/rustuya-local tests/e2e/test_full_stack.py) — proven against a real broker and real Tuya-protocol
4
4
  devices, just supervised here instead of by a test fixture.
5
5
 
6
6
  The embedded bridge still needs a real MQTT broker to talk through (it manages its own native MQTT client); it does
@@ -28,7 +28,7 @@ CONF_DEVICES_PATH = "devices_path" # tuyadevices.json; the cloud wi
28
28
  # --- entry options (changed any time through the options flow) -------------------------
29
29
  CONF_ALLOW_HAZARDOUS = "allow_hazardous"
30
30
  CONF_EXPOSE_UNUSED = "expose_unused"
31
- CONF_PACK = "pack" # sync tuya2ildevice's override pack into CONVERTERS_DIR
31
+ CONF_PACK = "pack" # sync tuya-interpreter's override pack into CONVERTERS_DIR
32
32
  CONF_PANEL = "panel" # the sidebar page (panel.py); Configure adds / removes it
33
33
 
34
34
  DEFAULT_OPTIONS = {CONF_ALLOW_HAZARDOUS: False, CONF_EXPOSE_UNUSED: False, CONF_PACK: True}
@@ -9,12 +9,12 @@
9
9
  "iot_class": "local_push",
10
10
  "issue_tracker": "https://github.com/3735943886/rustuya-local/issues",
11
11
  "requirements": [
12
- "tuya2ildevice>=0.4.0.dev4",
12
+ "tuya-interpreter>=0.1.0a2",
13
13
  "paho-mqtt>=2.0",
14
14
  "rustuya-manager>=0.2.2",
15
15
  "pyrustuyabridge>=0.4",
16
- "rustuya-local>=0.1.0.dev5"
16
+ "rustuya-local>=0.1.0.dev7"
17
17
  ],
18
18
  "single_config_entry": true,
19
- "version": "0.1.0.dev5"
19
+ "version": "0.1.0.dev7"
20
20
  }
@@ -19,7 +19,7 @@
19
19
  "il_prefix": "IL topic prefix"
20
20
  },
21
21
  "data_description": {
22
- "il_prefix": "Where the devices are published for il-ha (or any IL consumer); il-ha reads il by default."
22
+ "il_prefix": "Where the devices are published for ildevice-homeassistant (or any IL consumer); ildevice-homeassistant reads il by default."
23
23
  }
24
24
  },
25
25
  "embedded": {
@@ -33,7 +33,7 @@
33
33
  "il_prefix": "IL topic prefix"
34
34
  },
35
35
  "data_description": {
36
- "il_prefix": "Where the devices are published for il-ha (or any IL consumer); il-ha reads il by default."
36
+ "il_prefix": "Where the devices are published for ildevice-homeassistant (or any IL consumer); ildevice-homeassistant reads il by default."
37
37
  }
38
38
  },
39
39
  "onboard": {
@@ -152,7 +152,7 @@
152
152
  "fields": {
153
153
  "device_id": {
154
154
  "name": "Device ID",
155
- "description": "The Tuya device ID (as in the device list), or the Home Assistant device an IL consumer such as il-ha made of it."
155
+ "description": "The Tuya device ID (as in the device list), or the Home Assistant device an IL consumer such as ildevice-homeassistant made of it."
156
156
  },
157
157
  "dp": {
158
158
  "name": "DP",
@@ -19,7 +19,7 @@
19
19
  "il_prefix": "IL topic prefix"
20
20
  },
21
21
  "data_description": {
22
- "il_prefix": "Where the devices are published for il-ha (or any IL consumer); il-ha reads il by default."
22
+ "il_prefix": "Where the devices are published for ildevice-homeassistant (or any IL consumer); ildevice-homeassistant reads il by default."
23
23
  }
24
24
  },
25
25
  "embedded": {
@@ -33,7 +33,7 @@
33
33
  "il_prefix": "IL topic prefix"
34
34
  },
35
35
  "data_description": {
36
- "il_prefix": "Where the devices are published for il-ha (or any IL consumer); il-ha reads il by default."
36
+ "il_prefix": "Where the devices are published for ildevice-homeassistant (or any IL consumer); ildevice-homeassistant reads il by default."
37
37
  }
38
38
  },
39
39
  "onboard": {
@@ -152,7 +152,7 @@
152
152
  "fields": {
153
153
  "device_id": {
154
154
  "name": "Device ID",
155
- "description": "The Tuya device ID (as in the device list), or the Home Assistant device an IL consumer such as il-ha made of it."
155
+ "description": "The Tuya device ID (as in the device list), or the Home Assistant device an IL consumer such as ildevice-homeassistant made of it."
156
156
  },
157
157
  "dp": {
158
158
  "name": "DP",
@@ -19,7 +19,7 @@
19
19
  "il_prefix": "IL 토픽 prefix"
20
20
  },
21
21
  "data_description": {
22
- "il_prefix": "il-ha(또는 다른 IL 소비자)가 읽을 기기를 게시하는 곳입니다. il-ha는 기본으로 il을 읽습니다."
22
+ "il_prefix": "ildevice-homeassistant(또는 다른 IL 소비자)가 읽을 기기를 게시하는 곳입니다. ildevice-homeassistant는 기본으로 il을 읽습니다."
23
23
  }
24
24
  },
25
25
  "embedded": {
@@ -33,7 +33,7 @@
33
33
  "il_prefix": "IL 토픽 prefix"
34
34
  },
35
35
  "data_description": {
36
- "il_prefix": "il-ha(또는 다른 IL 소비자)가 읽을 기기를 게시하는 곳입니다. il-ha는 기본으로 il을 읽습니다."
36
+ "il_prefix": "ildevice-homeassistant(또는 다른 IL 소비자)가 읽을 기기를 게시하는 곳입니다. ildevice-homeassistant는 기본으로 il을 읽습니다."
37
37
  }
38
38
  },
39
39
  "onboard": {
@@ -152,7 +152,7 @@
152
152
  "fields": {
153
153
  "device_id": {
154
154
  "name": "기기 ID",
155
- "description": "Tuya 기기 ID (기기 목록의 것), 또는 il-ha 같은 IL consumer가 만든 Home Assistant 기기 ID."
155
+ "description": "Tuya 기기 ID (기기 목록의 것), 또는 ildevice-homeassistant 같은 IL consumer가 만든 Home Assistant 기기 ID."
156
156
  },
157
157
  "dp": {
158
158
  "name": "DP",
@@ -176,7 +176,7 @@ const I18N = {
176
176
  act_add: "Add", act_update: "Update", act_remove: "Remove",
177
177
  confirm_remove_device: "Remove {who} from the bridge?",
178
178
  set_bridge_root: "Bridge topic root", set_bridge_root_hint: "The MQTT root rustuya-bridge uses (its mqtt_root_topic).",
179
- set_il_prefix: "IL topic prefix", set_il_prefix_hint: "Where the IL devices are published; il-ha reads il by default.",
179
+ set_il_prefix: "IL topic prefix", set_il_prefix_hint: "Where the IL devices are published; ildevice-homeassistant reads il by default.",
180
180
  set_il_source: "IL source name", set_il_source_hint: "This producer's name on IL (one topic level).",
181
181
  set_devices_path: "Device file", set_devices_path_hint: "The tuyadevices.json rustuya-manager keeps; relative to the config directory.",
182
182
  set_bridge_state_file: "Bridge state file", set_bridge_state_file_hint: "Where the embedded bridge keeps its device registry.",
@@ -195,9 +195,9 @@ const I18N = {
195
195
  settings_unreadable: "Cannot read the settings: {error}", confirm_settings: "Save {names} and restart Rustuya?",
196
196
  sync_now: "Update builtin rules", hide_title: "Remove this panel from the sidebar; the integration's Configure adds it back",
197
197
  hide: "Hide panel", pack_title: "Builtin rules",
198
- pack_intro: "Official rules included with tuya2ildevice. Fetch the latest rules without updating the integration.",
198
+ pack_intro: "Official rules included with tuya-interpreter. Fetch the latest rules without updating the integration.",
199
199
  converters_title: "Custom converters",
200
- converters_intro: "Rule files (*.json: override blocks and declarative converters) in rustuya_converters/. Saved files apply within seconds. See tuya2ildevice's README, \"User overrides\". Drop files here to copy them in.",
200
+ converters_intro: "Rule files (*.json: override blocks and declarative converters) in rustuya_converters/. Saved files apply within seconds. See tuya-interpreter docs/device-customization.md, \"User overrides\". Drop files here to copy them in.",
201
201
  new_file: "New file", save: "Save", delete: "Delete",
202
202
  only_converters: "{name} (only *.json files are converters)",
203
203
  confirm_replace_pack: "{name} comes from the override pack. Replaced, it is yours: the pack no longer updates or removes it.",
@@ -247,7 +247,7 @@ const I18N = {
247
247
  act_add: "추가", act_update: "갱신", act_remove: "삭제",
248
248
  confirm_remove_device: "{who}을(를) 브리지에서 삭제할까요?",
249
249
  set_bridge_root: "브리지 토픽 root", set_bridge_root_hint: "rustuya-bridge가 쓰는 MQTT root(mqtt_root_topic).",
250
- set_il_prefix: "IL 토픽 prefix", set_il_prefix_hint: "IL 기기를 게시하는 곳. il-ha는 기본으로 il을 읽습니다.",
250
+ set_il_prefix: "IL 토픽 prefix", set_il_prefix_hint: "IL 기기를 게시하는 곳. ildevice-homeassistant는 기본으로 il을 읽습니다.",
251
251
  set_il_source: "IL source 이름", set_il_source_hint: "IL에서 이 생산자의 이름(토픽 한 단계).",
252
252
  set_devices_path: "기기 파일", set_devices_path_hint: "rustuya-manager가 관리하는 tuyadevices.json. config 디렉터리 기준 상대 경로.",
253
253
  set_bridge_state_file: "브리지 상태 파일", set_bridge_state_file_hint: "내장 브리지가 기기 목록을 저장하는 곳.",
@@ -266,9 +266,9 @@ const I18N = {
266
266
  settings_unreadable: "설정을 읽을 수 없습니다: {error}", confirm_settings: "{names}을(를) 저장하고 Rustuya를 재시작할까요?",
267
267
  sync_now: "Builtin 규칙 업데이트", hide_title: "사이드바에서 이 패널을 없앱니다. 통합구성요소의 구성(Configure)에서 다시 추가할 수 있습니다",
268
268
  hide: "패널 숨기기", pack_title: "Builtin 규칙",
269
- pack_intro: "tuya2ildevice에 포함된 공식 규칙입니다. 통합구성요소 업데이트 없이 최신 규칙을 가져옵니다.",
269
+ pack_intro: "tuya-interpreter에 포함된 공식 규칙입니다. 통합구성요소 업데이트 없이 최신 규칙을 가져옵니다.",
270
270
  converters_title: "커스텀 컨버터",
271
- converters_intro: "rustuya_converters/ 안의 규칙 파일(*.json: 오버라이드 블록과 선언형 컨버터). 저장한 파일은 몇 초 안에 적용됩니다. tuya2ildevice README의 \"User overrides\"를 참고하세요. 여기에 파일을 끌어다 놓으면 복사됩니다.",
271
+ converters_intro: "rustuya_converters/ 안의 규칙 파일(*.json: 오버라이드 블록과 선언형 컨버터). 저장한 파일은 몇 초 안에 적용됩니다. tuya-interpreter docs/device-customization.md의 \"User overrides\"를 참고하세요. 여기에 파일을 끌어다 놓으면 복사됩니다.",
272
272
  new_file: "새 파일", save: "저장", delete: "삭제",
273
273
  only_converters: "{name} (*.json 파일만 컨버터입니다)",
274
274
  confirm_replace_pack: "{name}은(는) 오버라이드 팩의 파일입니다. 바꾸면 내 파일이 되어 팩이 더 이상 갱신하거나 지우지 않습니다.",
@@ -1,4 +1,4 @@
1
- # Moving to tuya2ildevice 0.4
1
+ # Moving to tuya-interpreter
2
2
 
3
3
  The device file, MQTT configuration and IL topics stay the same. Custom files in the converters directory now use
4
4
  the rule-layer format. Wrap an existing product/device override mapping in `{"overrides": ...}`. For example:
@@ -21,7 +21,7 @@ rustuya-manager plugin. It is retired. Its replacement is two pieces:
21
21
  - **rustuya-local** turns the devices on rustuya-bridge into IL devices (MQTT topics under a prefix such as `il/tuya`).
22
22
  Run it one way: the `rustuya` Home Assistant integration (HACS), the rustuya-manager plugin (catalog: *Tuya (IL)*),
23
23
  or the `rustuya-local run` daemon.
24
- - **il-ha** ([ildevice-homeassistant](https://github.com/3735943886/ildevice-homeassistant), HACS) turns IL devices
24
+ - **[ildevice-homeassistant](https://github.com/3735943886/ildevice-homeassistant)** (HACS) turns IL devices
25
25
  into Home Assistant entities. MQTT discovery is no longer used.
26
26
 
27
27
  ## What changes for you
@@ -30,7 +30,7 @@ rustuya-manager plugin. It is retired. Its replacement is two pieces:
30
30
  `ildevice`, and Home Assistant keeps the two apart. Automations, scripts and dashboards that name the old entities
31
31
  need the new ids. If you clear the old discovery first (step 1), the old ids are free and you can rename the new
32
32
  entities to them in Home Assistant.
33
- - **Entities follow Home Assistant core's `tuya` integration** (tuya2ildevice reproduces it), so a device can come out
33
+ - **Entities follow Home Assistant core's `tuya` integration** (tuya-interpreter reproduces it), so a device can come out
34
34
  with more, fewer or differently split entities than v1 made.
35
35
  - **Availability** comes from rustuya-local's presence: when it stops, its devices show unavailable.
36
36
 
@@ -48,7 +48,7 @@ rustuya-manager plugin. It is retired. Its replacement is two pieces:
48
48
  2. **Install rustuya-local** one way (see the [README](../README.md#home-assistant)). Keep the same rustuya-bridge and
49
49
  device file (`tuyadevices.json`).
50
50
 
51
- 3. **Install il-ha** from HACS and add the **IL device** integration with the prefix rustuya-local publishes under
51
+ 3. **Install ildevice-homeassistant** from HACS and add the **IL device** integration with the prefix rustuya-local publishes under
52
52
  (`il` unless you set another one in rustuya-local; both sides must match). Add the devices it offers, or turn on
53
53
  *Add discovered devices automatically*.
54
54
 
@@ -61,7 +61,7 @@ rustuya-manager plugin. It is retired. Its replacement is two pieces:
61
61
  | daemon | `custom_converters` in its `config.json` |
62
62
 
63
63
  - `*.json` files are rule layers, with product/device fixes under `overrides`
64
- ([User overrides](https://github.com/3735943886/tuya2ildevice#user-overrides)); the old ones are not read, so rewrite them.
64
+ ([User overrides](https://github.com/3735943886/tuya-interpreter/blob/master/docs/device-customization.md#user-overrides)); the old ones are not read, so rewrite them.
65
65
  A property the tables do not build is defined from its dp in `props`.
66
66
  - A curtain's `invert_position` / `invert_set_position`, reversed command words and derived state are not files any
67
67
  more: each cover has configuration switches for them (README, *Cover settings*).
@@ -69,7 +69,7 @@ rustuya-manager plugin. It is retired. Its replacement is two pieces:
69
69
  - `converters.cover_motion` and a cover's `infer_motion` are read as the cover's `state_source` (`inferred`, or
70
70
  `none` for `infer_motion: false`), and a `cover_motion` `settle` as the cover's `settle`; its other keys are
71
71
  dropped with a warning. `zz_settings.json` is rewritten in the new form the next time a setting is saved.
72
- - Leave the old pack (`00_default.json`, `00_curtain.py`, `.rustuya_pack.json`) out. Official rules ship with tuya2ildevice; online updates arrive under
72
+ - Leave the old pack (`00_default.json`, `00_curtain.py`, `.rustuya_pack.json`) out. Official rules ship with tuya-interpreter; online updates arrive under
73
73
  `rules/builtin/` automatically. User files are applied after all official rules.
74
74
 
75
75
  Changes to the directory are picked up while running, no restart needed.