@@ -94,6 +94,8 @@ local MOSQ_QOS1 = 1
9494local MOSQ_RETAIN = true
9595local MOSQ_ERROR = " MQTT error: %s"
9696
97+ local MOSQ_TOPIC_SENSOR_CONFIG = string.format (" /device/%s/config/sensor" , DEVICE )
98+
9799-- increase process niceness
98100nixio .nice (TMPO_NICE )
99101
@@ -117,40 +119,54 @@ local config = {
117119 sensor = nil ,
118120
119121 load = function (self )
120- local function clean (itbl )
121- local otbl = { }
122- for sidx , params in pairs (itbl ) do
123- if tonumber (sidx ) -- only interested in sensor entries
122+ local function clean (tbl )
123+ for section , params in pairs (tbl ) do
124+ params [" .index" ] = nil
125+ params [" .name" ] = nil
126+ params [" .type" ] = nil
127+ params [" .anonymous" ] = nil
128+
129+ if tonumber (section ) -- sensor entries only
124130 and params .enable
125131 and params .enable == " 1"
126132 then
127- otbl [params .id ] = params
128- params [" .index" ] = nil
129- params [" .name" ] = nil
130- params [" .type" ] = nil
131- params [" .anonymous" ] = nil
132- params .enable = nil
133- params .counter = nil
134133 if not params .data_type then params .data_type = " counter" end
135134 if not params .rid then params .rid = 0 end
135+ end
136136
137- for option , value in pairs (params ) do
138- params [option ] = tonumber (value ) or value
139- if type (value ) == " table" then -- dealing with a list
140- for i in pairs (value ) do
141- value [i ] = tonumber (value [i ]) or value [i ]
142- end
143- else
144- params [option ] = tonumber (value ) or value
137+ for option , value in pairs (params ) do
138+ params [option ] = tonumber (value ) or value
139+ if type (value ) == " table" then -- we're dealing with a list
140+ for i in pairs (value ) do
141+ value [i ] = tonumber (value [i ]) or value [i ]
145142 end
146143 end
147144 end
148145 end
146+ return tbl
147+ end
148+
149+ local function purge (itbl )
150+ local otbl = { }
151+ for section , params in pairs (itbl ) do
152+ if tonumber (section )
153+ and params .enable
154+ and params .enable == " 1"
155+ then
156+ otbl [params .id ] = params
157+ params .enable = nil
158+ params .counter = nil
159+ end
160+ end
149161 return otbl
150162 end
151163
152164 uci :load (" flukso" )
153- self .sensor = clean (uci :get_all (" flukso" ))
165+ local sensor = clean (uci :get_all (" flukso" ))
166+ local jsensor = luci .json .encode (sensor )
167+ mqtt :publish (MOSQ_TOPIC_SENSOR_CONFIG , jsensor , MOSQ_QOS0 , MOSQ_RETAIN )
168+ self .sensor = purge (sensor )
169+
154170 if DEBUG .config then dbg .vardump (self .sensor ) end
155171 end
156172}
0 commit comments