13.02.2025, 07:35
(12.02.2025, 10:43)admin Wrote: 1. Replace AT:read() function in user.sms with the following code.
2. Restart the SMS script.
3. Post what you have in Logs when this issue happens again.
Code:function AT:read(timeout)
local char, err, timeout, deftimeout, line
-- default timeout is 1 second, converted to 0.1 sec ticks
timeout = tonumber(timeout) or 1
timeout = timeout * 10
deftimeout = timeout
-- read until got one line or timeout occured
while timeout > 0 do
-- read 1 char
char, err = self.port:read(1, 0.1)
-- got data
if char then
-- got LF, end of line
if char == '\n' then
-- convert to string and empty buffer
line = table.concat(self.buffer)
self.buffer = {}
line = line:trim()
-- return only lines with data
if #line > 0 then
log('read line', line)
return line
-- reset timeout
else
timeout = deftimeout
end
-- ignore CR
elseif char ~= '\r' then
table.insert(self.buffer, char)
end
-- read timeout
elseif err == 'timeout' then
timeout = timeout - 1
-- other error
else
break
end
end
log('read timeout', self.buffer)
return nil, err
end