• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ONVIF

PAV

Member
Друзья, пришла мне тут мысль, чтобы умный дом уведомлял меня, если есть какая-то движуха перед домом. Стоят IP камеры, в некоторых точках дома планшеты с клиентами, которые показывают картинку и в случае обнаружения движения приближают картинку.
Движение определяют сами камеры. Я так понимаю по протоколу ONVIF дают знать клиенту на планшете и клиент отрабатывает.
Хочу сделать маленькие маячки (кубик со светодиодом) на движение.
Как научить ESP8266 принимать команды ONVIF от камер?
 

Сергей_Ф

Moderator
Команда форума
Движение определяют сами камеры. Я так понимаю по протоколу ONVIF дают знать клиенту на планшете и клиент отрабатывает.
Протокол ONVIF подробно описывает, как сетевые устройства передачи видео ( IP-камеры, видеорегистраторы), интегрируются с сетевыми программами обработки и отображения видеопотока.

Функциональные возможности ONVIF аналогичны функциям API, входящих в состав программного обеспечения производителей камер и видеорегистраторов и определяющим как клиенты проходят аутентификацию, изменяют IP-адреса, запрашивают видеопотоки, получают и отправляют события панорамирование, масштабирование и т. д. Разница в том, что спецификация ONVIF стандартизирована для использования разными производителями.
Никогда не слышал, что ONVIF содержит данные о движении. Обычно это собственные АПИ. И скорее всего оно esp не по зубам. Там спецификации совсем не простые.
 

Алексей.

Active member
А ведь точно. Это скорее функция RTSP.
RTSP протокол определяет методы для получения видео/аудио потока с камер
Раздел 10 Method Definitions
Используя этот протокол вы можете запросить какие опции поддерживает RTSP сервер (метод OPTIONS).
Можете по url запросить описание треков (метод DESCRIBE)
Для нужных треков выполнить настройку (метод SETUP), для видео и аудио дорожки соответственно.
И наконец выполнить PLAY и получать RTP поток.
Описание motion detection в самом протоколе что-то не встречал.
 

PAV

Member
Разобрался. Это CGI запросы на саму камеру (Foscam)
Такой запрос http://10.0.0.55:88/cgi-bin/CGIProxy.fcgi?cmd=getDevState&usr=admin&pwd=111111
Выдает следующий ответ, в котором есть тригер на движение.
Код:
<CGI_Result>
    <result>0</result>
    <IOAlarm>0</IOAlarm>
    <motionDetectAlarm>1</motionDetectAlarm>
    <soundAlarm>0</soundAlarm>
    <record>0</record>
    <sdState>0</sdState>
    <sdFreeSpace>0k</sdFreeSpace>
    <sdTotalSpace>0k</sdTotalSpace>
    <ntpState>1</ntpState>
    <ddnsState>0</ddnsState>
    <upnpState>1</upnpState>
    <isWifiConnected>1</isWifiConnected>
    <wifiConnectedAP>*****</wifiConnectedAP>
    <infraLedState>1</infraLedState>
</CGI_Result>
Новый вопрос. А можно как-то подключить esp8266 к камере, чтобы она могла по PUSH протоколу ему эту инфу сливать. Или запрашивать каждую секунду всю эту инфу get запросом?
Есть мысли?
 

NeoroN

Member
у камер Xiongmaitech (с портом 34567) - есть настройка "центр тревог" - прописывается адрес и порт. Камера соединяется по этому адресу в момент движения и отправляет JSON с 20 байт бинарным заголовком.
На питоне код приема так выглядит:
Код:
server = socket(AF_INET, SOCK_STREAM)
server.bind(('0.0.0.0',15002))
server.listen(1)
while True:
    conn, addr = server.accept()
    head, version, session, sequence_number, msgid, len_data = struct.unpack('BB2xII2xHI',conn.recv(20))
    sleep(.1)#Just for recive whole packet
    data = conn.recv(len_data)
    conn.close()
    reply = json.loads(data,encoding="utf8")
    print(datetime.now().strftime("[%Y-%m-%d %H:%M:%S]>>>"))
    print(head, version, session, sequence_number, msgid, len_data)
    print(json.dumps(reply, indent = 4, sort_keys = True))
    print("<<<")
 
Сверху Снизу