API EXCLUSIVA PARA CONTROLADORA CT 3000
Servidor de Envio de Eventos

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:

DispositivosFirmware
CT 3000 2PB240816 ou superior
CT 3000 4PB240816 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

paramtypedescription
setConfig *StringComando para configuração
Enable *BooleanHabilita/Desabilita a função
Address *StringEndereço IP do Servidor (exemplo: 192.168.3.88)
Port *NumberPorta (Exemplo: 3000)
Uploadpath *StringPath (Exemplo: /notification)
HttpsEnable *BooleanHabilita/Desabilita o HTTPS
DeviceMode *Number0: 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)