Keepalive timer on mqtt of nodemcu (esp8266) is not responding
<p>Dears, 
I am trying to use mqtt on esp8266 build on nodemcu. I am currently using a custom build (<a href="https://nodemcu-build.com/index.php" rel="nofollow">https://nodemcu-build.com/index.php</a>)</p>

<p>modules used: adc,enduser_setup,file,gpio,http,mqtt,net,node,ow,pwm,tmr,uart,wifi</p>

<p>version:powered by Lua 5.1.4 on SDK 1.5.1(e67da894)</p>

<pre><code>function connect_to_mqtt_broker()


    print("Connecting to broker...")
    m:connect(BROKER, PORT, 0, 1, function(client) 
                                    print("connected") 
                                    print("["..tmr.time().."(s)] - Client connected to broker: "..BROKER)
                                    m:subscribe(SUB_TOPIC,0, function(conn) 
                                        print("Subscribed to "..SUB_TOPIC.." topic")
                                        led(0,204,0,150) 
                                    end)
                                    m:publish(PUB_TOPIC,"Hello from: "..node.chipid()..RESTART_REASON,0,0, function(conn) 
                                        print("sent")
                                    end)
                                  end, 
                                  function(client, reason) 
                                    print("failed reason: "..reason)
                                  end)

end
</code></pre>

<hr>

<pre><code>---MQTT client---
print("--------------&gt; Create mqtt clinet")
--set up MQTT client
-- init mqtt client with keepalive timer 120sec
m = mqtt.Client("ESP"..node.chipid(), KEEP_ALIVE_TMR, USER, PASSWORD)
m:lwt(PUB_TOPIC, "offline", 0, 0)
m:on("offline", function(conn) 
        print("["..tmr.time().."(s)] - Mqtt client gone offline")

end)
m:on("message", function(conn, topic, data) 
        --receive_data(data, topic)
        print("Data received: "..data) 
        led(200,50,50,30)
        receive_data(data, topic)
        led(0,204,0,150)
end)
</code></pre>

<p>So at the initialization of the of the program I am calling <strong>connect_to_mqtt_broker()</strong>, which is working perfectly and I can subscribe and publish to topics.</p>

<p>The problem is that the keepalive timer is not correct. Let me explain that with an example. I set KEEP_ALIVE_TMR = 120s and after the esp8266 connected successfully to mqtt broker I disabled the wifi on my router and start counting seconds. According to KEEP_ALIVE_TMR the offline event:</p>

<pre><code>m:on("offline", function(conn) 
        print("["..tmr.time().."(s)] - Mqtt client gone offline")

end)
</code></pre>

<p>should fire exactly 120 seconds from the moment I have disable WiFi, but for some unknown reason this won't happen. Usually the event fires up about 10-15 minutes later. 
I am struggling to understand the reason of this delay with no success. 
Do you have any ideas why this strange thing happens?</p>