Skip to content

Add Honeywell String Lights integration#168450

Merged
balloob merged 6 commits intodevfrom
honeywell-string-lights
Apr 24, 2026
Merged

Add Honeywell String Lights integration#168450
balloob merged 6 commits intodevfrom
honeywell-string-lights

Conversation

@balloob
Copy link
Copy Markdown
Member

@balloob balloob commented Apr 17, 2026

Breaking change

Proposed change

Add a new honeywell_string_lights integration that drives a Honeywell String Lights set via the radio_frequency entity platform. All protocol details (frequency, modulation, timings, repeat count) are provided by the rf-protocols library — this integration contains no hard-coded RF constants.

This PR relies on #168447 — the radio_frequency entity platform. This PR is currently stacked on top of that branch.

Opened as a draft until the parent PR lands.

Type of change

  • Dependency upgrade
  • Bugfix (non-breaking change which fixes an issue)
  • New integration (thank you!)
  • New feature (which adds functionality to an existing integration)
  • Deprecation (breaking change to happen in the future)
  • Breaking change (fix/feature causing existing functionality to break)
  • Code quality improvements to existing code or addition of tests

Additional information

Checklist

  • I understand the code I am submitting and can explain how it works.
  • The code change is tested and works locally.
  • Local tests pass. Your PR cannot be merged unless tests pass
  • There is no commented out code in this PR.
  • I have followed the development checklist
  • I have followed the perfect PR recommendations
  • The code has been formatted using Ruff (ruff format homeassistant tests)
  • Tests have been added to verify that the new code works.
  • Any generated code has been carefully reviewed for correctness and compliance with project standards.

If user exposed functionality or configuration variables are added/changed:

If the code communicates with devices, web services, or third-party tools:

  • The manifest file has all fields filled out correctly.
    Updated and included derived files by running: python3 -m script.hassfest.
  • New or updated dependencies have been added to requirements_all.txt.
    Updated by running python3 -m script.gen_requirements_all.
  • For the updated dependencies a diff between library versions and ideally a link to the changelog/release notes is added to the PR description.

To help with the load of incoming pull requests:

Comment thread homeassistant/components/honeywell_string_lights/entity.py
Comment thread homeassistant/components/honeywell_string_lights/light.py Outdated
balloob pushed a commit to home-assistant/developers.home-assistant that referenced this pull request Apr 23, 2026
Replace the placeholder garage-door example with adapted snippets from
home-assistant/core#168450, which shows the real config-flow filtering
by a sample command's frequency/modulation and the real send-command
path via rf_protocols.get_codes.
Base automatically changed from radio-frequency-entity-component to dev April 24, 2026 10:37
@balloob balloob force-pushed the honeywell-string-lights branch from ca80fe9 to 0b699dd Compare April 24, 2026 12:27
Copilot AI review requested due to automatic review settings April 24, 2026 12:27
@balloob balloob marked this pull request as ready for review April 24, 2026 12:27
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new honeywell_string_lights integration to control Honeywell RF string lights via the new radio_frequency entity abstraction, including config flow, light platform entity, and accompanying tests and metadata.

Changes:

  • Introduces the honeywell_string_lights integration (manifest, config flow, entity + light platform, translations, quality scale).
  • Adds a full test suite for config flow and light behavior.
  • Updates generated registries/metadata (integrations/config_flows), requirements comments, brands, and CODEOWNERS.

Reviewed changes

Copilot reviewed 16 out of 18 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
homeassistant/components/honeywell_string_lights/init.py Sets up/unloads the config entry and forwards the light platform.
homeassistant/components/honeywell_string_lights/config_flow.py Implements a user config flow selecting a compatible RF transmitter entity.
homeassistant/components/honeywell_string_lights/const.py Defines integration constants (domain + transmitter field).
homeassistant/components/honeywell_string_lights/entity.py Base entity wiring to track transmitter availability.
homeassistant/components/honeywell_string_lights/light.py Light entity that sends rf-protocols commands through radio_frequency.
homeassistant/components/honeywell_string_lights/manifest.json Declares integration metadata, dependency on radio_frequency, and rf-protocols requirement.
homeassistant/components/honeywell_string_lights/quality_scale.yaml Declares quality scale status for the new integration.
homeassistant/components/honeywell_string_lights/strings.json Adds config-flow strings (form + abort reasons).
tests/components/honeywell_string_lights/init.py Test package marker.
tests/components/honeywell_string_lights/conftest.py Shared fixtures for RF transmitter + config entry setup.
tests/components/honeywell_string_lights/test_config_flow.py Tests config flow success and abort cases.
tests/components/honeywell_string_lights/test_light.py Tests on/off command sending, restore state, and unload behavior.
requirements_all.txt Adds integration annotation comment for rf-protocols.
requirements_test_all.txt Adds integration annotation comment for rf-protocols.
homeassistant/generated/integrations.json Registers the new integration in generated integration metadata.
homeassistant/generated/config_flows.py Adds the integration domain to generated config flow list.
homeassistant/brands/honeywell.json Associates the new integration with the Honeywell brand.
CODEOWNERS Adds code ownership entries for the new integration and tests.

Comment thread homeassistant/components/honeywell_string_lights/strings.json
Comment thread tests/components/honeywell_string_lights/test_light.py Outdated
Comment thread homeassistant/components/honeywell_string_lights/config_flow.py
Comment thread homeassistant/components/honeywell_string_lights/light.py Outdated
Comment thread homeassistant/components/honeywell_string_lights/entity.py Outdated
Comment thread homeassistant/components/honeywell_string_lights/light.py Outdated
"abort": {
"already_configured": "[%key:common::config_flow::abort::already_configured_device%]",
"no_compatible_transmitters": "No radio frequency transmitter supports 433.92 MHz OOK transmissions. Please add a compatible transmitter first.",
"no_transmitters": "No radio frequency transmitters are available. Please set up a transmitter first."
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, I am wondering if there's something better describing what a transmitter is

Comment thread tests/components/honeywell_string_lights/conftest.py
@pytest.fixture
def mock_config_entry(
hass: HomeAssistant,
mock_rf_entity: MockRadioFrequencyEntity, # noqa: F811
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think ruff trips over this

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The fixture itself is not used, as we reference to the entity by entity ID. Marks like usefixture cannot be applied to other fixtures.

Comment thread tests/components/honeywell_string_lights/conftest.py
Comment thread tests/components/honeywell_string_lights/test_config_flow.py Outdated
@joostlek
Copy link
Copy Markdown
Member

Oh and are there more honeywell lights that support this? Or just string lights?

@balloob
Copy link
Copy Markdown
Member Author

balloob commented Apr 24, 2026

This is just their string lights as far as Keith and I could tell.

Copilot AI review requested due to automatic review settings April 24, 2026 13:45
@balloob balloob requested a review from a team as a code owner April 24, 2026 13:45
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 18 out of 20 changed files in this pull request and generated 2 comments.

Comment thread homeassistant/components/honeywell_string_lights/entity.py
Comment thread homeassistant/components/honeywell_string_lights/entity.py
balloob added 5 commits April 24, 2026 09:53
Introduce a new Honeywell String Lights integration that drives the
lights over the radio_frequency entity platform. The OOK turn on/off
commands are provided by the rf-protocols library.
Copilot AI review requested due to automatic review settings April 24, 2026 13:54
@balloob balloob force-pushed the honeywell-string-lights branch from 60b8550 to f6ebc42 Compare April 24, 2026 13:54
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 18 out of 20 changed files in this pull request and generated 2 comments.

Comment on lines +53 to +55
command = mock_rf_entity.send_command_calls[0]
assert command.command is COMMANDS.load_command("turn_on")
assert command.context is context
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Compare the expected RF command by value (or by key attributes) instead of using is, since a separate COMMANDS.load_command(...) call is not guaranteed to return the same object instance.

Copilot uses AI. Check for mistakes.
Comment on lines +70 to +72
command = mock_rf_entity.send_command_calls[1]
assert command.command is COMMANDS.load_command("turn_off")
assert command.context is context
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Compare the expected RF command by value (or by key attributes) instead of using is, since a separate COMMANDS.load_command(...) call is not guaranteed to return the same object instance.

Copilot uses AI. Check for mistakes.
@balloob balloob merged commit c4fd458 into dev Apr 24, 2026
48 checks passed
@balloob balloob deleted the honeywell-string-lights branch April 24, 2026 14:43
@github-actions github-actions Bot locked and limited conversation to collaborators Apr 25, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Radio-frequency (RF) is becoming a first-class citizen of Home Assistant and can send commands

4 participants