Home assistant powiadomienie na telefon ze zdjęciem

OK, zrobiłem snapshot z kamery

service: camera.snapshot
data:
  filename: /media/local/picture.jpg
target:
  entity_id: camera.192_168_0_101

Plik zapisany, dostępny w odtwarzaczu mediów.
Kiedy probuje dodac ten plik w powiadomeniu, to też przychodzi bez zdjęcia.

action:
  - service: notify.mobile_app_oppo
    data:
      message: test
      data:
        image: /media/local/picture.jpg
mode: single

Gdzie robię błąd?

A możesz otworzyć ten plik w przeglądarce w takiej postaci
http://192.168.1.220:8123/media/local/picture.jpg podając swoje IP?

Błąd: 401: Unauthorized

Dlatego nie będziesz miał zdjęć.
Pliki umieść w katalogu www /config/www/
ścieżka będzie wyglądała tak
http://192.168.1.220:8123/local/picture.jpg

image: /local/picture.jpg

Screenshot - 10.09.2023 , 09_17_10

W katalogu www możesz utworzyć folder dla plików z kamery

Zapis do folderu media w Twoim przypadku powinien być:

/media/picture.jpg

a odczyt /media/local/picture.jpg

HA od dawna zaleca używanie Media do przechowywania zdjęć bo sposob opisany przez Ciebie powoduje, że zdjecia są dostepne z internetu dla każdego (jeżeli masz wystawione HA do internetu).

Co to znaczy że masz wystawiony do internetu ?

Tzn. używasz domeny do zdalnego połączenia z HA, wtedy jeśli używasz folderu www a ktoś zna Twój adres domenowy może odczytać wszystko co tam się znajduje bez autoryzacji.

Jak ktoś może się dostać do folderu www to może wyrządzić więcej szkód jag oglądanie zdjęć.

/config/www/community/

Dorzucę się i ja do tematu.
Dotychczas operowałem na snapshotach w config/www i działało, ale próbuję przejść na to “bezpieczniejsze” zapisywanie w media i jedyne co uzyskuje to błąd:

Login attempt failed

Login attempt or request with invalid authentication from ip.ip.ip.ip (ip.ip.ip.ip). See the log for details.

Powiadomienie przychodzi, ale bez zdjęcia

Mój kod:

alias: powiadomienie snapshot test
description: ""
trigger:
 - platform: state
   entity_id:
     - light.reflektor_ulica
   to: "on"
   for:
     hours: 0
     minutes: 0
     seconds: 0
condition: []
action:
 - service: camera.snapshot
   data:
     filename: /media/test.jpg
   target:
     entity_id:
       - camera.cam_ulica_substream
 - service: notify.mobile_app_sm_f711b
   data:
     message: od strony ulicy
     title: RUCH
     data:
       image: >-
         https://tuneltunel.paczka.pro/media/local/test.jpg?v={{ 
         now().timestamp() }}
       channel: motion
       notification_icon: mdi:motion
mode: single

W czym problem?
Próbowałem różnych kombinacji media/local zapisu i odczytu czy to z samego media lub media/local

Źle podajesz parametry, proponuje przy testowaniu skorzystać z Narzędzia Deweloperskie → USŁUGI:

service: notify.mobile_app_sm_f711b
data:
    message: od strony ulicy
    title: RUCH
      data:
       image: "/media/local/test.jpg"
       channel: motion
       notification_icon: mdi:motion

Plik test.jpg znajduje sie w katalogu:
image
a odwołanie do niego to /media/local/test.jpg

U mnie działa, nie mam bramki AIS ale też korzystam z dostępu do HA przez dodatek Cloudflared.

Podaj dokladną ścieżkę tego zapisanego pliku picture.jpg bo wg mnie jest w menu Media → My media → local i tu jest dopiero plik picture.jpg. Aby taki plik wysłać w powiadomieniu należy użyć takiej scieżki:

      data:
        image: /media/local/local/picture.jpg

Wszystko jest opisane w dokumentacji HA - Standard Attachments | Home Assistant Companion Docs :


Tłumaczenie:
Plik przechowywany w katalogu /media/file.jpg na dysku jest reprezentowany w powiadomieniu jako /media/local/file.jpg. Zwróć uwagę na dodanie local w ścieżce .

Powiadomienia działają, ale przychodzą bez zdjęcia.
Snapshot się wykonuje i zapusje w /media/local/testx.jpg
Próba wysłania w powiadomieniu go zarówno jako /media/local/testx.jpg oraz /media/local/local/testx.jpg powoduje, iż powiadomienie wychodzi, ale bez zdjęcie.
Każdorazowo natomiast dostaję powiadomienie i obawiam się, że to powoduje problem
`Login attempt failed

Login attempt or request with invalid authentication from ip.ip.ip.ip (ip.ip.ip.ip). See the log for details.`

Nie korzystam z bramki Ai Speakera, a jedynie uruchomiłem ich darmowy tunel.

Może ten Twój folder local coś tu miesza ? Spróbuj zapisać do folderu

 /media/ruch/testx.jpg

a wysłać powiadomienie /media/local/ruch/testx.jpg

Sprawdziłem, że to dostaję jak podam niewłaściwą ścieżkę do pliku.

Niestety jest to samo.
Snapshot wykonany, zapisany we wskazanym folderze, powiadomienie wysłane bez zdjęcia i pojawia się ww. error.

Usunąłem nawet ten szablon z timestamp, ale to nic nie zmienia

Jakby folder media nie był dostępny z zewnątrz.
Z poziomu przeglądarki rowniez 401: Unauthorized

Nie wiem dlaczego u Ciebie to nie działa, u mnie chodzie bez problemu (dostęp przez CF).

action:
  - service: camera.snapshot
    data:
      filename: /media/doorbell/furtka.jpg
    target:
      entity_id: camera.hikvision_ipcam_b5_mainstream
  - delay:
      hours: 0
      minutes: 0
      seconds: 5
      milliseconds: 0
  - service: notify.mobile_app_mi_max_3
    data:
      message: ktoś dzwonił do furtki
      title: Powiadomienie doorbell
      data:
        image: /media/local/doorbell/furtka.jpg

może problem leży tutaj

ja używam dodatku CF i wymaga on ustawienia w pliku konfiguracyjnym

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 172.30.33.0/24

ponieważ HA blokuje żądania od serwerów proxy i trzeba mu powiedzieć aby nie blokował żądania od CF. A jak jest w dokumentacji Twojego tunelu ?

Z ciekawostek to wyslanie snapshota z pelnego adresu, tj.: https://tuneltunel.paczka.pro/home/homeassistant/homeassistant/media/testx2.jpg rownież nie wysyła zdjęcia, ale też nie wywołuję błędu.

Z tunelem chyba problemu nie ma, bo z lokalizacji config/www działa prawidłowo.

W configuration.yaml mam wpisane tak, ale moj tunel paczka.pro to rownież cloudflare

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 172.30.33.0/24
    - 127.0.0.1
    - ::1

Edit:
Przy próbie dostępu przez przeglądarkę przy wpisaniu jak mniemam błędnej ścieżki jest 404: Not found, a przy poprawnej 401: Unauthorized

Wszystko wskazuję na to, że jest coś na rzeczy z autoryzacją??

Edit 2: czy w configuration.yaml masz jakies wpisy odnośnie media? Media_dir?

@mariusz2137 mam prośbę abyś wysłał powiadomienie z Narzędzia deweloperskie z plikiem, który już istnieje w Media.

No i to działa.
Usługa snapshot nadaje złe uprawnienia?

To teraz uwaga!

Snapshot z poziomu narzedzi deweloperskich tworzy plik w media i notify z tego samego poziomu jest w stanie wyslać ten utworzony plik

@mariusz2137 a wiesz dlaczego nie działało wcześniej? bo próbowałeś wysłać plik, ktory jest w trakcie tworzenia - robil sie snapshot a to trochę trwa a Ty próbowałeś go już wysłać, zrob delay jak u @MariuszAK i powinno działać, tak przypuszczam.

Sprawdzałem wczesniej z opóźnieniem 10s i jest to samo.
Login attempt failed i pusta notyfikacja.

Nie wiem czy czasem sam sobie nie zakręciłem tego…
Dlaczego wszystkie Wasze przykłady snapshotów i powiadomień działają na ścieżkach lokalnych, w sensie ścieżka pliku to /media/photo.jpg, a ja każdorazowo adresuje ścieżķę zdjęcia do powiadomienia podając cały adres tunelu.paczka.pro/media/local/photo.jpg?

Usuwając ze ścieżki pliku do wysłania w powiadomieniu adres https://adrestunelu i zostawiając tylko ścieżkę lokalną wszystko działa i nawet delay’a nie trzeba robić…

Teraz działa… jprdl :face_with_peeking_eye:

alias: _test furtka media
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.furtka_contact
    to: "on"
    for:
      hours: 0
      minutes: 0
      seconds: 2
condition: []
action:
  - service: camera.snapshot
    data:
      filename: /media/snapshot/furtka.jpg
    target:
      entity_id:
        - camera.cam_ogrod_substream
  - service: notify.mobile_app_sm_f711b
    data:
      message: otwarta
      title: FURTKA
      data:
        image: media/local/snapshot/furtka.jpg?v={{  now().timestamp() }}
        channel: otwarte
        notification_icon: mdi:door-open
mode: single