diff options
-rw-r--r-- | modbuslog.c | 57 |
1 files changed, 52 insertions, 5 deletions
diff --git a/modbuslog.c b/modbuslog.c index ec0acc4..e46c9a7 100644 --- a/modbuslog.c +++ b/modbuslog.c @@ -32,6 +32,12 @@ #include <libconfig.h> #include <modbus.h> +#include <sys/ioctl.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <net/if.h> +#include <string.h> + #define SLAVE_ID 1 #define START_ADDRESS 0 #define NUMBER_REGISTERS 14 @@ -41,18 +47,35 @@ void minute_check(int signum){ alarm(60); } +void getmac(unsigned char* mac_address){ + int s; + struct ifreq ifr; + + s = socket(PF_INET, SOCK_DGRAM, 0); + memset(&ifr, 0x00, sizeof(ifr)); + strcpy(ifr.ifr_name, "eth0"); + ioctl(s, SIOCGIFHWADDR, &ifr); + close(s); + unsigned char mac_address_internal[6]; + sprintf(mac_address_internal,"%.2X%.2X%.2X%.2X%.2X%.2X", (unsigned char) ifr.ifr_hwaddr.sa_data[0], (unsigned char) ifr.ifr_hwaddr.sa_data[1], (unsigned char) ifr.ifr_hwaddr.sa_data[2], (unsigned char) ifr.ifr_hwaddr.sa_data[3], (unsigned char) ifr.ifr_hwaddr.sa_data[4], (unsigned char) ifr.ifr_hwaddr.sa_data[5]); + + strcpy(mac_address,mac_address_internal); +} int main(int argc, char *argv[]) { - const char *CONFIG_FILE = "modbuslog.cfg"; + const char *CONFIG_FILE = "modbuslog.cfg"; config_t cfg; //config_setting_t *setting; + //unsigned char* mac_address; + unsigned char mac_address[6]; + const char *modbus_device_address; int modbus_baud_rate; int modbus_data_bits; @@ -61,6 +84,10 @@ int main(int argc, char *argv[]) config_init(&cfg); + getmac(mac_address); + if(DEBUG){ +printf("%s\n",mac_address); +} if(!config_read_file(&cfg, CONFIG_FILE)) { @@ -99,9 +126,9 @@ int main(int argc, char *argv[]) select(0, NULL, NULL, NULL, NULL); time_t t = time(NULL); - //int unixtime_min = (((int) t)/60*60); - int unixtime = (int) t; - printf("%d\n", unixtime); + int unixtime_min = (((int) t)/60*60); + //int unixtime = (int) t; + //printf("%d\n", unixtime); config_setting_t *registers; @@ -114,9 +141,29 @@ int main(int argc, char *argv[]) config_setting_t *register_element = config_setting_get_elem(registers, i); int slaveid; config_setting_lookup_int(register_element, "slaveid", &slaveid); + int intervalvalue; + config_setting_lookup_int(register_element, "intervalvalue", &intervalvalue); + printf("%d", intervalvalue); + + const char *intervalunit; + config_setting_lookup_string(register_element, "intervalunit", &intervalunit); + + printf("%c", intervalunit[0]); + + int intervalduration; + + if(intervalunit[0]=='H') + intervalduration=intervalvalue*3600; + else + intervalduration=intervalvalue*60; + + if(unixtime_min%intervalduration==0){ + printf("specified minute. %d %d\n", unixtime_min, intervalduration); + } + printf("%d ", slaveid); } - printf("\n"); + printf("%d\n",unixtime_min); } } |