Hyperion_ng i ESP32-CAM

Hyperion - opensurce odpowiednik ambiligtht

Po ośmiu latach padła mi RPi i zakup nowej w chwili obecnej był nieopłacany.
Postanowiłem to przerobić na miarę posiadanych środków.
Jako źródło obrazu - ESP32_CAM.
Przerobiłem trochę demo CameraWebSerwer.ino (źródła w załączeniu).
CameraWebServer.zip (55,0 KB)

Zmieniłem domyślną rozdzielczość kamery na 320x240 - taka rozdzielczość jest w zupełności wystarczająca i nie powoduje opóźnień.
Dodałem możliwość sterowania urządzeniami prze IR za pomocą url i OTA.

Hyperiona, który analizuje obraz i oblicza kolory średnie dla sterowania ledami postawiłem na docker.

compse yaml:

version: "3.6"
# dostosować 
networks:
  adrIoT:
    external: true
    name: "adrIoT"

services:
  hyperion-ng:

    cap_drop:
      - "AUDIT_CONTROL"
      - "BLOCK_SUSPEND"
      - "DAC_READ_SEARCH"
      - "IPC_LOCK"
      - "IPC_OWNER"
      - "LEASE"
      - "LINUX_IMMUTABLE"
      - "MAC_ADMIN"
      - "MAC_OVERRIDE"
      - "NET_ADMIN"
      - "NET_BROADCAST"
      - "SYSLOG"
      - "SYS_ADMIN"
      - "SYS_BOOT"
      - "SYS_MODULE"
      - "SYS_NICE"
      - "SYS_PACCT"
      - "SYS_PTRACE"
      - "SYS_RAWIO"
      - "SYS_RESOURCE"
      - "SYS_TIME"
      - "SYS_TTY_CONFIG"
      - "WAKE_ALARM"

    container_name: "hyperion-ng"
    entrypoint: ["/bin/sh", "-c", "while [ ! -e /dev/video9 ]; do echo 'Czekam na /dev/video9...'; sleep 2; done; exec /usr/bin/hyperiond"]

 
    devices:
      - "/dev/video9:/dev/video9"

    dns:
      - "8.8.8.8"

#    entrypoint:
#      - "/usr/bin/hyperiond"

    environment:
      - "TZ=Europe/Warsaw"
      - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      - "APP_NAME=Hyperion.NG"

    hostname: "hyperion"

    image: "sirfragalot/hyperion.ng:latest"


    logging:
      driver: "json-file"
      options: {}

#    networks:
#      - "adrIoT"
#dostosować
    networks:
      adrIoT:
        ipv4_address: 192.168.X.XXX

    ports:
      - "19444:19444/tcp"
      - "19445:19445/tcp"
      - "8090:8090/tcp"

    privileged: true

    restart: "always"

    security_opt:
      - "label=disable"
#dostosować
    volumes:
      - "/home/kontenery/hyperion:/root/.hyperion"


Obliczone kolory wysyła do taśmy LED NeoPixlel, sterowanej przez ESP32 z zainstalowanym WLED
https://kno.wled.ge/

Kamera zainstalowana jest naprzeciw TV - nie jest to warunek konieczny ponieważ Hyperion radzi sobie z trapezem.

Mam kino domowe sterowane tylko przez IR więc przerobiłem moduł ESP32-CAM.
Wylutowałem LED Flash i w to miejsce wlutowałem nadajnik IR (z opornikiem 22ohm).
Sterowanie jest z użyciem biblioteki IRRemoteESP8266.

Blokowo to wygląda tak:

ESP32-CAM+IR ----> Hyperion (docker) ----> ESP32 WLED

Ponieważ zainteresowanie może być zerowe - a sam jestem leniwy -ograniczyłem się tylko do podstawowych informacji. jeśli będzie potrzeba to rozwinę. Najwięcej zabawy było z utworzeniem kamery wirtualnej na host dockera.

2 polubienia

Tu zapewne się mylisz…
Wydaje się, że kluczowe informacje będą mówiły o użyciu kamery.

To ciekawe, czy można użyć kamery internetowej?
Widzę projekt HyperVision, ale nie bardzo na razie wiem jak to działa.

Wiem, że jesteś leniwy, ale może wskażesz jakiś link do tych kluczowych informacji, które mówią o użyciu kamery i przekazywaniu obrazu do Hyperion?
Widzę, że można postawić go jako AddOn:

Jest też możliwość podpięcia kamery USB pod HA:

Dla posiadaczy jakiegoś TVBox, którzy szukają dla niego zastosowania, polecam projekt CoreElec. Obsługuje jako dodatek Hyperion.NG (do doczytania dla zainteresowanych).

@RobinI30
Bardzo ciekawy temat :+1:

Można -jeśli masz dostęp do strumienia z kamery.
Na przykładzie debiana:
Zaktualizuj listę pakietów:

sudo apt update

Zainstaluj potrzebne komponenty:

sudo apt install v4l2loopback-dkms v4l2loopback-utils ffmpeg -y

Po instalacji załaduj moduł jądra:

sudo modprobe v4l2loopback devices=1 video_nr=9 card_label="VirtualCamera" exclusive_caps=1

Powinno pojawić się urządzenie:

ls /dev/video*

Teraz uruchom ffmpeg, by przekierować strumień z kamery IP (np. MJPEG lub RTSP) do /dev/video9:

ffmpeg -i rtsp://user:password@192.168.0.101:554/stream1 -f v4l2 -vcodec rawvideo -pix_fmt yuv420p /dev/video9

albo (dla MJPEG):

ffmpeg -i http://192.168.0.101:81/stream -f v4l2 -vcodec rawvideo -pix_fmt yuv420p /dev/video9

ponieważ moja kamera arduino ma stream address http://192.168.0.101:81/stream

możesz dodać też ograniczenia dla wydajności:

-s 320x240 -r 10

w tej chwili powinneś mieć w sytemie urządzenie video9, które powinno być widziane przez hyperiona.

Pozostaje tylko zautomatyzować uruchomienie po restarcie.

teraz trzeba przekazać je do kontenera ( jeśli instalacja jest w kontenerze).

    devices:
      - "/dev/video9:/dev/video9"

Dla innych sposobów instalacji nie rozkminiałem - a szczególnie tego addone.
Nawet nie wiem czy jest to “server” czy “client” hyperiona.

Moja instalacja jest na proxmox więc było trochę więcej kłopotów z instalacją pakietów na host… ale możliwe.

to jest przypadek gdy CoreElec jest źródłem obrazu dla hyperion. Rozwiązanie z kamera uniezależnia od źródła sygnału i efekt możesz mieć nawet gdy oglądasz TVRepublika z anteny naziemniej :stuck_out_tongue_winking_eye:

Myślę,że najproście byłoby to zaistalować na maszynie VM od początku dokońca w/g dostępnych poradników.

Przy kamerze internetowej USB,powinna się ona pojawić z automatu jako /dev/videoX

1 polubienie