Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Obsługa kamery IP Dahua IPC-K15P za pomocą skryptu

pako_pr 20 Jul 2020 19:39 1077 0
Optex
  • #1
    pako_pr
    Level 12  
    Witam,

    dawno nie pisałem nic na tym forum ale teraz chciałbym zaoszczędzić innym czasu i podzielić się tym co zrobiłem.

    Kupiłem prostą i tanią kamerę IP Dahua IPC-K15P do monitorowania wejścia do mojego salonu przez balkon, ponieważ mieszkam na parterze. Przy kupnie kamery miałem 3 założenia - ma być tania, obsługiwać protokół rtsp i mieć czujnik ruchu PIR. Kamerę założyłem, skonfigurowałem i wszystko działało. Szybko jednak dedykowana aplikacja zaczęła być "uciążliwa" (spodziewałem się tego, dlatego z założenia chciałem używać protokołu rtsp). Zacząłem integrować kamerę z moim Raspberry Pi 3 B+ (Raspbian). Na początek podgląd na żywo - bo do swojego Raspberry mam dostęp "z zewnątrz" poprzez protokół VNC. Tutaj nie było problemu, stare dobre VLC i rtsp. Scieżki nawet nie musiałem szukać (jak to bywa w chińskich kamerach), to po prostu (również port domyślny 554):

    rtsp://<uzytkownik>:<haslo>@<ip_kamery>

    Kolejnym krokiem było "uwiecznianie" tego co kamera "widzi" .Nie będę za każdym razem pisał, że to co robiłem daje dedykowana aplikacja. Świadomie z niej rezygnowałem, aby wszystko zaimplementować na moim Raspberry i nie być zależnym od aktualizacji tej aplikacji, połączenia z jakimiś "chmurami" i w pewnym momencie informacji "out of support". Zdecydowałem się na zapis zrzutów (zdjęć) w chmurze. Założyłem konto na najpopularniejszym serwisie, który prócz e-mail'a oferuje też przestrzeń dyskową w chmurze. Za pomocą rclone (opisy można łatwo znaleźć a to nie clue tego posta) zamontowałem dysk z chmury do mojego linuxa i za pomocą skryptu zapisuje tam co minutę zrzuty z kamery, oczywiście zadbałem o usuwanie najstarszych zrzutów.

    Najważniejszym tematem, który chce opisać to użycie czujnika ruchu PIR. Początkowo w konfiguracji kamery skonfigurowałem klienta smtp do wysyłania maili i opcję robienia serii zdjęć po wykryciu ruchu oraz wysyłanie ich na zdefiniowany adres e-mail. Bardzo fajna opcja, kiedy ktoś wejdzie przez balkon a nas nie ma w mieszkaniu, mniej fajna gdy sami jesteśmy w mieszkaniu, wtedy dostajemy tony maili. Trzeba więc włączać tą opcje kiedy wychodzimy a wyłączać kiedy wracamy. I tu pojawił się największy problem. Jedyną wspieraną opcją włączania/wyłączania było zalogowanie się do interfejsu kamery poprzez przeglądarkę (z obsługą javy) i klikanie w wiele zakładek, aż znajdziemy checkbox dla alarmu PIR, zaznaczymy go i zatwierdzimy zmianę konfiguracji. Po pierwsze jest do czasochłonne, po drugie uciążliwe a po trzecie trzeba to zrobić interaktywnie. Tu pojawił się główny temat, jak zrobić to za pomocą skryptu na mojej malince, stratowanego w szybki i łatwy sposób (tu już nieważne jaki, komendą, harmonogramem czy kliknięciem w jakąś kontrolkę, na przykład w Domoticzu). Moja kamera nie obsługuje ssh i telnet'u, pozostało mi "podsłuchanie" jak "rozmawia" z nią moja przeglądarka. Za pomocą sniffer'a tcp zauważyłem, że przeglądarka używa metody configManager. Przeszukałem dziesiątki forów w różnych językach i znalazłem, że Dahua udostępnia kilka API wywoływanych przez przeglądarkę. W internecie krąży plik DAHUA_IPC_HTTP_API_V1.00x. Nie ma tam tego czego szukam ale znalazłem tam informacje jak użyć metody getConfig i setConfig poprzez przeglądarkę. i tak:

    za pomocą curl'a na moim Raspberry odczytałem konfigurację alarmu kamery dla włączonego alarmu PIR i wyłączonego:

    curl" http://<uzytkownik>:<haslo>@<i...igManager.cgi?action=getConfig&name=Alarm"

    curl zwraca rekordy opisujące konfiguracje, ten dla alarmu PIR to:

    table.Alarm[1].Enable=false

    metodą prób, błędów i błędów zbudowałem żądanie setConfig:

    curl "http://<uzytkownik>:<haslo>@<ip>/cgi-bin/configManager.cgi?action=setConfig&Alarm[1].Enable=false"
    na końcu false jeśli chcemy wyłączyć alarm i true jeśli chcemy włączyć.

    W ten prosty sposób można napisać proste skrypty sprawdzające i ustawiające tą opcje. Oczywiście możemy tak zmieniać "w tle" przeróżne ustawienia.

    Napisałem ten post aby pokazać użycie setConfig dla kamery IPC-K15P, które teoretycznie nie jest wspierane a na pewno nie dla włączania/wyłączania PIR, bo znalezienie tego sposobu zajęło mi bardzo dużo czasu. Jeśli kogokolwiek zainteresuje to co opisałem mogę podzielić się bardziej szczegółowymi opisami tego co zrobiłem.
    Do you have a problem with Raspberry? Ask question. Visit our forum Raspberry.
  • Optex