diff options
| author | Thomas Schmucker <ts@its1.de> | 2024-10-06 12:58:03 +0200 |
|---|---|---|
| committer | Thomas Schmucker <ts@its1.de> | 2024-10-06 12:58:03 +0200 |
| commit | d2a6897f05a07a058b2185c953b30d26fded081b (patch) | |
| tree | 288165ea13e071ac50ae42f8ff4a5ec7d2fb9334 /src/main.c | |
| download | use-mosquitto-d2a6897f05a07a058b2185c953b30d26fded081b.tar.gz use-mosquitto-d2a6897f05a07a058b2185c953b30d26fded081b.tar.bz2 use-mosquitto-d2a6897f05a07a058b2185c953b30d26fded081b.zip | |
erster Import
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..9579568 --- /dev/null +++ b/src/main.c | |||
| @@ -0,0 +1,89 @@ | |||
| 1 | // Standard C | ||
| 2 | #include <signal.h> | ||
| 3 | #include <stdbool.h> | ||
| 4 | #include <stdio.h> | ||
| 5 | #include <stdlib.h> | ||
| 6 | |||
| 7 | // System | ||
| 8 | #include <unistd.h> | ||
| 9 | |||
| 10 | // Project | ||
| 11 | #include <mosquitto.h> | ||
| 12 | |||
| 13 | #define CLIENT_ID "my-client-id" | ||
| 14 | #define HOST "192.168.77.2" | ||
| 15 | #define PORT 1883 | ||
| 16 | #define USERNAME "zigbee2mqtt" | ||
| 17 | #define PASSWORD "xoorei2uk2booSudies4Numoek1uot" | ||
| 18 | #define TOPIC "zigbee2mqtt/Kontaktsensor" | ||
| 19 | #define KEEPALIVE 10 | ||
| 20 | #define WAIT_UNTIL_RECONNECT 10 | ||
| 21 | |||
| 22 | static volatile bool terminate = false; // NOLINT | ||
| 23 | |||
| 24 | void | ||
| 25 | handler(int signal) | ||
| 26 | { | ||
| 27 | if ( signal == SIGINT ) { | ||
| 28 | terminate = true; | ||
| 29 | } | ||
| 30 | } | ||
| 31 | |||
| 32 | static void | ||
| 33 | message_callback(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message) | ||
| 34 | { | ||
| 35 | (void) obj; | ||
| 36 | (void) mosq; | ||
| 37 | printf("message '%.*s' for topic '%s'\n", | ||
| 38 | message->payloadlen, (const char *) message->payload, | ||
| 39 | message->topic); | ||
| 40 | } | ||
| 41 | |||
| 42 | int | ||
| 43 | main(void) | ||
| 44 | { | ||
| 45 | (void) signal(SIGINT, handler); | ||
| 46 | |||
| 47 | mosquitto_lib_init(); | ||
| 48 | |||
| 49 | struct mosquitto *client = mosquitto_new(CLIENT_ID, true, NULL); | ||
| 50 | if ( client == NULL ) { | ||
| 51 | (void) fprintf(stderr, "error on new client...\n"); | ||
| 52 | return EXIT_FAILURE; | ||
| 53 | } | ||
| 54 | |||
| 55 | int err = mosquitto_username_pw_set(client, USERNAME, PASSWORD); | ||
| 56 | if ( err != MOSQ_ERR_SUCCESS ) { | ||
| 57 | (void) fprintf(stderr, "error: %s\n", mosquitto_strerror(err)); | ||
| 58 | mosquitto_destroy(client); | ||
| 59 | return EXIT_FAILURE; | ||
| 60 | } | ||
| 61 | |||
| 62 | mosquitto_message_callback_set(client, message_callback); | ||
| 63 | |||
| 64 | err = mosquitto_connect(client, HOST, PORT, KEEPALIVE); | ||
| 65 | if ( err != MOSQ_ERR_SUCCESS ) { | ||
| 66 | (void) fprintf(stderr, "error: %s\n", mosquitto_strerror(err)); | ||
| 67 | mosquitto_destroy(client); | ||
| 68 | return EXIT_FAILURE; | ||
| 69 | } | ||
| 70 | |||
| 71 | mosquitto_subscribe(client, NULL, TOPIC, 0); | ||
| 72 | |||
| 73 | while ( !terminate ) { | ||
| 74 | err = mosquitto_loop(client, -1, 1); | ||
| 75 | if ( !terminate && err ) { | ||
| 76 | (void) fprintf(stderr, "connection error: %s\n", mosquitto_strerror(err)); | ||
| 77 | sleep(WAIT_UNTIL_RECONNECT); // NOLINT | ||
| 78 | mosquitto_reconnect(client); | ||
| 79 | } | ||
| 80 | } | ||
| 81 | |||
| 82 | printf("cleanup...\n"); | ||
| 83 | mosquitto_disconnect(client); | ||
| 84 | mosquitto_destroy(client); | ||
| 85 | |||
| 86 | mosquitto_lib_cleanup(); | ||
| 87 | |||
| 88 | return EXIT_SUCCESS; | ||
| 89 | } | ||
