Versioner sammenlignet

Nøgle

  • Linjen blev tilføjet.
  • Denne linje blev fjernet.
  • Formatering blev ændret.

So, I purchased an older MacBook from work - that has been my own for 4 year, and was specced well with SSD.

Preparing the Firmware/T2

got hands on a older MacBook and it seemed fit according to the Recommended Hardware.

Also, I am equipped with 4 Reolink Cams and a Coral stick, but I have not used any Reolink specifics from Camera Specific Configuration.

And of cause, I have a Home Assistant installation running.


Indholdsfortegnelse

Preparing the MacBook Firmware/T2

I had some problems with removing the activation lock and even do an Internet recovery (that just failed with 1008F Error). but when the MACOS finally I has some problems with removing activation lock and even do an Internet recovery. but when the MACOS was cleanly installed, make sure to enable USB Boot, as this:

Installing Ubuntu

I had a lot of trouble actually getting the danm thing to boot, but on a stick with Ubuntu 22.04 (used Balena Etcher), it finally did.

But, the Mac Keyboard was not working, but I got hold of an eternal keyboard - and that worked.

I had a lot of problemes getting to use the disk, several times the installer just crashed and restarted, and or stopped with "Intallaling Installing grub on taget device failed"

But I finally gut got the installer to remove all partitions and install, with the "Use customer custom partitions" option - make sure to whipe and erasa erase all partitions on the disk

After the install af the "df -h" command told me that only 100 GB of the disk was used used - I have no clue why the installer sets it up this way..

But the fix was easy - first examine the LVM:

Kodeblok
root@beetle:/home/bnp# vgdisplay
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size <462.87 GiB
PE Size 4.00 MiB
Total PE 118494
Alloc PE / Size 25600 / 100.00 GiB
Free PE / Size 92894 / <362.87 GiB
VG UUID Dd5nRh-qzsj-z6rX-H1o1-JzMd-kXEI-7bWoEx

root@beetle:/home/bnp# vgdisplay
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata 

The import part being:

Kodeblok
Free PE / Size 92894 / <362.87 GiB

So, 362 GB not used.

Lets extend and resize:

Kodeblok
lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv


Now, we can see "Free PE / Size 0 / 0"

Kodeblok
root@beetle:/home/bnp# vgdisplay
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size <462.87 GiB
PE Size 4.00 MiB
Total PE 118494
Alloc PE / Size 118494 / <462.87 GiB
Free PE / Size 0 / 0
VG UUID Dd5nRh-qzsj-z6rX-H1o1-JzMd-kXEI-7bWoEx

The import part being:

Kodeblok
Free PE / Size 92894 / <362.87 GiB

So, 362 GB not used.

Lets extend and resize:

Kodeblok
lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

Now, we can see 0 Free PE:

Kodeblok
root@beetle:/home/bnp# vgdisplay
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size <462.87 GiB
PE Size 4.00 MiB
Total PE 118494
Alloc PE / Size 118494 / <462.87 GiB
Free PE / Size 0 / 0
VG UUID Dd5nRh-qzsj-z6rX-H1o1-JzMd-kXEI-7bWoEx

Ubuntu is installed and the complete SSD Disk installed.

Docker install

Lets install docker.io:

Kodeblok
apt install docker.io

Frigate NVR Install

Tip

First, I put all docker stuff in /opt 

the:

Kodeblok
mkdir /opt/frigate
vi /opt/frigate/config

The config file can be huge, here is my current:

Ubuntu is installed and the complete SSD Disk is now utilized.

Docker install

Lets install docker.io:

Kodeblok
apt install docker.io


Frigate NVR Install

Find information on Frigate here

Tip

First, I generally put all docker stuff in /opt - and I dont use docker-compose very much. Maybee one day...


Creating the needed Directory and the config file:

Kodeblok
mkdir /opt/frigate
vi /opt/frigate/config


The config file can be huge and there are plenty of options, here is my current:

Kodeblok
mqtt:
  host: 10.0.0.183
go2rtc:
  streams:
    frigate_front_door_cam_main: 
      - "ffmpeg:http://10.0.0.151/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=******&password=******#video=copy#audio=copy#audio=opus"
    frigate_front_door_cam_sub: 
      - "ffmpeg:http://10.0.0.151/flv?port=1935&app=bcs&stream=channel0_ext.bcs&user=******&password=******"
    frigate_behind_house_cam_main:
      - "ffmpeg:http://10.0.0.176/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=******&password=******#video=copy#audio=copy#audio=opus"
    frigate_behind_house_cam_sub:
      - "ffmpeg:http://10.0.0.176/flv?port=1935&app=bcs&stream=channel0_ext.bcs&user=******&password=******"
    frigate_carport_cam_main
Kodeblok
mqtt:
  host: 10.0.0.183
cameras:
  frigate_front_door_cam:
    ffmpeg:
      inputs:
        - path: rtsp://view:**********@10.0.0.151:554//h264Preview_01_sub
          roles:
            - detect
        - path: rtsp://view:****- "ffmpeg:http://10.0.0.191/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=******&password=******@@10.0.0.151:554//h264Preview_01_main#video=copy#audio=copy#audio=opus"
          rolesfrigate_carport_cam_sub:
            - record
    rtmp:
      enabled: False
    detect:
      width: 640"ffmpeg:http://10.0.0.191/flv?port=1935&app=bcs&stream=channel0_ext.bcs&user=******&password=******"
    frigate_big_shed_cam_main:
      height: 480
      fps: 5
    objects:
      track:
        - person
    snapshots:
      enabled: True
      timestamp: false
      bounding_box: True- "ffmpeg:http://10.0.0.108/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=******&password=******#video=copy#audio=copy#audio=opus"
    frigate_big_shed_cam_sub:
      retain:
        default: 2
    record:
      enabled: True
      events- "ffmpeg:http://10.0.0.108/flv?port=1935&app=bcs&stream=channel0_ext.bcs&user=******&password=******"

cameras:
  frigate_front_door_cam:
    ffmpeg:
        retaininputs:
        - path: default: 10
  frigate_behind_house_cam:
    ffmpeg:
rtsp://127.0.0.1:8554/frigate_front_door_cam_sub?video=copy
          input_args: preset-rtsp-restream
          inputsroles:
            - path: rtsp://view:**********@@10detect
        - path: rtsp://127.0.0.1761:554//h264Preview_01_sub8554/frigate_front_door_cam_main?video=copy&audio=aac
          roles:input_args: preset-rtsp-restream
          roles:
  -  detect
        - path: rtsp://view:**********@@10.0.0.176:554//h264Preview_01_mainrecord
    rtmp:
      rolesenabled: False
    detect:
      width: 640
 - record
    rtmpheight: 480
      enabled: False
    detect:
      width: 640
      height: 480
      fps: 5
    objects:
      track:
        - person
    snapshots:
      enabled: True
      timestamp: false
      bounding_box: True
      retain:
        default: 2
    record:
      enabled: True
      events:
        retain:
          default: 10
  frigate_behind_carporthouse_cam:
    ffmpeg:
      inputs:
        - path: rtsp://view:**********@@10127.0.0.1911:554//h264Preview_01_sub8554/frigate_behind_house_cam_sub?video=copy
          input_args: preset-rtsp-restream
          roles:
            - detect
        - path: rtsp://view:**********@@10127.0.0.1911:554//h264Preview_01_main
8554/frigate_behind_house_cam_main?video=copy&audio=aac
          input_args: preset-rtsp-restream
          roles:
            - record
    rtmp:
      enabled: False
    detect:
      width: 640
      height: 480
      fps: 5
    objects:
      fps: 5
    objects:
      track:
        - person
        - car
    snapshots:
      enabled: True
      timestamp: false
      bounding_box: True
      retain:
        default: 2
    record:
      enabled: True
      events:
        retain:
          default: 10
detectors:
  coral:
    type: edgetpu
    device: usb
birdseye:
  enabled: True
  mode: continuous
Tip

In short, the file sets up three cams (Reolink) - using:

  • The Lowres RTSP stream for the Detect role
  • The highres RTSP stream for the Recording Role
  • The tracking of persons and cars
  • The use of a Coral stick for Object processing.

And the database file /opt/frigate/frigate.yml

Kodeblok
codedatabase:
  path: /opt/frigate/frigate.db

Now we can start Frigate:

      track:
        - person
    snapshots:
      enabled: True
      timestamp: false
      bounding_box: True
      retain:
        default: 2
    record:
      enabled: True
      events:
        retain:
          default: 10
  frigate_carport_cam:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/frigate_carport_cam_sub?video=copy
          input_args: preset-rtsp-restream
          roles:
            - detect
        - path: rtsp://127.0.0.1:8554/frigate_carport_cam_main?video=copy&audio=aac
          input_args: preset-rtsp-restream
          roles:
            - record
    rtmp:
      enabled: False
    detect:
      width: 640
      height: 480
      fps: 5
    objects:
      track:
        - person
        - car
    snapshots:
      enabled: True
      timestamp: false
      bounding_box: True
      retain:
        default: 2
    record:
      enabled: True
      events:
        retain:
          default: 10
  frigate_big_shed_cam:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/frigate_big_shed_cam_sub?video=copy
          input_args: preset-rtsp-restream
          roles:
            - detect
        - path: rtsp://127.0.0.1:8554/frigate_big_shed_cam_main?video=copy&audio=aac
          input_args: preset-rtsp-restream
          roles:
            - record
    rtmp:
      enabled: False
    detect:
      width: 640
      height: 480
      fps: 5
    objects:
      track:
        - person
        - car
    snapshots:
      enabled: True
      timestamp: false
      bounding_box: True
      retain:
        default: 2
    record:
      enabled: True
      events:
        retain:
          default: 10
detectors:
  coral:
    type: edgetpu
    device: usb
birdseye:
  enabled: True
  mode: continuous


Tip

In short, the file sets up 4 cams - using:

  • go2rtc as "proxy" - this made a huge difference and improvement (Istarted using RTSP streams directly into frigate, and the recorded videos lagged and was sometimes broken). See https://docs.frigate.video/guides/configuring_go2rtc
  • The Lowres RTSP stream (sub) for the Detect role as generally recommended, as frigate only uses a 300x300 pixel image for object detection. See https://docs.frigate.video/frigate/camera_setup
  • The highres RTSP stream (main) for the Recording Role as generally recommended.
  • input_args: preset-rtsp-restream as recommedded for Reolink (see https://docs.frigate.video/configuration/camera_specific)

  • Recording event on object detection
  • Take snapshots on event
  • The tracking of persons and cars
  • The use of a Coral stick for Object processing - instead of the CPU

Reference to the configuration file is here

And the database file /opt/frigate/frigate.yml

Kodeblok
codedatabase:
  path: /opt/frigate/frigate.db


Now we can start Frigate:

Kodeblok
docker run -d \
  --name frigate \
  --restart always \
  --mount type=tmpfs,target=/tmp/cache,tmpfs-size=1000000000 \
  --device /dev/bus/usb:/dev/bus/usb \
  --shm-size=256m \
  -v /opt/frigate/media:/media/frigate \
  -v /opt/frigate/config.yml:/config/config.yml:ro \
  -v /etc/localtime:/etc/localtime:ro \
  -e FRIGATE_RTSP_PASSWORD='**********' \
  -p 5000:5000 \
  -p 1935:1935 \
  ghcr.io/blakeblackshear/frigate:stable


This should start Frigate and show it on http://10.0.0.164:5000:

Image Added


If the interface is not up, troubleshoot the logs with:

Kodeblok
docker logs --tail 50 --follow --timestamps "frigate"


Heres a view on object detection:

Image Added

And a snapshot with an object detection (the yellow box is the bounding_box in the config file):

Image Added

Coral Stick on Linux

I had some problems getting the Coral stick to work (the Frigate docker image has all needed for it), but it did not show up as an Device on the MacBook:

Kodeblok
root@beetle:/home/bnp# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 05ac:1463 Apple, Inc. USB-C Digital AV Multiport Adapter
Bus 001 Device 002: ID 05ac:1017 Apple, Inc. USB2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 002: ID 05ac:1018 Apple, Inc. USB3.1 Hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 002: ID 0bda:8153 Realtek Semiconductor Corp. RTL8153 Gigabit Ethernet Adapter
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


Loking at the links for the 2 versions - USB and M2

Kodeblok
echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get install gasket-dkms libedgetpu1-std

So it seems my stick is detected as a PCI Device. Theres some more info on what to use as docker parameter here:

Kodeblok
-
Kodeblok
docker run -d \
  --name frigate \
  --restart always \
  --mount type=tmpfs,target=/tmp/cache,tmpfs-size=1000000000 \
  --device /dev/bus/usb:/dev/bus/usb \
  --shm-size=256m \
  -v /opt/frigate/media:/media/frigate \
  -v /opt/frigate/config.yml:/config/config.yml:ro \
  -v /etc/localtime:/etc/localtime:ro \
  -e FRIGATE_RTSP_PASSWORD='**********' \
  -p 5000:5000 \
  -p 1935:1935 \
  ghcr.io/blakeblackshear/frigate:master-433bf69-tensorrt

This should start Frigate and show it on http://10.0.0.164:5000:

Image Removed

...

 # passes the USB Coral, needs to be modified for other versions
- /dev/apex_0:/dev/apex_0 # passes a PCIe Coral, follow driver instructions here https://coral.ai/docs/m2/get-started/#2a-on-linux
- /dev/dri/renderD128 # for intel hwaccel, needs to be updated for your hardware


And now its visible:

Kodeblok
root@beetle:/home/bnp# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 05ac:1463 Apple, Inc. USB-C Digital AV Multiport Adapter
Bus 001 Device 002: ID 05ac:1017 Apple, Inc. USB2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 003: ID 1a6e:089a Global Unichip Corp.
Bus 006 Device 002: ID 05ac:1018 Apple, Inc. USB3.1 Hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 002: ID 0bda:8153 Realtek Semiconductor Corp. RTL8153 Gigabit Ethernet Adapter
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub