ubo-app


Nameubo-app JSON
Version 0.15.0 PyPI version JSON
download
home_pageNone
SummaryUbo main app, running on device initialization. A platform for running other apps.
upload_time2024-06-25 21:28:06
maintainerNone
docs_urlNone
authorSassan Haradji
requires_python<4.0,>=3.11
licenseApache-2.0
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 🚀 Ubo App

[![image](https://img.shields.io/pypi/v/ubo-app.svg)](https://pypi.python.org/pypi/ubo-app)
[![image](https://img.shields.io/pypi/l/ubo-app.svg)](https://github.com/ubopod/ubo-app/LICENSE)
[![image](https://img.shields.io/pypi/pyversions/ubo-app.svg)](https://pypi.python.org/pypi/ubo-app)
[![Actions status](https://github.com/ubopod/ubo-app/workflows/CI/CD/badge.svg)](https://github.com/ubopod/ubo-app/actions)
[![codecov](https://codecov.io/gh/ubopod/ubo-app/graph/badge.svg?token=KUI1KRDDY0)](https://codecov.io/gh/ubopod/ubo-app)

## 🌟 Overview

Ubo App is a Python application for managing Raspberry Pi utilities and Ubo-specific
features.

<img width="550" alt="Ubo ai pod photo" src="https://github.com/ubopod/ubo-app/assets/94014876/9438ab51-9b40-46b8-a656-80b8fcb72bc3">

Example screenshots:

<img width="200" alt="Ubo ai pod photo" src="https://github.com/ubopod/ubo-app/assets/94014876/899d32e4-ef8e-4849-a967-1e21ad12297a">

## 🚧 Disclaimer

Be aware that at the moment, Ubo app sends crash reports to Sentry. Soon we will
limit this to beta versions only.

## ⚙ī¸ Notable Features

- Headless WiFi on-boarding with QR code
- Easy headless remote access with SSH and VS Code tunnel
- Install and run Docker apps headlessly
- Access and control basic RPi utilities and settings

## 📋 Requirements

Ubo app is developed to run on Raspberry Pi 4 and 5. The experience is optimized around Ubo Pod which offers

- a minimal LCD display and GUI with a keypad
- stereo microphone and speakers,
- camera
- LED ring
- sensors

The app functions even if some of these hardware elements are not provided, however some of the features that rely on these hardware components may not function. For example, WiFi onboarding with QR code requires a camera onboard.

## đŸ“Ļ Installation

### Pre-packaged image

Ubo Pod ships with a pre-flashed MicroSD card that has the app installed on it by default.

If you don't have it, or you just want to set up a fresh device, then:

1. download one of the images from the release section
2. Use Raspberry Pi Images and choose `custom image` to provide the download image file.
3. Write to the image
4. Use the image to boot your Ubo Pod or Raspberry Pi

This is the fastest, easiest, and recommended way to get started with Ubo App.

### Install on existing OS

If you want to install the image on an existing operating system, then read on. Otherwise, skip this section.

---

⚠ī¸ **Executing scripts directly from the internet with root privileges poses a significant
security risk. It's generally a good practice to ensure you understand the script's
content before running it. You can check the content of this particular script
[here](https://raw.githubusercontent.com/ubopod/ubo-app/main/ubo_app/system/install.sh)
before running it.**

---

To install ubo, run this command in a terminal shell:

```bash
curl -sSL https://raw.githubusercontent.com/ubopod/ubo-app/main/ubo_app/system/install.sh\
  | sudo bash
```

If you want to install docker service and configure ubo to be able to use it run this:

```bash
curl -sSL https://raw.githubusercontent.com/ubopod/ubo-app/main/ubo_app/system/install.sh\
  | sudo WITH_DOCKER=true bash
```

To allow the installer to install the latest alpha version of ubo run this:

```bash
curl -sSL https://raw.githubusercontent.com/ubopod/ubo-app/main/ubo_app/system/install.sh\
  | sudo ALPHA=true bash
# or
curl -sSL https://raw.githubusercontent.com/ubopod/ubo-app/main/ubo_app/system/install.sh\
  | sudo ALPHA=true WITH_DOCKER=true bash
```

Note that as part of the installation process, these debian packages are installed:

- git
- i2c-tools
- libcap-dev
- libegl1
- libgl1
- libmtdev1
- libzbar0
- python3-alsaaudio
- python3-dev
- python3-gpiozero
- python3-libcamera
- python3-picamera2
- python3-pip
- python3-pyaudio
- python3-virtualenv

Also be aware that ubo-app only installs in `/opt/ubo` and it is not customizable
at the moment.

## 🤝 Contributing

Contributions following Python best practices are welcome.

### ℹī¸ī¸ Conventions

- Use `UBO_` prefix for environment variables.
- Use `ubo:` prefix for notification ids used in ubo core and `<service_name>:` prefix
  for notification ids used in services.
- Use `ubo:` prefix for icon ids used in ubo core and `<service_name>:` prefix for
  icon ids used in services.

### Development

#### Setting up the development environment

To set up the development environment, you need to have Python 3.11+ and [`poetry`](https://python-poetry.org) installed.

First, clone the repository, then install the dependencies:

```bash
poetry install --with dev --extras=dev
```

Now you can run the app with:

```bash
poetry run ubo
```

#### Running tests

Easiest way to run tests is to use the provided `Dockerfile`s. To run the tests
in a container, you first need to create the development images by running:

```bash
poetry run poe build-docker-images
```

Then you can run the tests with:

```bash
docker run --rm -it --name ubo-app-test -v .:/ubo-app -v ubo-app-dev-pypoetry-cache:/root/.cache/pypoetry ubo-app-test
```

You can add arguments to the `pytest` command to run specific tests like this:

```bash
docker run --rm -it --name ubo-app-test -v .:/ubo-app -v ubo-app-dev-pypoetry-cache:/root/.cache/pypoetry ubo-app-test -- <pytest-args>
```

For example, to run only the tests in the `tests/test_app.py` file, you can run:

```bash
docker run --rm -it --name ubo-app-test -v .:/ubo-app -v ubo-app-dev-pypoetry-cache:/root/.cache/pypoetry ubo-app-test -- -n3 tests/test_some_test.py
```

You can also run the tests in your local environment by running:

```bash
poetry run poe test
```

⚠ī¸**Note:** When running the tests in your local environment, the window snapshots produced by tests may mismatch the expected snapshots. This is because the snapshots are taken with a certain DPI and some environments may have different DPI settings. For example, we are aware that the snapshots taken in macOS have different DPI settings. If you encounter this issue, you should run the tests in a Docker container as described above.

#### QR code

In development environment, the camera is probably not working as it is relying, on `picamera2`, so it may become challenging to test the flows relying on QR code input.

To address this, the `qrcode_input` method, in not-RPi environments, will try to get its input from `/tmp/qrcode_input.txt`. So, whenever you encounter a QR code input, you can write the content of the QR code in that file and the application will read it from there and continue the flow.

## 🔒 License

This project is released under the Apache-2.0 License. See the [LICENSE](./LICENSE) file for more details.


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "ubo-app",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.11",
    "maintainer_email": null,
    "keywords": null,
    "author": "Sassan Haradji",
    "author_email": "sassanh@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/f1/bf/5fb46eff1dc1b41340f9292a8203cae17af67c4096b93f08ef0a2c9784b0/ubo_app-0.15.0.tar.gz",
    "platform": null,
    "description": "# \ud83d\ude80 Ubo App\n\n[![image](https://img.shields.io/pypi/v/ubo-app.svg)](https://pypi.python.org/pypi/ubo-app)\n[![image](https://img.shields.io/pypi/l/ubo-app.svg)](https://github.com/ubopod/ubo-app/LICENSE)\n[![image](https://img.shields.io/pypi/pyversions/ubo-app.svg)](https://pypi.python.org/pypi/ubo-app)\n[![Actions status](https://github.com/ubopod/ubo-app/workflows/CI/CD/badge.svg)](https://github.com/ubopod/ubo-app/actions)\n[![codecov](https://codecov.io/gh/ubopod/ubo-app/graph/badge.svg?token=KUI1KRDDY0)](https://codecov.io/gh/ubopod/ubo-app)\n\n## \ud83c\udf1f Overview\n\nUbo App is a Python application for managing Raspberry Pi utilities and Ubo-specific\nfeatures.\n\n<img width=\"550\" alt=\"Ubo ai pod photo\" src=\"https://github.com/ubopod/ubo-app/assets/94014876/9438ab51-9b40-46b8-a656-80b8fcb72bc3\">\n\nExample screenshots:\n\n<img width=\"200\" alt=\"Ubo ai pod photo\" src=\"https://github.com/ubopod/ubo-app/assets/94014876/899d32e4-ef8e-4849-a967-1e21ad12297a\">\n\n## \ud83d\udea7 Disclaimer\n\nBe aware that at the moment, Ubo app sends crash reports to Sentry. Soon we will\nlimit this to beta versions only.\n\n## \u2699\ufe0f Notable Features\n\n- Headless WiFi on-boarding with QR code\n- Easy headless remote access with SSH and VS Code tunnel\n- Install and run Docker apps headlessly\n- Access and control basic RPi utilities and settings\n\n## \ud83d\udccb Requirements\n\nUbo app is developed to run on Raspberry Pi 4 and 5. The experience is optimized around Ubo Pod which offers\n\n- a minimal LCD display and GUI with a keypad\n- stereo microphone and speakers,\n- camera\n- LED ring\n- sensors\n\nThe app functions even if some of these hardware elements are not provided, however some of the features that rely on these hardware components may not function. For example, WiFi onboarding with QR code requires a camera onboard.\n\n## \ud83d\udce6 Installation\n\n### Pre-packaged image\n\nUbo Pod ships with a pre-flashed MicroSD card that has the app installed on it by default.\n\nIf you don't have it, or you just want to set up a fresh device, then:\n\n1. download one of the images from the release section\n2. Use Raspberry Pi Images and choose `custom image` to provide the download image file.\n3. Write to the image\n4. Use the image to boot your Ubo Pod or Raspberry Pi\n\nThis is the fastest, easiest, and recommended way to get started with Ubo App.\n\n### Install on existing OS\n\nIf you want to install the image on an existing operating system, then read on. Otherwise, skip this section.\n\n---\n\n\u26a0\ufe0f **Executing scripts directly from the internet with root privileges poses a significant\nsecurity risk. It's generally a good practice to ensure you understand the script's\ncontent before running it. You can check the content of this particular script\n[here](https://raw.githubusercontent.com/ubopod/ubo-app/main/ubo_app/system/install.sh)\nbefore running it.**\n\n---\n\nTo install ubo, run this command in a terminal shell:\n\n```bash\ncurl -sSL https://raw.githubusercontent.com/ubopod/ubo-app/main/ubo_app/system/install.sh\\\n  | sudo bash\n```\n\nIf you want to install docker service and configure ubo to be able to use it run this:\n\n```bash\ncurl -sSL https://raw.githubusercontent.com/ubopod/ubo-app/main/ubo_app/system/install.sh\\\n  | sudo WITH_DOCKER=true bash\n```\n\nTo allow the installer to install the latest alpha version of ubo run this:\n\n```bash\ncurl -sSL https://raw.githubusercontent.com/ubopod/ubo-app/main/ubo_app/system/install.sh\\\n  | sudo ALPHA=true bash\n# or\ncurl -sSL https://raw.githubusercontent.com/ubopod/ubo-app/main/ubo_app/system/install.sh\\\n  | sudo ALPHA=true WITH_DOCKER=true bash\n```\n\nNote that as part of the installation process, these debian packages are installed:\n\n- git\n- i2c-tools\n- libcap-dev\n- libegl1\n- libgl1\n- libmtdev1\n- libzbar0\n- python3-alsaaudio\n- python3-dev\n- python3-gpiozero\n- python3-libcamera\n- python3-picamera2\n- python3-pip\n- python3-pyaudio\n- python3-virtualenv\n\nAlso be aware that ubo-app only installs in `/opt/ubo` and it is not customizable\nat the moment.\n\n## \ud83e\udd1d Contributing\n\nContributions following Python best practices are welcome.\n\n### \u2139\ufe0f\ufe0f Conventions\n\n- Use `UBO_` prefix for environment variables.\n- Use `ubo:` prefix for notification ids used in ubo core and `<service_name>:` prefix\n  for notification ids used in services.\n- Use `ubo:` prefix for icon ids used in ubo core and `<service_name>:` prefix for\n  icon ids used in services.\n\n### Development\n\n#### Setting up the development environment\n\nTo set up the development environment, you need to have Python 3.11+ and [`poetry`](https://python-poetry.org) installed.\n\nFirst, clone the repository, then install the dependencies:\n\n```bash\npoetry install --with dev --extras=dev\n```\n\nNow you can run the app with:\n\n```bash\npoetry run ubo\n```\n\n#### Running tests\n\nEasiest way to run tests is to use the provided `Dockerfile`s. To run the tests\nin a container, you first need to create the development images by running:\n\n```bash\npoetry run poe build-docker-images\n```\n\nThen you can run the tests with:\n\n```bash\ndocker run --rm -it --name ubo-app-test -v .:/ubo-app -v ubo-app-dev-pypoetry-cache:/root/.cache/pypoetry ubo-app-test\n```\n\nYou can add arguments to the `pytest` command to run specific tests like this:\n\n```bash\ndocker run --rm -it --name ubo-app-test -v .:/ubo-app -v ubo-app-dev-pypoetry-cache:/root/.cache/pypoetry ubo-app-test -- <pytest-args>\n```\n\nFor example, to run only the tests in the `tests/test_app.py` file, you can run:\n\n```bash\ndocker run --rm -it --name ubo-app-test -v .:/ubo-app -v ubo-app-dev-pypoetry-cache:/root/.cache/pypoetry ubo-app-test -- -n3 tests/test_some_test.py\n```\n\nYou can also run the tests in your local environment by running:\n\n```bash\npoetry run poe test\n```\n\n\u26a0\ufe0f**Note:** When running the tests in your local environment, the window snapshots produced by tests may mismatch the expected snapshots. This is because the snapshots are taken with a certain DPI and some environments may have different DPI settings. For example, we are aware that the snapshots taken in macOS have different DPI settings. If you encounter this issue, you should run the tests in a Docker container as described above.\n\n#### QR code\n\nIn development environment, the camera is probably not working as it is relying, on `picamera2`, so it may become challenging to test the flows relying on QR code input.\n\nTo address this, the `qrcode_input` method, in not-RPi environments, will try to get its input from `/tmp/qrcode_input.txt`. So, whenever you encounter a QR code input, you can write the content of the QR code in that file and the application will read it from there and continue the flow.\n\n## \ud83d\udd12 License\n\nThis project is released under the Apache-2.0 License. See the [LICENSE](./LICENSE) file for more details.\n\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "Ubo main app, running on device initialization. A platform for running other apps.",
    "version": "0.15.0",
    "project_urls": null,
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e3b2577d096fccb9101f36f47d9e4af47f5d2eed1ddfd2598a13fba01c3555d3",
                "md5": "d381e54c4c069d7e2926c72bebdd5f8d",
                "sha256": "3289eb09e332d2938297a5f0a4b09fb06720b603a4194b7ff935edfcd9d1f0e1"
            },
            "downloads": -1,
            "filename": "ubo_app-0.15.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "d381e54c4c069d7e2926c72bebdd5f8d",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.11",
            "size": 215691,
            "upload_time": "2024-06-25T21:28:03",
            "upload_time_iso_8601": "2024-06-25T21:28:03.091797Z",
            "url": "https://files.pythonhosted.org/packages/e3/b2/577d096fccb9101f36f47d9e4af47f5d2eed1ddfd2598a13fba01c3555d3/ubo_app-0.15.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f1bf5fb46eff1dc1b41340f9292a8203cae17af67c4096b93f08ef0a2c9784b0",
                "md5": "c8d648e6e07c30b63a9ebbe3b2f5696a",
                "sha256": "49868b9a76742416cd29a29d6960cd6959b6330bbbabeb9fc479189763b2a301"
            },
            "downloads": -1,
            "filename": "ubo_app-0.15.0.tar.gz",
            "has_sig": false,
            "md5_digest": "c8d648e6e07c30b63a9ebbe3b2f5696a",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.11",
            "size": 170841,
            "upload_time": "2024-06-25T21:28:06",
            "upload_time_iso_8601": "2024-06-25T21:28:06.876535Z",
            "url": "https://files.pythonhosted.org/packages/f1/bf/5fb46eff1dc1b41340f9292a8203cae17af67c4096b93f08ef0a2c9784b0/ubo_app-0.15.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-06-25 21:28:06",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "ubo-app"
}
        
Elapsed time: 0.26370s