# HG changeset patch # User Michiel Broek # Date 1531595720 -7200 # Node ID 92b546d4a839bb107dccc338496b23d22679cf20 # Parent 49580ca85ab733400dbca91304c34f3c84300d3d Versie 0.6.4. Aan de global setup de MQTT instellingen toegevoegd. Die zijn er ook als MQTT niet op het systeem aanwezig is. Indien het de global setup wijzigd, wordt de MQTT verbinding opnieuw gemaakt. diff -r 49580ca85ab7 -r 92b546d4a839 configure --- a/configure Sat Jul 14 17:21:25 2018 +0200 +++ b/configure Sat Jul 14 21:15:20 2018 +0200 @@ -2035,7 +2035,7 @@ PACKAGE="mbsePi-apps" -VERSION="0.6.3" +VERSION="0.6.4" COPYRIGHT="Copyright (C) 2014-2018 Michiel Broek, All Rights Reserved" CYEARS="2014-2018" diff -r 49580ca85ab7 -r 92b546d4a839 configure.ac --- a/configure.ac Sat Jul 14 17:21:25 2018 +0200 +++ b/configure.ac Sat Jul 14 21:15:20 2018 +0200 @@ -8,7 +8,7 @@ dnl General settings dnl After changeing the version number, run autoconf! PACKAGE="mbsePi-apps" -VERSION="0.6.3" +VERSION="0.6.4" COPYRIGHT="Copyright (C) 2014-2018 Michiel Broek, All Rights Reserved" CYEARS="2014-2018" AC_SUBST(PACKAGE) diff -r 49580ca85ab7 -r 92b546d4a839 thermferm/mqtt.c --- a/thermferm/mqtt.c Sat Jul 14 17:21:25 2018 +0200 +++ b/thermferm/mqtt.c Sat Jul 14 21:15:20 2018 +0200 @@ -718,6 +718,14 @@ mosquitto_destroy(mosq); mosquitto_lib_cleanup(); mqtt_use = FALSE; + mqtt_status = STATUS_CONNECTING; + mqtt_mid_sent = 0; + mqtt_last_mid = -1; + mqtt_last_mid_sent = -1; + mqtt_connected = TRUE; + mqtt_disconnect_sent = FALSE; + mqtt_connect_lost = FALSE; + mqtt_my_shutdown = FALSE; syslog(LOG_NOTICE, "MQTT disconnected"); } #endif diff -r 49580ca85ab7 -r 92b546d4a839 thermferm/rdconfig.c --- a/thermferm/rdconfig.c Sat Jul 14 17:21:25 2018 +0200 +++ b/thermferm/rdconfig.c Sat Jul 14 21:15:20 2018 +0200 @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (C) 2014-2017 + * Copyright (C) 2014-2018 * * Michiel Broek * @@ -65,12 +65,16 @@ Config.temp_value = 20000; Config.temp_state = Config.hum_state = 1; // missing Config.hum_value = 50000; -#ifdef HAVE_MOSQUITTO_H if (Config.mqtt_host) free(Config.mqtt_host); Config.mqtt_host = NULL; Config.mqtt_port = 1883; -#endif + if (Config.mqtt_username) + free(Config.mqtt_username); + Config.mqtt_username = NULL; + if (Config.mqtt_password) + free(Config.mqtt_password); + Config.mqtt_password = NULL; for (tmp2 = Config.units; tmp2; tmp2 = tmp2->next) { if (tmp2->uuid) @@ -255,7 +259,6 @@ syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement"); return 1; } -#ifdef HAVE_MOSQUITTO_H if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "MQTT_HOST", "%s", Config.mqtt_host)) < 0) { syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement"); return 1; @@ -264,7 +267,16 @@ syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement"); return 1; } -#endif + if (Config.mqtt_username && Config.mqtt_password) { + if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "MQTT_USER", "%s", Config.mqtt_username)) < 0) { + syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement"); + return 1; + } + if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "MQTT_PASS", "%s", Config.mqtt_password)) < 0) { + syslog(LOG_NOTICE, "wrconfig: error at xmlTextWriterWriteFormatElement"); + return 1; + } + } /* * Start an element named "LCDS" as child of THERMFERM. @@ -2131,10 +2143,8 @@ } syslog(LOG_NOTICE, "rdconfig: using %s", mypath); -#ifdef HAVE_MOSQUITTO_H Config.mqtt_host = xstrcpy((char *)"localhost"); Config.mqtt_port = 1883; -#endif Config.next_unit = 1; if ((cur = xmlDocGetRootElement(doc)) == NULL) { @@ -2194,7 +2204,6 @@ Config.next_unit = ival; xmlFree(key); } -#ifdef HAVE_MOSQUITTO_H if ((!xmlStrcmp(cur->name, (const xmlChar *)"MQTT_HOST"))) { Config.mqtt_host = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); } @@ -2204,7 +2213,12 @@ Config.mqtt_port = ival; xmlFree(key); } -#endif + if ((!xmlStrcmp(cur->name, (const xmlChar *)"MQTT_USER"))) { + Config.mqtt_username = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + } + if ((!xmlStrcmp(cur->name, (const xmlChar *)"MQTT_PASS"))) { + Config.mqtt_password = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + } if ((!xmlStrcmp(cur->name, (const xmlChar *)"LCDS"))) { parseLCDs(doc, cur); } diff -r 49580ca85ab7 -r 92b546d4a839 thermferm/server.c --- a/thermferm/server.c Sat Jul 14 17:21:25 2018 +0200 +++ b/thermferm/server.c Sat Jul 14 21:15:20 2018 +0200 @@ -1007,15 +1007,16 @@ srv_send((char *)"LCD_COLS,%d", Config.lcd_cols); srv_send((char *)"LCD_ROWS,%d", Config.lcd_rows); srv_send((char *)"NEXT_UNIT,%d", Config.next_unit); -#ifdef HAVE_MOSQUITTO_H srv_send((char *)"MQTT_HOST,%s", Config.mqtt_host); srv_send((char *)"MQTT_PORT,%d", Config.mqtt_port); -#endif + srv_send((char *)"MQTT_USER,%s", Config.mqtt_username); + srv_send((char *)"MQTT_PASS,%s", Config.mqtt_password); srv_send((char *)"."); return 0; } if (strcmp(opt, (char *)"PUT") == 0) { + bool mqtt_reconnect = false; while (1) { rlen = srv_recv(ibuf); if (rlen == -1) { @@ -1024,6 +1025,8 @@ if (strlen(ibuf)) { if (strcmp(ibuf, (char *)".") == 0) { srv_send((char *)"219 Accepted Global record"); + if (mqtt_reconnect) + mqtt_connect(); return 1; } kwd = strtok(ibuf, ",\0"); @@ -1099,6 +1102,53 @@ syslog(LOG_NOTICE, "Global LCD rows %d to %d", Config.lcd_rows, ival); Config.lcd_rows = ival; } + + } else if (strcmp(kwd, (char *)"MQTT_HOST") == 0) { + if (val && Config.mqtt_host && (strcmp(val, Config.mqtt_host))) + syslog(LOG_NOTICE, "Global MQTT host `%s' to `%s'", Config.mqtt_host, val); + mqtt_disconnect(); + mqtt_reconnect = true; + if (Config.mqtt_host) + free(Config.mqtt_host); + if (val) + Config.mqtt_host = xstrcpy(val); + else + Config.mqtt_host = NULL; + + } else if (val && (strcmp(kwd, (char *)"MQTT_PORT") == 0)) { + if (sscanf(val, "%d", &ival) == 1) { + if (Config.mqtt_port != ival) { + syslog(LOG_NOTICE, "Global MQTT port %d to %d", Config.mqtt_port, ival); + mqtt_disconnect(); + mqtt_reconnect = true; + Config.mqtt_port = ival; + } + } + + } else if (strcmp(kwd, (char *)"MQTT_USER") == 0) { + if (val && Config.mqtt_username && (strcmp(val, Config.mqtt_username))) + syslog(LOG_NOTICE, "Global MQTT username `%s' to `%s'", Config.mqtt_username, val); + mqtt_disconnect(); + mqtt_reconnect = true; + if (Config.mqtt_username) + free(Config.mqtt_username); + if (val) + Config.mqtt_username = xstrcpy(val); + else + Config.mqtt_username = NULL; + + } else if (strcmp(kwd, (char *)"MQTT_PASS") == 0) { + if (val && Config.mqtt_password && (strcmp(val, Config.mqtt_password))) + syslog(LOG_NOTICE, "Global MQTT password `%s' to `%s'", Config.mqtt_password, val); + mqtt_disconnect(); + mqtt_reconnect = true; + if (Config.mqtt_password) + free(Config.mqtt_password); + if (val) + Config.mqtt_password = xstrcpy(val); + else + Config.mqtt_password = NULL; + } } } diff -r 49580ca85ab7 -r 92b546d4a839 thermferm/thermferm.h --- a/thermferm/thermferm.h Sat Jul 14 17:21:25 2018 +0200 +++ b/thermferm/thermferm.h Sat Jul 14 21:15:20 2018 +0200 @@ -362,10 +362,10 @@ #ifdef USE_SIMULATOR simulator_list *simulators; /* Simulators */ #endif -#ifdef HAVE_MOSQUITTO_H char *mqtt_host; /* MQTT host to connect to */ int mqtt_port; /* MQTT port to connect to */ -#endif + char *mqtt_username; /* MQTT username */ + char *mqtt_password; /* MQTT password */ } sys_config; diff -r 49580ca85ab7 -r 92b546d4a839 www-thermferm/global.php --- a/www-thermferm/global.php Sat Jul 14 17:21:25 2018 +0200 +++ b/www-thermferm/global.php Sat Jul 14 21:15:20 2018 +0200 @@ -1,6 +1,6 @@ * @@ -52,7 +52,11 @@ if (isset($_POST['LCDcols'])) $cmd[] = "LCD_COLS,".$_POST['LCDcols']; if (isset($_POST['LCDrows'])) - $cmd[] = "LCD_ROWS,".$_POST['LCDrows']; + $cmd[] = "LCD_ROWS,".$_POST['LCDrows']; + $cmd[] = "MQTT_HOST,".$_POST['MQTThost']; + $cmd[] = "MQTT_POST,".$_POST['MQTTport']; + $cmd[] = "MQTT_USER,".$_POST['MQTTuser']; + $cmd[] = "MQTT_PASS,".$_POST['MQTTpass']; $cmd[] = "."; send_array($cmd); } @@ -64,6 +68,10 @@ unset($_POST['TempHumIdx']); unset($_POST['LCDcols']); unset($_POST['LCDrows']); + unset($_POST['MQTThost']); + unset($_POST['MQTTport']); + unset($_POST['MQTTuser']); + unset($_POST['MQTTpass']); unset($_POST['key']); load('maintenance.php'); } @@ -74,7 +82,9 @@ if (isset($_POST['Name']) && isset($_POST['Port']) && isset($_POST['TempAddress']) && isset($_POST['HumAddress']) && - isset($_POST['TempHumIdx']) && isset($_POST['key'])) { + isset($_POST['TempHumIdx']) && isset($_POST['key']) && + isset($_POST['MQTThost']) && isset($_POST['MQTTport']) && + isset($_POST['MQTTuser']) && isset($_POST['MQTTpass'])) { if ($_POST['key'] == 'Cancel') return 99; @@ -207,7 +217,7 @@ } if ($f[0] == "TEMP_HUM_IDX") { $outstr .= ' '.PHP_EOL; - $outstr .= ' Temp/Humidity domoticz index'.PHP_EOL; + $outstr .= ' Domoticz TH index'.PHP_EOL; $outstr .= ' '.PHP_EOL; $outstr .= ' '.PHP_EOL; } @@ -223,6 +233,36 @@ $outstr .= ' '.PHP_EOL; $outstr .= ' '.PHP_EOL; } + if ($f[0] == "MQTT_HOST") { + $outstr .= ' '.PHP_EOL; + $outstr .= ' MQTT host'.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + } + if ($f[0] == "MQTT_PORT") { + $outstr .= ' '.PHP_EOL; + $outstr .= ' MQTT port'.PHP_EOL; + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + } + if ($f[0] == "MQTT_USER") { + $outstr .= ' '.PHP_EOL; + $outstr .= ' MQTT username'.PHP_EOL; + if (strcmp($f[1], "(null)") == 0) { + $f[1] = ""; + } + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + } + if ($f[0] == "MQTT_PASS") { + $outstr .= ' '.PHP_EOL; + $outstr .= ' MQTT password'.PHP_EOL; + if (strcmp($f[1], "(null)") == 0) { + $f[1] = ""; + } + $outstr .= ' '.PHP_EOL; + $outstr .= ' '.PHP_EOL; + } $i++; } }