/*
* Linux Interfece for Arexx Data Loggers
*
- * (c) 2011-2018 Martin Mares <mj@ucw.cz>
+ * (c) 2011-2020 Martin Mares <mj@ucw.cz>
*/
#include <stdio.h>
#define MAX_FUTURE_TIME 300
#define IGNORE_UNKNOWN_SENSORS
+#undef LOG_TO_RRD
+#define LOG_TO_MQTT
+
typedef unsigned char byte;
typedef unsigned int uint;
static libusb_context *usb_ctxt;
static int debug_mode;
static int debug_packets;
static int debug_raw_data;
-static int debug_usb;
static char *log_dir = DEFAULT_LOG_DIR;
static int no_fork;
/*** MQTT interface ***/
+#ifdef LOG_TO_MQTT
+
#include <mosquitto.h>
static struct mosquitto *mosq;
if (!mosq)
die("Mosquitto: initialization failed");
+ if (mosquitto_tls_set(mosq, "/etc/burrow-mqtt/ca.crt", NULL, "/etc/burrow-mqtt/client.crt", "/etc/burrow-mqtt/client.key", NULL) != MOSQ_ERR_SUCCESS)
+ die("Mosquitto: unable to set TLS parameters");
+
if (mosquitto_will_set(mosq, "status/arexxd", 4, "dead", 0, true) != MOSQ_ERR_SUCCESS)
die("Mosquitto: unable to set will");
mosquitto_connect_callback_set(mosq, mqtt_conn_callback);
- if (mosquitto_connect(mosq, "10.32.184.5", 1883, 60) != MOSQ_ERR_SUCCESS)
+ if (mosquitto_connect(mosq, "burrow-mqtt", 8883, 60) != MOSQ_ERR_SUCCESS)
die("Mosquitto: connect failed");
if (mosquitto_loop_start(mosq))
mqtt_publish(topic, "%.3f %lld", val, (long long) t);
}
+#endif
+
/*** RRD interface ***/
+#ifdef LOG_TO_RRD
+
#include <rrd.h>
#define MAX_ARGS 20
}
}
+#endif
+
/*** Transforms ***/
#define TIME_OFFSET 946681200 // Timestamp of 2000-01-01 00:00:00
*/
switch (id) {
case 10415:
- *name = "kitchen";
+ *name = "terarium";
return val - 0.93;
case 10707:
*name = "catarium";
}
data_point_counter++;
+#ifdef LOG_TO_RRD
rrd_point(t, name, val2, unit);
+#endif
+#ifdef LOG_TO_MQTT
mqtt_point(t, name, val2, unit);
+#endif
}
static void raw_point(uint t, uint id, int raw, int q)
-n, --no-fork Do not fork\n\
-p, --debug-packets Log all packets sent and received\n\
-r, --debug-raw Log conversion from raw values\n\
--u, --debug-usb Enable libusb debug messages (to stdout/stderr)\n\
-V, --version Show daemon version\n\
");
exit(1);
int main(int argc, char **argv)
{
int opt;
- while ((opt = getopt_long(argc, argv, "dl:npruV", long_options, NULL)) >= 0)
+ while ((opt = getopt_long(argc, argv, "dl:nprV", long_options, NULL)) >= 0)
switch (opt) {
case 'd':
debug_mode++;
case 'r':
debug_raw_data++;
break;
- case 'u':
- debug_usb++;
- break;
case 'V':
printf("arexxd " AREXXD_VERSION "\n");
printf("(c) 2011-2018 Martin Mares <mj@ucw.cz>\n");
int err;
if (err = libusb_init(&usb_ctxt))
die("Cannot initialize libusb: error %d", err);
- if (debug_usb)
- libusb_set_debug(usb_ctxt, 3);
if (!debug_mode) {
if (chdir(log_dir) < 0)
use_syslog = 1;
}
+#ifdef LOG_TO_MQTT
mqtt_init();
+#endif
struct sigaction sa = { .sa_handler = sigterm_handler };
sigaction(SIGTERM, &sa, NULL);