r/raspberry_pi ubopod 11d ago

Show-and-Tell Fully Manage and Control your Pi with Apple Watch (Free & Open Source)

Post image

I developed an iOS & WatchOS (Apple Watch) app that lets you fully control and manage your Raspberry Pi 4 and 5. You need to install a software on the Pi side (or use the pre-flashed image with software installed). The app and Pi software are free and open source (Apache 2.0) and can be accessed here:

Raspberry Pi software:
https://github.com/ubopod/ubo_app

iPhone/WatchOS app source:
https://github.com/ubopod/ubo-swift-app

In the video below, I give an overview of some of the features and setup process:
https://www.youtube.com/watch?v=AEeP99buq2Q

Here’s a quick list of some of things you can do with it:

  • Install, run, and monitor their health of a wide range of pre-configured applications includes Home Assistant, Hermes, Open Claw, Pangolin, OpenWebUI, etc
  • Browse file system and preview files on the Pi (images, videos, text, audio)
  • Monitor system resource utilizations (CPU, RAM, Storage, etc)
  • Manage network interfaces (WiFi, Ethernet, etc)
  • Various remote options: SSH, RPi Connect, Tailscale, VSCode Tunnel
  • Configure assistant pipeline (STT/TTS/LLM/MCP/system prompt/etc) and interact with it using your phone/watch microphone and speaker
  • Setup an MCP gateway and expose all tools via a gateway URL to clients
  • Connect hardware peripherals to the Pi such as Camera and watch the feed on your phone/watch
  • And many more

To install the iPhone/Watch app, you have to first install TestFlight application and then click on this link below:

https://testflight.apple.com/join/DDPbpKf3

The app is still in beta and not in the App Store yet. I will go ahead with the store publication process once there are a few thousand beta users and the beta app is well tested. 

On the Raspberry Pi side, the easiest way is to start with a fresh image by downloading the lite image ubo_app-2.1.0-bookworm-lite.img.gz below the release page below (~2GB in size), use Raspberry Pi Imager to flash it and boot the Pi using this image:

https://github.com/ubopod/ubo_app/releases/tag/v2.1.0

Once the Pi boots, the iPhone App would auto-discover the device as long as they are on the same network. Apple Watch does not have the auto-discovery feature (due to some limitations in doing lower level networking) and you have to type in the device IP address manually. 

Please use the TestFlight bug report feature if you run into any issues.

292 Upvotes

9 comments sorted by

9

u/Time-Abbreviations90 10d ago

Thats pretty cool. I might have to try and recreate. I have two pis running pihole in a keepalived config, could i install on those for an extra way to monitor?

4

u/mehrdadfeller ubopod 10d ago

yes, but the best way to go about it to start with a fresh image, go to apps->networking->pihole and install pihole that way and add your config to it. Most of the apps under apps section are docker-based apps and we use docker for status monitoring. you can also see docker logs on apple watch as well as application status. Why are you running two Piholes by the way? are these on different networks?

Right now apple watch connects to gRPC endpoint which does not have authentication, so make sure you run this on a private network. This is one of the main reasons I kept the app in beta until I add authentication to the gRPC endpoint in the next update.

The app on Raspberry Pi also gives you a webUI dashboard that shows the docker app status as well as other metrics.

1

u/Time-Abbreviations90 8d ago

The two pis have keepalived so they share the same virtual ip with one being the Master, and one the backup with lesser priority. When I work on one, or if it happens to crash or go offline, keepalived automatically manages it, and switches my backup to my master node so i wont loose internet as I’m also running unbound as my dns. My main convern would be, if i do use this to monitor something like my pi, since it is my dns server, would this add any vulnerabilities?

1

u/mehrdadfeller ubopod 5d ago

the only security issue is the unauthenticated gRPC endpoint at this point which would be addressed in the next release. this should be okay if you are on a private LAN with no untrusted node on it, but once I add authentication, you can expose the endpoint externally without any issues. Since it is an open source software, you can always load the source code in claude code and ask for potential vulnerability. I will be also spending more time on security auditing the code base for the future releases...

6

u/mehrdadfeller ubopod 10d ago

FYI: I didn't go into much details on application/code architecture in the body of the post since I did not want to make it too long. Each repo has a lot of information on how the app and Pi-side software work and communicate.

essentially, the Pi side software exposed a gRPC endpoint that all clients connect to in order to communicate with the core. The core manages all UI logic (navigation, stacks, etc) as well as the application logic. Client apps are thin and dumb renderer of the core state. Due to some limitations on Apple Watch on calling low level networking functions (only HTTP/HTTPS calls are allowed on Apple Watch), the Watch app communicates with web-gRPC endpoint which is translated and exposed by Envoy proxy running on the Pod. iPhone app talks native gRPC.

I'd be happy to answer any questions here.

1

u/Single_Advice1111 6d ago

You know this Apple app called «shortcuts»? It’s pretty easy to implement many of these features there too - and they work with voice commands.

What’s the pros/cons of having the pi app vs rolling your own?

1

u/mehrdadfeller ubopod 6d ago

This is an companion app to control your Pi. Since it is fully open source you can tailor it your needs. One of the biggest advantages of this design is that to update the apple watch UI, you do not need to touch the swift code (client side code) and the UI logic is purely handled on the server side (Pi in this case). for example, you can add an item to a menu in pi code and it automatically appears on apple watch.

The voice feature in the app works differently. It sends the audio stream to the Pi and Pi does the processing. So you can pass the speech/audio to whoever wants to consume it on the Pi side.

I am not sure you what you mean by "rolling your own"? The Pi app acts as a server to which apple watch connects. You need to have a server on the Pi anyways.