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

+- LogicMachine 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.