Skip to content

Releases: ubopod/ubo_app

v1.7.0

20 Feb 09:24

Choose a tag to compare

PyPI package: https://pypi.org/project/ubo-app/1.7.0

Changes:

  • feat(audio): add audio sample recorder and player, it can be used to quickly test audio input/output devices
  • fix(system): make sure dnsmasq is stopped and disabled when not needed
  • refactor(web-ui): request a redraw when connected (previously we were rendering a notification to force a redraw)
  • feat(core): add raw image viewer
  • fix(core): autorun objects when called directly, wait for the result of the function to be ready in the runner thread before returning it
  • feat(file-system): open image files using the image viewer
  • refactor(assistant): move constants of assistant service to a separate file
  • chore: open app in macos with as an always-on-top window to have terminal behind it by default when stage manager is on and streamline development
  • chore: fix minor issues in deploy script
  • feat(assistant): enable video_out in our pipecat transport and implement image generation
  • refactor(assistant): move rgb reactions to the is_listening changes to the reducer, previously implemented via autorun
  • fix(audio): fix audio playback cut off when using pyaudio on non-rpi platforms
  • feat(assistant): store state, actions and events as well use ui for selecting assistant engines
  • refactor(assistant): implement UboImageGeneratorService which is a switch service to switch between available image generator services
  • fix(assistant): improve pipecat service switch mechanism
  • refactor(assistant): move selected service sync autorun functions from main.py to UboSwitch
  • fix(core): improve force redraw mechanism to guarantee an immediate redraw
  • feat(assistant): the assistant can now see the screen content of the pod's display on user demand
  • chore(deploy): add deploy script to the ubo-assistant service
  • fix(rpc): fix get_class not being able to find class names having acronyms in them like, QRCodeInputDescription
  • refactor(rpc): introduce AvailableInputDescription so that rpc clients can send actions with different types of InputDescription, previosuly they could only impossibly send abstract InputDescription itself
  • feat(camera): make camera service constantly report its input to the redux bus when viewfinder is open
  • feat(assistant): implement tool call for providing camera-feed/display-content-feed to the llm
  • refactor(assistant): improve the mechanism of applying is_listening changes to the input transport of the assistant client
  • feat(keypad): add hold and unhold actions and use them to run assistant anywhere by holding the home key in
  • chore: update to pipecat 0.0.84, fixing an issue in image generation flow
  • fix(tests): disable external processes in test_menu as grpc does not load in it
  • feat(assistant): add support for eleventh lab TTS
  • fix(assistant): custom audio resampling to handle multiple input rates
  • fix(assistant): move audio event subscriptions to start() to ensure task_manager is initialized
  • feat(assistant): add secrets file monitoring to update providers on API key changes
  • feat(assistant): add support for Deepgram STT engine
  • feat(assistant): add Cerebras LLM integration
  • chore(assistant): update wake word handling and visual indicators
  • feat(assistant): add AssemblyAI STT engine
  • feat(assistant): add Rime TTS engine support
  • fix(keypad): fix KeyError issue of microphone mute button
  • chore(assistant): seperate tool message from system prompt
  • feat(camera): add camera backend with OpenCV and PiCamera2 for MacOS
  • feat(camera): add UI for selecting camera index
  • feat(assistant): add MCP server management with GUI
  • chore(infrared): update codes for small remote
  • chore(assistant): code clean up
  • refactor(assistant): address lint and typecheck issues
  • fix(assistant): bug related to mcp enable status sync
  • fix(test): increase MAX_EXPECTED_EVENT_HANDLERS to 70
  • fix(test): pyaudio and cv2 mocking issues
  • chore(test): update test on device script
  • feat(assistant): dynamically update MCP tools used by LLms
  • feat(assistant): add support for on-premise Ollama with URL
  • refactor(assistant): reduce initialization complexity to address lint issues
  • feat(docker): add compose presets and registery path bug fixes
  • feat(assistant): update UI after ollama, vosk, piper models are download
  • fix(docker): path issues and duplicate monitoring events
  • fix(assistant): add type hint for _services in UboSwitchService
  • fix(lint): disable complexity check for fetch_image function
  • fix(docker): check if composition directory exists for preset installs
  • feat(assistant): show mic mute notification when triggered
  • feat(assistant): add toggle listening action
  • feat(infrared): add SKIP remote assistant toggle key
  • fix(docker): improve docker status updates and sync
  • fix(envoy): use configurable host for gRPC server in Envoy template
  • fix(build): let latest ubo raw bindings package be used.
  • feat(boostrap): add PCIe configuration to device setup
  • fix(tests): update Docker service initialization flow
  • refactor(assistant): migrate to universal LLM context and improve logging
  • fix(assistant): improve service switching and tools management
  • chore(assistant): update image request handling for pipecat 0.0.92
  • fix(wifi): Address WiFi availability at first add action - closes #324
  • chore(logging): add debug logging for hardware detection
  • feat(docker): show progress for Docker image & composition pulls
  • feat(assistant): optimize audio streaming with conditional subscription and zero-frame keepalive
  • chore(audio): do not emit audio event when mic is muted
  • fix(hotspot): ensure dhcpcd service is properly managed during boot and hotspot configuration
  • chore(uv): update uv lock file
  • fix(assistant): add back missing icon in speech recognition title
  • fix(tests): increase initial wait in test_all_services_register
  • docs(readme): update Kickstarter URL and add setup instructions for protobuf and web app
  • feat(install): add audio system dependencies for PipeWire and PortAudio
  • refactor(docker): replace get_full_image_path helper with full_path property
  • refactor(docker): unify container and compose operations
  • fix(tests): increase initial wait in test_all_services_register from 3 to 6 seconds
  • refactor(docker): pass ContainerEntry object instead of ID to prepare_app and update_composition_metadata
  • fix(update_manager): handle missing installation path in get_installed_versions
  • fix(docker): enhance progress tracking with service-segmented calculation
  • chore(assistant): use generic data param name when multiple items are provided by the selector
  • fix(grpc): unsubscribe from event handler when grpc stream is closed to prevent memory leak
  • fix(assistant): fix issue related to UI not being updated after vosk, piper, ollama models download
  • chore(tests): improve pyaudio mocking
  • chore(bootstrap): add comment lines for PCIe overlays
  • chore(docker): refine Docker container image name matching logic.
  • chore(assistant): remove anthropic from packages as it is not yet used
  • fix(tests): increase stability retry attempts and wait in test_services
  • fix(scripts): address dependency issue with test on device
  • fix(docker): unified compositions added by webUI import or compose hardcoded presets
  • chore(notification): change dismiss icon and background color
  • fix(docker): remove composition directory with elevated privilege special send_command on Pi and double confirm with user.
  • fix(ip): restart ping process if it dies
  • fix(tests): increase stability wait parameters in test_root_menu_bad_state
  • fix(tests): add Docker service readiness checks in test_all_services_register
  • feat(display): add screen blanking with backlight control and inactivity timeout
  • fix(display): change render skip condition from is_paused to is_blanked and remove unnecessary array copy
  • fix(display): replace display-level blanking with Kivy overlay widget
  • fix(display): disable screen blanking monitor during tests to prevent interference with screenshots
  • fix(tests): set UBO_TEST_ENV environment variable for device tests and improve test result handling
  • fix(display): replace time.time() with timezone-aware datetime for activity tracking and update test expectations
  • refactor(display): move blank timeout constant from state to constants module
  • feat(display): add configurable screen blank timeout with settings menu
  • fix(tests): update test snapshots for display settings menu and state changes
  • fix(display): wake screen and update activity on assistant voice actions
  • fix(display): remove incorrect and redundant keypad wake handler in favor of existing reducer logic
  • chore(typecheck): use specific Kivy graphics imports and add keypad state to type hints
  • fix(ci): add GitHub API token to Packer build environment to prevent rate limiting
  • fix(tests): add unique IDs to update manager notifications
  • chore(snapshots): update docker combine_reducers_id in integration test result files
  • chore(redux): pin redux version to 0.24.0
  • fix(core): interleave action and event processing
  • fix(system-manager): add users to sudo group which are created via GUI
  • fix(speech-recognition): update UI after VOSK model is downloaded
  • refactor(display): avoid inactivity checks when display is already blank
  • feat(core): Add scheduler freeze detection and monitoring, enabled by DEBUG_SCHEDULER
  • chore(ignore): add Claude-related files and directories to .gitignore
  • fix(docker): prevent crash when selecting port items in app menu
  • fix(ci): increase lite image size to 6.5GB
  • feat(camera): add Arducam IMX519 driver install/uninstall and camera type persistence
  • chore(snapshots): update store snapshots for camera driver install menu items and icons changes
  • chore(uv): upgrade python-redux and piper-tts packages to the latest version
  • chore(assistant): upgrade piper-tts for ubo-assistant
  • fix(lint): addressing some lint issues
  • fix(redux): use no binary package to include redux_pytest
  • feat(eeprom): add FORCE_HARDWARE constant wi...
Read more

v1.6.0

28 Aug 14:20
v1.6.0
052110e

Choose a tag to compare

PyPI package: https://pypi.org/project/ubo-app/1.6.0

Changes:

  • refactor(docker): improve pihole config so that it works out of the box
  • refactor(core:rpc): rename generated to ubo_bindings, we want to reuse that directory to create a separate python package for the rpc bindings, so that other services can use it without depending on the whole ubo_app package
  • chore(web-ui): add lint command in package.json scripts
  • build(bindings): add raw-bindings package
  • fix(docker): use 127.0.0.1 instead of GRPC_SERVER_HOST as the docker container sometimes could not connect to the host ip
  • feat(services): add a mechanism to run external processes as part of ubo services, these processes are supposed to communicate to the ubo-app via gRPC, they have their own installation script (ubo-setup.sh file in the service directory) and run in a separate virtualenv
  • refactor(rpc): several improvements in rpc and store types, most importantly, avoid marking all fields as optional in proto files and remove items from UboPageWidget's constructor
  • refactor(audio): encapsulate audio sample data in the new AudioSample data structure, better support playing streaming sequence of audio sample by guaranteeing sequential playback and reporting when playback is done
  • feat(assistant): add pipecat in a separate process
  • feat(rpc): add secrets rpc service for querying secrets
  • feat(core): add a mechanism for services to provide environment variables for their binaries
  • refactor(assistant): use the new secret querying service to query google and openai credentials/api-key
  • chore: run lint and typecheck for all sub-projects, fix lint issues in rpc and assistant sub-projects
  • chore(assistant): move switch services for stt, llm and tts from main.py to their respective service files for the sake of better organization
  • fix(audio): bug causing samples to have wrong number of channels in non-rpi environments
  • refactor(assistant): add UboOutputTransport, a pipecat transport responsible for passing audio output chunks to ubo app to be played, compared to the old method of passing audio chunks in UboTTSService it has the benefit of aggregating messages and making sure they are played in the right order
  • feat(rpc): add subscribe_store rpc to the grpc api for subscribing to store changes and autorun to ubo_bindings client as a convenience method for subscribing to store changes for clients like the autorun in the store of the main app
  • feat(assistant): add openai setup logic
  • feat(assistant): add segmented google stt pipecat service, to avoid paying for silence, normal google stt is still an option user can switch to in UboSTTService
  • chore: migrate reducers to match/case syntax
  • feat(assistant): introduce AssistantStartListeningAction and AssistantStopListeningAction for explicit control over pipecat listening state, assign keyboard's "v" key press/release to these actions
  • docs: improve README.md with more details about installing web app dependencies
  • feat: return unsubscribe function from streaming grpcs autorun and subscribe_event methods and use it in ubo_input_transport to unsubscribe from the audio events stream when it should not be listening instead of getting them and ignoring them
  • refactor(audio): use an open alsaaudio.PCM for streaming audio in play_sequence
  • fix(wifi): extend regex pattern to fix compatibility with some codes
  • fix(infrared): set ir receiver device index correctly
  • feat(rgb-led): add support for rgb-led ring on Pi 5
  • fix(web-ui): bug related to fileMap in docker compose form
  • fix(docs): correct wrong doc strings
  • feat(infrared): trigger voice assistant with ir remote
  • feat(assistant): show rainbow pattern on led ring when listening
  • feat(keypad): make assistat listen when back key is pressed down on home
  • feat(deploy): install service wheels after scp into device
  • chore(assistant): updating piper and pipecat versions
  • chore(docs): update README.md

Note than GitHub doesn't allow assets bigger than 2GB in a release. Due to this, the files bigger than 2GB have been split into 2GB chunks. You can join them using the following command:

cat [[filename]]_* > [[filename]]

v1.5.0

10 Jul 18:32
v1.5.0
a70b6ab

Choose a tag to compare

PyPI package: https://pypi.org/project/ubo-app/1.5.0

Changes:

  • refactor(core): use the latest version of python-redux and override the _create_task method of our custom Autorun class to make sure async autorun tasks run in service threads of their respective services
  • feat(speech-recognition): add assistant logic, report voice and text recorded since ASSISTANT_WAKE_WORD was detected until the ASSISTANT_END_WORD is detected, and add a menu item to enable/disable the assistant - closes #304
  • feat(assistant): add assistnat service
  • feat(speech-recognition): add intents for creating wifi connections and activating/deactivating the assistant
  • fix(tests):stability not passing attempts to wait_for, making it basically wait forever
  • refactor(core): do not default the log level of services to the get_log_level, use INFO as the default log level for services
  • fix(core): logger not logging repeated primitive type instances in extra
  • refactor(core): add optional name field to create_task, coroutine_runner and friends
  • fix(core): fix some issues in rpc serialization of enums and lists in ubo-store objects
  • refactor(web-ui): use rpc serialization instead of json for transferring data from web-ui server to its client, and add regular-expression to file inputs
  • feat(core): add AsyncEvictingQueue, a queue that evicts the oldest item when it reaches its maximum size, it is to be used in sound processing for buffering
  • refactor(audio): add sample_speech_recognition to AudioReportSampleEvent (renamed from AudioReportAudioEvent) to report audio samples in a format appropriate to be consumed by speech recognition engines
  • refactor(speech-recognition): abstract the speech recognition engine interface with vosk as the first implementation of it - close #310
  • refactor(speech-recognition): understand the assistant end phrase even when it is stated right after and in continuation of the speech
  • refactor(core): add ToThreadOptions for the purpose of passing callback, name and corountine_runner to ubo_app.async_.to_thread, remove ubo_app.async_.to_thread_with_coroutine_runner as it is no longer needed
  • refactor: reorganize secret keys and the name of constants holding them to be more consistent
  • feat(speech-recognition): add google cloud as a speech recognition engine, add a menu item to select the speech recognition engine, and add a menu item to set the google cloud credentials - closes #311
  • refactor(ci): drop dependencies jobs and put uv sync wherever needed, since uv is so fast compared to our old dependency manager poetry, it is not worth the effort to have a separate job for it
  • fix(system-manager): better handle None output of handlers in response to send_command
  • refactor: replace default_factory with default whenever possible so that default_provider can be used
  • refactor(core): improve importing modules in service threads, making it almost identical to python environment, at the cost of patching importlib._bootstrap._find_and_load_unlocked
  • refactor(speech-recognition): move the BackgroundRunningMixin and NeedsSetupMixin abstractions to the core as other modules can use them too
  • refactor(core): add mapper to read_from_persistent_store to map the read string into the object, add support for enums in UboStore.load_object
  • fix(core): switch to packaging.version for parsing Python package versions to ensure PEP 440 compliance instead of using semver
  • refactor(assistant): add abstractions for assistant module extending engine abstractions in the core and reimplement the service based on these abstract base classes
  • feat(assistant): implement google engine for assistant service using google cloud vertexai - closes #312
  • feat(notifications): support unlimited notification actions with a "more" button for overflow
  • refactor(core:input): generalize ubo_input's api to allow more input methods
  • feat(file-system): add InputMethod.PathSelector as a new input method, showing a file navigation menu to select a file or directory - closes #301
  • feat(file-system): add file system operations copy, move, and remove - closes #300
  • fix(wifi): hotspot initialization issue on bare Raspberry Pi, not able to interact with the pod to select the input method
  • fix(web-ui): show a notification when web ui is connected, this is a workaround to emulate a redraw in the display render stream events in the bus

Note than GitHub doesn't allow assets bigger than 2GB in a release. Due to this, the files bigger than 2GB have been split into 2GB chunks. You can join them using the following command:

cat [[filename]]_* > [[filename]]

v1.4.0

06 Jun 01:45
v1.4.0
b6f980f

Choose a tag to compare

PyPI package: https://pypi.org/project/ubo-app/1.4.0

Changes:

  • test: improve test logs in the ci
  • refactor(docker): since service setup functions are now run after reducers are initialized, we don't need to pass the signal for loading docker applications through the docker reducer
  • refactor(voice): make the menu Item parameters like icon and background color, used to show it's selectable and selected/unselected reusable by putting them in ubo_app/utils/gui.py
  • feat(services): add log level selection sub menu to each service menu and sync it with persistent storage - closes #164
  • test(services): set limits for the number of registered listeners and event handlers after all services are loaded in test_all_services_register
  • refactor(core): wait for all service threads to join before running cleanup functions for dbus connections and the logger
  • feat(services): apply log levels set in service settings for each service using logging.Filter
  • feat(ci): make the build job fail if grpc bindings are not up to date with code
  • refactor(core): move pod-id generation logic to set_pod_id and "unseed" the seeded random after generating pod id
  • refactor(services): make sure services do not do anything, including importing their setup.py which can potentially run code in its module scope, by moving register_reducer(reducer) write after reducer import, before init_service is imported
  • chore(scripts): add --index for device: poe scripts, allowing deployment and tests on multiple devices without the need to constantly change ubo-development-pod
  • chore: housekeeping, update dependencies, remove unused code, etc
  • feat(infrared): add infrared service with settings menu to enable/disable propagating keypad actions as ir commands and receiving ir commands and translating them to keypad actions - closes #160
  • refactor(speech-synthesis): rename voice service to speech_synthesis to make room for a separate speech_recognition service
  • refactor(core): make log_process report errors for the service using report_service_error and some general housekeeping
  • refactor(vscode): use data dir as reported by platformdirs.user_data_path to store downloaded assets like vscode binary
  • feat(speech-recognition): add speech-recognition service with settings menu to download the vosk model and activate/deactivate the listener - closes #284
  • refactor(rgb-ring): add RgbRingSequenceAction, add as_command to all RgbRingCommandActions
  • feat(speech-recognition): implement wake word detection, the wake word can be set with UBO_WAKE_WORD environment variable, the default is hey pod - closes #284
  • chore(rpc): remove protobuf files and generated code from the repository, they are now generated in ci/cd pipeline and added to the package and iso files.
  • refactor(speech-recognition): support multiple actions in an intent
  • fix(core): update headless_kivy to the latest version, it should fix the glitches on the display and the web-ui - closes #275
  • refactor(infrared): replace adafruit-ir-remote with ir-keytable to lower CPU usage and improve code compatibility
  • fix(web-ui): add the missing read command for the file input values in html forms
  • docs: update README.md to add instructions for generating protobufs, web static assets, and running typecheck
  • refactor(core): use the new StoreOptions.autorun_class of python-redux to make sure they run in the service thread they were defined in - closes #286
  • fix(audio): use tenacity for retry logic and add a one second delay between retries when playback fails
  • fix(installation): gracefully handle missing file in sed command with || true - closes #281
  • refactor(audio): make setter functions in audio manager try finding card index again and rebind in case of failure
  • refactor(core): organize debug environment variables and add UBO_DEBUG_PDB_SIGNAL to settings menu of the gui and make debug flags set in the settings menu persistent
  • refactor(speech-synthesis): remove piper model from repository and provide download menu item for it - closes #165
  • fix(system): add an asyncio.sleep to the read loop to avoid high cpu usage
  • refactor(system): allow send_command to stay alive and stream responses over time to the client, useful for infrared service for example
  • fix(core): postpone touching app_ready signal file until all services' setup functions are done
  • fix(audio): the volume bar sometimes not being in sync with playback volume
  • feat(core): let the user upgrade/downgrade to any of the last three release versions, add a menu item in settings to enable beta upgrade/downgrade to beta versions - closes #260, closes 178
  • feat(core): let the user activate a version among their installed versions in a sub-menu of the about menu
  • refactor(core): refetch pypi index whenever user opens the about menu - with debouncing
  • fix(core): use latest ubo-gui which adds bad-state-recovery for when menu-screen doesn't update - closes #235
  • chore(ci): rename ubo-pod runner label to ubo-pod-pi4 for clarity
  • refactor(core): replace uuid4 with service path as the unique identifier of ubo services
  • refactor(core): introduce utils.dataclass.default_provider and use it wherever we had that duplicated code for setting the default value of a dataclass field based on other fields
  • refactor: replace all ApplicationItems with the new UboApplicationItem, not storing the mutable PageWidget classes in the store, an step towards implementing #261
  • feat(file-system): add file-system service with readonly features like navigation through file-system, checking size/permission/owner/group of files and directories, and reading files - closes #299
  • refactor: improve type stubs for kivy app by only providing stubs for pyx files and making Widget use correct EventListener base and fix type errors coming to surface
  • refactor(core): make get_eeprom_data return a default value instead of None if there is an issue in procuring the data
  • refactor(docker): remove sync wrapper functions around async actions and make the action directly async as it is run by subscribe_event and it supports async functions, general housekeeping for docker service
  • fix: separate has_output and has_output_stream to fix the old send_command callers being broken with the new send_command implementation
  • feat: add a menu item in settings for installing/reinstalling the wm8960 driver
  • refactor: use application_registry in OpenApplication and CloseApplication actions and events to move towards avoiding mutable objects in the store bus as part of #261
  • chore(installation): add some checks to the install.sh script to make sure it is run on a supported platform and with the right python version, also run parts of it conditionally based on the platform

Note than GitHub doesn't allow assets bigger than 2GB in a release. Due to this, the files bigger than 2GB have been split into 2GB chunks. You can join them using the following command:

cat [[filename]]_* > [[filename]]

v1.3.0

04 Apr 03:12
v1.3.0
5bd77e1

Choose a tag to compare

PyPI package: https://pypi.org/project/ubo-app/1.3.0

Changes:

  • fix: remove dependencies of publish job of publish_to_pypi workflow
  • fix: vscode binary now needs to be instructed about the location of the binary with version use sub-command - closes #217
  • fix: image size being too big for the lite version of the raspberry os
  • fix: restart avahi-daemon after the hostname is set in ubo-system
  • feat: add support for sets and dicts for rpc api
  • feat: {{hostname}}, as a template variable, will be replaced with the hostname of the device whenever used in title and content properties of a Notification instance or in the text, picovoice_text or piper_text properties of a ReadableInformation instance.
  • refactor: minor improvements like add volume to AudioPlayAudioEvent, metric's density of kivy to DisplayRenderEvent and DisplayCompressedRenderEvent, some housekeeping in syntax, logs and ci/cd scripts
  • refactor: to make it easier for other modules to interact with docker containers and compositions, there is now a store action for each interaction and now they run as side effects of those store actions dispatched to the store, instead of directly calling functions
  • feat(web-ui): implement react web application for the web-ui service - closes #224
  • refactor(web-ui): use mui dialogs for input demands - closes #224
  • chore(web-ui): add linting and formatting to the web application code - closes #224
  • refactor(web-ui): use webaudio for audio playback in the web application and add an unmute button - closes #224
  • feat(web-ui): add side buttons layout, and handle swipe gestures for the web application - closes #224
  • feat(web-ui): add dark-mode support for layout buttons and add color scheme switch buttons - closes #224
  • fix(web-ui): provide input field for when there is no fields nor pattern in the InputDescription
  • refactor(voice): upgrade access_key input to use the new fields value of the InputDescription
  • refactor(web-ui): use the same mui interface in static server too (instead of jinja-rendered interface) and add action buttons for all status reported by server - closes #224
  • fix(rpi-connect): use with_state of the latest python-redux version instead of view to avoid memoization of actions - closes #248
  • refactor(core,audio,display,keypad,sensors): read and check content of eeprom to determine if a device/service should be initialized or not - closes #223, #closes #249
  • fix(core): improve syntax of str_to_bool, removing all unnecessary == 1 postfixes
  • feat(core): implement services menu in settings for controlling services - closes #4, closes #226
  • feat(core): store services configuration into and read them from the persistent store
  • refactor: use the new subscriptions return value of the setup function for different services to report subscriptions so that the service manager can clean up the subscriptions when the service is stopped
  • fix(core): remove the reference of the async task handle after it is done to avoid memory leaks
  • feat(core): clean up status icons of a service when it stops
  • refactor(tests): make different parts of code explicitly return their cleanup functions and make test_services wait until all services are completely loaded without any errors plus small improvements to logs
  • chore(lint): update ruff to the latest version and update codebase to be compatible with it
  • build(installation): remove the line in install.sh uninstalling RPI.GPIO as it is no longer needed with the latest release of adafruit-blinka
  • build(installation): remove the raspberry pi's ssh daemon banner warning about setting a valid user
  • refactor(core): make subscribe_event created in services, run the handler in the event loop of the service instead of the event loop of the main thread - closes #226
  • refactor: add ubo_app.colors and move hardcoded color codes to it
  • feat: add menu switch for service threads to enable/disable auto-run and auto-rerun of services - closes #227
  • build(install): avoid swallowing stdout of the pip install command in the install.sh, lock onnxruntime to 1.20.1, related: microsoft/onnxruntime#23957
  • test: improve cleanup and add explicit wait for loaded services to unload at the end of test_services test
  • feat(core): add a barrier for services after they register their reducer, they will pass it only when the rest of them have registered their reducer - closes #163
  • refactor(core): replace kivy.clock.Clock.create_trigger as the scheduler of the store with a new in house implementation of a scheduler using asyncio running in a separate thread and multiple improvements in resource cleanup, test utilities to ensure tests are reproducible and don't fail randomly
  • docs: add a section for adding new services, mentioning general patterns, to avoid common mistakes
  • refactor(core): better handle circular references in formatting log messages
  • fix(core): wrap callback call of the scheduler in try to avoid the scheduler stopping when an exception is raised in its thread
  • refactor(docker): make docker container menus load even if ip service is not available
  • test: mock has_gateway and better mock send_command to make it return done instead of Connected when the command is not connection
  • refactor(core): use latest version of python-redux and ubo-gui and remove all @mainthread decorators for actions on the menu as ubo-gui now takes care of running them in the main thread itself
  • fix(core): improve resource cleanup of service threads so that they can be restarted after being stopped
  • refactor(core): defer attaching the main reducer to the root reducer using CombineReducerRegisterAction to avoid circular imports or sacrificing the purity of reducers.
  • fix(core): add cleanup for gpio pins including display pins and run gpiozero.devices._shutdown as part of the cleanup process
  • test: wait for scheduler to completely stop before stopping the kivy app to make sure no kivy.clock.Clock event gets scheduled after the app is stopped
  • fix(core): add display cleanup for raspberry pi 4 as adafruit uses RPi.GPIO in pi 4 instead of lgpio which it uses for pi 5 and we already have a cleanup for it
  • test: add UBO_TEST_INVESTIGATION_MODE to enable advanced and costly tools like recording stack-trace of cells, generating dependency graph using objgraph and running pdb session when memory leak is found to better investigate memory leaks
  • test: move all dbus custom interfaces in ubo_app.utils.dbus_interfaces and preserve it in test cleanup, this is due to sdbus having a hidden mapping of dbus interfaces to their implementations in the C code and it doesn't clean up the mapping when the interface is removed
  • refactor: avoid using Clock.schedule_interval and replace it with asyncio.sleep in services needing to periodically run a function
  • test: add test_menu, as the first in a category of tests purposed to reproduce rare and hard-to-reproduce bugs: these tests run a few times normally, but when UBO_TEST_INVESTIGATION_MODE environment variable is set, they repeat the expected reproduction steps thousands of times until the bug is reproduced, and then run a pdb session for investigation
  • refactor(services): better error representation containing more content in a single page
  • fix(sensors): explicitly set the light_integration_time for the light sensor - closes #269
  • fix(core): add task_runner parameter to async_.create_task and use it with async_.get_task_runner in store event handlers instead of directly calling the task runner to make sure a reference to tasks are stored in the memory until they are finished, handle by async_.create_task - closes #247, closes #266
  • chore: update pyright and fix/silent newly reported type errors
  • fix(core): improve has_gateway utility function to ignore default routes with local scope - closes #251
  • fix(display): decrease baudrate from 70,000,000 to 60,000,000 to avoid residual noise on the display - closes #236
  • fix(web-ui): don't interpret keys pressed outside the #web-app-root, or keys pressed on HTMLInputElement, HTMLTextAreaElement, HTMLSelectElement and HTMLButtonElement as interactions with the pod
  • fix(system): make system process completely exit when it's done so that systemd can restart it, the exit used to get blocked by the check_connection thread, also make it not exit simply because a client sends an empty datagram, the client may have crashed but system process doesn't need to exit - closes #272
  • refactor(ip): remove python-ping package and the connection monitoring code in the system-manager, use system ping command instead, this is because none of the python packages providing ping functionality are actively maintained and ping command has the benefit of not needing to run as root, lowering the communication traffic between the system process and the main process - closes #267
  • refactor(core): move setting gpio 17 to config.txt so that it happens on boot and remove it from hardware_initialization
  • refactor(core): make the scheduler compensate for the time it took to run the last scheduled event, by waiting less time in the next scheduled event, also sync its frequency with the frequency of the display updates
  • feat(core): handle system signal USR1 as the signal to initiate ipdb only if DEBUG_MODE_PDB_SIGNAL is set
  • refactor(system): improve the user experience of the reset button, add a pattern for restarting the app without killing it
  • refactor(core): add unified API to access “current service” via thread-local, parent thread, or call stack
  • refactor(core): better representation of errors in logs and service menus
  • fix(ip): make sure the connection status is set to not-connected when ping is not generating any output
  • refactor(services): avoid silencing caught exceptions in services by either reraising them so that they are caught and...
Read more

v1.2.2

25 Feb 20:48
v1.2.2

Choose a tag to compare

PyPI package: https://pypi.org/project/ubo-app/1.2.2

Changes:

  • fix: temperature sensor is on 0x48, not 0x44

Note than GitHub doesn't allow assets bigger than 2GB in a release. Due to this, the files bigger than 2GB have been split into 2GB chunks. You can join them using the following command:

cat [[filename]]_* > [[filename]]

v1.2.1

25 Feb 17:29
v1.2.1

Choose a tag to compare

PyPI package: https://pypi.org/project/ubo-app/1.2.1

Changes:

  • fix: tenacity is now a production dependency
  • chore: add pypi publish and automatic release github workflows

Note than GitHub doesn't allow assets bigger than 2GB in a release. Due to this, the files bigger than 2GB have been split into 2GB chunks. You can join them using the following command:

cat [[filename]]_* > [[filename]]

v1.2.0

25 Feb 02:29
v1.2.0
a8975db

Choose a tag to compare

PyPI package: https://pypi.org/project/ubo-app/1.2.0

Changes:

  • chore: add log_async_process to log the output of an async processes in a notification if they don't run successfully
  • refactor(core): housekeeping: rename extra_information to qr_code_generation_instructions in ubo_input, add .tmpl extension for extension files, use textarea for LONG input field type in web dashboard, rename ..._HOST env variables to ..._ADDRESS, use underscore thousand separators for big numbers in codebase
  • feat(docker): support docker compositions and add a way to import docker-compose.yml files
  • feat(docker): add instructions and icon for docker compositions
  • refactor(core): rerender screen when rendering on the display is resumed like when returning from viewfinder to avoid artifacts
  • refactor(docker): make composition menus responsive: showing spinner, etc
  • fix: pass raw bytes to DisplayRenderEvent and DisplayCompressedRenderEvent to avoid encoding issues
  • fix: add ".local" to hostname in users menus - closes #134
  • fix: use stdout instead of stderr for reading rpi-connect process output - closes #174
  • feat: hold update until the app creates a file signaling it is loaded - closes #177
  • feat: setup a wifi hotspot for when the a web-ui input is demanded and the device is not connected to any network - closes #169
  • feat: let the user upload directory content of the docker composition they are creating - closes #202
  • feat: use pod_id as the ssid of the wifi hotspot
  • feat: add dark mode for web-ui
  • docs: update development documentation
  • feat(web-ui): automatically run the wifi creation procedure when there is no ssid saved in the network manager and no default gateway is set - closes #214
  • feat(web-ui): use captive portal in the hotspot started by web-ui - closes #211
  • fix(core): an issue where a tuple of lists where passed as active_inputs instead of a list due to an unwanted comma - closes #212
  • fix(core): high cpu usage due to the while loop going non-blocking when the ping raised an exception - closes #216
  • feat(core): add a utility function to apply templates to filesystem based on a templates directory, while taking backups of the original files and another utility function to restore the backups
  • fix(web-ui): run iw wlan0 set power_save off before running hotspot to avoid the soft block - closes #222
  • refactor(ci): use new github runner arm images for building images
  • feat(web-ui): add ubo-redirect-server service
  • refactor(web-ui): add notifications for when starting/stopping the hotspot fails in the system manager
  • refactor(web-ui): move starting/stopping of the required hotspot system services to the ubo-hotspot service (the more general version of the ubo-redirect-server service which runs the redirect server as its main process.)
  • fix(core): uninstall RPi.GPIO after installing python packages in install.sh related: adafruit/Adafruit_Blinka#910 - closes #231
  • fix(web-ui): avoid web-ui stop procedure being triggered when qr-code input is cancelled
  • fix(system): run time.sleep for both branches of the ping loop (success and failure) to avoid high cpu usage of the system process
  • fix(camera): avoid values read from qrcode being overridden by None values of alternative patterns - closes #230
  • fix(wifi): wait a few seconds before creating the wifi connection if the provided input result has the input method WEB_DASHBOARD - closes #230
  • fix(wifi): set network_manager.wireless_enabled for when hotspot is being turned off and also before creating a wifi connection and before connecting to a wifi network - closes #230
  • fix(keypad,sensors): retry i2c initializations - closes #234
  • fix(wifi): make get_saved_wifi_ssids return empty list in non-rpi environments

Note than GitHub doesn't allow assets bigger than 2GB in a release. Due to this, the files bigger than 2GB have been split into 2GB chunks. You can join them using the following command:

cat [[filename]]_* > [[filename]]

v1.0.0

07 Oct 12:39
v1.0.0
844b7a4

Choose a tag to compare

PyPI package: https://pypi.org/project/ubo-app/1.0.0

Changes:

  • hotfix(users): do not mark the generated password as expired as it will cause boot failures as the os can't autologin into the ubo user when its password is expired
  • hotfix(core): render blank screen on the display when FinishEvent is dispatched (makes sure display is clean after powering off)

Note than GitHub doesn't allow assets bigger than 2GB in a release. Due to this, the files bigger than 2GB have been split into 2GB chunks. You can join them using the following command:

cat [[filename]]_* > [[filename]]

v0.17.1

29 Sep 11:13
v0.17.1
9a2172d

Choose a tag to compare

PyPI package: https://pypi.org/project/ubo-app/0.17.1

Changes:

  • feat(display): add DisplayCompressedRenderEvent as a compressed version of DisplayRenderEvent
  • feat(rpc): add reflection to rpc server, limited to root service, but good enough for health checking purposes
  • refactor(rpc): preserve the order of fields of oneof declarations generated for Union types
  • refactor(audio): convert AudioPlayChimeEvents to AudioPlayAudioEvents instead of directly playing the chime
  • feat(rpc): add UBO_GRPC_LISTEN_HOST and UBO_GRPC_LISTEN_PORT environment variables
  • fix(docker): make sure the image_menu view - used nested in an autorun - is re-called when ip addresses are provided

Note than GitHub doesn't allow assets bigger than 2GB in a release. Due to this, the files bigger than 2GB have been split into 2GB chunks. You can join them using the following command:

cat [[filename]]_* > [[filename]]