temperature-alarm/iot/brokers/mqtt.c
2025-03-25 12:30:53 +01:00

58 lines
1.3 KiB
C

#include <mosquitto.h>
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include "../config.h"
struct mosquitto *mosq;
void broker_on_connect(void);
void on_connect(struct mosquitto *client, void *obj, int rc)
{
if (rc != 0) {
fprintf(stderr, "%s\n", mosquitto_connack_string(rc));
return;
}
puts("Connected to " MQTT_IP);
broker_on_connect();
}
void on_message(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message)
{
printf("Received message on topic %s\n", message->topic);
}
void mqtt_send_message(char *topic, char *message)
{
int result = mosquitto_publish(mosq, NULL, topic, strlen(message), message, 0, false);
if (result != MOSQ_ERR_SUCCESS) {
fprintf(stderr, "Error sending message: %d\n", result);
}
}
void init_mqtt(void)
{
int version[3];
mosquitto_lib_init();
mosquitto_lib_version(&version[0], &version[1], &version[2]);
printf("Using mosquitto library version %i.%i.%i\n", version[0], version[1], version[2]);
mosq = mosquitto_new(NULL, true, NULL);
mosquitto_connect_callback_set(mosq, on_connect);
mosquitto_message_callback_set(mosq, on_message);
mosquitto_username_pw_set(mosq, MQTT_USER, MQTT_PASSWORD);
mosquitto_connect(mosq, MQTT_IP, MQTT_PORT, 60);
mosquitto_loop_forever(mosq, -1, 1);
mosquitto_destroy(mosq);
mosquitto_lib_cleanup();
}