Servidor de Envio de Eventos
Por meio do servidor de envio de eventos é possível realizar a configuração de um endereço de ip, para o qual o dispositivo enviará os eventos. Todos os eventos deverão ser respondidos com o código HTTP 200, desta forma o dispositivo tem a garantia da entrega, para eventos que não sejam respondidos com este código o dispositivo irá realizar o armazenamento dos mesmos e fará a tentativa de envio destes eventos até que ocorra a resposta de status 200.
Dispositivos que suportam esta função:
Dispositivos | Firmware |
---|---|
CT 3000 2PB | 240816 ou superior |
CT 3000 4PB | 240816 ou superior |
Configurando Servidor de Envio de Eventos
Requisição - GET
http://{{device_ip}}/cgi-bin/configManager.cgi?action=setConfig&Intelbras_ModeCfg.DeviceMode=1&PictureHttpUpload.Enable=true&PictureHttpUpload.UploadServerList[0].Address=192.168.1.200&PictureHttpUpload.UploadServerList[0].Port=3000&PictureHttpUpload.UploadServerList[0].Uploadpath=/notification&HTTPUploadPic.Enable=true&PictureHttpUpload.UploadServerList[0].HttpsEnable=false
param | type | description |
---|---|---|
setConfig * | String | Comando para configuração |
Enable * | Boolean | Habilita/Desabilita a função |
Address * | String | Endereço IP do Servidor (exemplo: 192.168.3.88) |
Port * | Number | Porta (Exemplo: 3000) |
Uploadpath * | String | Path (Exemplo: /notification) |
HttpsEnable * | Boolean | Habilita/Desabilita o HTTPS |
DeviceMode * | Number | 0: StandAlone, 1: Servidor de Envio de Eventos, 2: Modo Online |
Importante: Atualmente não é suportado o host de destino na configuração de servidor, a configuração funciona apenas usando IP Fixo do servidor.
Verifique sempre as configurações de rede do seu produto, como Endereço de IP e Gateway, para garantir que o mesmo esteja acessível na rede.
Exemplo de Retorno - multipart-mixed:
--myboundary
Content-Type: text/plain
Content-Disposition: form-data; name="info"
{
"Channel" : 0,
"Events" : [
{
"Action" : "Pulse",
"Code" : "AccessControl", // Código do tipo de Evento
"Data" : { // Informação do Evento
"CardName" : "test", // Nome do Usuário
"CardNo" : "", // Código do cartão em Hexadecimal
"CardType" : 0, // Tipo do Cartão 0: Ordinary card, 1: VIP card, 2: Guest card, 3: Patrol card, 4: Blocklist card, 5: Duress card
"CreateTime" : 1581098928, // Data da criação do Evento em Timestamp
"Door" : 0, // Porta ao qual ocorreu o acesso
"ErrorCode" : 0, // Código do Erro / Motivo do Acesso negado
"Method" : 15, // Método usado na autenticação
"ReaderID" : "1", // Leitor usado na autenticação
"Similarity" : 98,
"SnapPath" : "\/var\/tmp\/partsnap8.jpg",
"Status" : 1, // Status do acesso Liberado/Negado
"Type" : "Entry", // Tipo de Acesso Entrada/Saida
"UTC" : 1581098928, // UTC do acesso
"UserID" : "6", // ID do Usuário
"UserType" : 0 // Tipo de usuário
},
"Index" : 0,
"PhysicalAddress" : "bc:32:5f:6d:46:d9"
}
],
"FilePath" : "\/mnt\/appdata1\/userpic\/SnapShot\/2020-02-07\/15\/08\/6_98_100_20200207150848425.jpg",
"Time" : "07-02-2020 15:08:48" // Data e hora do evento.
}
Exemplos de Servidor
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from os.path import abspath, dirname, join
import json
import os
import time
from bottle import route, request, response, run
save_dir = join(dirname(abspath(__file__)), "s_files")
save_raw_dir = join(dirname(abspath(__file__)), "s_raw_files")
@route('%s' % '/events', method='POST')
def do_upload():
raw_data = request.body.read()
raw_name = "raw_data_%s.txt" % time.strftime("%Y-%m-%d_%H_%M_%S", time.localtime())
with open(join(save_raw_dir, raw_name), "ab") as fp:
fp.write(raw_data)
data_list = raw_data.split(b"--myboundary\r\n")
if data_list:
for a_info in data_list:
if b"Content-Type" in a_info:
lines = a_info.split(b"\r\n")
a_type = lines[0].split(b": ")[1]
if a_type == b"image/jpeg":
a_name = "abc_%s.jpg" % time.strftime("%Y-%m-%d_%H_%M_%S", time.localtime())
with open(join(save_dir, a_name), "wb") as fp:
data = b"\r\n".join(lines[3:-3])
fp.write(data)
else:
a_name = "abc_%s.txt" % time.strftime("%Y-%m-%d_%H_%M_%S", time.localtime())
with open(join(save_dir, a_name), "wb") as fp:
data = b"\r\n".join(lines[3:-1])
fp.write(data)
# for file_name in request.files.keys():
# upload = request.files.get(file_name)
# save_path = join(dirname(abspath(__file__)), "s_files", file_name)
# if os.path.exists(save_path):
# os.remove(save_path)
# upload.save(save_path) # appends upload.filename automatically
return 'OK'
run(host='127.0.0.1', port=3000, debug=True)