cloud.c 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. #include "cloud.h"
  2. #include "plt.h"
  3. /* in seconds */
  4. long long cloud_get_unixts()
  5. {
  6. return (long long)time(NULL);
  7. }
  8. /* in ms */
  9. long long cloud_get_timezonets()
  10. {
  11. // return (cloud_get_unixts() + sta_get_timezone()*(long long)3600)*(long long)1000;
  12. return cloud_get_unixts() * (long long)1000;
  13. }
  14. int cloud_init(void)
  15. {
  16. log_dbg("%s, ++++ ", __func__);
  17. int ret = 0;
  18. cloud_enable_upload();
  19. MDL.cloud.sys_timer[0] = 0;
  20. MDL.cloud.sys_intv[0] = 10; // 10 means 1s
  21. log_dbg("%s, ---- ret:%d", __func__, ret);
  22. return ret;
  23. }
  24. static void cloud_update()
  25. {
  26. struct cloud_t *c = &MDL.cloud;
  27. mqtt_ringbuffer_element_t e;
  28. char ts_buf[128];
  29. char itm_buf[2048];
  30. int i;
  31. long long ts;
  32. // log_dbg("%s,", __func__);
  33. /* 1 seconds */
  34. if (c->sys_timer[0]++ >= c->sys_intv[0])
  35. {
  36. c->sys_timer[0] = 0;
  37. e.cmd = CMD_MQTT_SENDKV;
  38. e.sztopic[0] = 0;
  39. e.szpayload[0] = 0;
  40. cJSON *o = cJSON_CreateObject();
  41. cJSON *mbfuncVal_03 = cJSON_CreateObject();
  42. cJSON *values = cJSON_CreateObject();
  43. //
  44. ts = cloud_get_timezonets();
  45. cJSON_AddNumberToObject(o, "ts", ts);
  46. cJSON_AddStringToObject(o, "type", "cdif3300");
  47. cJSON_AddNumberToObject(o, "idx", 1);
  48. //regVal 0x
  49. cJSON_AddNumberToObject(mbfuncVal_03,"1",MDL.co_alarm);
  50. cJSON_AddNumberToObject(mbfuncVal_03,"2",MDL.co_ppm);
  51. cJSON_AddNumberToObject(mbfuncVal_03,"16",MDL.co_alarm_thrd);
  52. //func
  53. cJSON_AddItemToObject(values,"3",mbfuncVal_03);
  54. cJSON_AddItemToObject(o, "values", values);
  55. char *ostr = cJSON_PrintUnformatted(o);
  56. //misc_get_datetimestr(ts_buf, sizeof(ts_buf));
  57. sprintf(e.szpayload, "%s", ostr);
  58. sprintf(e.sztopic, "%s_PUB", MDL.szDevName);
  59. //log_info("%s, topic:%s, payload:%s", __func__,e.sztopic, e.szpayload);
  60. mqtt_lock_txbuf();
  61. mqtt_queue_txbuf(e);
  62. mqtt_unlock_txbuf();
  63. cJSON_Delete(o);
  64. cJSON_free(ostr);
  65. //cJSON_Delete(mbfuncVal_02);
  66. //cJSON_Delete(values);
  67. }
  68. }
  69. int cloud_is_upload_enable()
  70. {
  71. return MDL.cloud.upload_enable;
  72. }
  73. int cloud_enable_upload()
  74. {
  75. MDL.cloud.upload_enable = 1;
  76. return 0;
  77. }
  78. int cloud_disable_upload()
  79. {
  80. MDL.cloud.upload_enable = 0;
  81. return 0;
  82. }
  83. static void cloud_proc_recv()
  84. {
  85. cJSON *root = NULL;
  86. cJSON *value = NULL;
  87. cJSON *func_03 = NULL;
  88. cJSON *reg_val = NULL;
  89. int rc;
  90. char szResponse[128];
  91. bool needRespond = false;
  92. mqtt_ringbuffer_element_t e;
  93. mqtt_lock_rxbuf();
  94. rc = mqtt_dequeue_rxbuf(&e);
  95. mqtt_unlock_rxbuf();
  96. if (rc != 1)
  97. return;
  98. root = cJSON_Parse(e.szpayload);
  99. if (!root)
  100. {
  101. log_info("%s, cJSON failed to parse payload null", __func__);
  102. return;
  103. }
  104. value = cJSON_GetObjectItem(root,"values");
  105. if(value == NULL){
  106. log_info("%s, cJSON do not have item value", __func__);
  107. goto JSON_DONE;
  108. }
  109. func_03 = cJSON_GetObjectItem(value,"3");
  110. if(func_03 == NULL){
  111. log_info("%s, cJSON do not have item func code 02", __func__);
  112. goto JSON_DONE;
  113. }
  114. //cJSON_GetNumberValue
  115. if(cJSON_HasObjectItem(func_03,"1") == 1){
  116. reg_val = cJSON_GetObjectItem(func_03,"1");
  117. log_info("%s,func:03,reg:%d,val:%f",__func__,1,cJSON_GetNumberValue(reg_val));
  118. MDL.co_alarm = cJSON_GetNumberValue(reg_val);
  119. }
  120. if(cJSON_HasObjectItem(func_03,"2") == 1){
  121. reg_val = cJSON_GetObjectItem(func_03,"2");
  122. log_info("%s,func:03,reg:%d,val:%f",__func__,2,cJSON_GetNumberValue(reg_val));
  123. MDL.co_ppm = cJSON_GetNumberValue(reg_val);
  124. }
  125. if(cJSON_HasObjectItem(func_03,"16") == 1){
  126. reg_val = cJSON_GetObjectItem(func_03,"16");
  127. log_info("%s,func:03,reg:%d,val:%f",__func__,16,cJSON_GetNumberValue(reg_val));
  128. MDL.co_alarm_thrd = cJSON_GetNumberValue(reg_val);
  129. }
  130. // if (needRespond)
  131. // {
  132. // mqtt_ringbuffer_element_t eResponds;
  133. // eResponds.cmd = CMD_MQTT_SENDKV;
  134. // sprintf(eResponds.szpayload, "{\"type\":\"response\",\"timestamp\":%lld,\"data\":\"%s\"}", cloud_get_timezonets(), szResponse);
  135. // sprintf(eResponds.sztopic, "%s-ctl", MDL.szDevName);
  136. // mqtt_lock_txbuf();
  137. // mqtt_queue_txbuf(eResponds);
  138. // mqtt_unlock_txbuf();
  139. // }
  140. JSON_DONE:
  141. cJSON_Delete(root);
  142. }
  143. void cloud_exe(void)
  144. {
  145. cloud_proc_recv();
  146. cloud_update();
  147. }