This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

API Control camera Vivotek
#1
Dear all,
I want to connect Vivotek camera API to LM5,

https://www.vivotek.com/fd9387-fr-v2

I attach the camera API guide, please help me

Thanks you.

Attached Files
.pdf   FD9387-FR_Integration API1.3.docx (1).pdf (Size: 326.72 KB / Downloads: 22)
Reply
#2
What exactly do you want to control via API?
Reply
#3
(30.09.2024, 07:43)admin Wrote: What exactly do you want to control via API?

Thanks for the feedback.

I want to have it detect me and send information via the API to trigger contexts that are specific to me. Or send a welcome home notification to the ceiling speaker.
Reply
#4
Run this script as resident. Change host variable to your camera IP and auth variable to access credentials in username:password format. Make sure that Basic auth mode (not digest) is set on your camera. Then post what you get in LM Logs when running this script.
Code:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
local json = require('json') local socket = require('socket') local mime = require('mime') local host = '192.168.1.1' local auth = 'user:password' local sock = socket.tcp() sock:settimeout(15) local res, err = sock:connect(host, 80) if not res then   sock:close()   log('connect failed', err)   os.sleep(5)   return end local function init()   local crlf = '\r\n'   sock:send(     'GET /FR/events/live/json?heartbeat=10 HTTP/1.1' .. crlf ..     'Host: ' .. host .. crlf ..     'Authorization: Basic ' .. mime.b64(auth) .. crlf .. crlf   ) end local function parse(resp)   resp = json.pdecode(resp)   log(resp) end init() local pat, len = nil, nil while true do   res, err = sock:receive(pat)   log('rx', pat, res, err)   if err then     sock:close()     log('receive error', err)     break   end   if type(pat) == 'number' then     pcall(parse, res)     pat, len = nil, nil   elseif #res == 0 then     pat = len   elseif not len then     len = res:match('Content%-Length: (%d+)')     len = tonumber(len)   end end
Reply
#5
(02.10.2024, 11:52)admin Wrote: Run this script as resident. Change host variable to your camera IP and auth variable to access credentials in username:password format. Make sure that Basic auth mode (not digest) is set on your camera. Then post what you get in LM Logs when running this script.
Code:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
local json = require('json') local socket = require('socket') local mime = require('mime') local host = '192.168.1.1' local auth = 'user:password' local sock = socket.tcp() sock:settimeout(15) local res, err = sock:connect(host, 80) if not res then   sock:close()   log('connect failed', err)   os.sleep(5)   return end local function init()   local crlf = '\r\n'   sock:send(     'GET /FR/events/live/json?heartbeat=10 HTTP/1.1' .. crlf ..     'Host: ' .. host .. crlf ..     'Authorization: Basic ' .. mime.b64(auth) .. crlf .. crlf   ) end local function parse(resp)   resp = json.pdecode(resp)   log(resp) end init() local pat, len = nil, nil while true do   res, err = sock:receive(pat)   log('rx', pat, res, err)   if err then     sock:close()     log('receive error', err)     break   end   if type(pat) == 'number' then     pcall(parse, res)     pat, len = nil, nil   elseif #res == 0 then     pat = len   elseif not len then     len = res:match('Content%-Length: (%d+)')     len = tonumber(len)   end end
Thanks for the reply.
I am sending the log again as attached file.
Please help me.

Attached Files Thumbnail(s)
   
Reply
#6
You need to trigger a face detection event and check if it's logged. You can disable the log call on line 40 to filter out debug info:
Code:
1
-- log('rx', pat, res, err)
Reply
#7
(07.10.2024, 06:33)admin Wrote: You need to trigger a face detection event and check if it's logged. You can disable the log call on line 40 to filter out debug info:
Code:
1
-- log('rx', pat, res, err)

I send the information back, admin please check it for me
I see LM has connected and recognized
Please give me the command to control
Thank you very much

Attached Files Thumbnail(s)
           
Reply
#8
Replace parse function in the script with the following code. The script will send ON to 1/1/1 each time the camera detects you.
Code:
123456789
local function parse(resp)   resp = json.pdecode(resp)     if resp.type == 'person' then     if resp.name == 'luan thanh' then       gpr.write('1/1/1', true)     end   end end
Reply
#9
(10.10.2024, 13:04)admin Wrote: Replace parse function in the script with the following code. The script will send ON to 1/1/1 each time the camera detects you.
Code:
123456789
local function parse(resp)   resp = json.pdecode(resp)     if resp.type == 'person' then     if resp.name == 'luan thanh' then       gpr.write('1/1/1', true)     end   end end
I checked, tested everything works perfectly.
Thank you very much
Reply


Forum Jump: