Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Getting the Raspberry Pi Camera to Work on HASSOS

Getting the Raspberry Pi Camera to Work on HASSOS

Enabling the Raspberry Pi camera on HASSOS installations is unfortunately not as simple as connecting the camera and configuring Home Assistant as described at https://www.home-assistant.io/integrations/rpi_camera.

For the camera to work at all, an alternate firmware needs to be loaded when the Raspberry Pi boots. On Raspberry Pi OS (and many others), the alternate firmware is included with the OS installation image, and switching to the alternate firmware is accomplished by running raspi-config and selecting "Enable Camera" from the menu. HASSOS does not include either the alternate firmware or the raspi-config program, so all of the steps need to be done manually.

The steps below attempt to describe the steps that need to be performed. They have worked for me on a Raspberry Pi 3B+ running HASSOS 4.11 through 4.15. If you have a different setup your mileage may vary (but hopefully you'll get enough hints from the below to get it working).

A Home Assistant operating-system issue has been created to request inclusion of the firmware files in future builds (https://github.com/home-assistant/operating-system/issues/947). Assuming that issue is accepted and resolved, much of this guide will become obsolete - only the last two sections would ned to be followed.

The high-level overview of what needs to be done is:

  • Find the alternate firmware files compatible with the version of HASSOS that you are running or are going to be running after the next reboot.
  • Place the firmware files on a machine that your HASSOS box has scp/sftp access to.
  • Copy the firmware files to the HASSOS addon_core_ssh container.
  • Copy the firmware files to the HASSOS /mnt/boot partition.
  • Edit the HASSOS /mnt/boot/config.txt file to enable the alternate firmware and make other camera related changes.
  • Reboot HASSOS, then configure the camera as documented elsewhere.

Find the correct start_x.elf and fixup_x.dat firmware files

Find your HASSOS version if you don't already know it. There are many ways to do this, like looking at the host system information information in the Home Assistant client you use. Another way is to run the following from an SSH connection to Home Assistant:

ha info | grep hassos:

E.g. 4.13

Go to https://github.com/home-assistant/operating-system/blob/HASSOS-VERSION/buildroot/package/rpi-firmware/rpi-firmware.mk

(NOTE: replace HASSOS-VERSION with your version of HASSOS, e.g. https://github.com/home-assistant/operating-system/blob/4.13/buildroot/package/rpi-firmware/rpi-firmware.mk)

The firmware hash is the value of the make variable RPI_FIRMWARE_VERSION

In this example, the firmware hash is: 7caead9416f64b2d33361c703fb243b8e157eba4

Go to https://github.com/raspberrypi/firmware/commit/FIRMWARE-HASH

E.g. https://github.com/raspberrypi/firmware/commit/7caead9416f64b2d33361c703fb243b8e157eba4

And download the start_x.elf and fixup_x.dat files from there. If start_x.elf and fixup_x.dat are NOT in that commit, click on "Browse Files (at this point in history)", navigate to boot/, and download the firmware files from there.

Save both firmware files on a system that your HASSOS box will be able to access with scp or sftp.

Operating System Firmware Hash Firmware Link
4.13 7caead9416f64b2d33361c703fb243b8e157eba4 https://github.com/raspberrypi/firmware/commit/7caead9416f64b2d33361c703fb243b8e157eba4
4.14 7caead9416f64b2d33361c703fb243b8e157eba4 https://github.com/raspberrypi/firmware/commit/7caead9416f64b2d33361c703fb243b8e157eba4
4.15 7caead9416f64b2d33361c703fb243b8e157eba4 https://github.com/raspberrypi/firmware/commit/7caead9416f64b2d33361c703fb243b8e157eba4
4.16 7caead9416f64b2d33361c703fb243b8e157eba4 https://github.com/raspberrypi/firmware/commit/7caead9416f64b2d33361c703fb243b8e157eba4
4.17 7caead9416f64b2d33361c703fb243b8e157eba4 https://github.com/raspberrypi/firmware/commit/7caead9416f64b2d33361c703fb243b8e157eba4
4.18 7caead9416f64b2d33361c703fb243b8e157eba4 https://github.com/raspberrypi/firmware/commit/7caead9416f64b2d33361c703fb243b8e157eba4
4.19 7caead9416f64b2d33361c703fb243b8e157eba4 https://github.com/raspberrypi/firmware/commit/7caead9416f64b2d33361c703fb243b8e157eba4
4.20 7caead9416f64b2d33361c703fb243b8e157eba4 https://github.com/raspberrypi/firmware/commit/7caead9416f64b2d33361c703fb243b8e157eba4
5.0 7caead9416f64b2d33361c703fb243b8e157eba4 https://github.com/raspberrypi/firmware/commit/7caead9416f64b2d33361c703fb243b8e157eba4
5.1 7caead9416f64b2d33361c703fb243b8e157eba4 https://github.com/raspberrypi/firmware/commit/7caead9416f64b2d33361c703fb243b8e157eba4
5.2 7caead9416f64b2d33361c703fb243b8e157eba4 https://github.com/raspberrypi/firmware/commit/7caead9416f64b2d33361c703fb243b8e157eba4
5.3 7caead9416f64b2d33361c703fb243b8e157eba4 https://github.com/raspberrypi/firmware/commit/7caead9416f64b2d33361c703fb243b8e157eba4
5.4 2b41f509710d99758a5b8efa88d95dd0e9169c0a https://github.com/raspberrypi/firmware/commit/2b41f509710d99758a5b8efa88d95dd0e9169c0a
5.5 2ba11f2a07760588546821aed578010252c9ecb3 https://github.com/raspberrypi/firmware/commit/2ba11f2a07760588546821aed578010252c9ecb3
5.6 2ba11f2a07760588546821aed578010252c9ecb3 https://github.com/raspberrypi/firmware/commit/2ba11f2a07760588546821aed578010252c9ecb3
5.7 2ba11f2a07760588546821aed578010252c9ecb3 https://github.com/raspberrypi/firmware/commit/2ba11f2a07760588546821aed578010252c9ecb3
5.8 2ba11f2a07760588546821aed578010252c9ecb3 https://github.com/raspberrypi/firmware/commit/2ba11f2a07760588546821aed578010252c9ecb3
5.9 2ba11f2a07760588546821aed578010252c9ecb3 https://github.com/raspberrypi/firmware/commit/2ba11f2a07760588546821aed578010252c9ecb3
5.10 2ba11f2a07760588546821aed578010252c9ecb3 https://github.com/raspberrypi/firmware/commit/2ba11f2a07760588546821aed578010252c9ecb3
5.11 2ba11f2a07760588546821aed578010252c9ecb3 https://github.com/raspberrypi/firmware/commit/2ba11f2a07760588546821aed578010252c9ecb3
5.12 0d458874a89921fbe460e422b239695e1e101e2b https://github.com/raspberrypi/firmware/commit/0d458874a89921fbe460e422b239695e1e101e2b
5.13 0d458874a89921fbe460e422b239695e1e101e2b https://github.com/raspberrypi/firmware/commit/0d458874a89921fbe460e422b239695e1e101e2b
6.0 fcf8d2f7639ad8d0330db9c8db9b71bd33eaaa28 https://github.com/raspberrypi/firmware/commit/fcf8d2f7639ad8d0330db9c8db9b71bd33eaaa28
6.1 fcf8d2f7639ad8d0330db9c8db9b71bd33eaaa28 https://github.com/raspberrypi/firmware/commit/fcf8d2f7639ad8d0330db9c8db9b71bd33eaaa28
6.2 1eb8921ae7158249894f89e8bb6c4bfb04ec7377 https://github.com/raspberrypi/firmware/commit/1eb8921ae7158249894f89e8bb6c4bfb04ec7377
6.3 1eb8921ae7158249894f89e8bb6c4bfb04ec7377 https://github.com/raspberrypi/firmware/commit/1eb8921ae7158249894f89e8bb6c4bfb04ec7377
6.4 1eb8921ae7158249894f89e8bb6c4bfb04ec7377 https://github.com/raspberrypi/firmware/commit/1eb8921ae7158249894f89e8bb6c4bfb04ec7377
6.5 1eb8921ae7158249894f89e8bb6c4bfb04ec7377 https://github.com/raspberrypi/firmware/commit/1eb8921ae7158249894f89e8bb6c4bfb04ec7377

Copy the firmware files to the HASSOS host

This is a two-step process, since the HASSOS host does not have any support for copying remote files directly to the host. Therefore the concept is to copy the firmware files to a container that does have support for remote file transfer, then copy those files to the host using the docker cp command.

Enable camera in config.txt

Connect to the HASSOS host on port 22222, and edit (with "vi") the /mnt/boot/config.txt file as follows.

The camera needs more GPU memory than the default setting provides. Increase the GPU memory to 128 MB where possible by adding the following lines. See https://www.raspberrypi.org/documentation/raspbian/applications/camera.md and https://www.raspberrypi.org/documentation/configuration/config-txt/memory.md for reference.

gpu_mem=128
gpu_mem_256=64
gpu_mem_512=128
gpu_mem_1024=128

Enable the alternate firmware:

# Setting start_x to 1 does exactly the same
# thing as the following 2 lines that are commented
# out, but with reduced risk for errors due to typos
start_x=1
#start_file=start_x.elf
#fixup_file=fixup_x.dat
# The next line is optional, if you don't want the
# red LED on the camera to light while the camera
# is active
disable_camera_led=1

Reboot the HASSOS host and start using the camera

After all of the steps above have been completed, reboot the HASSOS host and continue configuring the camera as documented in https://www.home-assistant.io/integrations/rpi_camera.

@kizovinh

This comment has been minimized.

Copy link

@kizovinh kizovinh commented Oct 11, 2021

I use a pi4 with os 6.4 and core 2021.10.3 installed. I tried to copy these file (6 files with '4' in name, and also tried copy all file with 'start' and 'fix' in name) into my boot partitions and configure the config.txt accordingly, but it didnt work.
The log said that "the rpi_camera platform is taking over 60 seconds"

@kizovinh

This comment has been minimized.

Copy link

@kizovinh kizovinh commented Oct 11, 2021

I also tried motionEye but no luck

@nepozs

This comment has been minimized.

Copy link
Owner Author

@nepozs nepozs commented Oct 11, 2021

As I stated in discussion in source gist - it is untested now (last tested by me and working was HassOS 5.13).

I've no time for experiments with current version now, so I can't check if my old test installation still works.
(Hardware still exist but it is just off, but I can't promise any future date when I will try to update its software).

With my "production" HA installation I've migrated to x86 platform long time ago, even before this tests, just to use solutions that do not require continuous labor-intensive maintenance.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment