thermferm/server.c

changeset 684
b2265c7e5707
parent 681
1f81e52c5abf
child 687
f5d05b420732
equal deleted inserted replaced
683:d48733bf1529 684:b2265c7e5707
341 srv_send(s, (char *)"."); 341 srv_send(s, (char *)".");
342 return 0; 342 return 0;
343 } 343 }
344 344
345 if (strcmp(opt, (char *)"JSON") == 0) { 345 if (strcmp(opt, (char *)"JSON") == 0) {
346 char *payload = NULL, vbuf[64]; 346 char *payload = NULL, *payloadu = NULL, vbuf[64];
347 bool comma = false; 347 bool comma = false;
348 348
349 if (param == NULL) { 349 if (param == NULL) {
350 srv_send(s, (char *)"212 Devices json list follows:"); 350 srv_send(s, (char *)"212 Devices json list follows:");
351 payload = xstrcpy((char *)"["); 351 payload = xstrcpy((char *)"[");
352 for (device = Config.devices; device; device = device->next) { 352 for (device = Config.devices; device; device = device->next) {
353 if (comma) 353 if (comma)
354 payload = xstrcat(payload, (char *)","); 354 payload = xstrcat(payload, (char *)",");
355 payload = xstrcat(payload, (char *)"{\"uuid\":\""); 355 payloadu = device_json(device, false);
356 payload = xstrcat(payload, device->uuid); 356 payload = xstrcat(payload, payloadu);
357 payload = xstrcat(payload, (char *)"\",\"address\":\"");
358 payload = xstrcat(payload, device->address);
359 payload = xstrcat(payload, (char *)"\",\"subdevice\":");
360 snprintf(vbuf, 63, "%d", device->subdevice);
361 payload = xstrcat(payload, vbuf);
362 payload = xstrcat(payload, (char *)",\"inuse\":");
363 snprintf(vbuf, 63, "%d", device->inuse);
364 payload = xstrcat(payload, vbuf);
365 payload = xstrcat(payload, (char *)",\"comment\":\"");
366 payload = xstrcat(payload, device->comment);
367 payload = xstrcat(payload, (char *)"\",\"direction\":\"");
368 payload = xstrcat(payload, (char *)DEVDIR[device->direction]);
369 payload = xstrcat(payload, (char *)"\",\"value\":");
370 snprintf(vbuf, 63, "%d", device->value + device->offset);
371 payload = xstrcat(payload, vbuf);
372 payload = xstrcat(payload, (char *)"}");
373 comma = true; 357 comma = true;
358 free(payloadu);
359 payloadu = NULL;
374 } 360 }
375 payload = xstrcat(payload, (char *)"]"); 361 payload = xstrcat(payload, (char *)"]");
376 srv_send(s, payload); 362 srv_send(s, payload);
377 srv_send(s, (char *)"."); 363 srv_send(s, (char *)".");
378 free(payload); 364 free(payload);
384 payload = xstrcpy((char *)"{\"type\":\"device\",\"unit\":\""); 370 payload = xstrcpy((char *)"{\"type\":\"device\",\"unit\":\"");
385 snprintf(vbuf, 63, "%d", device->subdevice); 371 snprintf(vbuf, 63, "%d", device->subdevice);
386 payload = xstrcat(payload, device->address); 372 payload = xstrcat(payload, device->address);
387 payload = xstrcat(payload, (char *)"-"); 373 payload = xstrcat(payload, (char *)"-");
388 payload = xstrcat(payload, vbuf); 374 payload = xstrcat(payload, vbuf);
389 payload = xstrcat(payload, (char *)"\",\"metric\":{\"uuid\":\""); 375 payload = xstrcat(payload, (char *)"\",\"metric\":");
390 payload = xstrcat(payload, device->uuid); 376 payloadu = device_json(device, true);
391 payload = xstrcat(payload, (char *)"\",\"type\":\""); 377 payload = xstrcat(payload, payloadu);
392 payload = xstrcat(payload, (char *)DEVTYPE[device->type]); 378 free(payloadu);
393 payload = xstrcat(payload, (char *)"\",\"direction\":\""); 379 payloadu = NULL;
394 payload = xstrcat(payload, (char *)DEVDIR[device->direction]); 380 payload = xstrcat(payload, (char *)"}");
395 payload = xstrcat(payload, (char *)"\",\"address\":\"");
396 payload = xstrcat(payload, device->address);
397 payload = xstrcat(payload, (char *)"\",\"subdevice\":");
398 snprintf(vbuf, 63, "%d", device->subdevice);
399 payload = xstrcat(payload, vbuf);
400 payload = xstrcat(payload, (char *)",\"value\":");
401 snprintf(vbuf, 63, "%d", device->value);
402 payload = xstrcat(payload, vbuf);
403 payload = xstrcat(payload, (char *)",\"offset\":");
404 snprintf(vbuf, 63, "%d", device->offset);
405 payload = xstrcat(payload, vbuf);
406 payload = xstrcat(payload, (char *)",\"present\":\"");
407 payload = xstrcat(payload, (char *)DEVPRESENT[device->present]);
408 payload = xstrcat(payload, (char *)"\",\"gpiopin\":");
409 snprintf(vbuf, 63, "%d", device->gpiopin);
410 payload = xstrcat(payload, vbuf);
411 payload = xstrcat(payload, (char *)",\"inuse\":");
412 snprintf(vbuf, 63, "%d", device->inuse);
413 payload = xstrcat(payload, vbuf);
414 payload = xstrcat(payload, (char *)",\"description\":\"");
415 payload = xstrcat(payload, device->description);
416 payload = xstrcat(payload, (char *)"\",\"comment\":\"");
417 payload = xstrcat(payload, device->comment);
418 payload = xstrcat(payload, (char *)"\",\"timestamp\":");
419 snprintf(vbuf, 63, "%ld", (long)device->timestamp);
420 payload = xstrcat(payload, vbuf);
421 payload = xstrcat(payload, (char *)"}}");
422 srv_send(s, (char *)"213 Device json record follows:"); 381 srv_send(s, (char *)"213 Device json record follows:");
423 srv_send(s, payload); 382 srv_send(s, payload);
424 free(payload); 383 free(payload);
425 payload = NULL; 384 payload = NULL;
426 srv_send(s, (char *)"."); 385 srv_send(s, (char *)".");
427 return 0; 386 return 0;
428 } 387 }
429 } 388 }
389 srv_send(s, (char *)"{}");
430 srv_send(s, (char *)"440 No such device"); 390 srv_send(s, (char *)"440 No such device");
431 return 0; 391 return 0;
432 } 392 }
433 } 393 }
434 394

mercurial