SmartPSS данные POS на видеопотоке

POS для Dahua. Отправляем любые данные на экран с Python

от автора

в

Во многих системах видеонаблюдения можно в видеопоток интегрировать POS-информацию. Сама аббревиатура POS (Point Of Sales) обозначает точку продаж. Очень удобно, что эти комплексы могут выдавать на системы видеонаблюдения информацию об операциях. Например, охранник в реальном времени видит видео с кассы, с наложенным текстом в чеке, как пример вот на изображении:

Современные системы, такие как Trassir с модулем Active POS могут удобно интегрироваться с таким POS-оборудованием и отображать необходимую информацию. Правда по цене, для небольших компаний выходит дороговато. Но и обычные XVR, NVR регистраторы зачастую снабжены этой функцией. Само подключение касс и терминалов не раз уже рассмотрено, а мы сегодня попробуем вывести любую произвольную информацию на экран, как раз недавно я решал такую задачу. Например, можно подкинуть температуру какого-нибудь котла, в зоне камеры, или показания весов. В общем, зачастую, нужная задача. Настройку лучше начать с регистратора. Для теста выбрал модель DH-XVR-5104HS-I3

  1. Отметить галочку Актив.
  2. Установить канал записи, можно несколько, куда будет отправляться информация POS
  3. Настроить сетевые параметры
  4. Отметить галочку POS инф-я
настройка POS на dahua

В режиме подключения нужно указать IP источника, это устройство, которое собственно будет отправлять POS-поток. В моем случае, это IP адрес моего ПК. Порт POS по умолчанию 38800, но его можно всегда сменить в настройках сети регистратора.

настройка портов POS на dahua

Перед тем, как пробовать отправить инфу со своей программы, установил рекомендованный NetAssyst для проверки. Тут все просто, отмечаем адрес регистратора с левом верхнем окошке, и порт 38800, если не поменяли его в регистраторе. Жмем кнопку connect

netassyst как настроить соединение pos

Затем можно написать текст и нажать кнопку Send – данные должны отобразиться в окне реал-тайм потока камеры

netassyst как отправить данные pos

Убеждаемся, что данные приходят.

POS данные на регистраторе Dahua

Открываем Wireshark и ловим пакет. Вроде выглядит все стандартно (всё-таки NetAssyst), и можно попробовать отправить такой же фрейм с датой через socket.

wireshark анализ пакета POS

Попробуем установить соединение через простой Python-скрипт. Далее в бесконечном цикле, каждые 5 сек будем отправлять однотипные данные.

# Client для POS регистратора Dahua
import time

import socket

HOST = "192.168.1.108"  # Адрес регистратора
PORT = 38800  # Порт POS

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    while True:
        s.sendall(b"Connected")
        time.sleep(5)

Убеждаемся еще раз, что все работает. Но давайте попробуем отправить что-нибудь более полезное. Например, погоду, которую мы получим через API. Регистрируемся на openweathermap и получаем апи-ключ. Создаем словарик, с нашими данными. Я указал свой город Rostov, данные в метрической системе и собственно, апи-ключ.

WEATHER_ENV = {
    'q': "Rostov,RU",
    'units': 'metric',
    'APPID': 'тут ваш ID'
}

Обернем запрос в try-except и достанем некоторые полезные данные. Для теста выбрал температуру, влажность и скорость ветра. Также для запроса погоды через API не забываем установить и добавить библиотеку requests. Важный момент, если будете использовать в реальном проекте, нужно еще предусмотреть пере-подключение соединения. В данном случае, если отвалится сеть, скрипт просто завершит работу.

# Client для POS регистратора Dahua
import time
import socket

import requests

HOST = "192.168.1.108"  # Адрес регистратора
PORT = 38800  # Порт POS

WEATHER_ENV = {
    'q': "Rostov,RU",
    'units': 'metric',
    'APPID': 'тут ваш ID'
}

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    while True:
        try:
            response = requests.get(
                "http://api.openweathermap.org/data/2.5/find",
                params=WEATHER_ENV
            )
            result = response.json()['list'][0]
            city = result['name']
            temp = f'{result['main']['temp']} C'
            humidity = f'{result['main']['humidity']} %'
            wind = f'{result['wind']['speed']} m/c'
        except Exception as e:
            city = temp = humidity = wind = 'no data('
        total_string_rus = f'{'-' * 15}\nгород: {city}\nтемпература: {temp}\nвлажность: {humidity}\nветер: {wind}'
        total_string_eng = f'{'-' * 15}\ncity: {city}\ntemperature: {temp}\nhumidity: {humidity}\nwind: {wind}'
        s.sendall(total_string_eng.encode('utf-8'))
        time.sleep(10)

Попробовал и русский язык и английский, ведь в регистраторе в настройках указан Unicode UTF-8

Любая POS информация на регистраторе через питон

Вот так, через простой питон-скрипт можно отправить любые данные на регистратор, в данном случае Dahua. Очень круто, что данные он пишет в отдельную БД, через которую можно поиском найти что нужно. Ну и соответственно, проиграть видеопоток по данной метке.

SmartPSS данные POS на видеопотоке

Правда через SmartPSS данные отображает как-то странно, с куском чека, что конечно, не очень удобно. А так же, на SmartPSS нет поддержки русского языка. Но возможно поправят в следующих версиях ПО. Теперь, достаточно бюджетно, можно подкинуть классную дополнительную аналитику к кадру.