kopia lustrzana https://github.com/weetmuts/wmbusmeters
When looking for rtl_sdr/rtl_wmbus first look in the same dir as wmbusmeters was found.
rodzic
408cc19485
commit
30c2926489
|
@ -89,9 +89,10 @@ key=00112233445566778899AABBCCDDEEFF
|
|||
|
||||
Now plugin your wmbus dongle. Wmbusmeters should start automatically,
|
||||
check with `tail -f /var/log/syslog` and `tail -f /var/log/wmbusmeters/wmbusmeters.log`
|
||||
(If you are using an rtlsdr dongle, then make sure the binaries /usr/bin/rtl_sdr and
|
||||
/usr/bin/rtl_wmbus exists and are executable. If not you will see the
|
||||
error message `(rtlwmbus) error: when starting as daemon, wmbusmeters expects /usr/bin/rtl_sdr to exist!`
|
||||
(If you are using an rtlsdr dongle, then make sure that either the binaries /usr/bin/rtl_sdr and
|
||||
/usr/bin/rtl_wmbus exists and are executable. Or rtl_sdr/rtl_wmbus exists inside the same directory
|
||||
as the wmbusmeters directory is located. If not you will see the
|
||||
error message `(rtlwmbus) error: when starting as daemon, wmbusmeters looked for .../rtl_wmbus and /usr/bin/rtl_wmbus, but found neither!`
|
||||
and the daemon will refuse to start.)
|
||||
|
||||
The latest reading of the meter can also be found here: /var/log/wmbusmeters/meter_readings/MyTapWater
|
||||
|
|
|
@ -29,11 +29,15 @@ shared_ptr<Configuration> parseCommandLine(int argc, char **argv) {
|
|||
|
||||
int i=1;
|
||||
const char *filename = strrchr(argv[0], '/');
|
||||
if (filename) {
|
||||
if (filename)
|
||||
{
|
||||
filename++;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
filename = argv[0];
|
||||
}
|
||||
c->bin_dir = dirname(currentProcessExe());
|
||||
if (!strcmp(filename, "wmbusmetersd"))
|
||||
{
|
||||
c->daemon = true;
|
||||
|
|
|
@ -44,6 +44,9 @@ enum class MeterFileTimestamp
|
|||
|
||||
struct Configuration
|
||||
{
|
||||
string bin_dir {}; // The wmbusmeters binary executed is located here.
|
||||
// Use this directory to look for other tools such as rtl_wmbus/rtl_sdr
|
||||
// inside the same directory.
|
||||
bool daemon {};
|
||||
std::string pid_file;
|
||||
std::string device_override;
|
||||
|
|
11
src/main.cc
11
src/main.cc
|
@ -325,15 +325,15 @@ shared_ptr<WMBus> create_wmbus_object(Detected *detected, Configuration *config,
|
|||
break;
|
||||
case DEVICE_MBUS:
|
||||
verbose("(mbus) on %s\n", detected->found_file.c_str());
|
||||
wmbus = openMBUS(detected->found_file, detected->found_bps, manager, serial_override);
|
||||
wmbus = openMBUS(*detected, manager, serial_override);
|
||||
break;
|
||||
case DEVICE_IM871A:
|
||||
verbose("(im871a) on %s\n", detected->found_file.c_str());
|
||||
wmbus = openIM871A(detected->found_file, manager, serial_override);
|
||||
wmbus = openIM871A(*detected, manager, serial_override);
|
||||
break;
|
||||
case DEVICE_AMB8465:
|
||||
verbose("(amb8465) on %s\n", detected->found_file.c_str());
|
||||
wmbus = openAMB8465(detected->found_file, manager, serial_override);
|
||||
wmbus = openAMB8465(*detected, manager, serial_override);
|
||||
break;
|
||||
case DEVICE_SIMULATION:
|
||||
verbose("(simulation) in %s\n", detected->found_file.c_str());
|
||||
|
@ -344,11 +344,8 @@ shared_ptr<WMBus> create_wmbus_object(Detected *detected, Configuration *config,
|
|||
wmbus = openRawTTY(detected->found_file, detected->found_bps, manager, serial_override);
|
||||
break;
|
||||
case DEVICE_RTLWMBUS:
|
||||
{
|
||||
string identifier = detected->found_device_id;
|
||||
wmbus = openRTLWMBUS(identifier, detected->specified_device, config->daemon, manager, serial_override);
|
||||
wmbus = openRTLWMBUS(*detected, config->bin_dir, config->daemon, manager, serial_override);
|
||||
break;
|
||||
}
|
||||
case DEVICE_RTL433:
|
||||
{
|
||||
string command;
|
||||
|
|
|
@ -53,8 +53,11 @@ private:
|
|||
vector<uchar> received_payload_;
|
||||
};
|
||||
|
||||
shared_ptr<WMBus> openMBUS(string device, int baudrate, shared_ptr<SerialCommunicationManager> manager, shared_ptr<SerialDevice> serial_override)
|
||||
shared_ptr<WMBus> openMBUS(Detected detected, shared_ptr<SerialCommunicationManager> manager, shared_ptr<SerialDevice> serial_override)
|
||||
{
|
||||
string device = detected.found_file;
|
||||
int bps = detected.found_bps;
|
||||
|
||||
assert(device != "");
|
||||
|
||||
if (serial_override)
|
||||
|
@ -63,7 +66,7 @@ shared_ptr<WMBus> openMBUS(string device, int baudrate, shared_ptr<SerialCommuni
|
|||
imp->markAsNoLongerSerial();
|
||||
return shared_ptr<WMBus>(imp);
|
||||
}
|
||||
auto serial = manager->createSerialDeviceTTY(device.c_str(), baudrate, PARITY::EVEN, "mbus");
|
||||
auto serial = manager->createSerialDeviceTTY(device.c_str(), bps, PARITY::EVEN, "mbus");
|
||||
MBusRawTTY *imp = new MBusRawTTY(serial, manager);
|
||||
return shared_ptr<WMBus>(imp);
|
||||
}
|
||||
|
@ -159,7 +162,7 @@ AccessCheck detectMBUS(Detected *detected, shared_ptr<SerialCommunicationManager
|
|||
|
||||
serial->close();
|
||||
|
||||
detected->setAsFound("", WMBusDeviceType::DEVICE_MBUS, bps, false, false,
|
||||
detected->setAsFound("", WMBusDeviceType::DEVICE_MBUS, bps, false,
|
||||
detected->specified_device.linkmodes);
|
||||
|
||||
return AccessCheck::AccessOK;
|
||||
|
|
|
@ -123,7 +123,7 @@ AccessCheck detectRTLSDR(string serialnr, Detected *detected)
|
|||
LinkModeSet lms;
|
||||
lms.addLinkMode(LinkMode::C1);
|
||||
lms.addLinkMode(LinkMode::T1);
|
||||
detected->setAsFound(serialnr, detected->specified_device.type, 0, false, false, lms);
|
||||
detected->setAsFound(serialnr, detected->specified_device.type, 0, false, lms);
|
||||
return AccessCheck::AccessOK;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -238,11 +238,11 @@ int test_linkmodes()
|
|||
auto serial4 = manager->createSerialDeviceSimulator();
|
||||
|
||||
vector<string> no_meter_shells, no_meter_jsons;
|
||||
|
||||
shared_ptr<WMBus> wmbus_im871a = openIM871A("", manager, serial1);
|
||||
shared_ptr<WMBus> wmbus_amb8465 = openAMB8465("", manager, serial2);
|
||||
Detected de;
|
||||
SpecifiedDevice sd;
|
||||
shared_ptr<WMBus> wmbus_rtlwmbus = openRTLWMBUS("", sd, false, manager, serial3);
|
||||
shared_ptr<WMBus> wmbus_im871a = openIM871A(de, manager, serial1);
|
||||
shared_ptr<WMBus> wmbus_amb8465 = openAMB8465(de, manager, serial2);
|
||||
shared_ptr<WMBus> wmbus_rtlwmbus = openRTLWMBUS(de, "", false, manager, serial3);
|
||||
shared_ptr<WMBus> wmbus_rawtty = openRawTTY("", 0, manager, serial4);
|
||||
|
||||
Configuration nometers_config;
|
||||
|
|
58
src/util.cc
58
src/util.cc
|
@ -39,6 +39,10 @@
|
|||
#include<sys/types.h>
|
||||
#include<fcntl.h>
|
||||
|
||||
#if defined(__APPLE__) && defined(__MACH__)
|
||||
#include <mach-o/dyld.h>
|
||||
#endif
|
||||
|
||||
using namespace std;
|
||||
|
||||
// Sigint, sigterm will call the exit handler.
|
||||
|
@ -1796,3 +1800,57 @@ bool check_if_rtlsdr_exists_in_path()
|
|||
}
|
||||
return found;
|
||||
}
|
||||
|
||||
std::string currentProcessExe()
|
||||
{
|
||||
char buf[1024];
|
||||
memset(buf, 0, 1024);
|
||||
|
||||
#if defined(__APPLE__) && defined(__MACH__)
|
||||
uint32_t size = sizeof(buf);
|
||||
|
||||
int rs = _NSGetExecutablePath(buf,&size);
|
||||
if (rs != 0)
|
||||
{
|
||||
// Buf not big enough.
|
||||
return "";
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
#else
|
||||
# if (defined(__FreeBSD__))
|
||||
const char *self = "/proc/curproc/file";
|
||||
#else
|
||||
const char *self = "/proc/self/exe";
|
||||
#endif
|
||||
|
||||
ssize_t s = readlink(self, buf, 1023);
|
||||
|
||||
if (s == 1023) return "";
|
||||
if (s <= 0) return "";
|
||||
return buf;
|
||||
#endif
|
||||
}
|
||||
|
||||
string dirname(string p)
|
||||
{
|
||||
size_t s = p.rfind('/');
|
||||
if (s == string::npos) return "";
|
||||
return p.substr(0, s);
|
||||
}
|
||||
|
||||
string lookForExecutable(string prog, string bin_dir, string default_dir)
|
||||
{
|
||||
string tmp = bin_dir+"/"+prog;
|
||||
if (checkFileExists(tmp.c_str()))
|
||||
{
|
||||
return tmp;
|
||||
}
|
||||
tmp = default_dir+"/"+prog;
|
||||
if (checkFileExists(tmp.c_str()))
|
||||
{
|
||||
return tmp;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
|
|
@ -195,4 +195,11 @@ uint32_t indexFromRtlSdrName(std::string &s);
|
|||
bool check_if_rtlwmbus_exists_in_path();
|
||||
bool check_if_rtlsdr_exists_in_path();
|
||||
|
||||
// Return the actual executable binary that is running.
|
||||
std::string currentProcessExe();
|
||||
|
||||
std::string dirname(std::string p);
|
||||
|
||||
std::string lookForExecutable(std::string prog, std::string bin_dir, std::string default_dir);
|
||||
|
||||
#endif
|
||||
|
|
13
src/wmbus.cc
13
src/wmbus.cc
|
@ -4672,7 +4672,7 @@ Detected detectWMBusDeviceWithFile(SpecifiedDevice &specified_device,
|
|||
debug("(lookup) driver: simulation file\n");
|
||||
// A simulation file has a lms of all by default, eg no simulation_foo.txt:t1 nor --t1
|
||||
if (specified_device.linkmodes.empty()) lms.setAll();
|
||||
detected.setAsFound("", DEVICE_SIMULATION, 0 , false, false, lms);
|
||||
detected.setAsFound("", DEVICE_SIMULATION, 0 , false, lms);
|
||||
return detected;
|
||||
}
|
||||
|
||||
|
@ -4682,7 +4682,7 @@ Detected detectWMBusDeviceWithFile(SpecifiedDevice &specified_device,
|
|||
debug("(lookup) driver: rawtty\n");
|
||||
// A rawtty has a lms of all by default, eg no simulation_foo.txt:t1 nor --t1
|
||||
if (specified_device.linkmodes.empty()) lms.setAll();
|
||||
detected.setAsFound("", DEVICE_RAWTTY, atoi(specified_device.bps.c_str()), false, false, lms);
|
||||
detected.setAsFound("", DEVICE_RAWTTY, atoi(specified_device.bps.c_str()), false, lms);
|
||||
return detected;
|
||||
}
|
||||
|
||||
|
@ -4696,7 +4696,7 @@ Detected detectWMBusDeviceWithFile(SpecifiedDevice &specified_device,
|
|||
// Default to 2400. This will be adjusted every time the meters are probed.
|
||||
bps = 2400;
|
||||
}
|
||||
detected.setAsFound("", DEVICE_MBUS, bps, false, false, lms);
|
||||
detected.setAsFound("", DEVICE_MBUS, bps, false, lms);
|
||||
return detected;
|
||||
}
|
||||
|
||||
|
@ -4706,7 +4706,7 @@ Detected detectWMBusDeviceWithFile(SpecifiedDevice &specified_device,
|
|||
debug("(lookup) driver: raw file\n");
|
||||
// A rawtty has a lms of all by default, eg no simulation_foo.txt:t1 nor --t1
|
||||
if (specified_device.linkmodes.empty()) lms.setAll();
|
||||
detected.setAsFound("", DEVICE_RAWTTY, 0, true, false, lms);
|
||||
detected.setAsFound("", DEVICE_RAWTTY, 0, true, lms);
|
||||
return detected;
|
||||
}
|
||||
|
||||
|
@ -4717,8 +4717,7 @@ Detected detectWMBusDeviceWithFile(SpecifiedDevice &specified_device,
|
|||
{
|
||||
debug("(lookup) driver: %s\n", toString(specified_device.type));
|
||||
assert(!lms.empty());
|
||||
detected.setAsFound("", specified_device.type, 0, specified_device.is_file || specified_device.is_stdin,
|
||||
false, lms);
|
||||
detected.setAsFound("", specified_device.type, 0, specified_device.is_file || specified_device.is_stdin, lms);
|
||||
return detected;
|
||||
}
|
||||
// Ok, we are left with a single /dev/ttyUSB0 lets talk to it
|
||||
|
@ -4751,7 +4750,7 @@ Detected detectWMBusDeviceWithCommand(SpecifiedDevice &specified_device,
|
|||
LinkModeSet lms = specified_device.linkmodes;
|
||||
// If the specified device did not set any linkmodes fall back on the default linkmodes.
|
||||
if (lms.empty()) lms = default_linkmodes;
|
||||
detected.setAsFound("", specified_device.type, 0, false, true, lms);
|
||||
detected.setAsFound("", specified_device.type, 0, false, lms);
|
||||
|
||||
return detected;
|
||||
}
|
||||
|
|
21
src/wmbus.h
21
src/wmbus.h
|
@ -178,22 +178,20 @@ struct Detected
|
|||
string found_file; // The device file to use.
|
||||
string found_device_id; // An "unique" identifier, typically the id used by the dongle as its own wmbus id, if it transmits.
|
||||
WMBusDeviceType found_type {}; // IM871A, AMB8465 etc.
|
||||
int found_bps {}; // Serial speed of tty, overrides
|
||||
bool found_tty_override {}; // override tty
|
||||
bool found_cmd_override {}; // override cmd
|
||||
int found_bps {}; // Serial speed of tty.
|
||||
bool found_tty_override {};
|
||||
|
||||
void setSpecifiedDevice(SpecifiedDevice sd)
|
||||
{
|
||||
specified_device = sd;
|
||||
}
|
||||
|
||||
void setAsFound(string id, WMBusDeviceType t, int b, bool to, bool co, LinkModeSet clm)
|
||||
void setAsFound(string id, WMBusDeviceType t, int b, bool to, LinkModeSet clm)
|
||||
{
|
||||
found_device_id = id;
|
||||
found_type = t;
|
||||
found_bps = b;
|
||||
found_tty_override = to;
|
||||
found_cmd_override = co;
|
||||
}
|
||||
|
||||
std::string str()
|
||||
|
@ -589,18 +587,21 @@ Detected detectWMBusDeviceWithCommand(SpecifiedDevice &specified_device,
|
|||
shared_ptr<SerialCommunicationManager> handler);
|
||||
|
||||
|
||||
shared_ptr<WMBus> openIM871A(string device, shared_ptr<SerialCommunicationManager> manager,
|
||||
shared_ptr<WMBus> openIM871A(Detected detected, shared_ptr<SerialCommunicationManager> manager,
|
||||
shared_ptr<SerialDevice> serial_override);
|
||||
shared_ptr<WMBus> openAMB8465(string device, shared_ptr<SerialCommunicationManager> manager,
|
||||
shared_ptr<WMBus> openAMB8465(Detected detected, shared_ptr<SerialCommunicationManager> manager,
|
||||
shared_ptr<SerialDevice> serial_override);
|
||||
shared_ptr<WMBus> openRawTTY(string device, int baudrate, shared_ptr<SerialCommunicationManager> manager,
|
||||
shared_ptr<SerialDevice> serial_override);
|
||||
shared_ptr<WMBus> openMBUS(string device, int baudrate, shared_ptr<SerialCommunicationManager> manager,
|
||||
shared_ptr<WMBus> openMBUS(Detected detected, shared_ptr<SerialCommunicationManager> manager,
|
||||
shared_ptr<SerialDevice> serial_override);
|
||||
shared_ptr<WMBus> openRC1180(string device, shared_ptr<SerialCommunicationManager> manager,
|
||||
shared_ptr<SerialDevice> serial_override);
|
||||
shared_ptr<WMBus> openRTLWMBUS(string identifier, SpecifiedDevice device, bool daemon,
|
||||
shared_ptr<SerialCommunicationManager> manager, shared_ptr<SerialDevice> serial_override);
|
||||
shared_ptr<WMBus> openRTLWMBUS(Detected detected,
|
||||
string bin_dir,
|
||||
bool daemon,
|
||||
shared_ptr<SerialCommunicationManager> manager,
|
||||
shared_ptr<SerialDevice> serial_override);
|
||||
shared_ptr<WMBus> openRTL433(string identifier, string command, shared_ptr<SerialCommunicationManager> manager,
|
||||
shared_ptr<SerialDevice> serial_override);
|
||||
shared_ptr<WMBus> openCUL(string device, shared_ptr<SerialCommunicationManager> manager,
|
||||
|
|
|
@ -139,8 +139,9 @@ private:
|
|||
void handleMessage(int msgid, vector<uchar> &frame, int rssi_dbm);
|
||||
};
|
||||
|
||||
shared_ptr<WMBus> openAMB8465(string device, shared_ptr<SerialCommunicationManager> manager, shared_ptr<SerialDevice> serial_override)
|
||||
shared_ptr<WMBus> openAMB8465(Detected detected, shared_ptr<SerialCommunicationManager> manager, shared_ptr<SerialDevice> serial_override)
|
||||
{
|
||||
string device = detected.found_file;
|
||||
assert(device != "");
|
||||
|
||||
if (serial_override)
|
||||
|
@ -605,7 +606,7 @@ AccessCheck detectAMB8465(Detected *detected, shared_ptr<SerialCommunicationMana
|
|||
ConfigAMB8465 config;
|
||||
config.decode(response);
|
||||
|
||||
detected->setAsFound(config.dongleId(), WMBusDeviceType::DEVICE_AMB8465, 9600, false, false,
|
||||
detected->setAsFound(config.dongleId(), WMBusDeviceType::DEVICE_AMB8465, 9600, false,
|
||||
detected->specified_device.linkmodes);
|
||||
|
||||
verbose("(amb8465) detect %s\n", config.str().c_str());
|
||||
|
|
|
@ -423,7 +423,7 @@ AccessCheck detectCUL(Detected *detected, shared_ptr<SerialCommunicationManager>
|
|||
return AccessCheck::NotThere;
|
||||
}
|
||||
|
||||
detected->setAsFound("", WMBusDeviceType::DEVICE_CUL, 38400, false, false, detected->specified_device.linkmodes);
|
||||
detected->setAsFound("", WMBusDeviceType::DEVICE_CUL, 38400, false, detected->specified_device.linkmodes);
|
||||
|
||||
verbose("(cul) are you there? yes\n");
|
||||
|
||||
|
|
|
@ -228,9 +228,10 @@ int toDBM(int rssi)
|
|||
return dbm;
|
||||
}
|
||||
|
||||
shared_ptr<WMBus> openIM871A(string device, shared_ptr<SerialCommunicationManager> manager, shared_ptr<SerialDevice> serial_override)
|
||||
shared_ptr<WMBus> openIM871A(Detected detected, shared_ptr<SerialCommunicationManager> manager, shared_ptr<SerialDevice> serial_override)
|
||||
{
|
||||
assert(device != "");
|
||||
string device_file = detected.found_file;
|
||||
assert(device_file != "");
|
||||
if (serial_override)
|
||||
{
|
||||
WMBusIM871A *imp = new WMBusIM871A(serial_override, manager);
|
||||
|
@ -238,7 +239,7 @@ shared_ptr<WMBus> openIM871A(string device, shared_ptr<SerialCommunicationManage
|
|||
return shared_ptr<WMBus>(imp);
|
||||
}
|
||||
|
||||
auto serial = manager->createSerialDeviceTTY(device.c_str(), 57600, PARITY::NONE, "im871a");
|
||||
auto serial = manager->createSerialDeviceTTY(device_file.c_str(), 57600, PARITY::NONE, "im871a");
|
||||
WMBusIM871A *imp = new WMBusIM871A(serial, manager);
|
||||
return shared_ptr<WMBus>(imp);
|
||||
}
|
||||
|
@ -911,7 +912,7 @@ AccessCheck detectIM871A(Detected *detected, shared_ptr<SerialCommunicationManag
|
|||
|
||||
debug("(im871a) config: %s\n", co.str().c_str());
|
||||
|
||||
detected->setAsFound(co.dongleId(), WMBusDeviceType::DEVICE_IM871A, 57600, false, false,
|
||||
detected->setAsFound(co.dongleId(), WMBusDeviceType::DEVICE_IM871A, 57600, false,
|
||||
detected->specified_device.linkmodes);
|
||||
|
||||
verbose("(im871a) are you there? yes %s\n", co.dongleId().c_str());
|
||||
|
|
|
@ -159,7 +159,7 @@ AccessCheck detectRAWTTY(Detected *detected, shared_ptr<SerialCommunicationManag
|
|||
|
||||
serial->close();
|
||||
|
||||
detected->setAsFound("", WMBusDeviceType::DEVICE_RAWTTY, bps, false, false,
|
||||
detected->setAsFound("", WMBusDeviceType::DEVICE_RAWTTY, false, bps,
|
||||
detected->specified_device.linkmodes);
|
||||
|
||||
return AccessCheck::AccessOK;
|
||||
|
|
|
@ -410,7 +410,7 @@ AccessCheck detectRC1180(Detected *detected, shared_ptr<SerialCommunicationManag
|
|||
|
||||
serial->close();
|
||||
|
||||
detected->setAsFound(co.dongleId(), WMBusDeviceType::DEVICE_RC1180, 19200, false, false,
|
||||
detected->setAsFound(co.dongleId(), WMBusDeviceType::DEVICE_RC1180, 19200, false,
|
||||
detected->specified_device.linkmodes);
|
||||
|
||||
verbose("(rc1180) are you there? yes %s\n", co.dongleId().c_str());
|
||||
|
|
|
@ -305,7 +305,7 @@ FrameStatus WMBusRTL433::checkRTL433Frame(vector<uchar> &data,
|
|||
|
||||
AccessCheck detectRTL433(Detected *detected, shared_ptr<SerialCommunicationManager> handler)
|
||||
{
|
||||
detected->setAsFound("", WMBusDeviceType::DEVICE_RTL433, 0, false, false,
|
||||
detected->setAsFound("", WMBusDeviceType::DEVICE_RTL433, 0, false,
|
||||
detected->specified_device.linkmodes);
|
||||
|
||||
return AccessCheck::AccessOK;
|
||||
|
|
|
@ -80,10 +80,14 @@ private:
|
|||
string setup_;
|
||||
};
|
||||
|
||||
shared_ptr<WMBus> openRTLWMBUS(string identifier, SpecifiedDevice device, bool daemon,
|
||||
shared_ptr<WMBus> openRTLWMBUS(Detected detected,
|
||||
string bin_dir,
|
||||
bool daemon,
|
||||
shared_ptr<SerialCommunicationManager> manager,
|
||||
shared_ptr<SerialDevice> serial_override)
|
||||
{
|
||||
string identifier = detected.found_device_id;
|
||||
SpecifiedDevice &device = detected.specified_device;
|
||||
string command;
|
||||
int id = 0;
|
||||
|
||||
|
@ -102,25 +106,39 @@ shared_ptr<WMBus> openRTLWMBUS(string identifier, SpecifiedDevice device, bool d
|
|||
{
|
||||
freq = device.fq;
|
||||
}
|
||||
string prefix = "";
|
||||
if (daemon)
|
||||
string rtl_sdr;
|
||||
string rtl_wmbus;
|
||||
rtl_sdr = lookForExecutable("rtl_sdr", bin_dir, "/usr/bin");
|
||||
if (rtl_sdr == "")
|
||||
{
|
||||
prefix = "/usr/bin/";
|
||||
if (command == "")
|
||||
if (daemon)
|
||||
{
|
||||
// Default command is used, check that the binaries are in place.
|
||||
if (!checkFileExists("/usr/bin/rtl_sdr"))
|
||||
{
|
||||
error("(rtlwmbus) error: when starting as daemon, wmbusmeters expects /usr/bin/rtl_sdr to exist!\n");
|
||||
}
|
||||
if (!checkFileExists("/usr/bin/rtl_wmbus"))
|
||||
{
|
||||
error("(rtlwmbus) error: when starting as daemon, wmbusmeters expects /usr/bin/rtl_wmbus to exist!\n");
|
||||
}
|
||||
error("(rtlwmbus) error: when starting as daemon, wmbusmeters looked for %s/rtl_sdr and %s/rtl_sdr, but found neither!\n",
|
||||
bin_dir.c_str(), "/usr/bin");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Look for it in the PATH
|
||||
rtl_sdr = "rtl_sdr";
|
||||
}
|
||||
}
|
||||
if (command == "") {
|
||||
command = prefix+"rtl_sdr -d "+to_string(id)+" -f "+freq+" -s 1.6e6 - 2>/dev/null | "+prefix+"rtl_wmbus";
|
||||
rtl_wmbus = lookForExecutable("rtl_wmbus", bin_dir, "/usr/bin");
|
||||
if (rtl_wmbus == "")
|
||||
{
|
||||
if (daemon)
|
||||
{
|
||||
error("(rtlwmbus) error: when starting as daemon, wmbusmeters looked for %s/rtl_wmbus and %s/rtl_wmbus, but found neither!\n",
|
||||
bin_dir.c_str(), "/usr/bin");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Look for it in the PATH
|
||||
rtl_wmbus = "rtl_wmbus";
|
||||
}
|
||||
}
|
||||
if (command == "")
|
||||
{
|
||||
command = rtl_sdr+" -d "+to_string(id)+" -f "+freq+" -s 1.6e6 - 2>/dev/null | "+rtl_wmbus;
|
||||
}
|
||||
verbose("(rtlwmbus) using command: %s\n", command.c_str());
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue