kopia lustrzana https://github.com/weetmuts/wmbusmeters
Add --purge to uninstall script, remove wmbusmeters-admin and add deb_local build target.
rodzic
98ce7eae2c
commit
509a810764
|
@ -12,7 +12,7 @@ jobs:
|
|||
run: |
|
||||
sudo apt install -y eatmydata
|
||||
sudo eatmydata apt install -y devscripts debhelper
|
||||
sudo eatmydata apt build-dep -y . || sudo eatmydata apt install -y librtlsdr-dev libncurses-dev adduser
|
||||
sudo eatmydata apt build-dep -y . || sudo eatmydata apt install -y librtlsdr-dev adduser
|
||||
- id: PREPARE_SOURCE
|
||||
run: |
|
||||
ln -s deb debian
|
||||
|
|
|
@ -11,7 +11,7 @@ jobs:
|
|||
- id: INSTALL_ADDITIONAL_BUILD_DEPENDENCIES
|
||||
run: |
|
||||
sudo apt install -y eatmydata
|
||||
sudo eatmydata apt-get install librtlsdr-dev libusb-dev ncurses-dev
|
||||
sudo eatmydata apt-get install librtlsdr-dev libusb-dev
|
||||
- id: CONFIGURE
|
||||
run: eatmydata ./configure
|
||||
- id: MAKE
|
||||
|
|
22
CHANGES
22
CHANGES
|
@ -1,3 +1,25 @@
|
|||
|
||||
The ha-addon has been moved to https://github.com/wmbusmeters/wmbusmeters-ha-addon
|
||||
|
||||
Bug fixed where an mbus telegram was mistakenly detected as wmbus.
|
||||
The snap package can now use the serial port so that it works with mbus.
|
||||
|
||||
DeDragonSlayer improved the amiplus with the maximum power consumption field. Thanks DeDragonSlayer!
|
||||
|
||||
The calculator was improved to properly handle the m3 unit and give a better
|
||||
error message when a constant number lacks unit.
|
||||
|
||||
The sharky driver was improved.
|
||||
|
||||
The kamheat driver was updated with operating_time_h and a new auto-detect combo.
|
||||
|
||||
Bibo added support for the hydrocal m4 meter,
|
||||
improved the kem-import and kem-extract scripts and
|
||||
added support for the Aerius gas meter. Thanks Bibo!
|
||||
|
||||
The wmusmeters-admin tool has been removed since it was never really useful.
|
||||
It will probably be replaced with something better.
|
||||
|
||||
Version 1.12.0 2023-03-12
|
||||
Version 1.12.0-RC1 2023-03-12
|
||||
|
||||
|
|
48
Makefile
48
Makefile
|
@ -64,7 +64,6 @@ else
|
|||
# Release build
|
||||
DEBUG_FLAGS=-Os -g
|
||||
STRIP_BINARY=cp $(BUILD)/wmbusmeters $(BUILD)/wmbusmeters.g; $(STRIP) $(BUILD)/wmbusmeters
|
||||
STRIP_ADMIN=cp $(BUILD)/wmbusmeters-admin $(BUILD)/wmbusmeters-admin.g; $(STRIP) $(BUILD)/wmbusmeters-admin
|
||||
GCOV=To_run_gcov_add_DEBUG=true
|
||||
endif
|
||||
endif
|
||||
|
@ -99,14 +98,13 @@ else
|
|||
endif
|
||||
|
||||
VERSION:=$(BRANCH)$(TAG)
|
||||
DEBVERSION:=$(BRANCH)$(TAG)
|
||||
LOCALDEBVERSION:=$(BRANCH)$(TAG)
|
||||
LOCALCHANGES:=
|
||||
|
||||
ifneq ($(strip $(CHANGES)),)
|
||||
# There are local un-committed changes.
|
||||
VERSION:=$(VERSION) with local changes
|
||||
COMMIT_HASH:=$(COMMIT_HASH) with local changes
|
||||
DEBVERSION:=$(DEBVERSION)l
|
||||
COMMIT_HASH:=$(COMMIT_HASH)+
|
||||
LOCALCHANGES:=true
|
||||
endif
|
||||
|
||||
|
@ -188,9 +186,9 @@ else
|
|||
endif
|
||||
DRIVER_OBJS:=$(patsubst src/%.cc,$(BUILD)/%.o,$(DRIVER_OBJS))
|
||||
|
||||
all: $(BUILD)/wmbusmeters $(BUILD)/wmbusmetersd $(BUILD)/wmbusmeters.g $(BUILD)/wmbusmeters-admin $(BUILD)/testinternals
|
||||
all: $(BUILD)/wmbusmeters $(BUILD)/wmbusmetersd $(BUILD)/wmbusmeters.g $(BUILD)/testinternals
|
||||
|
||||
deb:
|
||||
deb_release:
|
||||
@if [ "$(RELEASE)" = "" ] ; then echo "Usage: make deb RELEASE=1.2.3" ; exit 1 ; fi
|
||||
@if [ "$$(cat deb/changelog | grep wmbusmeters\ \( | grep -o $(RELEASE))" != "$(RELEASE)" ]; then \
|
||||
echo "Changelog not updated with this release! It says:" ; \
|
||||
|
@ -211,6 +209,30 @@ deb:
|
|||
@echo "Running debbuild..."
|
||||
@(cd packaging/wmbusmeters-$(RELEASE) ; cp -a deb debian; debuild )
|
||||
|
||||
deb_local:
|
||||
@rm -rf packaging
|
||||
@mkdir -p packaging
|
||||
@echo "Using latest commit..."
|
||||
@(cd packaging ; git clone $(PWD) wmbusmeters-$(LOCALDEBVERSION) ; cd wmbusmeters-$(LOCALDEBVERSION) )
|
||||
@echo "Applying local changes..."
|
||||
@(git diff > packaging/local_patch_$(LOCALDEBVERSION) ; \
|
||||
cd packaging/wmbusmeters-$(LOCALDEBVERSION) ; \
|
||||
patch -p 1 < ../local_patch_$(LOCALDEBVERSION) )
|
||||
@(cd packaging/wmbusmeters-$(LOCALDEBVERSION) ; git show -s --format=%ct > ../release_date )
|
||||
@echo "Removing git history..."
|
||||
@(cd packaging ; rm -rf wmbusmeters-$(LOCALDEBVERSION)/.git )
|
||||
@echo "Setting file timestamps to commit date..."
|
||||
@(cd packaging ; export UT=$$(cat ./release_date) ; find . -exec touch -d "@$$UT" \{\} \; )
|
||||
@echo "Creating orig archive..."
|
||||
@(cd packaging ; tar czf ./wmbusmeters_$(LOCALDEBVERSION).orig.tar.gz wmbusmeters-$(LOCALDEBVERSION) )
|
||||
@echo "Installing debian directory..."
|
||||
@(cd packaging/wmbusmeters-$(LOCALDEBVERSION) ; cp -a deb debian )
|
||||
@echo "Creating local dummy changelog..."
|
||||
@echo "wmbusmeters ($(LOCALDEBVERSION)-99) unstable; urgency=low\n\n" \
|
||||
" * Local build of deb current sources $(VERSION) $(COMMIT_HASH)\n\n" \
|
||||
" -- No User <nouser@nowhere> $(shell LANG=C date -R)\n" > packaging/wmbusmeters-$(LOCALDEBVERSION)/debian/changelog
|
||||
@echo "Running debbuild..."
|
||||
@(cd packaging/wmbusmeters-$(LOCALDEBVERSION) ; debuild -i -us -uc -b )
|
||||
|
||||
# Check docs verifies that all options in the source have been mentioned in the README and in the man page.
|
||||
# Also any option not in the source but mentioned in the docs is warned for as well.
|
||||
|
@ -229,9 +251,14 @@ install: $(BUILD)/wmbusmeters check_docs
|
|||
echo "Installing $(BUILD)/wmbusmeters"
|
||||
@./install.sh $(BUILD)/wmbusmeters $(DESTDIR) $(EXTRA_INSTALL_OPTIONS)
|
||||
|
||||
# Uninstall binaries and manpages. But keep configuration data and wmbusmeters user/group.
|
||||
uninstall:
|
||||
@./uninstall.sh /
|
||||
|
||||
# Uninstall everything including configuration and wmbusmeters user/group.
|
||||
uninstall_purge:
|
||||
@./uninstall.sh / --purge
|
||||
|
||||
snapcraft:
|
||||
snapcraft
|
||||
|
||||
|
@ -253,15 +280,6 @@ $(BUILD)/wmbusmeters: $(BUILD)/wmbusmeters.g
|
|||
$(BUILD)/wmbusmetersd: $(BUILD)/wmbusmeters
|
||||
cp $(BUILD)/wmbusmeters $(BUILD)/wmbusmetersd
|
||||
|
||||
ifeq ($(shell uname -s),Darwin)
|
||||
$(BUILD)/wmbusmeters-admin:
|
||||
touch $(BUILD)/wmbusmeters-admin
|
||||
else
|
||||
$(BUILD)/wmbusmeters-admin: $(PROG_OBJS) $(DRIVER_OBJS) $(BUILD)/admin.o $(BUILD)/ui.o $(BUILD)/short_manual.h
|
||||
$(CXX) -o $(BUILD)/wmbusmeters-admin $(PROG_OBJS) $(DRIVER_OBJS) $(BUILD)/admin.o $(BUILD)/ui.o $(LDFLAGS) -lmenu -lform -lncurses -lrtlsdr $(USBLIB) -lpthread
|
||||
$(STRIP_ADMIN)
|
||||
endif
|
||||
|
||||
$(BUILD)/short_manual.h: README.md
|
||||
echo 'R"MANUAL(' > $(BUILD)/short_manual.h
|
||||
sed -n '/wmbusmeters version/,/```/p' README.md \
|
||||
|
|
|
@ -954,10 +954,7 @@ if this hangs, then do `sudo killall -9 wmbusmetersd` and/or `sudo killall -9 wm
|
|||
|
||||
Wmbusmeters expects the serial baud rate for the AMB8465 USB stick to be 9600 8n1.
|
||||
If you have used another tool and changed the baud rate to something else
|
||||
you need to restore the baud rate to 9600 8n1. You can do that with that other tool,
|
||||
or you can try wmbusmeters-admin and select `Reset wmbus receives`
|
||||
this command try all potential baud rates and send the factory reset command.
|
||||
Then you have to unplug and reinsert the dongle.
|
||||
you need to restore the baud rate to 9600 8n1.
|
||||
|
||||
If you like to send the bytes manually, the correct bytes are:
|
||||
|
||||
|
|
Plik diff jest za duży
Load Diff
|
@ -54,14 +54,6 @@ AC_CHECK_LIB(rtlsdr, rtlsdr_get_device_count, [],
|
|||
AC_MSG_ERROR([Could not find rtlsdr library. Try: sudo apt install librtlsdr-dev])
|
||||
])
|
||||
|
||||
AX_WITH_CURSES
|
||||
|
||||
if test ! "$ax_cv_curses" = "yes"
|
||||
then
|
||||
echo "Could not find ncurses library. Try: sudo apt install libncurses-dev"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
AC_CONFIG_FILES([$OUTPUT_ROOT/spec.gmk:$SRC_ROOT/autoconf/spec.gmk.in])
|
||||
AC_CONFIG_FILES([$OUTPUT_ROOT/Makefile:$SRC_ROOT/autoconf/Makefile.in])
|
||||
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
# Copyright (C) 2021-2022 Fredrik Öhrström (gpl-3.0-or-later)
|
||||
# Copyright (C) 2021-2023 Fredrik Öhrström (gpl-3.0-or-later)
|
||||
|
||||
rm -f "$ROOT"/usr/bin/wmbusmeters "$ROOT"/usr/sbin/wmbusmetersd "$ROOT"/usr/bin/wmbusmeters-admin
|
||||
rm -f "$ROOT"/usr/bin/wmbusmeters "$ROOT"/usr/sbin/wmbusmetersd
|
||||
mkdir -p "$ROOT"/usr/bin
|
||||
mkdir -p "$ROOT"/usr/sbin
|
||||
cp "$SRC" "$ROOT"/usr/bin/wmbusmeters
|
||||
cp "${SRC}-admin" "$ROOT"/usr/bin/wmbusmeters-admin
|
||||
|
||||
(cd "$ROOT"/usr/sbin; ln -s ../bin/wmbusmeters wmbusmetersd)
|
||||
|
||||
echo "binaries: installed $ROOT/usr/bin/wmbusmeters $ROOT/usr/sbin/wmbusmetersd $ROOT/usr/bin/wmbusmeters-admin"
|
||||
echo "binaries: installed $ROOT/usr/bin/wmbusmeters $ROOT/usr/sbin/wmbusmetersd"
|
||||
|
|
|
@ -14,11 +14,21 @@ then
|
|||
loglevel=normal
|
||||
# Remember to change auto here to the device you are going to use in production.
|
||||
device=auto:t1
|
||||
logfile=/var/log/wmbusmeters/wmbusmeters.log
|
||||
# Set to true to capture all received telegrams in log file.
|
||||
logtelegrams=false
|
||||
format=json
|
||||
meterfiles=/var/lib/wmbusmeters/meter_readings
|
||||
meterfilesaction=overwrite
|
||||
logfile=/var/log/wmbusmeters/wmbusmeters.log
|
||||
# Enable the meterfiles to write telegrams to disk.
|
||||
#meterfiles=/var/lib/wmbusmeters/meter_readings
|
||||
#meterfilesaction=overwrite
|
||||
# Enable execution of a shell command for each received telegram. For example: curl or mqtt
|
||||
#shell=/usr/bin/mosquitto_pub -h localhost -t wmbusmeters/$METER_ID -m "$METER_JSON"
|
||||
#shell=psql water -c "insert into consumption values ('$METER_ID',$METER_TOTAL_M3,'$METER_TIMESTAMP') "
|
||||
# The alarmshell is executed when a problem with the receiving radio hardware is detected.
|
||||
#alarmshell=/usr/bin/mosquitto_pub -h localhost -t wmbusmeters_alarm -m "$ALARM_TYPE $ALARM_MESSAGE"
|
||||
# The alarmtimeout and expected activity is also used to detect failing receiving radio hardware.
|
||||
#alarmtimeout=1h
|
||||
#alarmexpectedactivity=mon-sun(00-23)
|
||||
EOF
|
||||
chmod 644 "$ROOT"/etc/wmbusmeters.conf
|
||||
echo "conf file: created $ROOT/etc/wmbusmeters.conf"
|
||||
|
|
466
src/admin.cc
466
src/admin.cc
|
@ -1,466 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2017-2022 Fredrik Öhrström (gpl-3.0-or-later)
|
||||
|
||||
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/>.
|
||||
*/
|
||||
|
||||
#include<string.h>
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
#include<syslog.h>
|
||||
#include<time.h>
|
||||
|
||||
#include"serial.h"
|
||||
#include"shell.h"
|
||||
#include"ui.h"
|
||||
#include"util.h"
|
||||
#include"wmbus.h"
|
||||
|
||||
bool running_as_root_ = false;
|
||||
bool member_of_dialout_ = false;
|
||||
|
||||
#define LIST_OF_MAIN_MENU \
|
||||
X(DETECT_WMBUS_RECEIVERS, "Detect wmbus receiver") \
|
||||
X(RESET_WMBUS_RECEIVERS, "Reset wmbus receiver") \
|
||||
X(LISTEN_FOR_METERS, "Listen for meters") \
|
||||
X(EDIT_CONFIG, "Edit config") \
|
||||
X(EDIT_METERS, "Edit meters") \
|
||||
X(STOP_DAEMON, "Stop daemon") \
|
||||
X(START_DAEMON, "Start daemon") \
|
||||
X(EXIT_ADMIN, "Exit")
|
||||
|
||||
enum class MainMenuType {
|
||||
#define X(name,description) name,
|
||||
LIST_OF_MAIN_MENU
|
||||
#undef X
|
||||
};
|
||||
|
||||
const char *main_menu[] = {
|
||||
#define X(name,description) description,
|
||||
LIST_OF_MAIN_MENU
|
||||
#undef X
|
||||
(char *)NULL,
|
||||
};
|
||||
|
||||
#define LIST_OF_WMBUS_RECEIVERS \
|
||||
X(AMB8465, "amb8465") \
|
||||
X(CUL, "cul") \
|
||||
X(IM871A, "im871a") \
|
||||
X(RC1180, "rc1180") \
|
||||
X(IU880B, "iu880b")
|
||||
|
||||
enum class ReceiversType {
|
||||
#define X(name,description) name,
|
||||
LIST_OF_WMBUS_RECEIVERS
|
||||
#undef X
|
||||
};
|
||||
|
||||
const char *receivers_menu[] = {
|
||||
#define X(name,description) description,
|
||||
LIST_OF_WMBUS_RECEIVERS
|
||||
#undef X
|
||||
(char *)NULL,
|
||||
};
|
||||
|
||||
bool detectIfRoot();
|
||||
string userName();
|
||||
bool detectIfMemberOfGroup(string group);
|
||||
void detectWMBUSReceiver();
|
||||
void resetWMBUSReceiver();
|
||||
void probeFor(string type, AccessCheck(*func)(Detected*,shared_ptr<SerialCommunicationManager>));
|
||||
|
||||
void stopDaemon();
|
||||
void startDaemon();
|
||||
|
||||
shared_ptr<SerialCommunicationManager> handler;
|
||||
|
||||
WINDOW *status_window;
|
||||
WINDOW *serial_ports_window;
|
||||
WINDOW *processes_window;
|
||||
|
||||
void alwaysOnScreen();
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
if (argc == 2 && (!strcmp(argv[1], "--debug") || !strcmp(argv[1], "--trace")))
|
||||
{
|
||||
if (!strcmp(argv[1], "--trace")) traceEnabled(true); else debugEnabled(true);
|
||||
setlogmask(LOG_UPTO (LOG_INFO));
|
||||
openlog("wmbusmeters-admin", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
|
||||
enableSyslog();
|
||||
}
|
||||
|
||||
// Handle exit on signals...
|
||||
onExit(exitUI);
|
||||
|
||||
initUI();
|
||||
clear();
|
||||
|
||||
/*
|
||||
refresh();
|
||||
int x=0;
|
||||
int y=0;
|
||||
for (int i=0;i<10; ++i) {
|
||||
printAt(stdscr, y, x, "HEJSAN", COLOR_PAIR(BG_PAIR));
|
||||
y++;
|
||||
x++;
|
||||
};
|
||||
refresh();
|
||||
for(;;) {}
|
||||
endwin();
|
||||
return 0;
|
||||
*/
|
||||
running_as_root_ = detectIfRoot();
|
||||
member_of_dialout_ = detectIfMemberOfGroup("dialout");
|
||||
|
||||
handler = createSerialCommunicationManager(0, 0);
|
||||
|
||||
initUI();
|
||||
|
||||
bool running = true;
|
||||
|
||||
registerUpdateCB(alwaysOnScreen);
|
||||
alwaysOnScreen();
|
||||
|
||||
do
|
||||
{
|
||||
int c = selectFromMenu("wmbusmeters admin", main_menu);
|
||||
|
||||
switch (static_cast<MainMenuType>(c))
|
||||
{
|
||||
case MainMenuType::DETECT_WMBUS_RECEIVERS:
|
||||
detectWMBUSReceiver();
|
||||
break;
|
||||
case MainMenuType::RESET_WMBUS_RECEIVERS:
|
||||
resetWMBUSReceiver();
|
||||
break;
|
||||
case MainMenuType::LISTEN_FOR_METERS:
|
||||
notImplementedYet("Listen for meters");
|
||||
break;
|
||||
case MainMenuType::EDIT_CONFIG:
|
||||
notImplementedYet("Edit config");
|
||||
break;
|
||||
case MainMenuType::EDIT_METERS:
|
||||
notImplementedYet("Edit meters");
|
||||
break;
|
||||
case MainMenuType::STOP_DAEMON:
|
||||
stopDaemon();
|
||||
break;
|
||||
case MainMenuType::START_DAEMON:
|
||||
startDaemon();
|
||||
break;
|
||||
case MainMenuType::EXIT_ADMIN:
|
||||
running = false;
|
||||
break;
|
||||
}
|
||||
} while (running);
|
||||
|
||||
exitUI();
|
||||
}
|
||||
|
||||
void alwaysOnScreen()
|
||||
{
|
||||
vector<string> info;
|
||||
|
||||
if (member_of_dialout_ == false)
|
||||
{
|
||||
info.push_back("Not member of dialout!");
|
||||
}
|
||||
|
||||
vector<int> daemons;
|
||||
detectProcesses("wmbusmetersd", &daemons);
|
||||
if (daemons.size() == 0)
|
||||
{
|
||||
info.push_back("No daemons running.");
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i : daemons)
|
||||
{
|
||||
info.push_back("Daemon "+to_string(i));
|
||||
}
|
||||
}
|
||||
|
||||
vector<int> processes;
|
||||
detectProcesses("wmbusmeters", &processes);
|
||||
|
||||
if (processes.size() == 0)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i : processes)
|
||||
{
|
||||
info.push_back("Process "+to_string(i));
|
||||
}
|
||||
}
|
||||
|
||||
vector<string> status;
|
||||
time_t now = time(NULL);
|
||||
struct tm nowt {};
|
||||
localtime_r(&now, &nowt);
|
||||
status.push_back("wmbusmeters-admin");
|
||||
status.push_back(strdatetimesec(&nowt));
|
||||
string name = "["+userName()+"]";
|
||||
status.push_back(name);
|
||||
displayStatusLineNoWait(&status_window, status, 0, 0);
|
||||
|
||||
displayInformationNoWait(&status_window, "Problems", info, 2, 2);
|
||||
|
||||
vector<string> devices = handler->listSerialTTYs();
|
||||
if (devices.size() == 0)
|
||||
{
|
||||
devices.push_back("No serial ports found!");
|
||||
}
|
||||
//info.insert(info.end(), devices.begin(), devices.end());
|
||||
|
||||
displayInformationNoWait(&serial_ports_window, "Serial ports", devices, 1, 15);
|
||||
|
||||
erase();
|
||||
wrefresh(status_window);
|
||||
wrefresh(serial_ports_window);
|
||||
}
|
||||
|
||||
void detectWMBUSReceiver()
|
||||
{
|
||||
int c = selectFromMenu("Select your wmbus radio device", receivers_menu);
|
||||
switch (static_cast<ReceiversType>(c))
|
||||
{
|
||||
/* case ReceiversType::AMB3665:
|
||||
probeFor("amb3665", detectAMB3665);
|
||||
break;*/
|
||||
case ReceiversType::AMB8465:
|
||||
probeFor("amb8465/amb3665", detectAMB8465AMB3665);
|
||||
break;
|
||||
case ReceiversType::CUL:
|
||||
probeFor("cul", detectCUL);
|
||||
break;
|
||||
case ReceiversType::IM871A:
|
||||
probeFor("im871a/im170a", detectIM871AIM170A);
|
||||
break;
|
||||
case ReceiversType::IU880B:
|
||||
probeFor("iu880b", detectIU880B);
|
||||
break;
|
||||
case ReceiversType::RC1180:
|
||||
probeFor("rc1180", detectRC1180);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void resetWMBUSReceiver()
|
||||
{
|
||||
int c = selectFromMenu("Select your wmbus radio device", receivers_menu);
|
||||
switch (static_cast<ReceiversType>(c))
|
||||
{
|
||||
/*
|
||||
case ReceiversType::AMB3665:
|
||||
{
|
||||
vector<string> devices = handler->listSerialTTYs();
|
||||
if (devices.size() == 0)
|
||||
{
|
||||
vector<string> entries;
|
||||
displayInformationAndWait("No serial ports!", entries);
|
||||
return;
|
||||
}
|
||||
int c = selectFromMenu("Select device", devices);
|
||||
string device = devices[c];
|
||||
int was_baud = 0;
|
||||
AccessCheck ac = factoryResetAMB3665(device, handler, &was_baud);
|
||||
if (ac == AccessCheck::AccessOK)
|
||||
{
|
||||
vector<string> entries;
|
||||
entries.push_back("amb3665 "+device+" using "+to_string(was_baud));
|
||||
displayInformationAndWait("Factory reset successful", entries);
|
||||
}
|
||||
else
|
||||
{
|
||||
vector<string> entries;
|
||||
entries.push_back(device);
|
||||
displayInformationAndWait("No amb3665 response from", entries);
|
||||
}
|
||||
break;
|
||||
}*/
|
||||
case ReceiversType::AMB8465:
|
||||
{
|
||||
vector<string> devices = handler->listSerialTTYs();
|
||||
if (devices.size() == 0)
|
||||
{
|
||||
vector<string> entries;
|
||||
displayInformationAndWait("No serial ports!", entries);
|
||||
return;
|
||||
}
|
||||
int c = selectFromMenu("Select device", devices);
|
||||
string device = devices[c];
|
||||
int was_baud = 0;
|
||||
AccessCheck ac = factoryResetAMB8465(device, handler, &was_baud);
|
||||
if (ac == AccessCheck::AccessOK)
|
||||
{
|
||||
vector<string> entries;
|
||||
entries.push_back("amb8465 "+device+" using "+to_string(was_baud));
|
||||
displayInformationAndWait("Factory reset successful", entries);
|
||||
}
|
||||
else
|
||||
{
|
||||
vector<string> entries;
|
||||
entries.push_back(device);
|
||||
displayInformationAndWait("No amb8465 response from", entries);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ReceiversType::CUL:
|
||||
notImplementedYet("Resetting cul");
|
||||
break;
|
||||
case ReceiversType::IM871A:
|
||||
notImplementedYet("Resetting im871a");
|
||||
break;
|
||||
case ReceiversType::RC1180:
|
||||
notImplementedYet("Resetting RC1180");
|
||||
break;
|
||||
case ReceiversType::IU880B:
|
||||
notImplementedYet("Resetting IU880B");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void probeFor(string type, AccessCheck (*probe)(Detected*,shared_ptr<SerialCommunicationManager>))
|
||||
{
|
||||
Detected detected {};
|
||||
vector<string> devices = handler->listSerialTTYs();
|
||||
vector<string> entries;
|
||||
for (string& device : devices)
|
||||
{
|
||||
string tty = "?";
|
||||
AccessCheck ac = handler->checkAccess(device,
|
||||
handler,
|
||||
type,
|
||||
[&](string d, shared_ptr<SerialCommunicationManager> m){
|
||||
detected.found_file=d;
|
||||
detected.specified_device.file=d; return probe(&detected, m);});
|
||||
|
||||
if (ac == AccessCheck::AccessOK)
|
||||
{
|
||||
tty = device+" DETECTED "+type;
|
||||
}
|
||||
else if (ac == AccessCheck::NoSuchDevice)
|
||||
{
|
||||
tty = device+" no such device";
|
||||
}
|
||||
else if (ac == AccessCheck::NoProperResponse)
|
||||
{
|
||||
tty = device+" no response";
|
||||
}
|
||||
else if (ac == AccessCheck::NotSameGroup)
|
||||
{
|
||||
tty = device+" not same group";
|
||||
}
|
||||
else if (ac == AccessCheck::NoPermission)
|
||||
{
|
||||
tty = device+" same group but wrong permissions";
|
||||
}
|
||||
entries.push_back(tty);
|
||||
}
|
||||
if (entries.size() == 0)
|
||||
{
|
||||
entries.push_back("No serial devices found.");
|
||||
}
|
||||
displayInformationAndWait("Probed serial devices", entries);
|
||||
}
|
||||
|
||||
bool detectIfRoot()
|
||||
{
|
||||
vector<string> args;
|
||||
vector<string> envs;
|
||||
args.push_back("-u");
|
||||
string out;
|
||||
invokeShellCaptureOutput("/usr/bin/id", args, envs, &out, true);
|
||||
|
||||
return out == "0\n";
|
||||
}
|
||||
|
||||
string userName()
|
||||
{
|
||||
vector<string> args;
|
||||
vector<string> envs;
|
||||
args.push_back("-u");
|
||||
args.push_back("-n");
|
||||
string out;
|
||||
invokeShellCaptureOutput("/usr/bin/id", args, envs, &out, true);
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
bool detectIfMemberOfGroup(string group)
|
||||
{
|
||||
vector<string> args;
|
||||
vector<string> envs;
|
||||
string out;
|
||||
invokeShellCaptureOutput("/usr/bin/groups", args, envs, &out, true);
|
||||
|
||||
out = out+" "; // Guarantee that the line ends with space.
|
||||
|
||||
size_t p = out.find(group+" ");
|
||||
if (p == 0) return true;
|
||||
|
||||
p = out.find(" "+group+" ");
|
||||
if (p != string::npos) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void stopDaemon()
|
||||
{
|
||||
vector<string> info;
|
||||
info.push_back("Enter sudo password to execute:");
|
||||
info.push_back("systemctl stop wmbusmeters");
|
||||
|
||||
debug("(passowrd) calling inputfield\n");
|
||||
string pwd = inputField("Stop daemon", info, "Password");
|
||||
debug("(passowrd) GOT %s\n", pwd.c_str());
|
||||
//string pwd = displayInformationAndInput("Stop daemon", info, 1, 1);
|
||||
//vector<string> args;
|
||||
//vector<string> envs;
|
||||
//args.push_back("gurka");
|
||||
// string out;
|
||||
// invokeShellCaptureOutput("systemctl stop wmbusmeters", args, envs, &out, true);
|
||||
}
|
||||
|
||||
void startDaemon()
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
static char* trim_whitespaces(char *str)
|
||||
{
|
||||
char *end;
|
||||
|
||||
// trim leading space
|
||||
while(isspace(*str))
|
||||
str++;
|
||||
|
||||
if(*str == 0) // all spaces?
|
||||
return str;
|
||||
|
||||
// trim trailing space
|
||||
end = str + strnlen(str, 128) - 1;
|
||||
|
||||
while(end > str && isspace(*end))
|
||||
end--;
|
||||
|
||||
// write new null terminator
|
||||
*(end+1) = '\0';
|
||||
|
||||
return str;
|
||||
}
|
||||
*/
|
85
uninstall.sh
85
uninstall.sh
|
@ -2,12 +2,63 @@
|
|||
|
||||
if [ ! -d "$1" ]
|
||||
then
|
||||
echo Oups, please supply a valid root directory.
|
||||
echo Usage: uninstall.sh [root_dir] [--purge]
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ROOT="${1%/}"
|
||||
|
||||
if [ "$2" = "--purge" ]
|
||||
then
|
||||
echo Removing config files.
|
||||
if [ -f "$ROOT"/etc/wmbusmeters.conf ]
|
||||
then
|
||||
rm "$ROOT"/etc/wmbusmeters.conf
|
||||
echo conf file: removed "$ROOT"/etc/wmbusmeters.conf
|
||||
fi
|
||||
|
||||
if [ -d "$ROOT"/etc/wmbusmeters.d ]
|
||||
then
|
||||
rm -rf "$ROOT"/etc/wmbusmeters.d
|
||||
echo conf dir: removed "$ROOT"/etc/wmbusmeters.d
|
||||
fi
|
||||
|
||||
if [ -d "$ROOT"/var/log/wmbusmeters/ ]
|
||||
then
|
||||
rm -rf "$ROOT"/var/log/wmbusmeters/
|
||||
echo log dir: removed "$ROOT"/var/log/wmbusmeters/
|
||||
fi
|
||||
|
||||
ID=$(id -u wmbusmeters 2>/dev/null)
|
||||
|
||||
if [ ! "$ID" = "" ]
|
||||
then
|
||||
userdel wmbusmeters
|
||||
echo "user: removed wmbusmeters"
|
||||
fi
|
||||
|
||||
if [ $(getent group wmbusmeters) ]
|
||||
then
|
||||
groupdel wmbusmeters
|
||||
echo "group: removed wmbusmeters"
|
||||
fi
|
||||
else
|
||||
echo "The option --purge was not supplied."
|
||||
echo "Not removing: $ROOT/etc/wmbusmeters.conf"
|
||||
echo "Not removing: $ROOT/etc/wmbusmeters.d"
|
||||
ID=$(id -u wmbusmeters 2>/dev/null)
|
||||
|
||||
if [ ! "$ID" = "" ]
|
||||
then
|
||||
echo "Not removing user: wmbusmeters"
|
||||
fi
|
||||
|
||||
if [ $(getent group wmbusmeters) ]
|
||||
then
|
||||
echo "Not removing group: wmbusmeters"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -x "$ROOT"/usr/bin/wmbusmeters ] || [ -x "$ROOT"/usr/sbin/wmbusmeters ]
|
||||
then
|
||||
rm -f "$ROOT"/usr/bin/wmbusmeters "$ROOT"/usr/sbin/wmbusmetersd
|
||||
|
@ -20,46 +71,14 @@ then
|
|||
echo man page: removed "$ROOT"/usr/share/man/man1/wmbusmeters.1.gz
|
||||
fi
|
||||
|
||||
ID=$(id -u wmbusmeters 2>/dev/null)
|
||||
|
||||
if [ ! "$ID" = "" ]
|
||||
then
|
||||
userdel wmbusmeters
|
||||
echo user: removed wmbusmeters
|
||||
fi
|
||||
|
||||
if [ -d "$ROOT"/var/log/wmbusmeters/ ]
|
||||
then
|
||||
rm -rf "$ROOT"/var/log/wmbusmeters/
|
||||
echo log dir: removed "$ROOT"/var/log/wmbusmeters/
|
||||
fi
|
||||
|
||||
if [ -f "$ROOT"/etc/logrotate.d/wmbusmeters ]
|
||||
then
|
||||
rm "$ROOT"/etc/logrotate.d/wmbusmeters
|
||||
echo logrotate file: removed "$ROOT"/etc/logrotate.d/wmbusmeters
|
||||
fi
|
||||
|
||||
if [ -f "$ROOT"/etc/wmbusmeters.conf ]
|
||||
then
|
||||
rm "$ROOT"/etc/wmbusmeters.conf
|
||||
echo conf file: removed "$ROOT"/etc/wmbusmeters.conf
|
||||
fi
|
||||
|
||||
if [ -d "$ROOT"/etc/wmbusmeters.d ]
|
||||
then
|
||||
rm -rf "$ROOT"/etc/wmbusmeters.d
|
||||
echo conf dir: removed "$ROOT"/etc/wmbusmeters.d
|
||||
fi
|
||||
|
||||
if [ -f "$ROOT"/lib/systemd/system/wmbusmeters.service ]
|
||||
then
|
||||
rm "$ROOT"/lib/systemd/system/wmbusmeters.service
|
||||
echo systemd: removed "$ROOT"/lib/systemd/system/wmbusmeters.service
|
||||
fi
|
||||
|
||||
if [ -f "$ROOT"/etc/udev/rules.d/99-wmbus-usb-serial.rules ]
|
||||
then
|
||||
rm "$ROOT"/etc/udev/rules.d/99-wmbus-usb-serial.rules
|
||||
echo udev: removed "$ROOT"/etc/udev/rules.d/99-wmbus-usb-serial.rules
|
||||
fi
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
.TH WMBUSMETERS 1
|
||||
.SH NAME
|
||||
wmbusmeters-admin \- Interactively configure devices and meters for wireless mbus and wired mbus.
|
||||
|
||||
.SH SYNOPSIS
|
||||
.B wmbusmeters-admin {options}
|
||||
|
||||
.SH DESCRIPTION
|
||||
|
||||
Wmbusmeters-admin is used to configure and test wmbus devices.
|
||||
|
||||
.SH OPTIONS
|
||||
\fB\--debug\fR for a lot of information
|
||||
|
||||
\fB\--verbose\fR for more information
|
||||
|
||||
\fB\--version\fR print version
|
||||
|
||||
.SH AUTHOR
|
||||
Written by Fredrik Öhrström.
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright \(co 2017-2022 Fredrik Öhrström.
|
||||
.br
|
||||
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
|
||||
.br
|
||||
This is free software: you are free to change and redistribute it.
|
||||
.br
|
||||
There is NO WARRANTY, to the extent permitted by law.
|
Ładowanie…
Reference in New Issue