Dynamiczne wyświetlanie obrazu z kamery w picture glance

Hej. Chciałem stworzyć kartę “obraz (glance)”, która będzie wyświetlać ostatni screenshoot z kamery.
I tak:
Kamera robi screenshoot do katalogu, dodając unikalną nazwę na podstawie takiej składni:

filename: >-
/config/www/cam/camera.lpr_{{ now ().year }}_{{ now ().month }}_{{ now ().day }}_{{ now ().hour }}_{{ now ().minute }}.jpg"

następnie stworzyłem encje kamery:

camera:
- platform: local_file
name: local_cam
file_path: /config/cam/camera.lpr_{{ now ().year }}_{{ now ().month }}_{{ now ().day }}_{{ now ().hour }}_{{ now ().minute }}.jpg"

Dodając kartę obraz glance, kamera local_cam jest dostępna, ale nie wyświetla ostatniego zrzutu erkanu, tj wogóle nic nie wyświetla.

Czy file_path powinien wyglądać inaczej ? Lub jakiej ściezki użyć, aby “najświeższe” zdjęcie było wskazywane

karty opisane jako “drop” to picture glance w którym dodana jest fake kamera z platformy local_file

Podałeś dwie różne ścieżki do pliku :wink:, przy okazji polecam zacząć korzystać z Media w Home Assistant - #3 przez macek .

Nie napisałeś w jaki sposób robisz screenshoot-a. Dla testu uruchom poniższy skrypt którego “wywołanie” zrobi zawsze “świeże” zdjęcie. I dopiero to zdjęcie spróbuj wyświetlić w karcie.

reolink_zdjecie:
  alias: Zdjęcie z kamery
  icon: mdi:webcam
  sequence:
  - service: camera.snapshot
    data:
      entity_id: camera.reolink_profile000_mainstream
      filename: /config/www/kamera/reolink.jpg

Troche testów robiłem i pomieszałem, ale wczesniej próbowałem z tą samą ścieżką.

@rafkan screenshot robie z automatyzacji:

action:
  - service: camera.snapshot
    data:
      filename: >-
        /config/www/cam/camera.lpr_{{ now ().year }}_{{ now ().month }}_{{ now
        ().day }}_{{ now ().hour }}_{{ now ().minute }}.jpg"
    target:
      entity_id: camera.lpr

Istnieje jeszcze jeden “problem” (na własne życzenie): robisz snapshota gdzie nazwa zawiera aktualną minutę, jeżeli po minucie próbujesz wyswietlić taki obraz korzystając z now ().minute to niestety takiego pliku po prostu nie ma, przykład:
13:15: {{ now ().hour }}{{ now ().minute }}.jpg czyli snapshot ma w nazwie 1315.jpg
13:16: {{ now ().hour }}{{ now ().minute }}.jpg czyli próbujesz wyświetlić plik z nazwą 1316.jpg a takiego pliku przecież nie ma.

Nazwa pliku powinna być niezmienna, musisz tylko wymusić np. w automatyzacji wykonywanie snapshotów co określony czas np. co minutę albo robić snaphosty dynamicznie, np. w momencie wykrycia ruchu.

1 polubienie

Ok zmieniłem, aby minuta nie była dopisywana i tak: w fake_kamerze i usługe camera.snapshoot mam ustawioną ścieżkę:
file_path: /config/www/cam/camera.lpr_{{ now().strftime("%Y%m%d-%H%M")}}.jpg

jednak nadal brak efektu.
Podobnie mam też skonfigurowany telegram i tam działa ok

@shoties krótkie testy u siebie i trochę się wyjaśniło:

camera:
  - platform: local_file
    file_path: '/media/snapshot/ip_webcam_{{ now().strftime("%Y%m%d")}}.jpg'

To jest ścieżka w systemie linux więc to {{ now().strftime("%Y%m%d")}} nie zadziała bo to przecież składnia Pythona :grin:, powinna być składnia shella czyli:

➜  / date  +"%H""%M"
1417
➜  / date  +"%Y""%m""%d"
20221011
➜  / date  +"%Y""%m""%d"-"%H""%M"
20221011-1418

czyli powinno działać tak:

camera:
  - platform: local_file
    file_path: '/media/snapshot/ip_webcam_`date +"%Y""%m""%d"`.jpg'

ale encja nie zmienia dynamicznie ścieżki do pliku:

image

Pomysły dlaczego to nie działa już mi się skończyły.

1 polubienie

Bardzo Ci dziękuje za wnikliwe spojżenie. No nic, zostawie na razie ścieżke statyczną camera.jpg. Najważniejsze, że w ten sposób działa, choć fajnie by było mieć historie zrzutów

Ale to żaden problem. Snap który zapisuje Ci tylko jeden plik będziesz miał do karty a ten z czasem zostaw Sobie do podglądu historii.

1 polubienie

Eureka :slight_smile: no tak, przecież moge robić 2 zrzuty :slight_smile:

@shoties, ponowne doczytanie dokumentacji Local File - Home Assistant uświadomiło mnie jak to faktycznie działa:

  • tworzymy wirtualną kamerę (na starcie scieżka pliku może byc dowolna):
# Example configuration.yaml entry
camera:
  - platform: local_file
    name: local_file
    file_path: /tmp/image.jpg
  • za pomocą usługi zmieniamy obraz (plik) wyświetlany przez kamerę:
service: local_file.update_file_path
data:
  entity_id: camera.local_file
  file_path: /media/snapshot/ip_webcam_{{ now().strftime("%Y%m%d")}}.jpg  

Przetestowane, u mnie działa.

1 polubienie

Jesteś wielki, działa i umnie ! Dziekuje serdecznie.

Odkryłem dodatkowo, że w kamerze mam możliwość pobrania still image poprzez wywołania URL:
http://admin:pass@IP/ISAPI/Streaming/channels/101/picture
To by było całkiem dobre rozwiązanie aby wywołać bezpośrednio screenshoot na przykłądowy picture-glance, jednak coś co nie kończy się na .jpg i zaczyna od http, to nie da się teog wyświetlić w ten sposób.

Czy miałbyś jakiś pomysł ?

A w jaki sposób teraz masz dodaną kamerę, z której robisz screenshoty? Integracja Generic Camera - Home Assistant? W tej integracji możesz podać strumień z kamery albo link do statycznego obrazu:
" You must enter a URL in at least one of the fields Still Image URL or Stream Source URL, the others are optional."
Możesz także, po prostu, w dashboarcie, w Konfiguracja karty Obraz (glance) podać scieżkę do Still Image URL kamery.

Tak, zmieniłem z ffmpeg na generic i wygląda to w ten sposób:

Stream się pokazuje jako encja kamery - wiadomo
Still image po wklejeniu do przeglądarki, również się pokazuje zfreezowana klatka

Jednak w konfiguracji obraz glance czy w picture - wskasując na adres: “http://10.4.4.3/ISAPI/Streaming/channels/101/picture” nic się nie wyświetla (bo to nie jpg?)

Konfiguracja Generic Camera powinna być wykonana przez GUI HA:Link to Integrations: add integration – My Home Assistant

Czy w linku podajesz dane do autentykacji user/password? Czy obraz możesz zobaczyć bez podawiania usera i hasła?

Konfiguracja Generic Camera powinna być wykonana przez GUI HA: Link to Integrations: add integration – My Home Assistant

Czy w linku podajesz dane do autentykacji user/password? Czy obraz możesz zobaczyć bez podawiania usera i hasła?

  • Zrobione teraz

Link: http://admin:pass@10.4.4.3/ISAPI/Streaming/channels/101/picture? otwiera snapa w przeglądarce (wczośniej podałem linka bez autentyfikacji - okazało się że z cache zaciągnął logowanie).
Jeżeli wkleje w/w link do VLC i otworze strumień w sieci to mrugnie 1 klatką

Pokaż co masz wpisane w tych polach:


Nie ma mnie obecnie przy serwerze testowym, ale mam tak:
1: http://admin:pass@10.4.4.3/ISAPI/Streaming/channels/101/picture?
2: rtsp://admin:pass@110.4.4.3:554/Streaming/Channels/101/
3: TCP
4: basic (ustawiłem basic/digest w kamerze)
5. admin
6: pass
7: 2
8: bez weryfikacji

@shoties sprobuj tak:

1: http://10.4.4.3/ISAPI/Streaming/channels/101/picture?
2: rtsp://110.4.4.3:554/Streaming/Channels/101/
3: TCP
4: basic (ustawiłem basic/digest w kamerze)
5. admin
6: pass
7: 2
8: bez weryfikacji

ewentualnie stwórz drugą encję camera tylko z still_image:

1: http://10.4.4.3/ISAPI/Streaming/channels/101/picture?
2:
3: HTTP
4: basic (ustawiłem basic/digest w kamerze)
5. admin
6: pass
7: 2
8: bez weryfikacji