123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- #include "cloud.h"
- #include "plt.h"
- /* in seconds */
- long long cloud_get_unixts()
- {
- return (long long)time(NULL);
- }
- /* in ms */
- long long cloud_get_timezonets()
- {
- // return (cloud_get_unixts() + sta_get_timezone()*(long long)3600)*(long long)1000;
- return cloud_get_unixts() * (long long)1000;
- }
- int cloud_init(void)
- {
- log_dbg("%s, ++++ ", __func__);
- int ret = 0;
- cloud_enable_upload();
- MDL.cloud.sys_timer[0] = 0;
- MDL.cloud.sys_intv[0] = 10; // 10 means 1s
- log_dbg("%s, ---- ret:%d", __func__, ret);
- return ret;
- }
- static void cloud_update()
- {
- struct cloud_t *c = &MDL.cloud;
- mqtt_ringbuffer_element_t e;
- char ts_buf[128];
- char itm_buf[2048];
- int i;
- long long ts;
- // log_dbg("%s,", __func__);
- /* 1 seconds */
- if (c->sys_timer[0]++ >= c->sys_intv[0])
- {
- c->sys_timer[0] = 0;
- e.cmd = CMD_MQTT_SENDKV;
- e.sztopic[0] = 0;
- e.szpayload[0] = 0;
- cJSON *o = cJSON_CreateObject();
- cJSON *mbfuncVal_03 = cJSON_CreateObject();
- cJSON *values = cJSON_CreateObject();
- //
- ts = cloud_get_timezonets();
- cJSON_AddNumberToObject(o, "ts", ts);
- cJSON_AddStringToObject(o, "type", "cdif3300");
- cJSON_AddNumberToObject(o, "idx", 1);
-
- //regVal 0x
- cJSON_AddNumberToObject(mbfuncVal_03,"1",MDL.co_alarm);
- cJSON_AddNumberToObject(mbfuncVal_03,"2",MDL.co_ppm);
- cJSON_AddNumberToObject(mbfuncVal_03,"16",MDL.co_alarm_thrd);
- //func
- cJSON_AddItemToObject(values,"3",mbfuncVal_03);
- cJSON_AddItemToObject(o, "values", values);
- char *ostr = cJSON_PrintUnformatted(o);
- //misc_get_datetimestr(ts_buf, sizeof(ts_buf));
- sprintf(e.szpayload, "%s", ostr);
- sprintf(e.sztopic, "%s_PUB", MDL.szDevName);
- //log_info("%s, topic:%s, payload:%s", __func__,e.sztopic, e.szpayload);
- mqtt_lock_txbuf();
- mqtt_queue_txbuf(e);
- mqtt_unlock_txbuf();
- cJSON_Delete(o);
- cJSON_free(ostr);
- //cJSON_Delete(mbfuncVal_02);
- //cJSON_Delete(values);
- }
- }
- int cloud_is_upload_enable()
- {
- return MDL.cloud.upload_enable;
- }
- int cloud_enable_upload()
- {
- MDL.cloud.upload_enable = 1;
- return 0;
- }
- int cloud_disable_upload()
- {
- MDL.cloud.upload_enable = 0;
- return 0;
- }
- static void cloud_proc_recv()
- {
- cJSON *root = NULL;
- cJSON *value = NULL;
- cJSON *func_03 = NULL;
- cJSON *reg_val = NULL;
- int rc;
- char szResponse[128];
- bool needRespond = false;
- mqtt_ringbuffer_element_t e;
- mqtt_lock_rxbuf();
- rc = mqtt_dequeue_rxbuf(&e);
- mqtt_unlock_rxbuf();
- if (rc != 1)
- return;
- root = cJSON_Parse(e.szpayload);
- if (!root)
- {
- log_info("%s, cJSON failed to parse payload null", __func__);
- return;
- }
- value = cJSON_GetObjectItem(root,"values");
- if(value == NULL){
- log_info("%s, cJSON do not have item value", __func__);
- goto JSON_DONE;
- }
- func_03 = cJSON_GetObjectItem(value,"3");
- if(func_03 == NULL){
- log_info("%s, cJSON do not have item func code 02", __func__);
- goto JSON_DONE;
- }
- //cJSON_GetNumberValue
- if(cJSON_HasObjectItem(func_03,"1") == 1){
- reg_val = cJSON_GetObjectItem(func_03,"1");
- log_info("%s,func:03,reg:%d,val:%f",__func__,1,cJSON_GetNumberValue(reg_val));
- MDL.co_alarm = cJSON_GetNumberValue(reg_val);
- }
- if(cJSON_HasObjectItem(func_03,"2") == 1){
- reg_val = cJSON_GetObjectItem(func_03,"2");
- log_info("%s,func:03,reg:%d,val:%f",__func__,2,cJSON_GetNumberValue(reg_val));
- MDL.co_ppm = cJSON_GetNumberValue(reg_val);
- }
- if(cJSON_HasObjectItem(func_03,"16") == 1){
- reg_val = cJSON_GetObjectItem(func_03,"16");
- log_info("%s,func:03,reg:%d,val:%f",__func__,16,cJSON_GetNumberValue(reg_val));
- MDL.co_alarm_thrd = cJSON_GetNumberValue(reg_val);
- }
- // if (needRespond)
- // {
- // mqtt_ringbuffer_element_t eResponds;
- // eResponds.cmd = CMD_MQTT_SENDKV;
- // sprintf(eResponds.szpayload, "{\"type\":\"response\",\"timestamp\":%lld,\"data\":\"%s\"}", cloud_get_timezonets(), szResponse);
- // sprintf(eResponds.sztopic, "%s-ctl", MDL.szDevName);
- // mqtt_lock_txbuf();
- // mqtt_queue_txbuf(eResponds);
- // mqtt_unlock_txbuf();
- // }
- JSON_DONE:
- cJSON_Delete(root);
- }
- void cloud_exe(void)
- {
- cloud_proc_recv();
- cloud_update();
- }
|