02.10.2024, 11:52
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:
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