kopia lustrzana https://github.com/weetmuts/wmbusmeters
Added support for specifying in which dir to store the meterfiles (ie not just /tmp).
rodzic
acafccfc5e
commit
68b20665be
|
@ -16,8 +16,9 @@ Add --verbose for detailed debug information.
|
||||||
--robot or --robot=json for json output.
|
--robot or --robot=json for json output.
|
||||||
--robot=fields for semicolon separated fields.
|
--robot=fields for semicolon separated fields.
|
||||||
--separator=X change field separator to X.
|
--separator=X change field separator to X.
|
||||||
--meterfiles to create status files below tmp,
|
--meterfiles=dir to create status files below dir,
|
||||||
named /tmp/meter_name, containing the latest reading.
|
named dir/meter_name, containing the latest reading.
|
||||||
|
--meterfiles defaults dir to /tmp.
|
||||||
--oneshot wait for an update from each meter, then quit.
|
--oneshot wait for an update from each meter, then quit.
|
||||||
|
|
||||||
Specifying auto as the device will automatically look for usb
|
Specifying auto as the device will automatically look for usb
|
||||||
|
|
14
cmdline.cc
14
cmdline.cc
|
@ -88,8 +88,20 @@ CommandLine *parseCommandLine(int argc, char **argv) {
|
||||||
i++;
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!strcmp(argv[i], "--meterfiles")) {
|
if (!strncmp(argv[i], "--meterfiles", 12)) {
|
||||||
c->meterfiles = true;
|
c->meterfiles = true;
|
||||||
|
if (strlen(argv[i]) > 12 && argv[i][12] == '=') {
|
||||||
|
size_t len = strlen(argv[i])-13;
|
||||||
|
if (len > 0) {
|
||||||
|
c->meterfiles_dir = new char[len+1];
|
||||||
|
strncpy((char*)c->meterfiles_dir, argv[i]+13, len);
|
||||||
|
} else {
|
||||||
|
c->meterfiles_dir = "/tmp";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
c->meterfiles_dir = "/tmp";
|
||||||
|
}
|
||||||
|
verbose("Storing meter files here: %s\n", c->meterfiles_dir);
|
||||||
i++;
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,7 @@ struct CommandLine {
|
||||||
bool debug {};
|
bool debug {};
|
||||||
bool logtelegrams {};
|
bool logtelegrams {};
|
||||||
bool meterfiles {};
|
bool meterfiles {};
|
||||||
|
const char *meterfiles_dir {};
|
||||||
bool json {};
|
bool json {};
|
||||||
bool fields {};
|
bool fields {};
|
||||||
char separator { ';' };
|
char separator { ';' };
|
||||||
|
|
7
main.cc
7
main.cc
|
@ -43,8 +43,9 @@ int main(int argc, char **argv)
|
||||||
printf(" --robot or --robot=json for json output.\n");
|
printf(" --robot or --robot=json for json output.\n");
|
||||||
printf(" --robot=fields for semicolon separated fields.\n");
|
printf(" --robot=fields for semicolon separated fields.\n");
|
||||||
printf(" --separator=X change field separator to X.\n");
|
printf(" --separator=X change field separator to X.\n");
|
||||||
printf(" --meterfiles to create status files below tmp,\n"
|
printf(" --meterfiles=dir to create status files below dir,\n"
|
||||||
" named /tmp/meter_name, containing the latest reading.\n");
|
" named dir/meter_name, containing the latest reading.\n");
|
||||||
|
printf(" --meterfiles defaults dir to /tmp.\n");
|
||||||
printf(" --oneshot wait for an update from each meter, then quit.\n\n");
|
printf(" --oneshot wait for an update from each meter, then quit.\n\n");
|
||||||
printf("Specifying auto as the device will automatically look for usb\n");
|
printf("Specifying auto as the device will automatically look for usb\n");
|
||||||
printf("wmbus dongles on /dev/im871a and /dev/amb8465\n\n");
|
printf("wmbus dongles on /dev/im871a and /dev/amb8465\n\n");
|
||||||
|
@ -90,7 +91,7 @@ int main(int argc, char **argv)
|
||||||
if (wmbus->getLinkMode()!=LinkModeC1) error("Could not set link mode to receive C1 telegrams.\n");
|
if (wmbus->getLinkMode()!=LinkModeC1) error("Could not set link mode to receive C1 telegrams.\n");
|
||||||
|
|
||||||
Printer *output = new Printer(cmdline->json, cmdline->fields,
|
Printer *output = new Printer(cmdline->json, cmdline->fields,
|
||||||
cmdline->separator, cmdline->meterfiles);
|
cmdline->separator, cmdline->meterfiles, cmdline->meterfiles_dir);
|
||||||
|
|
||||||
if (cmdline->meters.size() > 0) {
|
if (cmdline->meters.size() > 0) {
|
||||||
for (auto &m : cmdline->meters) {
|
for (auto &m : cmdline->meters) {
|
||||||
|
|
|
@ -22,12 +22,13 @@
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
Printer::Printer(bool json, bool fields, char separator, bool meterfiles)
|
Printer::Printer(bool json, bool fields, char separator, bool meterfiles, const char *meterfiles_dir)
|
||||||
{
|
{
|
||||||
json_ = json;
|
json_ = json;
|
||||||
fields_ = fields;
|
fields_ = fields;
|
||||||
separator_ = separator;
|
separator_ = separator;
|
||||||
meterfiles_ = meterfiles;
|
meterfiles_ = meterfiles;
|
||||||
|
meterfiles_dir_ = meterfiles_dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Printer::print(Meter *meter)
|
void Printer::print(Meter *meter)
|
||||||
|
@ -37,7 +38,7 @@ void Printer::print(Meter *meter)
|
||||||
if (meterfiles_) {
|
if (meterfiles_) {
|
||||||
char filename[128];
|
char filename[128];
|
||||||
memset(filename, 0, sizeof(filename));
|
memset(filename, 0, sizeof(filename));
|
||||||
snprintf(filename, 127, "/tmp/%s", meter->name().c_str());
|
snprintf(filename, 127, "%s/%s", meterfiles_dir_, meter->name().c_str());
|
||||||
output = fopen(filename, "w");
|
output = fopen(filename, "w");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,12 +24,13 @@
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
struct Printer {
|
struct Printer {
|
||||||
Printer(bool json, bool fields, char separator, bool meterfiles);
|
Printer(bool json, bool fields, char separator, bool meterfiles, const char *meterfiles_dir);
|
||||||
|
|
||||||
void print(Meter *meter);
|
void print(Meter *meter);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
bool json_, fields_, meterfiles_;
|
bool json_, fields_, meterfiles_;
|
||||||
|
const char *meterfiles_dir_;
|
||||||
char separator_;
|
char separator_;
|
||||||
};
|
};
|
||||||
|
|
Ładowanie…
Reference in New Issue