Skip to content
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
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
1 change: 1 addition & 0 deletions homeassistant/components/nobo_hub/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@
"documentation": "https://www.home-assistant.io/integrations/nobo_hub",
"integration_type": "hub",
"iot_class": "local_push",
"quality_scale": "bronze",
"requirements": ["pynobo==1.8.1"]
}
74 changes: 74 additions & 0 deletions homeassistant/components/nobo_hub/quality_scale.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
rules:

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.

_attr_target_temperature_step = 1 could use STEP_WHOLE, just a nit

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Did you mean PRECISION_WHOLE or as a local constant?

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.

yes, precision

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done in this PR

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.

It would be cool if we can look into more typing

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

In the works - waiting for final review on the upstream library: echoromeo/pynobo#43

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.

Why is the HVAC mode linked hard to the preset mode?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

It's explained in the documentation: https://www.home-assistant.io/integrations/nobo_hub/

The zones (normally rooms) operate either on a weekly schedule (auto) or in override mode. 3 different overrides are supported: normal heating, eco heating, away (non-freeze). The overrides are implemented as presets.

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.

Why do we occasionaly update _read_state, as in, it doesn't poll so how does the data flow in?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

The hub does not push preset changes due to weekly schedule, so the climate entity has to be polled once per minute to pick up when the preset changes due to time passing.

All other data are pushed from the hub on a TCP socket.

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.

Yes but what does that do? The docstring mentions """Read the current state from the hub. These are only local calls.""" so apparently the data gets pushed, but we don't push it all the way to the climate entity

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Clarified docstring. Hope it's OK to fix in this PR :)

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.

What's the overwrite part for?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Do you have some context for whats overwritten?

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.

Global override, I am not sure what that does from the docs

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

It overrides current mode for all zones. We could add a link to the mobile app manual if it helps:
https://gldi-azure.unco.no/en/user-manual/menus-and-functions/overrides/simple-global-overrides/

Comment thread
joostlek marked this conversation as resolved.
Comment thread
joostlek marked this conversation as resolved.
# Bronze
action-setup:
status: exempt
comment: Integration does not register custom actions.
appropriate-polling: done
brands: done
common-modules: done
config-flow-test-coverage: done

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.

Please make sure all tests end in CREATE_ENTRY or ABORT

@oyvindwe oyvindwe May 8, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in PR #170141 (also updated new tests in other open PRs)

config-flow: done
dependency-transparency: done
docs-actions:
status: exempt
comment: Integration does not register custom actions.
docs-high-level-description: done
docs-installation-instructions: done
docs-removal-instructions: done
entity-event-setup: done
entity-unique-id: done
has-entity-name: done
runtime-data: done
test-before-configure: done
test-before-setup: done
unique-config-entry: done

# Silver
action-exceptions:
status: exempt
comment: Integration does not register custom actions.
Comment thread
oyvindwe marked this conversation as resolved.
Outdated
Comment thread
oyvindwe marked this conversation as resolved.
Outdated
config-entry-unloading: done
docs-configuration-parameters: done
docs-installation-parameters: done
entity-unavailable: todo
integration-owner: done
log-when-unavailable: todo
parallel-updates: done
reauthentication-flow:
status: exempt
comment: The hub does not require authentication.
test-coverage: done
Comment thread
oyvindwe marked this conversation as resolved.
Outdated

# Gold
devices: done

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.

why is nobo ecohub the model, nobo sounds like the manufacturer

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Manufacturer is Glen Dimplex Nordic AS. Nobø is just a brand.

The device is sometimes called "Nobø Hub", and other times "Nobø ECO hub", I guess in case there would be another hub in the Nobø brand (no other have been made though). When connecting, by default it identifies itself with the name "My Eco Hub".

Official product page uses "Nobø Hub" - I'm happy to rename!

diagnostics: todo
discovery: todo
discovery-update-info:
status: exempt
comment: IP address changes are recovered via UDP rediscovery on connection failure.
docs-data-update: todo
docs-examples: todo
docs-known-limitations: todo
docs-supported-devices: todo
docs-supported-functions: todo
docs-troubleshooting: todo
docs-use-cases: todo
dynamic-devices: todo
entity-category: todo
entity-device-class: todo

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.

We don't use custom device classes, the select has a custom one

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in PR #170135

entity-disabled-by-default: todo
entity-translations: todo
exception-translations: todo
icon-translations: todo
reconfiguration-flow: todo
repair-issues:
status: exempt
comment: Integration has no repair scenarios.
stale-devices: todo

# Platinum
async-dependency: todo
inject-websession:
status: exempt
comment: Integration uses a local TCP socket (via pynobo); no HTTP client is used.
strict-typing: todo
2 changes: 0 additions & 2 deletions script/hassfest/quality_scale.py
Original file line number Diff line number Diff line change
Expand Up @@ -670,7 +670,6 @@ class Rule:
"nmbs",
"no_ip",
"noaa_tides",
"nobo_hub",
"norway_air",
"notify_events",
"notion",
Expand Down Expand Up @@ -1657,7 +1656,6 @@ class Rule:
"nmbs",
"no_ip",
"noaa_tides",
"nobo_hub",
"norway_air",
"notify_events",
"notion",
Expand Down