-
Notifications
You must be signed in to change notification settings - Fork 0
/
init3.lua
63 lines (53 loc) · 1.79 KB
/
init3.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
-- local configuration
owpin = 1
local mqttHeartTopic = "lcn/therm/boot"
local mqttHeartTick = 600000
mqttTargTopic = "lcn/therm/target"
mqttModeTopic = "lcn/therm/mode"
mqttFanTopic = "lcn/therm/fan"
mqttPubRoot = "lcn/therm/"
-- modules
nwfnet = require "nwfnet"
mqc, mqcu = dofile("nwfmqtt.lc").mkclient("nwfmqtt.conf")
mqcCan = false
-- rtcfifo conditional init
if rtcfifo.ready() == 0 then rtcfifo.prepare() end
-- timers
tq = (dofile "tq.lc")(tmr.create())
-- setup peripherals
ow.setup(owpin)
i2c.setup(0,2,3,i2c.SLOW)
-- hook registry, MQTT connection management
local mqtt_beat_cancel
local mqtt_reconn_poller
local function mqtt_reconn()
mqtt_reconn_poller = tq:queue(30000,mqtt_reconn)
mqc:close(); dofile("nwfmqtt.lc").connect(mqc,"nwfmqtt.conf")
end
nwfnet.onnet["init"] = function(e,c)
if e == "mqttdscn" and c == mqc then
if mqtt_beat_cancel then mqtt_beat_cancel(); mqtt_beat_cancel = nil end
if not mqtt_reconn_poller then mqtt_reconn() end
mqcCan = false
elseif e == "mqttconn" and c == mqc then
if mqtt_reconn_poller then tq:dequeue(mqtt_reconn_poller); mqtt_reconn_poller = nil end
if not mqtt_beat_cancel then mqtt_beat_cancel = dofile("nwfmqtt.lc").heartbeat(mqc,mqttHeartTopic,tq,mqttHeartTick) end
mqc:publish(mqttHeartTopic,"alive",1,1)
mqc:subscribe(mqttTargTopic,1)
mqc:subscribe(mqttModeTopic,1)
mqc:subscribe(mqttFanTopic ,1)
mqcCan = true
elseif e == "wstagoip" then
if not mqtt_reconn_poller then mqtt_reconn() end
end
end
-- data logging
function logdata(v,e,n)
local t = rtctime.get()
if mqcCan then mqc:publish(mqttPubRoot..n,sjson.encode({ ['t']=t, ['v']=v, ['e']=e }),1,1) end
if v then rtcfifo.put(t,v,e,n) end
end
-- go online
dofile("nwfnet-go.lc")
-- do thermostat stuff
dofile("thermostat.lc")