Cheap Home Assistant display the second try

Meanwhile the second cheap digital photo frame from Amazon has arrived. So the adventure of finding the cheapest possible display—or wall panel—for Home Assistant can continue.

This time I ordered a different model. Again a 15.6″ frame with the Frameo software, because that’s the important part. Frameo usually allows you to enable ADB directly from the user interface. Unless you receive a model where the USB port apparently isn’t wired for data transfer. That was exactly what happened with the previous one. This time I bought this model: https://www.amazon.de/dp/B0FC26S5QS

With an automatically applied coupon I paid roughly €85 for it.

For that money you get a 15.6″ touchscreen powered by a Rockchip RK3326 with 1 GB RAM and 32 GB of flash storage. Certainly not impressive hardware, but just about acceptable for Home Assistant.

What you don’t get is equally interesting: no battery (which was exactly the point), no camera, no proximity sensor, no Google Play Services, and not even a Home button. Under Android that can occasionally become a bit annoying..

Here are a few photos of the frame. Nothing spectacular really. Cheap plastic, no fancy design, just a plain black frame.

Black digital pitcure frame with the display turned off

On the back you can attach the included stand. There are also mounting holes for hanging it on a nail or using a VESA mount. Unfortunately, the power button is also located on the back. Since you need it to completely switch off the display and wake it up again later, this is not exactly the smartest place for it. Unlike the previous frame, there is neither a manufacturer name nor an FCC ID anywhere on the label.

Back of the digital picture fram with mounting options an power button

The connector panel offers a SD card slot, a headphone jack, one USB-A port, one USB-C port (this one actually provides ADB access), and a barrel connector for the power supply. A 12 V / 2 A power adapter is included.

Detail view of the connector panel

Power consumption is actually quite reasonable. With the display at 100% brightness the device draws somewhere between 6 and 8 watts depending on the workload. With the display dimmed it drops to around 3–4 W. If the display is turned off completely it only needs around 1.3–1.5 W. All measurements were taken using my KD302 power meter.

Of course we don’t want to run the bundled software forever. We want our own application on it. In my case that’s Home Assistant, but something like Immich Frame would work just as well. Let’s get started. As always: if something doesn’t work immediately, you may have to use your own brain once or twice.

Requirements

  1. A computer running Linux, macOS or Windows.
  2. A USB-A to USB-C cable. I haven’t tested USB-C to USB-C because these devices often implement the USB-C specification in… let’s call it a very creative way.
  3. Android Debug Bridge (adb) installed. There are plenty of installation guides available.

Enable ADB (and later Wireless ADB)

Connect the photo frame to your computer via USB and power it on. Go through the setup wizard, but don’t configure Wi-Fi yet. This prevents the Frameo app from immediately updating itself. You never know what surprises newer versions might bring.

Inside the Frameo app open Settings -> About and enable both the beta program and ADB.

Now connect to the frame using:

adb connect

A confirmation dialog should appear on the frame asking whether to trust your computer. I’d recommend checking „Always allow.“ If no dialog appears, simply disable and re-enable ADB in the Frameo settings. That solved it for me. After every reboot you’ll need to reconnect using adb connect.

Once connected, enter the shell:

adb shell

Now you are on the shell of the frame type su and you should be root. You can check that with the command whoami. Having root means you can basically do whatever you like with the device. Or completely break it. Commands beginning with ad` are executed on your computer. Commands without adb are entered inside the shell running on the photo frame.

Now we want to enalble wireless adb. It isn’t required and it does have security implications, but it’s also very convenient.! Inside the root shell execute:

setprop persist.adb.tcp.port 5555

Unfortunately that’s only half the job. These devices have the incredibly annoying habit of generating a different MAC address every time they boot. That means you’ll eventually want to configure a static IP address. We’ll do that later, once the Frameo software is no longer needed. For now I still kept Wi-Fi disabled.

Install a Launcher, Disable Frameo and Update WebView

The first thing I installed was a proper launcher. Technically the device doesn’t have one. Frameo itself acts as the launcher, but that’s exactly what we want to get rid of. I settled on OLauncher. It’s extremely minimalistic, but unlike several other launchers I tested, it doesn’t randomly crash. Download the APK and install it:

adb install Olauncher.apk
abd input keyevent 3

Android should now ask which launcher you want to use. Select OLauncher and choose Always. After rebooting the frame should start directly into OLauncher. Swipe up from the bottom to access all installed apps. Apart from the Settings app there isn’t much worth looking at.

You can always launch Android Settings through ADB:

adb shell am start -a android.settings.SETTINGS

Under Apps & Notifications -> Advanced -> Default Apps you can also change the default launcher later. Now that we have our own launcher we can disable Frameo completely:

adb shell su
pm disable net.frameo.frame
exit
adb reboot

The Android 8 WebView included with the frame is far too old. Without updating it, the Home Assistant Companion App doesn’t render correctly. Mine shipped with WebView version 60. As of August 2026, version 138 is the latest release supporting Android 8. Download the combined APK from APK Mirror and replace the system version (Thanks to the ImmichFrame team for figuring this out.):

adb push webview.apk /sdcard/webview.apk
adb shell su
mount -o rw,remount /system && cp /system/app/webview/webview.apk /system/app/webview/webview.apk.bak
mount -o rw,remount /system && rm -rf /system/app/webview/oat
mount -o rw,remount /system && cp /sdcard/webview.apk /system/app/webview/webview.apk
exit
adb reboot

After rebooting you can verify the installed version inside Android Settings. Enable Developer Options by tapping the Build Number several times, then check which WebView implementation is active.

Configure Wi-Fi

Now it’s finally time to connect the frame to Wi-Fi. Open the Settings app—either through the launcher or via ADB—and connect it to your network. I’d recommend assigning a static IP immediately. If you don’t want the frame accessing the Internet, you can also configure an invalid default gateway. Whether Android actually respects that… I honestly don’t know.

Unfortunately the manufacturer made another questionable design decision. Every boot generates a different MAC address. At first I assumed this was Android’s MAC randomization feature. It isn’t. Apparently they simply never programmed a real MAC address into the hardware, so Android has no choice but to invent one each time. Cheap TV boxes are known for doing exactly the same thing.

At the moment I have no idea how to fix this. It’s particularly annoying if you want to block Internet access in something like a FRITZ!Box because those rules are tied to the MAC address.

If you do isolate the frame from the Internet, don’t forget to configure your own NTP server—for example your FRITZ!Box:

adb shell settings put global ntp_server IP-DES-NTP-SERVERS

Install Home Assistant

Compared to everything else, this part is easy. Download the latest Home Assistant Companion App from the project’s GitHub repository. Please use the official release there. The F-Droid version usually lags behind a little and it also crashed on my device. Download app-minimal-release.apk, since this variant doesn’t require Google Play Services—which our frame doesn’t have anyway.

Install it:

adb install app-minimal-release.apk

Start the app from OLauncher and connect it to your Home Assistant instance. Inside the Companion App settings you can allow it to become the default launcher application. From now on the Home Assistant app should start automatically after every reboot.

Automatically Dim the Display

One more useful ADB command. You can configure Android to dim the display after a certain timeout. Unfortunately it doesn’t switch off completely—it only dims—but it’s still useful. The timeout is specified in milliseconds. For two minutes:

adb shell settings put system screen_off_timeout 120000

The maximum possible value is: 2147483647.

That already saves a decent amount of power. The long-term goal, however, is turning the display off completely

The remaining work will mostly happen inside Home Assistant, and this project is still far from finished. But it a beginning.

Björns Techblog
Björns Techblog
@blog@blog.sengotta.net
357 Beiträge
76 Folgende
Fediverse-Reaktionen

Schreibe einen Kommentar