diff --git a/RPi_rflink/Base.cpp b/RPi_rflink/Base.cpp index e307606..19e7289 100644 --- a/RPi_rflink/Base.cpp +++ b/RPi_rflink/Base.cpp @@ -1,8 +1,10 @@ +#include #include "Base.h" #include // My header files #include "server.h" #include "Plug.h" +#include "Mqtt.h" //**************************************************************************************************************************************** // seting start values for global variables and strutures @@ -32,6 +34,8 @@ char InputBuffer_Serial[BUFSIZE]; // serial port emulation for print and write functions Ser Serial; +boolean mqtt_init_need=false; + // log functions void log(int level,std::string str, boolean endLine) // log withou end line { @@ -147,7 +151,7 @@ int serve_input(char* inBuf){ if (ValidCommand != 0) { if (ValidCommand==1) { sprintf(InputBuffer_Serial,"20;%02X;OK;",PKSequenceNumber++); - Serial.println( InputBuffer_Serial ); + Serial.println( InputBuffer_Serial ); } else { sprintf(InputBuffer_Serial, "20;%02X;CMD UNKNOWN;", PKSequenceNumber++); // Node and packet number Serial.println( InputBuffer_Serial ); @@ -158,50 +162,122 @@ int serve_input(char* inBuf){ } void help(char *argv) { - printf("Use:\n %s \n %s TCP_port_number \n %s TCP_port_number log_level_number \n %s TCP_port_number TX_PIN RX_PIN \n %s TCP_port_number TX_PIN RX_PIN log_level_number.\n or %s -h for this help\n\n TCP_port_number: 1-65535\n log_level number: 0-nothing, 1-error log, 2-warning, 3-running status, 4-debug\n TX_PIN - transmitter pin (by wiringpi numbering)\n TR_PIN - receiver pin (by wiringpi numbering)\n",argv, argv, argv, argv, argv, argv ); + printf("Usage: %s [options]\n\ +Options:\n\ + -p, --port TCP port number: 1-65535\n\ + -t, --pin_tx TX_PIN - transmitter pin (by wiringpi numbering)\n\ + -r, --pin_rx RX_PIN - receiver pin (by wiringpi numbering)\n\ + -l, --log_level log level number: 0-nothing, 1-error log, 2-warning, 3-running status, 4-debug\n\ + -H, --mqtt_host MQTT Server (default: localhost)\n\ + -U, --mqtt_username MQTT Username\n\ + -P, --mqtt_password MQTT Password\n\ + -T, --mqtt_topic MQTT topic (default: \"/devices/rflink\")\n\ +\n\ + --help display this help and exit\n", argv); } +int common_send(const char* buf, const int size) +{ + int ret = 1; + log(LOG_STATUS, "common send: ",false); + log(LOG_STATUS, buf); + if (mosq != NULL) { + ret = mqtt_send(buf, size); + } + if (clientSocket != -1) { + ret = socket_send(buf, size); + } + return ret; +} + + int main(int argc, char *argv[]) { int port=DEFAULT_TCP_PORT; int scan_log=logLevel; // form sscanf("%d", int) who make with int not byte int scan_pin_tx=PIN_RF_TX_DATA; int scan_pin_rx=PIN_RF_RX_DATA; + boolean mqtt_init_need=false; - switch(argc) - { - case 1: - break; - case 2: - if (strcmp(argv[1],"-h")!=0 and \ - sscanf(argv[1],"%d",&port)!=EOF ) break; - help(argv[0]); - return false; - case 3: - if (sscanf(argv[1],"%d",&port)!=EOF and \ - sscanf(argv[2],"%d",&scan_log)!=EOF and \ - ( scan_log>=0 and scan_log<=4 ) ) break; - help(argv[0]); - return false; - case 4: - if (sscanf(argv[1],"%d",&port)!=EOF and \ - sscanf(argv[2],"%d",&scan_pin_tx)!=EOF and \ - sscanf(argv[3],"%d",&scan_pin_rx)!=EOF ) break; - help(argv[0]); - return false; - case 5: - if (sscanf(argv[1],"%d",&port)!=EOF and \ - sscanf(argv[2],"%d",&scan_pin_tx)!=EOF and \ - sscanf(argv[3],"%d",&scan_pin_rx)!=EOF and \ - sscanf(argv[4],"%d",&scan_log)!=EOF and - ( scan_log>=0 and scan_log<=4 ) ) - break; - help(argv[0]); - return false; - default: - help(argv[0]); - return false; - - } + static struct option long_options[] = { + {"help", no_argument, 0, 'h'}, + {"port", required_argument, 0, 'p'}, + {"pin_tx", required_argument, 0, 't'}, + {"pin_rx", required_argument, 0, 'r'}, + {"log_level", required_argument, 0, 'l'}, + {"mqtt_host", required_argument, 0, 'H'}, + {"mqtt_username", required_argument, 0, 'U'}, + {"mqtt_password", required_argument, 0, 'P'}, + {"mqtt_topic", required_argument, 0, 'T'}, + {0, 0, 0, 0} + }; + int c; + + while (1) { + int option_index = 0; + c = getopt_long (argc, argv, "hp:t:r:l:H:U:P:T:", + long_options, &option_index); + if (c == -1) break; + + switch (c) { + case 'h': + help(argv[0]); + return 0; + case 'p': + if (sscanf(optarg,"%d",&port)==EOF) { + help(argv[0]); + return false; + } + break; + + case 't': + if (sscanf(optarg,"%d",&scan_pin_tx)==EOF) { + help(argv[0]); + return false; + } + break; + + case 'r': + if (sscanf(optarg,"%d",&scan_pin_rx)==EOF) { + help(argv[0]); + return false; + } + break; + + case 'l': + if (sscanf(optarg,"%d",&scan_log)==EOF or !(scan_log>=0 and scan_log<=4) ) { + help(argv[0]); + return false; + } + break; + + case 'H': + mqtt_host=optarg; + mqtt_init_need=true; + break; + + case 'U': + mqtt_username=optarg; + mqtt_init_need=true; + break; + + case 'P': + mqtt_pw=optarg; + mqtt_init_need=true; + break; + + case 'T': + mqtt_topic=optarg; + mqtt_init_need=true; + break; + + case '?': + help(argv[0]); + break; + + default: + abort (); + } + } logLevel=(byte) scan_log; PIN_RF_TX_DATA=(byte) scan_pin_tx; PIN_RF_RX_DATA=(byte) scan_pin_rx; @@ -215,6 +291,12 @@ int main(int argc, char *argv[]) { log(LOG_STATUS, pbuffer); setup(); + if (mqtt_init_need) { + printf("MQTT init with server: %s, topic: %s, username: %s\n",mqtt_host, mqtt_topic, mqtt_username); + mqtt_setup(mqtt_host, mqtt_topic, mqtt_username, mqtt_pw); + } + Serial.set_send_function(common_send); // enable Serial.println common send function + StartScanEventTheader(); TCPserver(port); } /*********************************************************************************************/ diff --git a/RPi_rflink/Base.h b/RPi_rflink/Base.h index 4dbfc68..0d0aab4 100644 --- a/RPi_rflink/Base.h +++ b/RPi_rflink/Base.h @@ -118,4 +118,6 @@ void log(int level, std::string str); // log with endline //functions prototype for serve incoming packet int serve_input(char* InputBuffer_Serial); +int common_send(const char* buf, const int size); + #endif diff --git a/RPi_rflink/Base.o b/RPi_rflink/Base.o deleted file mode 100644 index bf34919..0000000 Binary files a/RPi_rflink/Base.o and /dev/null differ diff --git a/RPi_rflink/Makefile b/RPi_rflink/Makefile index d961599..dd2a3eb 100644 --- a/RPi_rflink/Makefile +++ b/RPi_rflink/Makefile @@ -14,7 +14,7 @@ prepare: | createDirPlugins ./Plugins/Make_Generated_list_plugin.txt ./Plugins/M $(MAKE) RFlink # variable object conatin project files for compilation with .o (make use default macros for create .o from .c or .cpp) -objects = ./Base.o ./RawSignal.o ./server.o ./Plug.o ./Misc.o ./arduino/EmulateArduino.o +objects = ./Base.o ./RawSignal.o ./server.o ./Plug.o ./Misc.o ./arduino/EmulateArduino.o ./Mqtt.o #objects = # NOTICE main diference between = and := @@ -29,7 +29,7 @@ objects = ./Base.o ./RawSignal.o ./server.o ./Plug.o ./Misc.o ./arduino/EmulateA allowed_plagins = $(shell cat ./Plugins/Make_Generated_list_plugin.txt ) RFlink: $(objects) $(allowed_plagins) - $(CXX) $(CXXFLAGS) $(LDFLAGS) $+ -o $@ -lwiringPi -lpthread + $(CXX) $(CXXFLAGS) $(LDFLAGS) $+ -o $@ -lwiringPi -lpthread -lmosquitto clean: $(RM) ./RFlink ./*.o ./*.gch ./arduino/*.o ./arduino/*.gch ./Plugins/* ; rmdir ./Plugins diff --git a/RPi_rflink/Misc.cpp b/RPi_rflink/Misc.cpp index 09100fb..c8baae1 100644 --- a/RPi_rflink/Misc.cpp +++ b/RPi_rflink/Misc.cpp @@ -81,4 +81,65 @@ byte reverseBits(byte data) { return data; } /*********************************************************************************************/ - + + + +int split(const char *str, char c, char ***arr) { + int count = 1; + int token_len = 1; + int i = 0; + char *p; + char *t; + + p = (char*)str; + while (*p != '\0') + { + if (*p == c) + count++; + p++; + } + + *arr = (char**) malloc(sizeof(char*) * count); + if (*arr == NULL) + exit(1); + + p =(char*) str; + while (*p != '\0') + { + if (*p == c) + { + (*arr)[i] = (char*) malloc( sizeof(char) * token_len ); + if ((*arr)[i] == NULL) + exit(1); + + token_len = 0; + i++; + } + p++; + token_len++; + } + (*arr)[i] = (char*) malloc( sizeof(char) * token_len ); + if ((*arr)[i] == NULL) + exit(1); + + i = 0; + p = (char*)str; + t = ((*arr)[i]); + while (*p != '\0') + { + if (*p != c && *p != '\0') + { + *t = *p; + t++; + } + else + { + *t = '\0'; + i++; + t = ((*arr)[i]); + } + p++; + } + + return count; +} diff --git a/RPi_rflink/Misc.h b/RPi_rflink/Misc.h index 13a22f9..d048d7a 100644 --- a/RPi_rflink/Misc.h +++ b/RPi_rflink/Misc.h @@ -12,5 +12,6 @@ float ul2float(unsigned long ul); void PrintHex8(uint8_t *data, uint8_t length); void PrintHexByte(uint8_t data); byte reverseBits(byte data); +int split(const char *str, char c, char ***arr); #endif diff --git a/RPi_rflink/Misc.o b/RPi_rflink/Misc.o deleted file mode 100644 index f256e53..0000000 Binary files a/RPi_rflink/Misc.o and /dev/null differ diff --git a/RPi_rflink/Mqtt.cpp b/RPi_rflink/Mqtt.cpp new file mode 100644 index 0000000..2b6e2f1 --- /dev/null +++ b/RPi_rflink/Mqtt.cpp @@ -0,0 +1,110 @@ +#include "Mqtt.h" + + +void mosq_log_callback(struct mosquitto *mosq, void *userdata, int level, const char *str) { + /* Pring all log messages regardless of level. */ + char buffer[1024]; + + switch(level){ + case MOSQ_LOG_DEBUG: + case MOSQ_LOG_INFO: + case MOSQ_LOG_NOTICE: + case MOSQ_LOG_WARNING: + sprintf(buffer, "%i:%s\n", level, str); + log(LOG_DEBUG, buffer); + break; + case MOSQ_LOG_ERR: { + sprintf(buffer, "%i:%s\n", level, str); + log(LOG_ERROR, buffer); + } + } +} + +struct mosquitto *mosq = NULL; +char const *mqtt_host = "localhost"; +char const *mqtt_topic = "/devices/rflink"; +char const *mqtt_username = ""; +char const *mqtt_pw = ""; + +void mqtt_setup(const char *mqtt_host, const char *mqtt_topic, const char *mqtt_username, const char *mqtt_pw){ + int port = 1883; + int keepalive = 10; + bool clean_session = false; + + mosquitto_lib_init(); + mosq = mosquitto_new("rflink", clean_session, NULL); + if (!mosq) { + log(LOG_ERROR, "Error: Out of memory.\n"); + mosq = NULL; + } + + mosquitto_log_callback_set(mosq, mosq_log_callback); + + mosquitto_username_pw_set(mosq, mqtt_username, mqtt_pw); + if(mosquitto_connect(mosq, mqtt_host, port, keepalive)){ + log(LOG_ERROR, "Unable to connect.\n"); + } + int loop = mosquitto_loop_start(mosq); + if(loop != MOSQ_ERR_SUCCESS){ + log(LOG_ERROR, "Unable to start loop\n"); + } +} + +int mqtt_send(const char* buf, const int size) { + //log(LOG_STATUS, "MQTT server send: ",false); + //log(LOG_STATUS, buf); + int c; + int i; + int ret = 0; + char **arr = NULL; + char buffer[1024]; + char prefix_full[1024]; + c = split(buf, ';', &arr); + //sprintf(buffer, "found %d tokens.\n", c); + //log(LOG_ERROR, buffer); + + if (c>4) + if (strchr(arr[4], '=')!=NULL/* && strstr("X10", arr[2])!=NULL*/) { + buffer[0] = '\0'; + prefix_full[0] = '\0'; + sprintf(buffer, "%s/%s/%s", mqtt_topic, arr[2], strchr(arr[3], '=')+1); + /*int ret = mosquitto_loop_start(mosq); + if (ret == MOSQ_ERR_CONN_LOST) { + log(LOG_ERROR, "MQTT server: reconnect..."); + mosquitto_reconnect(mosq); + } + if (ret != MOSQ_ERR_SUCCESS){ + log(LOG_ERROR, "Unable to start loop (2)\n"); + }*/ + for (i = 4; i < c; i++) + if (strchr(arr[i], '=')!=NULL) { + char *param, *value; + param=arr[i]; + value=strchr(arr[i], '=')+1; + strchr(arr[i], '=')[0]='\0'; + sprintf(prefix_full, "%s/%s", buffer, param); + ret=mosquitto_publish(mosq, NULL, prefix_full, strlen(value), value, 0, false); + if ( ret == -1 ) { + log(LOG_ERROR,"MQTT server: Problem send data."); + } + //sprintf(buffer, "%s %s", prefix_full, value); + log(LOG_ERROR, prefix_full); + log(LOG_ERROR, value); + usleep(100000); + //mosquitto_disconnect(mosq); + } + mosquitto_loop_start(mosq); + if (ret == MOSQ_ERR_CONN_LOST) { + log(LOG_ERROR, "MQTT server: reconnect..."); + mosquitto_reconnect(mosq); + } + if (ret != MOSQ_ERR_SUCCESS){ + log(LOG_ERROR, "Unable to start loop (3)\n"); + } + + //mosquitto_loop_stop(mosq, true); + } + + return ret; +} + diff --git a/RPi_rflink/Mqtt.h b/RPi_rflink/Mqtt.h new file mode 100644 index 0000000..5cae14d --- /dev/null +++ b/RPi_rflink/Mqtt.h @@ -0,0 +1,22 @@ +#ifndef _MQTTPlugin_h +#define _MQTTPlugin_h + +#include +#include +#include +#include +#include + +#include "Base.h" +#include "Misc.h" + +extern struct mosquitto *mosq; +extern char const *mqtt_host; +extern char const *mqtt_topic; +extern char const *mqtt_username; +extern char const *mqtt_pw; + +void mqtt_setup(const char *mqtt_host, const char *mqtt_topic, const char *mqtt_username, const char *mqtt_pw); +int mqtt_send(const char* buf, const int size); + +#endif diff --git a/RPi_rflink/Plug.o b/RPi_rflink/Plug.o deleted file mode 100644 index 72a64e0..0000000 Binary files a/RPi_rflink/Plug.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_001.o b/RPi_rflink/Plugins/Plugin_001.o deleted file mode 100644 index 9ebd718..0000000 Binary files a/RPi_rflink/Plugins/Plugin_001.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_002.o b/RPi_rflink/Plugins/Plugin_002.o deleted file mode 100644 index a1acb1d..0000000 Binary files a/RPi_rflink/Plugins/Plugin_002.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_003.o b/RPi_rflink/Plugins/Plugin_003.o deleted file mode 100644 index e383646..0000000 Binary files a/RPi_rflink/Plugins/Plugin_003.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_004.o b/RPi_rflink/Plugins/Plugin_004.o deleted file mode 100644 index a0ec01f..0000000 Binary files a/RPi_rflink/Plugins/Plugin_004.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_005.o b/RPi_rflink/Plugins/Plugin_005.o deleted file mode 100644 index b8bf90e..0000000 Binary files a/RPi_rflink/Plugins/Plugin_005.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_006.o b/RPi_rflink/Plugins/Plugin_006.o deleted file mode 100644 index 899113e..0000000 Binary files a/RPi_rflink/Plugins/Plugin_006.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_007.o b/RPi_rflink/Plugins/Plugin_007.o deleted file mode 100644 index 38c8c63..0000000 Binary files a/RPi_rflink/Plugins/Plugin_007.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_008.o b/RPi_rflink/Plugins/Plugin_008.o deleted file mode 100644 index 811f545..0000000 Binary files a/RPi_rflink/Plugins/Plugin_008.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_009.o b/RPi_rflink/Plugins/Plugin_009.o deleted file mode 100644 index 0beef9d..0000000 Binary files a/RPi_rflink/Plugins/Plugin_009.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_010.o b/RPi_rflink/Plugins/Plugin_010.o deleted file mode 100644 index 4d3b082..0000000 Binary files a/RPi_rflink/Plugins/Plugin_010.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_011.o b/RPi_rflink/Plugins/Plugin_011.o deleted file mode 100644 index 34dc35a..0000000 Binary files a/RPi_rflink/Plugins/Plugin_011.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_012.o b/RPi_rflink/Plugins/Plugin_012.o deleted file mode 100644 index b70f354..0000000 Binary files a/RPi_rflink/Plugins/Plugin_012.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_013.o b/RPi_rflink/Plugins/Plugin_013.o deleted file mode 100644 index 6f1e907..0000000 Binary files a/RPi_rflink/Plugins/Plugin_013.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_014.o b/RPi_rflink/Plugins/Plugin_014.o deleted file mode 100644 index b6bdf97..0000000 Binary files a/RPi_rflink/Plugins/Plugin_014.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_015.o b/RPi_rflink/Plugins/Plugin_015.o deleted file mode 100644 index 2e5ff7b..0000000 Binary files a/RPi_rflink/Plugins/Plugin_015.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_030.o b/RPi_rflink/Plugins/Plugin_030.o deleted file mode 100644 index bfa7a8a..0000000 Binary files a/RPi_rflink/Plugins/Plugin_030.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_031.o b/RPi_rflink/Plugins/Plugin_031.o deleted file mode 100644 index a1d7c97..0000000 Binary files a/RPi_rflink/Plugins/Plugin_031.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_032.o b/RPi_rflink/Plugins/Plugin_032.o deleted file mode 100644 index f6da683..0000000 Binary files a/RPi_rflink/Plugins/Plugin_032.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_033.o b/RPi_rflink/Plugins/Plugin_033.o deleted file mode 100644 index f1b23c8..0000000 Binary files a/RPi_rflink/Plugins/Plugin_033.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_034.o b/RPi_rflink/Plugins/Plugin_034.o deleted file mode 100644 index be36ef9..0000000 Binary files a/RPi_rflink/Plugins/Plugin_034.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_035.o b/RPi_rflink/Plugins/Plugin_035.o deleted file mode 100644 index 906f41c..0000000 Binary files a/RPi_rflink/Plugins/Plugin_035.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_040.o b/RPi_rflink/Plugins/Plugin_040.o deleted file mode 100644 index 429bffb..0000000 Binary files a/RPi_rflink/Plugins/Plugin_040.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_041.o b/RPi_rflink/Plugins/Plugin_041.o deleted file mode 100644 index f3bb181..0000000 Binary files a/RPi_rflink/Plugins/Plugin_041.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_042.o b/RPi_rflink/Plugins/Plugin_042.o deleted file mode 100644 index 3c15b96..0000000 Binary files a/RPi_rflink/Plugins/Plugin_042.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_043.o b/RPi_rflink/Plugins/Plugin_043.o deleted file mode 100644 index 510202a..0000000 Binary files a/RPi_rflink/Plugins/Plugin_043.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_044.o b/RPi_rflink/Plugins/Plugin_044.o deleted file mode 100644 index 6295c1e..0000000 Binary files a/RPi_rflink/Plugins/Plugin_044.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_045.o b/RPi_rflink/Plugins/Plugin_045.o deleted file mode 100644 index cc4f9a4..0000000 Binary files a/RPi_rflink/Plugins/Plugin_045.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_046.o b/RPi_rflink/Plugins/Plugin_046.o deleted file mode 100644 index 2b758aa..0000000 Binary files a/RPi_rflink/Plugins/Plugin_046.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_048.o b/RPi_rflink/Plugins/Plugin_048.o deleted file mode 100644 index 5688c53..0000000 Binary files a/RPi_rflink/Plugins/Plugin_048.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_060.o b/RPi_rflink/Plugins/Plugin_060.o deleted file mode 100644 index fa2047c..0000000 Binary files a/RPi_rflink/Plugins/Plugin_060.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_061.o b/RPi_rflink/Plugins/Plugin_061.o deleted file mode 100644 index 2346dc3..0000000 Binary files a/RPi_rflink/Plugins/Plugin_061.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_062.o b/RPi_rflink/Plugins/Plugin_062.o deleted file mode 100644 index 11526bc..0000000 Binary files a/RPi_rflink/Plugins/Plugin_062.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_063.o b/RPi_rflink/Plugins/Plugin_063.o deleted file mode 100644 index fc9b526..0000000 Binary files a/RPi_rflink/Plugins/Plugin_063.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_070.o b/RPi_rflink/Plugins/Plugin_070.o deleted file mode 100644 index dd7df2d..0000000 Binary files a/RPi_rflink/Plugins/Plugin_070.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_071.o b/RPi_rflink/Plugins/Plugin_071.o deleted file mode 100644 index fa137df..0000000 Binary files a/RPi_rflink/Plugins/Plugin_071.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_072.o b/RPi_rflink/Plugins/Plugin_072.o deleted file mode 100644 index a313680..0000000 Binary files a/RPi_rflink/Plugins/Plugin_072.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_073.o b/RPi_rflink/Plugins/Plugin_073.o deleted file mode 100644 index 1889edd..0000000 Binary files a/RPi_rflink/Plugins/Plugin_073.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_074.o b/RPi_rflink/Plugins/Plugin_074.o deleted file mode 100644 index b00b294..0000000 Binary files a/RPi_rflink/Plugins/Plugin_074.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_075.o b/RPi_rflink/Plugins/Plugin_075.o deleted file mode 100644 index 1be2155..0000000 Binary files a/RPi_rflink/Plugins/Plugin_075.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_080.o b/RPi_rflink/Plugins/Plugin_080.o deleted file mode 100644 index cac9915..0000000 Binary files a/RPi_rflink/Plugins/Plugin_080.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_082.o b/RPi_rflink/Plugins/Plugin_082.o deleted file mode 100644 index 3f9fff4..0000000 Binary files a/RPi_rflink/Plugins/Plugin_082.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_090.o b/RPi_rflink/Plugins/Plugin_090.o deleted file mode 100644 index 4b3d505..0000000 Binary files a/RPi_rflink/Plugins/Plugin_090.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_100.o b/RPi_rflink/Plugins/Plugin_100.o deleted file mode 100644 index e9b67c6..0000000 Binary files a/RPi_rflink/Plugins/Plugin_100.o and /dev/null differ diff --git a/RPi_rflink/Plugins/Plugin_254.o b/RPi_rflink/Plugins/Plugin_254.o deleted file mode 100644 index f997f5d..0000000 Binary files a/RPi_rflink/Plugins/Plugin_254.o and /dev/null differ diff --git a/RPi_rflink/RFlink b/RPi_rflink/RFlink deleted file mode 100755 index 04f3253..0000000 Binary files a/RPi_rflink/RFlink and /dev/null differ diff --git a/RPi_rflink/RawSignal.o b/RPi_rflink/RawSignal.o deleted file mode 100644 index cccd257..0000000 Binary files a/RPi_rflink/RawSignal.o and /dev/null differ diff --git a/RPi_rflink/arduino/EmulateArduino.o b/RPi_rflink/arduino/EmulateArduino.o deleted file mode 100644 index e077d02..0000000 Binary files a/RPi_rflink/arduino/EmulateArduino.o and /dev/null differ diff --git a/RPi_rflink/etc/init.d/rflink.sh b/RPi_rflink/etc/init.d/rflink.sh index e29ed0f..f8c1364 100755 --- a/RPi_rflink/etc/init.d/rflink.sh +++ b/RPi_rflink/etc/init.d/rflink.sh @@ -6,7 +6,7 @@ # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Control and Sniffer devices on 433 MHz for Home Automation System -# Description: This daemon will start 433 MHz control and sniffer and specialy used for Domoticz Home Automation System +# Description: This daemon will start 433 MHz control and sniffer ### END INIT INFO @@ -20,13 +20,16 @@ PIN_TX=28 PIN_RX=29 log_level=3 log_file="" +mqtt_username="" +mqtt_pw="" +mqtt_topic="/devices/rflink" #include config file if exist (may redefine TCP_port, log_level, log_file) if [ -f "$config_file" ]; then . /etc/rflink.conf fi -CONFIG="$TCP_port $PIN_TX $PIN_RX $log_level" +CONFIG="-p $TCP_port -t $PIN_TX -r $PIN_RX -l $log_level -H $mqtt_host -U $mqtt_username -P $mqtt_pw -T $mqtt_topic" . /lib/lsb/init-functions diff --git a/RPi_rflink/etc/rflink.conf b/RPi_rflink/etc/rflink.conf index e258d6c..b38a96b 100644 --- a/RPi_rflink/etc/rflink.conf +++ b/RPi_rflink/etc/rflink.conf @@ -6,12 +6,17 @@ ## meteorological stations, etc. of many manufectures. ## Is suitable for create Home automation. ## RFLink have support for many home automation system etc.: -## Domoticz (tested), Jeedom, Pimatic, Domotiga, OpenHAB, HoMIDoM +## Domoticz (tested), Jeedom, Pimatic, Domotiga, OpenHAB, HoMIDoM, +## MajorDoMo (tested via mosquitto server and MQTT module) ## more at http://www.nemcon.nl/blog2/ or www.seahu.cz ####################################################################################### TCP_port=5050 -PIN_TX=28 # use wiringpi numbering -PIN_RX=29 # use wiringpi numbering +PIN_TX=0 # use wiringpi numbering +PIN_RX=2 # use wiringpi numbering log_level=3 # 0-nothing, 1-error log, 2-warning, 3-running status, 4-debug -log_file="" # if log_file="" then log into syslog \ No newline at end of file +log_file="" # if log_file="" then log into syslog +mqtt_host="localhost" # MQTT Server (comment line for disable MQTT support\) +mqtt_username="" # MQTT Username +mqtt_pw="" # MQTT Password +mqtt_topic="/devices/rflink" # MQTT Topic diff --git a/RPi_rflink/readme.md b/RPi_rflink/readme.md index bd3e55f..473e1ca 100644 --- a/RPi_rflink/readme.md +++ b/RPi_rflink/readme.md @@ -1,9 +1,9 @@ # About Modification RFlink for run on raspberryPI. ( http://www.nemcon.nl/blog2/ ) -This modification enable connect RF tranceiver and receiver directly into free raspberryPI pins. +This modification enable connect RF transceiver and receiver directly into free raspberryPI pins. Instead comunication with serial port use TCP conecction. -This modification use interrupt and theaders for reduce cpu load. +This modification use interrupt and threaders for reduce cpu load. ## Compile and install #### Compile @@ -13,22 +13,23 @@ After that you can compile on this directory by executing *make* . This generate #### Install After taht you can copy RFlink into /opt/rflink and install initialization stript as standart linux daemon by *make install*. If you can automaticaly start this daemon after start system than type *make autostart_on*. -Addions plugins may by add into standart diractory *../Plugins* and enableb in *../Config/Config_02.c* (you can change config file into *./Makefile* by edit varibale CONFIG_PLUGINS). +Addions plugins may by add into standart directory *../Plugins* and enabled in *../Config/Config_02.c* (you can change config file into *./Makefile* by edit varibale CONFIG_PLUGINS). ## Run from comandline -Use: +Usage: ``` - *sudo /opt/rflink/RFlink* - *sudo /opt/rflink/RFlink TCP_port_number* - *sudo /opt/rflink/RFlink TCP_port_number log_level_number* - *sudo /opt/rflink/RFlink TCP_port_number TX_PIN RX_PIN* - *sudo /opt/rflink/RFlink TCP_port_number TX_PIN RX_PIN log_level_number* - or *sudo /opt/rflink/RFlink -h* for this help - - TCP_port_number: 1-65535 - log_level number: 0-nothing, 1-error log, 2-warning, 3-running status, 4-debug - TX_PIN - transmitter pin (by wiringpi numbering) - TR_PIN - receiver pin (by wiringpi numbering) + /opt/rflink/RFlink [options] +Options: + -p, --port TCP port number: 1-65535 + -t, --pin_tx TX_PIN - transmitter pin (by wiringpi numbering) + -r, --pin_rx RX_PIN - receiver pin (by wiringpi numbering) + -l, --log_level log level number: 0-nothing, 1-error log, 2-warning, 3-running status, 4-debug + -H, --mqtt_host MQTT Server (default: localhost) + -U, --mqtt_username MQTT Username + -P, --mqtt_password MQTT Password + -T, --mqtt_topic MQTT topic (default: "/devices/rflink") + + --help display this help and exit ``` For view wiringpi numbering pins run command *gpio readall* or see bellow for numbering raspberryPI v3: @@ -60,7 +61,7 @@ For view wiringpi numbering pins run command *gpio readall* or see bellow for nu | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM | +-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+ -PS: rigt columb is wPi +PS: right column is wPi ``` ## run as daemon (service) diff --git a/RPi_rflink/server.cpp b/RPi_rflink/server.cpp index a01134e..d9ca1f7 100644 --- a/RPi_rflink/server.cpp +++ b/RPi_rflink/server.cpp @@ -45,7 +45,7 @@ int socket_send(const char* buf, const int size) int ret=send(clientSocket, buf, size, 0); if ( ret == -1 ) { // +1 for NUL terminator clientSocket=-1; - Serial.set_send_function(NULL); // disable Serial.println send line by socket = disable this function + //Serial.set_send_function(NULL); // disable Serial.println send line by socket = disable this function log(LOG_ERROR,"TCP server: Problem send data."); log(LOG_ERROR,"TCP server: Connection close."); close(clientSocket); @@ -99,11 +99,11 @@ int TCPserver(int port) log(LOG_STATUS, pbuffer); //log(LOG_STATUS,"TCP server: Client connect."); // --------------------- conction is stored now can work ----------------------------- - Serial.set_send_function(socket_send); // enable Serial.println send line by socket + Serial.set_send_function(common_send); // enable Serial.println send line by socket Serial.print(WELCOME); sprintf(inBuf,"R%02x;",REVNR); Serial.println(inBuf); - StartScanEventTheader(); // create separate thread + //StartScanEventTheader(); // create separate thread while( clientSocket!=-1 ){ // enableRawScan is use together as flag for enable server if (socket_getline(inBuf, BUFSIZE)==-1){ //get line into inBuf log(LOG_ERROR,"TCP server: End when reading input."); @@ -116,11 +116,11 @@ int TCPserver(int port) break; } } - Serial.set_send_function(NULL); // disable Serial.println send line by socket + //Serial.set_send_function(NULL); // disable Serial.println send line by socket close(clientSocket); //std::cout << "Connection close." << std::endl; log(LOG_ERROR,"TCP server: Connection close."); - StopScanEventTheader(); + //StopScanEventTheader(); } while (true); // next newer run (only for inspiration) diff --git a/RPi_rflink/server.h b/RPi_rflink/server.h index 8fd6dc7..d78841b 100644 --- a/RPi_rflink/server.h +++ b/RPi_rflink/server.h @@ -1,6 +1,10 @@ #ifndef _server_h #define _server_h +extern int clientSocket; // if of client socket + +int socket_send(const char* buf, const int size); + // start TCP server int TCPserver(int port); diff --git a/RPi_rflink/server.o b/RPi_rflink/server.o deleted file mode 100644 index 8ef079d..0000000 Binary files a/RPi_rflink/server.o and /dev/null differ diff --git a/Readme_RFLink.txt b/Readme_RFLink.txt index ca6e551..d99079b 100644 --- a/Readme_RFLink.txt +++ b/Readme_RFLink.txt @@ -37,4 +37,5 @@ It is possible to use RFlink via a network connection using ser2net. You can now use the RFLink Gateway with the following home automation software: Domoticz Jeedom +MajorDoMo (via mosquitto server and MQTT module) ------------------------ diff --git a/readme.md b/readme.md index a1b1b7f..64ef1b3 100644 --- a/readme.md +++ b/readme.md @@ -5,7 +5,8 @@ This solution discrem wide range of sesors, socket, remote controls, door bells, meteorological stations, etc. of many manufectures. Is suitable for create Home automation. RFLink have support for many home automation system etc.: - Domoticz (tested), Jeedom, Pimatic, Domotiga, OpenHAB, HoMIDoM + Domoticz (tested), Jeedom, Pimatic, Domotiga, OpenHAB, HoMIDoM, + MajorDoMo (tested via mosquitto server and MQTT module) ## RFLink for raspberryPI Oreginal version of RFlink run on arduino. **RPi_rflink** directory contain modification free version RFlink for run diff --git a/readme.txt b/readme.txt index d9f19a2..64ef1b3 100644 --- a/readme.txt +++ b/readme.txt @@ -5,7 +5,8 @@ This solution discrem wide range of sesors, socket, remote controls, door bells, meteorological stations, etc. of many manufectures. Is suitable for create Home automation. RFLink have support for many home automation system etc.: - Domoticz (tested), Jeedom, Pimatic, Domotiga, OpenHAB, HoMIDoM + Domoticz (tested), Jeedom, Pimatic, Domotiga, OpenHAB, HoMIDoM, + MajorDoMo (tested via mosquitto server and MQTT module) ## RFLink for raspberryPI Oreginal version of RFlink run on arduino. **RPi_rflink** directory contain modification free version RFlink for run @@ -14,4 +15,4 @@ on miniPC raspberryPI. More about this modification version in directory **RPi_r ## more info http://www.nemcon.nl/blog2 or -http://www.seahu.cz \ No newline at end of file +http://www.seahu.cz