176 mosquitto_publish(my_mosq, &mqtt_mid_sent, topic, 0, NULL, mqtt_qos, retain); |
176 mosquitto_publish(my_mosq, &mqtt_mid_sent, topic, 0, NULL, mqtt_qos, retain); |
177 } |
177 } |
178 |
178 |
179 |
179 |
180 |
180 |
181 void pub_domoticz_temp(int idx, char *value) { |
181 void pub_domoticz_temp(int idx, int value) { |
182 char *dload = NULL; |
182 char *dload = NULL; |
183 char sidx[10]; |
183 char sidx[10], sval[20]; |
184 |
184 |
185 if (idx == 0) |
185 if (idx == 0) |
186 return; |
186 return; |
187 |
187 |
188 sprintf(sidx, "%d", idx); |
188 sprintf(sidx, "%d", idx); |
|
189 sprintf(sval, "%.3f", value / 1000.0); |
189 |
190 |
190 dload = xstrcpy((char *)"{\"command\":\"udevice\",\"idx\":"); |
191 dload = xstrcpy((char *)"{\"command\":\"udevice\",\"idx\":"); |
191 dload = xstrcat(dload, sidx); |
192 dload = xstrcat(dload, sidx); |
192 dload = xstrcat(dload, (char *)",\"nvalue\":0,\"svalue\":\""); |
193 dload = xstrcat(dload, (char *)",\"nvalue\":0,\"svalue\":\""); |
193 dload = xstrcat(dload, value); |
194 dload = xstrcat(dload, sval); |
194 dload = xstrcat(dload, (char *)"\"}"); |
195 dload = xstrcat(dload, (char *)"\"}"); |
195 publisher(mosq, (char *)"domoticz/in", dload, false); |
196 publisher(mosq, (char *)"domoticz/in", dload, false); |
196 free(dload); |
197 free(dload); |
197 dload = NULL; |
198 dload = NULL; |
198 } |
199 } |
252 payload = xstrcat(payload, (char *)TEMPSTATE[unit->air_state]); |
253 payload = xstrcat(payload, (char *)TEMPSTATE[unit->air_state]); |
253 payload = xstrcat(payload, (char *)"\",\"temperature\":"); |
254 payload = xstrcat(payload, (char *)"\",\"temperature\":"); |
254 sprintf(buf, "%.3f", unit->air_temperature / 1000.0); |
255 sprintf(buf, "%.3f", unit->air_temperature / 1000.0); |
255 payload = xstrcat(payload, buf); |
256 payload = xstrcat(payload, buf); |
256 payload = xstrcat(payload, (char *)"}"); |
257 payload = xstrcat(payload, (char *)"}"); |
257 pub_domoticz_temp(unit->air_idx, buf); |
|
258 } else { |
258 } else { |
259 payload = xstrcat(payload, (char *)"\",\"air\":null"); |
259 payload = xstrcat(payload, (char *)"\",\"air\":null"); |
260 } |
260 } |
261 |
261 |
262 if (unit->beer_address) { |
262 if (unit->beer_address) { |
266 payload = xstrcat(payload, (char *)TEMPSTATE[unit->beer_state]); |
266 payload = xstrcat(payload, (char *)TEMPSTATE[unit->beer_state]); |
267 payload = xstrcat(payload, (char *)"\",\"temperature\":"); |
267 payload = xstrcat(payload, (char *)"\",\"temperature\":"); |
268 sprintf(buf, "%.3f", unit->beer_temperature / 1000.0); |
268 sprintf(buf, "%.3f", unit->beer_temperature / 1000.0); |
269 payload = xstrcat(payload, buf); |
269 payload = xstrcat(payload, buf); |
270 payload = xstrcat(payload, (char *)"}"); |
270 payload = xstrcat(payload, (char *)"}"); |
271 pub_domoticz_temp(unit->beer_idx, buf); |
|
272 } else { |
271 } else { |
273 payload = xstrcat(payload, (char *)",\"beer\":null"); |
272 payload = xstrcat(payload, (char *)",\"beer\":null"); |
274 } |
273 } |
275 |
274 |
276 if (unit->heater_address) { |
275 if (unit->heater_address) { |
278 payload = xstrcat(payload, unit->heater_address); |
277 payload = xstrcat(payload, unit->heater_address); |
279 payload = xstrcat(payload, (char *)"\",\"state\":"); |
278 payload = xstrcat(payload, (char *)"\",\"state\":"); |
280 sprintf(buf, "%d", unit->heater_state); |
279 sprintf(buf, "%d", unit->heater_state); |
281 payload = xstrcat(payload, buf); |
280 payload = xstrcat(payload, buf); |
282 payload = xstrcat(payload, (char *)"}"); |
281 payload = xstrcat(payload, (char *)"}"); |
283 pub_domoticz_output(unit->heater_idx, unit->heater_state); |
|
284 } else { |
282 } else { |
285 payload = xstrcat(payload, (char *)",\"heater\":null"); |
283 payload = xstrcat(payload, (char *)",\"heater\":null"); |
286 } |
284 } |
287 |
285 |
288 if (unit->cooler_address) { |
286 if (unit->cooler_address) { |
290 payload = xstrcat(payload, unit->cooler_address); |
288 payload = xstrcat(payload, unit->cooler_address); |
291 payload = xstrcat(payload, (char *)"\",\"state\":"); |
289 payload = xstrcat(payload, (char *)"\",\"state\":"); |
292 sprintf(buf, "%d", unit->cooler_state); |
290 sprintf(buf, "%d", unit->cooler_state); |
293 payload = xstrcat(payload, buf); |
291 payload = xstrcat(payload, buf); |
294 payload = xstrcat(payload, (char *)"}"); |
292 payload = xstrcat(payload, (char *)"}"); |
295 pub_domoticz_output(unit->cooler_idx, unit->cooler_state); |
|
296 } else { |
293 } else { |
297 payload = xstrcat(payload, (char *)",\"cooler\":null"); |
294 payload = xstrcat(payload, (char *)",\"cooler\":null"); |
298 } |
295 } |
299 |
296 |
300 if (unit->fan_address) { |
297 if (unit->fan_address) { |
302 payload = xstrcat(payload, unit->fan_address); |
299 payload = xstrcat(payload, unit->fan_address); |
303 payload = xstrcat(payload, (char *)"\",\"state\":"); |
300 payload = xstrcat(payload, (char *)"\",\"state\":"); |
304 sprintf(buf, "%d", unit->fan_state); |
301 sprintf(buf, "%d", unit->fan_state); |
305 payload = xstrcat(payload, buf); |
302 payload = xstrcat(payload, buf); |
306 payload = xstrcat(payload, (char *)"}"); |
303 payload = xstrcat(payload, (char *)"}"); |
307 pub_domoticz_output(unit->fan_idx, unit->fan_state); |
|
308 } else { |
304 } else { |
309 payload = xstrcat(payload, (char *)",\"fan\":null"); |
305 payload = xstrcat(payload, (char *)",\"fan\":null"); |
310 } |
306 } |
311 |
307 |
312 if (unit->door_address) { |
308 if (unit->door_address) { |
314 payload = xstrcat(payload, unit->door_address); |
310 payload = xstrcat(payload, unit->door_address); |
315 payload = xstrcat(payload, (char *)"\",\"state\":"); |
311 payload = xstrcat(payload, (char *)"\",\"state\":"); |
316 sprintf(buf, "%d", unit->door_state); |
312 sprintf(buf, "%d", unit->door_state); |
317 payload = xstrcat(payload, buf); |
313 payload = xstrcat(payload, buf); |
318 payload = xstrcat(payload, (char *)"}"); |
314 payload = xstrcat(payload, (char *)"}"); |
319 pub_domoticz_output(unit->door_idx, unit->door_state); |
|
320 } else { |
315 } else { |
321 payload = xstrcat(payload, (char *)",\"door\":null"); |
316 payload = xstrcat(payload, (char *)",\"door\":null"); |
322 } |
317 } |
323 |
318 |
324 if (unit->light_address) { |
319 if (unit->light_address) { |
326 payload = xstrcat(payload, unit->light_address); |
321 payload = xstrcat(payload, unit->light_address); |
327 payload = xstrcat(payload, (char *)"\",\"state\":"); |
322 payload = xstrcat(payload, (char *)"\",\"state\":"); |
328 sprintf(buf, "%d", unit->light_state); |
323 sprintf(buf, "%d", unit->light_state); |
329 payload = xstrcat(payload, buf); |
324 payload = xstrcat(payload, buf); |
330 payload = xstrcat(payload, (char *)"}"); |
325 payload = xstrcat(payload, (char *)"}"); |
331 pub_domoticz_output(unit->light_idx, unit->light_state); |
|
332 } else { |
326 } else { |
333 payload = xstrcat(payload, (char *)",\"light\":null"); |
327 payload = xstrcat(payload, (char *)",\"light\":null"); |
334 } |
328 } |
335 |
329 |
336 if (unit->psu_address) { |
330 if (unit->psu_address) { |
338 payload = xstrcat(payload, unit->psu_address); |
332 payload = xstrcat(payload, unit->psu_address); |
339 payload = xstrcat(payload, (char *)"\",\"state\":"); |
333 payload = xstrcat(payload, (char *)"\",\"state\":"); |
340 sprintf(buf, "%d", unit->psu_state); |
334 sprintf(buf, "%d", unit->psu_state); |
341 payload = xstrcat(payload, buf); |
335 payload = xstrcat(payload, buf); |
342 payload = xstrcat(payload, (char *)"}"); |
336 payload = xstrcat(payload, (char *)"}"); |
343 pub_domoticz_output(unit->psu_idx, unit->psu_state); |
|
344 } else { |
337 } else { |
345 payload = xstrcat(payload, (char *)",\"psu\":null"); |
338 payload = xstrcat(payload, (char *)",\"psu\":null"); |
346 } |
339 } |
347 |
340 |
348 payload = xstrcat(payload, (char *)",\"mode\":\""); |
341 payload = xstrcat(payload, (char *)",\"mode\":\""); |