diff options
-rw-r--r-- | Makefile | 13 | ||||
-rw-r--r-- | README | 9 | ||||
-rw-r--r-- | src/ftphelper.c | 104 | ||||
-rwxr-xr-x | src/ftpupload | 21 | ||||
-rw-r--r-- | src/modbuslog.cfg | 7 |
5 files changed, 151 insertions, 3 deletions
@@ -1,7 +1,14 @@ CC=gcc -CFLAGS=-I/usr/include/modbus -LIBS=-lmodbus -lconfig SDIR=src +MODBUSLOGCFLAGS=-I/usr/include/modbus +MODBUSLOGLIBS=-lmodbus -lconfig +FTPHELPERCFLAGS= +FTPHELPERLIBS=-lconfig + +all: modbuslog ftphelper modbuslog: $(SDIR)/modbuslog.c - $(CC) -o $(SDIR)/$@ $^ $(CFLAGS) $(LIBS) + $(CC) -o $(SDIR)/$@ $^ $(MODBUSLOGCFLAGS) $(MODBUSLOGLIBS) + +ftphelper: $(SDIR)/ftphelper.c + $(CC) -o $(SDIR)/$@ $^ $(FTPHELPERCFLAGS) $(FTPHELPERLIBS) @@ -37,6 +37,8 @@ Required files: -------------------- /sbin/modbuslog executable program +/usr/bin/ftpupload ftp upload script +/usr/bin/ftphelper ftp upload script helper /etc/modbuslog.cfg configuration file /var/modbuslog/ output directory where logs are stored /var/modbuslog/interval/interval.txt textfile storing unique interval @@ -57,6 +59,13 @@ device, These include: 5) stop_bits stop bits, commonly 1. 6) retry number of retries for each failed reading. +The ftp section defines the parameters for the ftp upload function. The +required parameters are: + 1) server address of remote ftp server + 2) username ftp username + 3) password ftp password + 4) directory directory on ftp server files will be uploaded to + The reading section defines the unique reading times that the program is required to log at. Each entry must contain: 1) slaveid modbus slave id diff --git a/src/ftphelper.c b/src/ftphelper.c new file mode 100644 index 0000000..ffa289c --- /dev/null +++ b/src/ftphelper.c @@ -0,0 +1,104 @@ +/* + * ftphelper + * + * Copyright (C) 2012 Jonathan McCrohan + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +// gcc ftphelper.c -o ftphelper `pkg-config --libs --cflags libconfig` +#include <stdio.h> +#include <sys/ioctl.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <net/if.h> +#include <string.h> +#include <libconfig.h> + +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); + + static char mac_address[12]; + sprintf(mac_address, "%.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]); + + return mac_address; +} + +int main(int argc, char *argv[]) { + + if (argc == 1) { + return 0; + } + + if (strcmp(argv[1], "--mac") == 0) { + printf("%s", mac_address()); + return 0; + } + + const char *configfile = "/etc/modbuslog.cfg"; + config_t cfg; + const char *ftp_server; + const char *ftp_username; + const char *ftp_password; + const char *ftp_directory; + + config_init(&cfg); + + if (!config_read_file(&cfg, configfile)) { + fprintf(stderr, "%s:%d - %s\n", config_error_file(&cfg), + config_error_line(&cfg), config_error_text(&cfg)); + config_destroy(&cfg); + fprintf(stderr, "Unable to find configfile.\n"); + return 1; + } + + if (!(config_lookup_string(&cfg, "ftp.server", &ftp_server) + && config_lookup_string(&cfg, "ftp.username", &ftp_username) + && config_lookup_string(&cfg, "ftp.password", &ftp_password) + && config_lookup_string(&cfg, "ftp.directory", &ftp_directory))) { + fprintf(stderr, + "Incomplete ftp configuration. Check configuration file.\n"); + return 1; + } + + if (strcmp(argv[1], "--server") == 0) { + printf("%s", ftp_server); + return 0; + } + if (strcmp(argv[1], "--username") == 0) { + printf("%s", ftp_username); + return 0; + } + if (strcmp(argv[1], "--password") == 0) { + printf("%s", ftp_password); + return 0; + } + if (strcmp(argv[1], "--directory") == 0) { + printf("%s", ftp_directory); + return 0; + } +} diff --git a/src/ftpupload b/src/ftpupload new file mode 100755 index 0000000..a5f565b --- /dev/null +++ b/src/ftpupload @@ -0,0 +1,21 @@ +#!/bin/sh + +# ftpupload +# +# Copyright (C) 2012 Jonathan McCrohan + +USERNAME=`/usr/bin/ftphelper --username` +PASSWORD=`/usr/bin/ftphelper --password` +SERVER=`/usr/bin/ftphelper --server` +REMOTEDIRECTORY=`/usr/bin/ftphelper --directory` + +# local file to be uploaded +FILE="/var/modbuslog/"`/usr/bin/ftphelper --mac`"_"`date +%Y_%m_%d --date='1 days ago'`"_00_00_00.log" + +# login to remote server and upload +ftp -n -i $SERVER <<EOF +user $USERNAME $PASSWORD +cd $REMOTEDIRECTORY +mput $FILE +bye +EOF diff --git a/src/modbuslog.cfg b/src/modbuslog.cfg index 615cea4..6913323 100644 --- a/src/modbuslog.cfg +++ b/src/modbuslog.cfg @@ -11,6 +11,13 @@ modbus = { retry = 2; }; +ftp = { + server = "ftp.verteco.ie"; + username = "loggerdevice"; + password = "securepassword"; + directory = "uploaddir"; +}; + reading= ( { slaveid = 1; |