| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- -- init mqtt client without logins, keepalive timer 120s
- m = mqtt.Client("esp", 120)
- -- init mqtt client with logins, keepalive timer 120sec
- --m = mqtt.Client("", 120, "user", "password")
- -- setup Last Will and Testament (optional)
- -- Broker will publish a message with qos = 0, retain = 0, data = "offline"
- -- to topic "/lwt" if client don't send keepalive packet
- --m:lwt("/lwt", "offline", 0, 0)
- m:on("connect", function(client) print ("connected") end)
- m:on("offline", function(client) print ("offline") end)
- -- -- on publish message receive event
- -- m:on("message", function(client, topic, data)
- -- print(topic .. ":" )
- -- if data ~= nil then
- -- print(data)
- -- end
- -- end)
- -- Ice-boil calibration
- function calibrate(temp)
- local ReferenceLow = 0.01
- local ReferenceHigh = 100
- local ReferenceRange = ReferenceHigh - ReferenceLow
- local RawLow = TEMP_ICE
- local RawHigh = TEMP_BOIL
- local RawRange = RawHigh - RawLow
- local RawValue = temp
- local CorrectedValue = (((RawValue - RawLow) * ReferenceRange) / RawRange) + ReferenceLow
- if RawLow == nil or RawHigh == nil then
- return temp
- end
- return CorrectedValue
- end
- local ow_pin = TEMP_PIN
- ds18b20.setup(ow_pin)
- function ds_start_read()
- ds18b20.read(
- function(ind,rom,res,raw_temp,tdec,par)
- local mac = string.format("%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X",string.match(rom,"(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+)"))
- local temp = calibrate(raw_temp)
- print(ind,mac,res,temp,raw_temp)
- ok, json = pcall(sjson.encode, {rom=mac, res=res, temp=temp, raw=raw_temp})
- if ok then
- m:publish(MQTT_TOPIC, json, 0, 0, function(client) print("sent "..json.." to "..MQTT_TOPIC) end)
- else
- print("failed to encode!")
- end
- end,{});
- end
- function handle_mqtt_connected(client)
- print("mqtt connected")
- -- subscribe topic with qos = 0
- -- client:subscribe(MQTT_TOPIC, 0, function(client) print("subscribe success") end)
- -- publish a message with data = hello, QoS = 0, retain = 0
- -- client:publish("/topic", "hello", 0, 0, function(client) print("sent") end)
- -- start temp reading
- ds_start_read()
- tmr.create():alarm(TEMP_RATE, tmr.ALARM_AUTO, function(timer) ds_start_read() end)
- end
- function handle_mqtt_error(client, reason)
- tmr.create():alarm(10 * 1000, tmr.ALARM_SINGLE, do_mqtt_connect)
- end
- function do_mqtt_connect()
- m:connect(MQTT_SERVER, handle_mqtt_connected, handle_mqtt_error)
- end
- do_mqtt_connect()
|