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 |