From 10d36e7ccc03f09e4b5b19902c422671d3cd9c8e Mon Sep 17 00:00:00 2001 From: Reimar Date: Mon, 24 Mar 2025 10:31:45 +0100 Subject: [PATCH] Implement generating device ID --- iot/Makefile | 4 ++-- iot/device_id.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ iot/device_id.h | 6 ++++++ iot/main.c | 12 +++++++++++- 4 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 iot/device_id.c create mode 100644 iot/device_id.h diff --git a/iot/Makefile b/iot/Makefile index 1635675..d9c12c7 100644 --- a/iot/Makefile +++ b/iot/Makefile @@ -1,3 +1,3 @@ -all: main.c mqtt.c temperature.c - $(CC) -lmosquitto -lpthread -li2c main.c mqtt.c temperature.c +all: main.c mqtt.c temperature.c device_id.c + $(CC) -lmosquitto -lpthread -li2c main.c mqtt.c temperature.c device_id.c diff --git a/iot/device_id.c b/iot/device_id.c new file mode 100644 index 0000000..f85597f --- /dev/null +++ b/iot/device_id.c @@ -0,0 +1,46 @@ +#include +#include + +#include "device_id.h" + +#define DEVICE_ID_SIZE 5 + +char *get_device_id(void) +{ + FILE *file = fopen("device_id.txt", "r"); + + if (!file) { + char *device_id = generate_device_id(); + + file = fopen("device_id.txt", "w"); + fprintf(file, "%s", device_id); + fclose(file); + + return device_id; + } + + char *device_id = malloc(DEVICE_ID_SIZE + 1); + fgets(device_id, DEVICE_ID_SIZE + 1, file); + fclose(file); + + return device_id; +} + +char *generate_device_id(void) +{ + char *device_id = malloc(DEVICE_ID_SIZE + 1); + + for (int i = 0; i < DEVICE_ID_SIZE; i++) { + device_id[i] = 'A' + (random() % 26); + } + + device_id[DEVICE_ID_SIZE] = '\0'; + + return device_id; +} + +void destroy_device_id(char *device_id) +{ + free(device_id); +} + diff --git a/iot/device_id.h b/iot/device_id.h new file mode 100644 index 0000000..f7939b4 --- /dev/null +++ b/iot/device_id.h @@ -0,0 +1,6 @@ +char *get_device_id(void); + +char *generate_device_id(void); + +void destroy_device_id(char *device_id); + diff --git a/iot/main.c b/iot/main.c index 8430bb3..51f7f07 100644 --- a/iot/main.c +++ b/iot/main.c @@ -4,12 +4,18 @@ #include #include #include +#include #include "mqtt.h" #include "temperature.h" +#include "device_id.h" void *watch_temperature(void *arg) { + char *device_id = get_device_id(); + + printf("Device ID: %s\n", device_id); + temperature_handle_t temp_handle = init_temperature(); get_temperature(temp_handle); @@ -20,7 +26,7 @@ void *watch_temperature(void *arg) char *str = malloc(snprintf(NULL, 0, "%lf", temperature) + 1); sprintf(str, "%lf", temperature); - mqtt_send_message("/temperature", str); + mqtt_send_message("temperature", str); free(str); @@ -29,6 +35,8 @@ void *watch_temperature(void *arg) sleep(60); } + destroy_device_id(device_id); + return NULL; } @@ -40,6 +48,8 @@ void mqtt_on_connect(void) int main(void) { + srand(time(NULL)); + init_mqtt(); return EXIT_SUCCESS;