#include #include #include #include #include #include #include #include #include "hardware_info.h" #define MQTT_SERVER_IP "127.0.0.1" #define MQTT_SERVER_PORT 1883 #define MQTT_SERVER_USER "iops" #define MQTT_SERVER_PASSWORD "12345678" #define MQTT_THIS_CLIEN_NAME "n3150-sensors" #define MQTT_PUB_TOPIC "server-status" // 连接回调函数,当连接成功时会进入这里,可以在这里进行连接成功之后的操作,比如连接之后的信息同步 void my_connect_callback(struct mosquitto *mosq, void *obj, int rc) { } // 断开连接回调函数,在断开连接之后进入 void my_disconnect_callback(struct mosquitto *mosq, void *obj, int result) { printf("%d:\n", __LINE__); } void my_message_callback(struct mosquitto *mosq, void *obj, const struct mosquitto_message *msg) { time_t t; struct tm *lt; time(&t); lt = localtime(&t); printf("%d.%d.%d %d:%d:%d ", lt->tm_year + 1900, lt->tm_mon, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec); printf("%d:topic(%s)->%s\n", __LINE__, (char *)msg->topic, (char *)msg->payload); } // 订阅消息回调 void my_subscribe_callback(struct mosquitto *mosq, void *obj, int mid, int qos_count, const int *granted_qos) { #if 0 int i; time_t t; struct tm *lt; time(&t); lt = localtime(&t); printf("%d: %s\n", __LINE__, (char *)obj); printf("%d: mid=%d\n", __LINE__, mid); printf("%d: qos_count=%d\n", __LINE__, qos_count); for (i = 0; i < qos_count; i++) { printf("%d: granted_qos[%d]=%d\n", __LINE__, i, granted_qos[i]); } #endif } int main(int argc, char *argv[]) { /* 不配置流缓冲区,PRINT_LOG会立即写入文件 */ setbuf(stdout, NULL); setbuf(stderr, NULL); struct mosquitto *m_hMqtt; char content[1024]; hardware_info_init(); //初始化lib库函数 mosquitto_lib_init(); // 定义一个客户端名为subtest的发布端。客户端表示订阅端的唯一性 m_hMqtt = mosquitto_new(MQTT_THIS_CLIEN_NAME, true, MQTT_THIS_CLIEN_NAME); //设置连接确认回调 mosquitto_connect_callback_set(m_hMqtt, my_connect_callback); //设置断开连接确认回调 mosquitto_disconnect_callback_set(m_hMqtt, my_disconnect_callback); //设置收到订阅回调 //mosquitto_message_callback_set(m_hMqtt, my_message_callback); //设置订阅回调(mosquitto_subscribe()订阅后回调) //mosquitto_subscribe_callback_set(m_hMqtt, my_subscribe_callback); mosquitto_username_pw_set(m_hMqtt, MQTT_SERVER_USER, MQTT_SERVER_PASSWORD); //开始连接服务器 if (MOSQ_ERR_SUCCESS == mosquitto_connect(m_hMqtt, MQTT_SERVER_IP, MQTT_SERVER_PORT, 20)) { printf("connect server: %s:%d success\n", MQTT_SERVER_IP, MQTT_SERVER_PORT); } else { printf("connect server: %s:%d failed\n", MQTT_SERVER_IP, MQTT_SERVER_PORT); exit(-1); } //mosquitto_subscribe(m_hMqtt,NULL,topic1,1); //mosquitto_subscribe(m_hMqtt,NULL,topic2,1); //mosquitto_loop_start(m_hMqtt); //mosquitto会创建一个进程实时运行发送心跳包和接收订阅的主题消息 while (1) { sleep(2); long uptime; float load; // 5分钟的负载 int *procs; if (get_system_info(&uptime, &load, &procs) < 0) { printf("get_system_info fail!\n"); continue; } sprintf(content, "{\"uptime\" : \"%d\", \"load\" : \"%0.1f\", \"procs\" : \"%d\", \"cpu_temp\" : \"%d\", \"hdd_temp\" : \"%d\", \"cpu_rate\" : \"%0.1f\", \"mem_rate\" : \"%0.1f\"}", uptime, load, procs, get_cpu_temp(), get_sata_hddtemp(), get_sysCpuUsage(), cal_mem_occupy()); mosquitto_publish(m_hMqtt, NULL, MQTT_PUB_TOPIC, strlen(content), content, 0, false); } //mosquitto_loop_stop(m_hMqtt, false); mosquitto_destroy(m_hMqtt); mosquitto_lib_cleanup(); return 0; }