Série da semana: Conheça o jeito Pythônico de programar

Veja mais

Leitor Biométrico Futronic FS80H

28/11/2018

16

boa tarde, alguém já fez algum projeto com o Leitor Biométrico Futronic FS80H?

Melhor post

06/12/2018

Olá Marcio, eu uso um servidor RestDataWare(Gilberto) que é show de bola recomendo muito, e no meus cliente(mini-pc) nas portarias uso um programinha em Delphi, com um componete IdHTTPServer1, e no evento OnCommandGet, eu escuto o envio de get de um endereço ip do meu REST,

..
begin
if (ARequestInfo.URI = '/processamento') or (ARequestInfo.URI = '/processamento/') then
begin
try
NroLeitor := ARequestInfo.Params.Values['nl'];
Matricula := ARequestInfo.Params.Values['matr'];


Quem me ajudou muito em consultoria foi o próprio Gilberto criado do RestDataWare, https://join.skype.com/sfqjQvfrLIeF
Responder

Outros Posts

03/12/2018

Paulo Freire

Opa, eu trabalho bastante com ele, já testei vários e considero o melhor na minha opnião.
Responder

05/12/2018

Marcio Batista

Opa, eu trabalho bastante com ele, já testei vários e considero o melhor na minha opnião.


boa tarde meu amigo, aproveitando o post do amigo, estou fazendo a integração do meu sistema delphi com uma catraca controlID via rest/json, ela tem leitor biometrico tb, eu consigo enviar os comando para ela sem problema via rest + quando alguem coloca a digital nela eu naõ consigo pegar a informação que vem dela via ip/porta de rede, vc tem algo em delphi para essa catraca ou tem interesse em fazer essa parte de leitura da digital dela ? (podemos combinar um preço se por possivel), o cliente ja esta querendo tirar meu sistema pois não estou conseguindo resolver isso..
desde ja agradeço
Responder

06/12/2018

Marcio Batista

Olá Marcio, eu uso um servidor RestDataWare(Gilberto) que é show de bola recomendo muito, e no meus cliente(mini-pc) nas portarias uso um programinha em Delphi, com um componete IdHTTPServer1, e no evento OnCommandGet, eu escuto o envio de get de um endereço ip do meu REST,<br />
<br />
..<br />
begin<br />
if (ARequestInfo.URI = ''/processamento'') or (ARequestInfo.URI = ''/processamento/'') then<br />
begin<br />
try<br />
NroLeitor := ARequestInfo.Params.Values[''nl''];<br />
Matricula := ARequestInfo.Params.Values[''matr''];<br />
<br />
<br />
Quem me ajudou muito em consultoria foi o próprio Gilberto criado do RestDataWare, https://join.skype.com/sfqjQvfrLIeF
<br />
<br />
<br />
muito obrigado meu amigo, vou fazer uns testes aqui, ja estou usando o idhttp para enviar os comandos rest/json para a catraca e esta indo bem,ela abre a entrada e alguns outros comando tb vai ok. vou começar a fazer os testes imediatamente!! vlw!!!!
Responder

06/12/2018

Marcio Batista

Olá Marcio, eu uso um servidor RestDataWare(Gilberto) que é show de bola recomendo muito, e no meus cliente(mini-pc) nas portarias uso um programinha em Delphi, com um componete IdHTTPServer1, e no evento OnCommandGet, eu escuto o envio de get de um endereço ip do meu REST,

..
begin
if (ARequestInfo.URI = '/processamento') or (ARequestInfo.URI = '/processamento/') then
begin
try
NroLeitor := ARequestInfo.Params.Values['nl'];
Matricula := ARequestInfo.Params.Values['matr'];


Quem me ajudou muito em consultoria foi o próprio Gilberto criado do RestDataWare, https://join.skype.com/sfqjQvfrLIeF


sera que vc poderia me enviar um exemplo(real) do oncommandget, pois to apanhando muito nisso e ajudaria bastante principalmente a analise do retorno que vem da catraca pois fazendo teste pelo navegador eu consigo,+ quando vem da catraca nao estou conseguindo ver oq vem (o programa q fiz para testar nao retorna nada, acho q nao esta chegando), se for possivel me ajudar nisso tb agradeço, qualquer coisa pode entrar em contato pelo email/skype marciobatista@msn.com que podemos ate combinar um valor pela consultoria (não posso perder o cliente...situação não ta facil)
Responder

06/12/2018

Paulo Freire

Se não me engano já trabalhei com a Catraca IDBlock, ela só aguenta 1000 usuários correto ? então, vc não conseme um método para sua liberação ???

Vc pode usar POSTMAN, hoje eu trabalh com DIGICON, envio isso para meu servidor RestDataWare,

IpServidor:8080/metodos/liberaCatraca?numeroSerie=1921680156&sentidoHorarioLiberado=S&sentidoAntiHorarioLiberado=S&liberacaoTempo=1900&texto=LIBERADO&textoTempo=1900


Eu posso Usar IdHTTPServer1 ou RESTClient, RESTRequest, no meu caso eu tenho retorno pelo RESTResponse de uma Ma´trica que é do Usuário Cadastrado, ai trabalho se ele está autorizado, dentro do dia/horário e etc.

O que vc tem de retorno quando envio seu POST/GET ?
Responder

06/12/2018

Marcio Batista

Se não me engano já trabalhei com a Catraca IDBlock, ela só aguenta 1000 usuários correto ? então, vc não conseme um método para sua liberação ???

Vc pode usar POSTMAN, hoje eu trabalh com DIGICON, envio isso para meu servidor RestDataWare,

IpServidor:8080/metodos/liberaCatraca?numeroSerie=1921680156&sentidoHorarioLiberado=S&sentidoAntiHorarioLiberado=S&liberacaoTempo=1900&texto=LIBERADO&textoTempo=1900


Eu posso Usar IdHTTPServer1 ou RESTClient, RESTRequest, no meu caso eu tenho retorno pelo RESTResponse de uma Ma´trica que é do Usuário Cadastrado, ai trabalho se ele está autorizado, dentro do dia/horário e etc.

O que vc tem de retorno quando envio seu POST/GET ?


boa noite amigo, ela tem capacidade para 2000 registro nela (modo offline) no modo online (com a configuração de salvar todos os dados no servidor) segundo o manual 100.000

eu consigo logar nela :
var
lJSO : ISuperObject;
lRequest: TStringStream;
lResponse: String;
begin
lJSO := SO('{"login": "admin", "password": "admin"}');
lRequest := TStringStream.Create(lJSO.AsString, TEncoding.UTF8);
try
IdHTTP1.Request.ContentType := 'application/json';
IdHTTP1.Request.Charset := 'utf-8';

try
lResponse := IdHTTP1.Post('http://192.168.001.171/login.fcgi', lRequest);
edit1.Text:=copy(lResponse,13,24);
ShowMessage('Login efetuado com sucesso! :'+lResponse);

except
on E: Exception do
ShowMessage('Error on request:'#13#10 + E.Message);
end;
finally
lRequest.Free;
end;
lJSO := nil;
end;



consigo liberar o acesso :
lJSO := SO('{ actions: [ { action: "catra", parameters: "allow=clockwise" } ] }}');
lRequest := TStringStream.Create(lJSO.AsString, TEncoding.UTF8);
try
IdHTTP1.Request.ContentType := 'application/json';
IdHTTP1.Request.Charset := 'utf-8';

try
lResponse := IdHTTP1.Post('http://192.168.001.171/execute_actions.fcgi?session='+trim(edit1.text),lRequest);
ShowMessage('Catraca liberada!! '+lResponse);


+ alguns comandos eu não estou conseguindo executar, no manual tem um comando chamado monitor :
configurações do monitor
monitor
O monitor,como o próprio nome sugere, monitora eventos do equipamento. Os eventos estão descritos no topico endpoints.
Parâmetros
request_timeout
string
O tempo em ms para o request dar timeout.
hostname
string
O endereço para onde a request será enviada, por exemplo, o IP do servidor.
port
string
A porta para onde a request será enviada.


eu nao consigo executar esse comando "bad request" e acho q ele é essencial para conseguir receber oque vem dela correto ?

cadastrar o usuario eu tb não consigo :
lJSO := SO('{object: "users", values: [{name: "MARCIO", Id : 125,registration: "212"}]}');
lRequest := TStringStream.Create(lJSO.AsString, TEncoding.UTF8);
try
IdHTTP1.Request.ContentType := 'application/json';
IdHTTP1.Request.Charset := 'utf-8';

try
lResponse := IdHTTP1.Post
('http://192.168.001.171/create_objects.fcgi?session=' + trim(Edit1.Text), lRequest);

bad request tb, com certeza a sintaxe dos comando deve estar errada + eu estou aprendendo essa parte json agora e não estou conseguindo enviar corretamente alguns comandos, retorna o erro acima, sera consegue me ajudar sobre como passar os parametros de cadastro de usario e principalmente o do monitor (caso ele realmente seja essencial)

desde j agradeço a ajuda que me tem dado.


Responder

07/12/2018

Paulo Freire

então vamos lá, vc sabe usar o POSTMAN ?????


Vamos por partes...
Envia pelo POSTAMAN

http://192.168.1.171/execute_actions.fcgi?session=123

Ou seu código cadastrado no final, para ver se libera sua catraca, quando eu mexia com a Control ID não precisa de Login
Responder

07/12/2018

Marcio Batista

então vamos lá, vc sabe usar o POSTMAN ?????


Vamos por partes...
Envia pelo POSTAMAN

http://192.168.1.171/execute_actions.fcgi?session=123

Ou seu código cadastrado no final, para ver se libera sua catraca, quando eu mexia com a Control ID não precisa de Login




boa noite meu amigo, 1000 desculpas pela demora na resposta + hj fique o dia inteiro em clientes ae nao consegui olhar o forum, bem vms ao que interessa :

ja usei o postman para fazer uns teste em outras apis (aprendizagem)

essa catraca pedi que seja feito o login, caso eu envie o comando da forma que colocou me retorna sessão invalilda
no postman executei um post :
http://192.168.1.171/login.fcgi
e passsei no body (raw) o seguinte :
{"login": "admin", "password": "admin"}
e no headers coloquei :
Content-Type : aplication/json
accept :application/json;charset=UTF-8

a catraca me retorna a senha da seção (segundo o manual tenho q utilizar essa senha de retorno para quase tudo que for fazer nela)

{
"session": "zjEACB9V2ONDiK18PyrlVgOk"
}
Responder

14/12/2018

Paulo Freire

Então está mais simples ainda, use o REST Debugeer do Delphi

Method: POST

Content-Type: application/json //ou outro que sua catraca aceite

Custom Body: "session": "zjEACB9V2ONDiK18PyrlVgOk"

URL: http://192.168.1.171/login.fcgi

Na aba Authentication, use o method SIMPLE UserName/Password

Do lado Direto tem um botão "Copy Components"

Crie um Form no Delphi e cole, veja esse vídeo que esclarece melhor. https://www.youtube.com/watch?v=60y_w66zFgs&t=2262s

No timer 26:05 do vídeo, tem uma explicação melhor sobre isso.



Responder

14/12/2018

Marcio Batista

Então está mais simples ainda, use o REST Debugeer do Delphi

Method: POST

Content-Type: application/json //ou outro que sua catraca aceite

Custom Body: "session": "zjEACB9V2ONDiK18PyrlVgOk"

URL: http://192.168.1.171/login.fcgi

Na aba Authentication, use o method SIMPLE UserName/Password

Do lado Direto tem um botão "Copy Components"

Crie um Form no Delphi e cole, veja esse vídeo que esclarece melhor. https://www.youtube.com/watch?v=60y_w66zFgs&t=2262s

No timer 26:05 do vídeo, tem uma explicação melhor sobre isso.





boa noite paulo, obrigado pelo retorno, eu consegui evoluir em alguns pontos e agora estou parado no seguinte (acho q falta algum detalhe na configuração do webserver pra receber a informação da catraca):
(segue o post que fiz para configurar web server para escutar as requisições http)

preciso ler a informação que vem de uma catraca controlid, consigo fazer toda a comunicação com a catraca via restjson usando idttp indy, logo, libero acesso e etc, o problema esta quando preciso receber oque vem da catraca sem que eu solicite, ex : o usuario coloca a digital no equipamento e eu preciso que o webserver receba o json que vem da catraca via http, fiz todos os passos abaixo indicado pelo o suporte do fabricante e tudo correu bem e os comandos foram executados sem erro algum, porem quando coloca a digital na catraca o webserver que fiz usando idttpserver nao recebe nada no ip e porta expecifica vindo da catraca e se tento enviar algo pela rede no ip e porta do webserver ele responde perfeitamente, por favor se alguem puder me ajudar a terminar de configurar o webserver, acho q não falta muito e o cliente ja perdeu a paciencia..., segue oque foi feito de acordo com o fabricante :

O fluxo é o seguinte:

Realizar o login no equipamento para obter uma sessão;
lJSO := SO('{"login": "admin", "password": "admin"}');
lResponse := IdHTTP1.Post('http://192.168.001.171/login.fcgi', lRequest);

Criar um novo device que representará o servidor do equipamento. Referências: aqui e aqui (procurar 'devices'). Note que o campo 'public_key' deve ser qualquer texto em base64. Em Linux, pode-se gerar facilmente um através do comando: echo -n chave_secreta | base64
lJSO := SO('{ object: "devices", values: [{id: 3333, name: "clube_server", ip: "192.168.1.100:8080", public_key:"Y2hhdmVfc2VjcmV0YQ=="}] })}');
lResponse := IdHTTP1.Post('http://192.168.001.171/create_objects.fcgi?session='+trim(edit1.text),lRequest);


Modificar a configuração 'server_id' do objeto 'online_client' para o id do device cadastrado na etapa anterior. Exemplo :
lJSO := SO('{ online_client: {server_id: "3333" } }');
lResponse := IdHTTP1.Post('http://192.168.001.171/set_configuration.fcgi?session='+trim(edit1.text),lRequest);


Modificar a configuração 'online' do objeto 'general' para 1
lJSO := SO('{ general: {online: "1"} }');
lResponse := IdHTTP1.Post('http://192.168.001.171/set_configuration.fcgi?session='+trim(edit1.text),lRequest);

Habilita a identificação Local:
lJSO := SO('{ general: {"local_identification": "1"} })}');

lResponse := IdHTTP1.Post('http://192.168.001.171/set_configuration.fcgi?session='+trim(edit1.text),lRequest);

todos os campos são executados sem problema, segue mais explicações do fabricante :

O Fluxo de comunicação entre o servidor (web server que escutará as requisições http que o equipamento para enviará, o verbo http é o POST) que você vai desenvolver e o equipamento é o seguinte:


Primeiro um pouco de teoria para você entender o fluxo do endpoint que você precisará implementar: new_user_identified.fcgi (https://www.controlid.com.br/suporte/api_idaccess_latest.html#50_events)


Usuário identificado

CLIENT -> SERVER

POST /new_user_identified.fcgi?session=gJgOHkblq69Vc3WLOOdUMvrf& HTTP/1.1

Host: 192.168.2.121

Accept: */*

Content-Type: application/x-www-form-urlencoded

Connection: Keep-Alive

Content-Length: 105


event=8&device_id=468507&identifier_id=1651076864&portal_id=1&user_id=1&user_name=Danilo&user_has_image=0


SERVER -> CLIENT

HTTP/1.1 200 OK

Content-Type: application/json; charset=utf-8

Transfer-Encoding: chunked

Date: Thu, 18 Feb 2016 16:20:45 GMT

Server: lighttpd/1.4.35


{"result":{"event":6,"user_id":1,"user_name":"João","user_image":false,"portal_id":5,"actions":[]}}



Usuário não identificado

CLIENT -> SERVER

POST /new_user_identified.fcgi?session=gJgOHkblq69Vc3WLOOdUMvrf& HTTP/1.1

Host: 192.168.2.121

Accept: */*

Content-Type: application/x-www-form-urlencoded

Connection: Keep-Alive

Content-Length: 99


event=3&device_id=468507&identifier_id=1651076864&portal_id=0&user_id=0&user_name=&user_has_image=0


SERVER -> CLIENT

HTTP/1.1 200 OK

Content-Type: application/json; charset=utf-8

Transfer-Encoding: chunked

Date: Thu, 18 Feb 2016 16:22:57 GMT

Server: lighttpd/1.4.35


{"result":{"event":3}}


no webser que criei configurei da seguinte forma :

IdHTTPServer1.Active := false;
IdHTTPServer1.defaultport:=8080;
IdHTTPServer1.Active := True;

no oncommandget coloquei o seguinte :

if (ARequestInfo.URI = '/api/notification/dao') or (ARequestInfo.URI = '/api/notification/dao') then begin
showmessage('eu to aqui');
end else begin
showmessage('chequei aqui 2');
end;
Responder

18/12/2018

Paulo Freire

Trabalhe com o seu result

Faça o seguinte, crie um form, coloque um edit, um Label e um componente IdHTTPServer1, DefaultPort=8080 somente isso:

No evento do componente IdHTTPServer1, chamado OnCommandGet, faça isso:

var
pID, pUsuario: string;
st: TStringStream;


if (ARequestInfo.URI = '/new_user_identified.fcgi?session=gJgOHkblq69Vc3WLOOdUMvrf&') or
(ARequestInfo.URI = '/new_user_identified.fcgi?session=gJgOHkblq69Vc3WLOOdUMvrf&/') then
begin

try
pID := ARequestInfo.Params.Values['user_id'];
pUsuario := ARequestInfo.Params.Values['user_name'];

Edit1.Text := pID;

if pID = '0' then
begin
Label1.Caption := 'Não reconhecido...';

end else
Label1.Caption := pUsuario + ' bem vindo ao Clube.';

finally
lblInfo.Caption := AResponseInfo.ContentText;
end;

end;

// AResponseInfo.ContentText := jResposta.AsJSon;

Vc trabalha em algum Clube ?
Responder

18/12/2018

Marcio Batista

bom dia meu amigo!!!!!
funcionou !!!! graças a Deus e sua ajuda !!!, muito obrigado mesmo amigo, sem palavras para agradecer, estou agarrado com essa catraca a + de 1 mes, cliente ja estava buscano outro sistema!
eu tenho um sistema no clube aqui da minha cidade, paraiba do sul-rj (interior do estado do rio), e tenho clientes tb na area comercial(nfe,nfce) aqui, cidade pequena e tranquila.
Responder