summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c89
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
22static volatile bool terminate = false; // NOLINT
23
24void
25handler(int signal)
26{
27 if ( signal == SIGINT ) {
28 terminate = true;
29 }
30}
31
32static void
33message_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
42int
43main(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}