#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(); }