📺 OREI HDMI Integration for Home Assistant

:television: OREI HDMI Integration for Home Assistant

If you have an OREI HDMI matrix switch, this custom Home Assistant integration provides native control and status directly from Home Assistant.

I’d love to hear how it works with your setup. Feedback, bug reports, and feature requests are always welcome!

1 Like

I will try this out. I have a current integration made for a 4x4 that I modified to handle my 8x8. Looking forward to seeing what this one has to offer.

The other one is here: derwoodums/orei-matrix: OREI HDMI UHD44-EXB400R-K Matrix integration for Home Assistant

1 Like

Thank you! Any feedback would be appreciated.

This is what I received when setting up the integration.

Logger: homeassistant.util.loop
Source: util/loop.py:135
First occurred: 12:49:25 PM (2 occurrences)
Last logged: 12:49:25 PM

Detected blocking call to read_text with args (PosixPath('/config/custom_components/orei_hdmi/manifest.json'),) inside the event loop by custom integration 'orei_hdmi' at custom_components/orei_hdmi/__init__.py, line 61: manifest = json.loads((Path(__file__).parent / "manifest.json").read_text()) (offender: /config/custom_components/orei_hdmi/__init__.py, line 61: manifest = json.loads((Path(__file__).parent / "manifest.json").read_text())), please create a bug report at https://github.com/marsh4200/orei_hdmi/issues For developers, please see https://developers.home-assistant.io/docs/asyncio_blocking_operations/#read_text Traceback (most recent call last): File "<frozen runpy>", line 203, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "/usr/src/homeassistant/homeassistant/__main__.py", line 227, in <module> sys.exit(main()) File "/usr/src/homeassistant/homeassistant/__main__.py", line 213, in main exit_code = runner.run(runtime_conf) File "/usr/src/homeassistant/homeassistant/runner.py", line 289, in run return loop.run_until_complete(setup_and_run_hass(runtime_config)) File "/usr/local/lib/python3.14/asyncio/base_events.py", line 706, in run_until_complete self.run_forever() File "/usr/local/lib/python3.14/asyncio/base_events.py", line 677, in run_forever self._run_once() File "/usr/local/lib/python3.14/asyncio/base_events.py", line 2056, in _run_once handle._run() File "/usr/local/lib/python3.14/asyncio/events.py", line 94, in _run self._context.run(self._callback, *self._args) File "/usr/local/lib/python3.14/site-packages/aiohttp/web_protocol.py", line 575, in _handle_request resp = await request_handler(request) File "/usr/local/lib/python3.14/site-packages/aiohttp/web_app.py", line 559, in _handle return await handler(request) File "/usr/local/lib/python3.14/site-packages/aiohttp/web_middlewares.py", line 117, in impl return await handler(request) File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 90, in security_filter_middleware return await handler(request) File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 215, in forwarded_middleware return await handler(request) File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 24, in request_context_middleware return await handler(request) File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 88, in ban_middleware return await handler(request) File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 261, in auth_middleware return await handler(request) File "/usr/src/homeassistant/homeassistant/components/http/headers.py", line 39, in headers_middleware response = await handler(request) File "/usr/src/homeassistant/homeassistant/helpers/http.py", line 88, in handle result = await handler(request, **request.match_info) File "/usr/src/homeassistant/homeassistant/components/http/decorators.py", line 81, in with_admin return await func(self, request, *args, **kwargs) File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 237, in post return await super().post(request, flow_id) File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 72, in wrapper return await method(view, request, data, *args, **kwargs) File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 118, in post result = await self._flow_mgr.async_configure(flow_id, data) File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 334, in async_configure result = await self._async_configure(flow_id, user_input) File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1592, in _async_configure return await super()._async_configure(flow_id, user_input) File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 382, in _async_configure result = await self._async_handle_step( File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 545, in _async_handle_step result = await self.async_finish_flow(flow, result.copy()) File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1827, in async_finish_flow await self.config_entries.async_add(entry) File "/usr/src/homeassistant/homeassistant/config_entries.py", line 2237, in async_add await self.async_setup(entry.entry_id) File "/usr/src/homeassistant/homeassistant/config_entries.py", line 2412, in async_setup result = await async_setup_component( File "/usr/src/homeassistant/homeassistant/setup.py", line 168, in async_setup_component result = await _async_setup_component(hass, domain, config) File "/usr/src/homeassistant/homeassistant/setup.py", line 425, in _async_setup_component result = await task File "/config/custom_components/orei_hdmi/__init__.py", line 61, in async_setup manifest = json.loads((Path(__file__).parent / "manifest.json").read_text())
Detected blocking call to open with args (PosixPath('/config/custom_components/orei_hdmi/manifest.json'),) inside the event loop by custom integration 'orei_hdmi' at custom_components/orei_hdmi/__init__.py, line 61: manifest = json.loads((Path(__file__).parent / "manifest.json").read_text()) (offender: /usr/local/lib/python3.14/pathlib/__init__.py, line 787: with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:), please create a bug report at https://github.com/marsh4200/orei_hdmi/issues For developers, please see https://developers.home-assistant.io/docs/asyncio_blocking_operations/#open Traceback (most recent call last): File "<frozen runpy>", line 203, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "/usr/src/homeassistant/homeassistant/__main__.py", line 227, in <module> sys.exit(main()) File "/usr/src/homeassistant/homeassistant/__main__.py", line 213, in main exit_code = runner.run(runtime_conf) File "/usr/src/homeassistant/homeassistant/runner.py", line 289, in run return loop.run_until_complete(setup_and_run_hass(runtime_config)) File "/usr/local/lib/python3.14/asyncio/base_events.py", line 706, in run_until_complete self.run_forever() File "/usr/local/lib/python3.14/asyncio/base_events.py", line 677, in run_forever self._run_once() File "/usr/local/lib/python3.14/asyncio/base_events.py", line 2056, in _run_once handle._run() File "/usr/local/lib/python3.14/asyncio/events.py", line 94, in _run self._context.run(self._callback, *self._args) File "/usr/local/lib/python3.14/site-packages/aiohttp/web_protocol.py", line 575, in _handle_request resp = await request_handler(request) File "/usr/local/lib/python3.14/site-packages/aiohttp/web_app.py", line 559, in _handle return await handler(request) File "/usr/local/lib/python3.14/site-packages/aiohttp/web_middlewares.py", line 117, in impl return await handler(request) File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 90, in security_filter_middleware return await handler(request) File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 215, in forwarded_middleware return await handler(request) File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 24, in request_context_middleware return await handler(request) File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 88, in ban_middleware return await handler(request) File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 261, in auth_middleware return await handler(request) File "/usr/src/homeassistant/homeassistant/components/http/headers.py", line 39, in headers_middleware response = await handler(request) File "/usr/src/homeassistant/homeassistant/helpers/http.py", line 88, in handle result = await handler(request, **request.match_info) File "/usr/src/homeassistant/homeassistant/components/http/decorators.py", line 81, in with_admin return await func(self, request, *args, **kwargs) File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 237, in post return await super().post(request, flow_id) File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 72, in wrapper return await method(view, request, data, *args, **kwargs) File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 118, in post result = await self._flow_mgr.async_configure(flow_id, data) File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 334, in async_configure result = await self._async_configure(flow_id, user_input) File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1592, in _async_configure return await super()._async_configure(flow_id, user_input) File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 382, in _async_configure result = await self._async_handle_step( File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 545, in _async_handle_step result = await self.async_finish_flow(flow, result.copy()) File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1827, in async_finish_flow await self.config_entries.async_add(entry) File "/usr/src/homeassistant/homeassistant/config_entries.py", line 2237, in async_add await self.async_setup(entry.entry_id) File "/usr/src/homeassistant/homeassistant/config_entries.py", line 2412, in async_setup result = await async_setup_component( File "/usr/src/homeassistant/homeassistant/setup.py", line 168, in async_setup_component result = await _async_setup_component(hass, domain, config) File "/usr/src/homeassistant/homeassistant/setup.py", line 425, in _async_setup_component result = await task File "/config/custom_components/orei_hdmi/__init__.py", line 61, in async_setup manifest = json.loads((Path(__file__).parent / "manifest.json").read_text())
  • Detected blocking call to read_text with args (PosixPath(‘/config/custom_components/orei_hdmi/manifest.json’),) inside the event loop by custom integration ‘orei_hdmi’ at custom_components/orei_hdmi/init.py, line 61: manifest = json.loads((Path(file).parent / “manifest.json”).read_text()) (offender: /config/custom_components/orei_hdmi/init.py, line 61: manifest = json.loads((Path(file).parent / “manifest.json”).read_text())), please create a bug report at Issues · marsh4200/orei_hdmi · GitHub For developers, please see Blocking operations with asyncio | Home Assistant Developer Docs Traceback (most recent call last): File “”, line 203, in _run_module_as_main File “”, line 88, in _run_code File “/usr/src/homeassistant/homeassistant/main.py”, line 227, in sys.exit(main()) File “/usr/src/homeassistant/homeassistant/main.py”, line 213, in main exit_code = runner.run(runtime_conf) File “/usr/src/homeassistant/homeassistant/runner.py”, line 289, in run return loop.run_until_complete(setup_and_run_hass(runtime_config)) File “/usr/local/lib/python3.14/asyncio/base_events.py”, line 706, in run_until_complete self.run_forever() File “/usr/local/lib/python3.14/asyncio/base_events.py”, line 677, in run_forever self._run_once() File “/usr/local/lib/python3.14/asyncio/base_events.py”, line 2056, in _run_once handle._run() File “/usr/local/lib/python3.14/asyncio/events.py”, line 94, in _run self._context.run(self._callback, *self._args) File “/usr/local/lib/python3.14/site-packages/aiohttp/web_protocol.py”, line 575, in _handle_request resp = await request_handler(request) File “/usr/local/lib/python3.14/site-packages/aiohttp/web_app.py”, line 559, in _handle return await handler(request) File “/usr/local/lib/python3.14/site-packages/aiohttp/web_middlewares.py”, line 117, in impl return await handler(request) File “/usr/src/homeassistant/homeassistant/components/http/security_filter.py”, line 90, in security_filter_middleware return await handler(request) File “/usr/src/homeassistant/homeassistant/components/http/forwarded.py”, line 215, in forwarded_middleware return await handler(request) File “/usr/src/homeassistant/homeassistant/components/http/request_context.py”, line 24, in request_context_middleware return await handler(request) File “/usr/src/homeassistant/homeassistant/components/http/ban.py”, line 88, in ban_middleware return await handler(request) File “/usr/src/homeassistant/homeassistant/components/http/auth.py”, line 261, in auth_middleware return await handler(request) File “/usr/src/homeassistant/homeassistant/components/http/headers.py”, line 39, in headers_middleware response = await handler(request) File “/usr/src/homeassistant/homeassistant/helpers/http.py”, line 88, in handle result = await handler(request, **request.match_info) File “/usr/src/homeassistant/homeassistant/components/http/decorators.py”, line 81, in with_admin return await func(self, request, *args, **kwargs) File “/usr/src/homeassistant/homeassistant/components/config/config_entries.py”, line 237, in post return await super().post(request, flow_id) File “/usr/src/homeassistant/homeassistant/components/http/data_validator.py”, line 72, in wrapper return await method(view, request, data, *args, **kwargs) File “/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py”, line 118, in post result = await self._flow_mgr.async_configure(flow_id, data) File “/usr/src/homeassistant/homeassistant/data_entry_flow.py”, line 334, in async_configure result = await self._async_configure(flow_id, user_input) File “/usr/src/homeassistant/homeassistant/config_entries.py”, line 1592, in _async_configure return await super()._async_configure(flow_id, user_input) File “/usr/src/homeassistant/homeassistant/data_entry_flow.py”, line 382, in _async_configure result = await self._async_handle_step( File “/usr/src/homeassistant/homeassistant/data_entry_flow.py”, line 545, in _async_handle_step result = await self.async_finish_flow(flow, result.copy()) File “/usr/src/homeassistant/homeassistant/config_entries.py”, line 1827, in async_finish_flow await self.config_entries.async_add(entry) File “/usr/src/homeassistant/homeassistant/config_entries.py”, line 2237, in async_add await self.async_setup(entry.entry_id) File “/usr/src/homeassistant/homeassistant/config_entries.py”, line 2412, in async_setup result = await async_setup_component( File “/usr/src/homeassistant/homeassistant/setup.py”, line 168, in async_setup_component result = await _async_setup_component(hass, domain, config) File “/usr/src/homeassistant/homeassistant/setup.py”, line 425, in _async_setup_component result = await task File “/config/custom_components/orei_hdmi/init.py”, line 61, in async_setup manifest = json.loads((Path(file).parent / “manifest.json”).read_text())
  • Detected blocking call to open with args (PosixPath(‘/config/custom_components/orei_hdmi/manifest.json’),) inside the event loop by custom integration ‘orei_hdmi’ at custom_components/orei_hdmi/init.py, line 61: manifest = json.loads((Path(file).parent / “manifest.json”).read_text()) (offender: /usr/local/lib/python3.14/pathlib/init.py, line 787: with self.open(mode=‘r’, encoding=encoding, errors=errors, newline=newline) as f:), please create a bug report at Issues · marsh4200/orei_hdmi · GitHub For developers, please see Blocking operations with asyncio | Home Assistant Developer Docs Traceback (most recent call last): File “”, line 203, in _run_module_as_main File “”, line 88, in _run_code File “/usr/src/homeassistant/homeassistant/main.py”, line 227, in sys.exit(main()) File “/usr/src/homeassistant/homeassistant/main.py”, line 213, in main exit_code = runner.run(runtime_conf) File “/usr/src/homeassistant/homeassistant/runner.py”, line 289, in run return loop.run_until_complete(setup_and_run_hass(runtime_config)) File “/usr/local/lib/python3.14/asyncio/base_events.py”, line 706, in run_until_complete self.run_forever() File “/usr/local/lib/python3.14/asyncio/base_events.py”, line 677, in run_forever self._run_once() File “/usr/local/lib/python3.14/asyncio/base_events.py”, line 2056, in _run_once handle._run() File “/usr/local/lib/python3.14/asyncio/events.py”, line 94, in _run self._context.run(self._callback, *self._args) File “/usr/local/lib/python3.14/site-packages/aiohttp/web_protocol.py”, line 575, in _handle_request resp = await request_handler(request) File “/usr/local/lib/python3.14/site-packages/aiohttp/web_app.py”, line 559, in _handle return await handler(request) File “/usr/local/lib/python3.14/site-packages/aiohttp/web_middlewares.py”, line 117, in impl return await handler(request) File “/usr/src/homeassistant/homeassistant/components/http/security_filter.py”, line 90, in security_filter_middleware return await handler(request) File “/usr/src/homeassistant/homeassistant/components/http/forwarded.py”, line 215, in forwarded_middleware return await handler(request) File “/usr/src/homeassistant/homeassistant/components/http/request_context.py”, line 24, in request_context_middleware return await handler(request) File “/usr/src/homeassistant/homeassistant/components/http/ban.py”, line 88, in ban_middleware return await handler(request) File “/usr/src/homeassistant/homeassistant/components/http/auth.py”, line 261, in auth_middleware return await handler(request) File “/usr/src/homeassistant/homeassistant/components/http/headers.py”, line 39, in headers_middleware response = await handler(request) File “/usr/src/homeassistant/homeassistant/helpers/http.py”, line 88, in handle result = await handler(request, **request.match_info) File “/usr/src/homeassistant/homeassistant/components/http/decorators.py”, line 81, in with_admin return await func(self, request, *args, **kwargs) File “/usr/src/homeassistant/homeassistant/components/config/config_entries.py”, line 237, in post return await super().post(request, flow_id) File “/usr/src/homeassistant/homeassistant/components/http/data_validator.py”, line 72, in wrapper return await method(view, request, data, *args, **kwargs) File “/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py”, line 118, in post result = await self._flow_mgr.async_configure(flow_id, data) File “/usr/src/homeassistant/homeassistant/data_entry_flow.py”, line 334, in async_configure result = await self._async_configure(flow_id, user_input) File “/usr/src/homeassistant/homeassistant/config_entries.py”, line 1592, in _async_configure return await super()._async_configure(flow_id, user_input) File “/usr/src/homeassistant/homeassistant/data_entry_flow.py”, line 382, in _async_configure result = await self._async_handle_step( File “/usr/src/homeassistant/homeassistant/data_entry_flow.py”, line 545, in _async_handle_step result = await self.async_finish_flow(flow, result.copy()) File “/usr/src/homeassistant/homeassistant/config_entries.py”, line 1827, in async_finish_flow await self.config_entries.async_add(entry) File “/usr/src/homeassistant/homeassistant/config_entries.py”, line 2237, in async_add await self.async_setup(entry.entry_id) File “/usr/src/homeassistant/homeassistant/config_entries.py”, line 2412, in async_setup result = await async_setup_component( File “/usr/src/homeassistant/homeassistant/setup.py”, line 168, in async_setup_component result = await _async_setup_component(hass, domain, config) File “/usr/src/homeassistant/homeassistant/setup.py”, line 425, in _async_setup_component result = await task File “/config/custom_components/orei_hdmi/init.py”, line 61, in async_setup manifest = json.loads((Path(file).parent / “manifest.json”).read_text())

Here is what I get when trying to setup the custom card for the UI.