Logic Machine Forum
RFID access controller Z-5R WEB Json (ironlogic.ru) - Printable Version

+- Logic Machine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Gateway (https://forum.logicmachine.net/forumdisplay.php?fid=10)
+--- Thread: RFID access controller Z-5R WEB Json (ironlogic.ru) (/showthread.php?tid=2712)



RFID access controller Z-5R WEB Json (ironlogic.ru) - merel - 07.07.2020

Good day,

I'm trying to integrate "Z-5R WEB" using JSON communication but I'm having trouble.



The LUA script must support multiple connection and must be a server, "Z-5R WEB" will open connection to the LM periodically sends the following:

Code:
POST / HTTP / 1.1
Host: 192.168.0.11:8082
Accept: * / *
User-Agent: Z5R WEB
Connection: close
Content-type: application / json
Content-Length: 193

{"type": "Z5RWEB", "sn": 46653, "messages": [{"id": 660260756, "operation": "power_on", "fw": "3.35", "conn_fw": "1.0. 146 "," active ": 0," mode ": 0," controller_ip ":" 192.168.0.248 "," reader_protocol ":" wiegand "}]}


The server on LogicMachine must respond this:

Code:
HTTP/1.0 200 OK
Server: BaseHTTP/0.3 Python/2.7.17
Date: Tue, 07 Jul 2020 04:06:53 GMT
Content-type: application/json

{"date":"2020-07-05 07:35:54","interval":10,"messages":[{"id":123456789,"operation":"set_active","active":1,"online":0}]}


I don't know how to send an answer.



My test script:



Code:
data=[[HTTP/1.0 200 OK
Server: BaseHTTP/0.3 Python/2.7.17
Date: Tue, 07 Jul 2020 04:06:53 GMT
Content-type: application/json

{"date":"2020-07-05 07:35:54","interval":10,"messages":[{"id":123456789,"operation":"set_active","active":1,"online":1}]}
]]

log("DATA: ",data)
local socket = require("socket")
local server = assert(socket.bind("*", 8082))
local tcp = assert(socket.tcp())


while 1 do

  local client = server:accept()

  line = client:receive("*a")
  if line then
    log(line)
    if string.find(line,"power_on") then
      log(client:send(data))
    end
  end
end


Please Help,

Borek


RE: RFID access controller Z-5R WEB Json (ironlogic.ru) - admin - 07.07.2020

You don't need a script to create a web server, you can use LM web server's .lp scripts for this task.
1. Disable password access to User directory in User access settings.
2. Upload the example as rfid.lp using FTP apps login into user directory. You can check if the file can be accessed by opening http://LM_IP/user/rfid.lp, you should see a blank page but not a 404 error.
3. In your RFID reader set HTTP notification port to 80 and path to /user/rfid.lp

This example is only a starting point, you need to modify it to check the requested function type and provide a correct response depending on the request. If request is a valid JSON it will be visible in Logs tab in LM.
Code:
<?
require('apps')
post = ngx.req.get_body_data()
header('content-type', 'application/json')

if post then
  data = json.pdecode(post)

  if data then
    log(data)
    print(json.encode({
      date = "2020-07-05 07:35:54",
      interval = 10,
      messages = {
        {
          id = 123456789,
          operation = "set_active",
          active = 1,
          online = 1
        }
      }
    }))
  end
end

Apps documentation: https://forum.logicmachine.net/showthread.php?tid=85


RE: RFID access controller Z-5R WEB Json (ironlogic.ru) - merel - 23.07.2020

(07.07.2020, 07:13)admin Wrote: You don't need a script to create a web server, you can use LM web server's .lp scripts for this task.
1. Disable password access to User directory in User access settings.
2. Upload the example as rfid.lp using FTP apps login into user directory. You can check if the file can be accessed by opening http://LM_IP/user/rfid.lp, you should see a blank page but not a 404 error.
3. In your RFID reader set HTTP notification port to 80 and path to /user/rfid.lp

This example is only a starting point, you need to modify it to check the requested function type and provide a correct response depending on the request. If request is a valid JSON it will be visible in Logs tab in LM.
Code:
<?
require('apps')
post = ngx.req.get_body_data()
header('content-type', 'application/json')

if post then
  data = json.pdecode(post)

  if data then
    log(data)
    print(json.encode({
      date = "2020-07-05 07:35:54",
      interval = 10,
      messages = {
        {
          id = 123456789,
          operation = "set_active",
          active = 1,
          online = 1
        }
      }
    }))
  end
end

Apps documentation: https://forum.logicmachine.net/showthread.php?tid=85

Thank you very much, it was very helpful.
The solution using the application is much easier.