Hello,
Intro - Context:
KrakenS DR arrived some weeks ago (yay) and I’m still setting up the DOA use-case in my free time.
Compiled DOA from source on a Raspberry Pi 4B that runs at 1.8Ghz, all cables and power supplies are OK, and all Firmware threads/processes are alive and apparently healthy. The only problem is GUI-related and will be described below. The purpose of this post is to kindly ask if someone has faced this in the past and remembers the solution, before investigating myself and proceeding to share the fix.
Description of the Problem
Visiting http://<RASPBERRY_IP>:8080/config presents a webpage with a properly rendered header but no body (See image below).
Technically, inspection shows a frequent update of the update_rx placeholder (i.e. the DIV Element with id=“placeholder_update_rx”), but no information received on the frontend for the DIV Element with ID “daq_cfg_files”, which I guess it’s the one that receives the information used to build the frontend body content / the graphics for the configuration.
Two Errors Spotted
Error 1: JavaScript
The browser’s console does report the following error, only once after the site is refreshed:
ReferenceError: A nonexistent object was used in an
Input
of a Dash callback. The id of this object isdaq_cfg_files
and the property isvalue
. The string ids in the current layout are: [url, header_config, header_spectrum, header_doa, settings-refresh-timer, placeholder_start, placeholder_stop, placeholder_save, placeholder_update_rx, placeholder_recofnig_daq, placeholder_update_daq_ini_params, placeholder_update_freq, placeholder_update_dsp, placeholder_config_page_upd, placeholder_spectrum_page_upd, placeholder_doa_page_upd, dummy_output, page-content, _none]
at di (dash_renderer.v1_9_1m1617985068.min.js:20:88389)
at pi (dash_renderer.v1_9_1m1617985068.min.js:20:88285)
at dash_renderer.v1_9_1m1617985068.min.js:20:86411
at Array.map ()
at dash_renderer.v1_9_1m1617985068.min.js:20:86243
at u (dash_bootstrap_components.v1_1_0m1708693958.min.js:2:7133)
at Generator._invoke (dash_bootstrap_components.v1_1_0m1708693958.min.js:2:6921)
at Generator.next (dash_bootstrap_components.v1_1_0m1708693958.min.js:2:7562)
at zo (dash_renderer.v1_9_1m1617985068.min.js:20:80940)
at a (dash_renderer.v1_9_1m1617985068.min.js:20:81144)
Error 2: Python Logs
There also are errors reported on /home/krakensdr_doa/krakensdr_doa/_share/logs/krakensdr_doa/ui.log, albeit they are not replicated each time we hit “refresh” – if there is some connection it is not inmediate.
TypeError: ‘NoneType’ object is not iterable
INFO:quart.serving:192.168.0.222:34878 GET /_dash-component-suites/dash_core_components/dash_core_components-shared.js.map 1.1 500 - 26836
[2024-02-24 15:34:50,485] 192.168.0.222:34878 GET /_dash-component-suites/dash_core_components/dash_core_components-shared.js.map 1.1 500 - 26836
INFO:quart.serving:192.168.0.222:34878 GET /_dash-component-suites/dash_core_components/dash_core_components-shared.js.map 1.1 - - 29282
[2024-02-24 15:34:50,488] 192.168.0.222:34878 GET /_dash-component-suites/dash_core_components/dash_core_components-shared.js.map 1.1 - - 29282
ERROR:quart.serving:Error in ASGI Framework
Traceback (most recent call last):
File “/home/miniforge3/envs/kraken/lib/python3.9/site-packages/hypercorn/asyncio/task_group.py”, line 27, in _handle
await app(scope, receive, send, sync_spawn, call_soon)
File “/home/miniforge3/envs/kraken/lib/python3.9/site-packages/hypercorn/app_wrappers.py”, line 34, in call
await self.app(scope, receive, send)
File “/home/miniforge3/envs/kraken/lib/python3.9/site-packages/quart/app.py”, line 1741, in call
await self.asgi_app(scope, receive, send)
File “/home/miniforge3/envs/kraken/lib/python3.9/site-packages/quart/app.py”, line 1767, in asgi_app
await asgi_handler(receive, send)
File “/home/miniforge3/envs/kraken/lib/python3.9/site-packages/quart/asgi.py”, line 51, in call
_raise_exceptions(done)
File “/home/miniforge3/envs/kraken/lib/python3.9/site-packages/quart/asgi.py”, line 353, in _raise_exceptions
raise task.exception()
File “/home/miniforge3/envs/kraken/lib/python3.9/site-packages/quart/asgi.py”, line 102, in handle_request
await asyncio.wait_for(self._send_response(send, response), timeout=timeout)
File “/home/miniforge3/envs/kraken/lib/python3.9/asyncio/tasks.py”, line 481, in wait_for
return fut.result()
File “/home/miniforge3/envs/kraken/lib/python3.9/site-packages/quart/asgi.py”, line 131, in _send_response
async for data in response_body:
File “/home/miniforge3/envs/kraken/lib/python3.9/site-packages/quart/wrappers/response.py”, line 103, in _aiter
for data in iterable: # type: ignore
TypeError: ‘NoneType’ object is not iterable
[2024-02-24 15:34:50,491] Error in ASGI Framework
Traceback (most recent call last):
File “/home/miniforge3/envs/kraken/lib/python3.9/site-packages/hypercorn/asyncio/task_group.py”, line 27, in _handle
await app(scope, receive, send, sync_spawn, call_soon)
File “/home/miniforge3/envs/kraken/lib/python3.9/site-packages/hypercorn/app_wrappers.py”, line 34, in call
await self.app(scope, receive, send)
File “/home/miniforge3/envs/kraken/lib/python3.9/site-packages/quart/app.py”, line 1741, in call
await self.asgi_app(scope, receive, send)
File “/home/miniforge3/envs/kraken/lib/python3.9/site-packages/quart/app.py”, line 1767, in asgi_app
await asgi_handler(receive, send)
File “/home/miniforge3/envs/kraken/lib/python3.9/site-packages/quart/asgi.py”, line 51, in call
_raise_exceptions(done)
File “/home/miniforge3/envs/kraken/lib/python3.9/site-packages/quart/asgi.py”, line 353, in _raise_exceptions
raise task.exception()
File “/home/miniforge3/envs/kraken/lib/python3.9/site-packages/quart/asgi.py”, line 102, in handle_request
await asyncio.wait_for(self._send_response(send, response), timeout=timeout)
File “/home/miniforge3/envs/kraken/lib/python3.9/asyncio/tasks.py”, line 481, in wait_for
return fut.result()
File “/home/miniforge3/envs/kraken/lib/python3.9/site-packages/quart/asgi.py”, line 131, in _send_response
async for data in response_body:
File “/home/miniforge3/envs/kraken/lib/python3.9/site-packages/quart/wrappers/response.py”, line 103, in _aiter
for data in iterable: # type: ignore
TypeError: ‘NoneType’ object is not iterable
INFO:quart.serving:192.168.0.222:34606 GET /_dash-component-suites/dash_html_components/dash_html_components.min.js.map 1.1 500 - 30379
[2024-02-24 15:34:50,499] 192.168.0.222:34606 GET /_dash-component-suites/dash_html_components/dash_html_components.min.js.map 1.1 500 - 30379
INFO:quart.serving:192.168.0.222:34606 GET /_dash-component-suites/dash_html_components/dash_html_components.min.js.map 1.1 - - 32942
[2024-02-24 15:34:50,502] 192.168.0.222:34606 GET /_dash-component-suites/dash_html_components/dash_html_components.min.js.map 1.1 - - 32942
INFO:quart.serving:192.168.0.222:34616 GET /_push 1.1 101 - 18250
[2024-02-24 15:34:50,541] 192.168.0.222:34616 GET /_push 1.1 101 - 18250
INFO:quart.serving:192.168.0.222:55760 GET /config 1.1 200 662 7786
[2024-02-24 15:36:11,333] 192.168.0.222:55760 GET /config 1.1 200 662 7786
INFO:quart.serving:192.168.0.222:55760 GET /config 1.1 - - 8860
[2024-02-24 15:36:11,334] 192.168.0.222:55760 GET /config 1.1 - - 8860
Closing remarks
Equivalent no-body issues could be described for the /doa and /spectrum endpoints if required, but I have chosen to first focus on what I guess is the “simplest” endpoint, and see later how to proceed.