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

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

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

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

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

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

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

Попробуем установить соединение через простой 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

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

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