Можно использовать event.listen, которая регистрирует обработчик события в фоне. Но тогда нужно после завершения программы отменять его (event.cancel), иначе после завершения программы обработчик продолжит свою работу.
Описание функций event: https://ocdoc.cil.li/api:event
Пример:
local event = require("event")
-- Функция, которая будет выполнена при получении события
local function handleEvent(event_name, _, _, port, _, message)
if (event_name) then -- иногда event_name может иметь значение nil, если долго не было события
-- десериализируем табличку (message)
end
end
local listener_id = event.listen("modem_message", handleEvent)
if (listener_id) == false then
-- выполняется, если неудалось зарегистрировать обработчик
print("failed to register listener")
return -- завершаем программу
end
-- Что-нибудь делаем
print("Hello! How are you")
-- Завершаем программу: отменяем обработчик
event.cancel(listener_id)