thermferm/mqtt.c

changeset 515
7ab5cf2afc0c
parent 514
f5a00ad53329
child 518
fd36bedab944
equal deleted inserted replaced
514:f5a00ad53329 515:7ab5cf2afc0c
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\":\"");

mercurial