Kamery na świat, czyli scrape sensor, home assitant i traxelektronik.pl

Każdy z nas – rozwijających swój inteligentny dom, chciałby mieć podgląd na ulice wokół swojego domu. Cel? Podgląd korków, obserwacja sąsiadów etc.

Na szczęście jest coś takiego jak traxelektronik.pl.

To firma która regularnie pokrywa nasz kraj kamerami a co więcej obraz z nich udostępnia na swoich stornach internetowych.

Dodając do tego HOME ASSISTANT i scrape sensor – możemy uzyskać to co chcemy.

 

Jak to zrobić?

Na początku wyszukujemy interesujące nas kamery na stronie:  https://www.traxelektronik.pl/pogoda/kamery/index.php

Następnie wybieramy interesującą nas miejscowość i zapamiętujemy adres z przeglądarki

 

W demonstrowanym przypadku naszym adresem będzie:

https://www.traxelektronik.pl/pogoda/kamery/kamera.php?pkamnum=1960

No i teraz do dzieła. W home assistant definiujemy sensory typu scrape jak w poniższym listingu:


# kamerki zewnętrzne, skrapowanie
# https://www.traxelektronik.pl/pogoda/kamery/

- platform: scrape
resource: https://www.traxelektronik.pl/pogoda/kamery/kamera.php?pkamnum=1960
name: Url kamera traxel skawina (na rzeszów)
id: url_kamera_traxel_skawina_na_rzeszow
select: "#kam1 ~ a:nth-of-type(4)"
#kam1 - numer kolejnej kamery
value_template: >-
{{ value.split("'")[1] }}
attribute: href
scan_interval: 60

- platform: scrape
resource: https://www.traxelektronik.pl/pogoda/kamery/kamera.php?pkamnum=1960
name: Url kamera traxel skawina (na katowice)
id: url_kamera_traxel_skawina_na_katowice
select: "#kam0 ~ a:nth-of-type(4)"
#kam1 - numer kolejnej kamery
value_template: >-
{{ value.split("'")[1] }}
attribute: href
scan_interval: 60
* Z uwagi, że WP wycina niektóre znaki, plik ten do pobrania jest również artykułu. (Jeśli ktoś sobie z tym poradził – proszę o info)

 

U mnie definicja sensorów znajduje się w pliku sensor.yaml (polecam osobny plik).

Jeżeli u Ciebie sensory definiowane są w pliku configuration.yaml – musisz dodać wpis:

sensor:

przed definicją sensorów.

Nie będę opisywał szczegółowo jak działa sensor scrape. W skrócie… wykorzystując tak zwane selektory CSS wyszukujemy zdjęcie kamery:

select: “#kam0 ~ a:nth-of-type(4)”

A następnie wyciągamy potrzebną informację za pomocą:

value_template: >- {{ value.split(“‘”)[1] }} attribute: href

I proces ten przeprowadzamy dla każdej kamery którą chcemy mieć w swoim systemie inteligentnego domu.

 

Pozostaje kwestia definicji kamer. Realizujemy to za pomocą standardowej kamery HA generic. Poniżej skrypt:

# drogowe
- platform: generic
name: skawina (na rzeszów)
id: traxel_skawina_na_rzeszow
still_image_url: >-
{{ states('sensor.url_kamera_traxel_skawina_na_rzeszow') }}

- platform: generic
name: skawina (na katowice)
id: traxel_skawina_na_katowice
still_image_url: >-
{{ states('sensor.url_kamera_traxel_skawina_na_katowice') }}

U mnie definicja kamer znajduje się w pliku camera.yaml (polecam osobny plik).

Jeżeli u Ciebie kamery definiowane są w pliku configuration.yaml – musisz dodać wpis:

camera:

przed definicją kamer.

 

Tak zdefiniowane kamery stają się widoczne w naszym panelu home assistant. U mnie dziś pada:-)

 

Pliki do artykułu:

camera.yaml, sensor.yaml > homeasistant-kamery-scrap-sensor

 

11 Komentarze

  1. Cześć, wkleiłem Twoje configi do siebie, niestety nic nie wyświetla, w logach “ERROR (MainThread) [homeassistant.components.generic.camera] Error getting new camera image: unknown”.
    Próbowałem również na zwykłym http, to samo. Jakaś podpowiedź?

  2. Cześć,
    Świetny pomysł, posiadam czystą instancje HA z obrazem Hassio na dockerze.
    Po utworzeniu osobnych plików sensor.yaml, camera.yaml wraz z !include w configuration.yaml, wklejeniu kodu z pobranego archiwum podczas walidacji konfiguracji otrzymuję następujący błąd:

    Invalid config for [sensor.scrape]: [id] is an invalid option for [sensor.scrape]. Check: sensor.scrape->id. (See ?, line ?).
    Invalid config for [sensor.scrape]: [id] is an invalid option for [sensor.scrape]. Check: sensor.scrape->id. (See ?, line ?).
    Invalid config for [camera.generic]: [id] is an invalid option for [camera.generic]. Check: camera.generic->id. (See ?, line ?).
    Invalid config for [camera.generic]: [id] is an invalid option for [camera.generic]. Check: camera.generic->id. (See ?, line ?).

    Czy spotkałeś się może z takim problemem?

  3. Wszystko ładnie działało od miesięcy, jednak najprawdopodobniej ostatnio administratorzy strony coś pozmieniali i nie mogę już wydobyć zdjęć.

    Problem był zarówno z modułem scrape który wycina link do najnowszego zdjęcia oraz z modułem camera generic który wyświetla zdjęcie z linku.

    Problem ze scrapem rozwiązałem poprzez dodanie :
    headers:
    User-Agent: Mozilla/5.0

    Niestety camera generic nie obsługuje takich warunków.I otrzymuje poniższy błąd.

    Ktoś ma pomysł jak to rozwiązać ? Linki wklejone w przeglądarkę pokazują obraz, jednak strona nie przepuszcza HA.

    Logger: homeassistant.components.generic.camera
    Source: components/generic/camera.py:155
    Integration: generic (documentation, issues)
    First occurred: 15:35:40 (45 occurrences)
    Last logged: 15:37:20
    Error getting new camera image from S8 Węzeł Wisłostrada 2: Client error ‘403 Forbidden’ for url

Skomentuj Emil Anuluj pisanie odpowiedzi

Twój adres email nie zostanie opublikowany.


*