Skip to content

Commit 7a3464a

Browse files
authored
Merge pull request #108 from norkator/nut_ups_stats
NUT UPS status parsing tweaks
2 parents 13996c7 + 4245a29 commit 7a3464a

File tree

5 files changed

+120
-44
lines changed

5 files changed

+120
-44
lines changed

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ android {
1010
minSdkVersion 22
1111
targetSdkVersion 31
1212

13-
versionCode 54
14-
versionName "1.20.1" // Use Semver
13+
versionCode 55
14+
versionName "1.20.2" // Use Semver
1515
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1616
}
1717
buildTypes {

app/src/main/java/com/nitramite/apcupsdmonitor/ConnectorTask.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public class ConnectorTask {
4343
private ArrayList<UPS> upsArrayList = new ArrayList<>();
4444
private Integer completed = 0;
4545
private final TaskMode taskMode; // Activity or service task, on service skip getting events
46+
private Context context;
4647

4748
// Interface
4849
private final ConnectorInterface apcupsdInterface;
@@ -57,6 +58,7 @@ public class ConnectorTask {
5758
(upsId == null ? "all ups statuses" : "one ups status"));
5859
taskMode = taskMode_;
5960
databaseHelper = new DatabaseHelper(context);
61+
context = context;
6062
this.apcupsdInterface = apcupsdInterface;
6163
this.doInBackground(upsId);
6264
}
@@ -191,11 +193,14 @@ ups.UPS_SERVER_ADDRESS, portStringToInteger(ups.UPS_SERVER_PORT),
191193
try {
192194
String[] nutFQDN = ups.UPS_SERVER_ADDRESS.split("@");
193195
Socket socket = connectSocketServer(nutFQDN[1], portStringToInteger(ups.UPS_SERVER_PORT));
196+
// Socket socket = null;
194197
getUPSStatusNUT(writablePool, socket, ups, nutFQDN[0]);
195198
} catch (IOError e) {
196199
apcupsdInterface.onCommandError(e.toString());
197200
} catch (IOException e) {
198201
onConnectionError(writablePool, ups.UPS_ID);
202+
} catch (ArrayIndexOutOfBoundsException e) {
203+
apcupsdInterface.onCommandError(context.getString(R.string.nut_fqdn_error) + e.toString());
199204
}
200205
break;
201206
default:
@@ -420,16 +425,24 @@ private void getUPSStatusNUT(
420425
) {
421426
try {
422427
StringBuilder stringBuilder = new StringBuilder();
428+
// if (socket != null) {
423429
DataOutputStream dOut = new DataOutputStream(socket.getOutputStream());
424430

425431
dOut.writeBytes("LIST VAR " + nutUpsName + "\n");
432+
// }
426433

427-
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8));
434+
BufferedReader in = new BufferedReader(new InputStreamReader(
435+
socket.getInputStream(), StandardCharsets.UTF_8)
436+
// Mock.NutUpsMockData(), StandardCharsets.UTF_8)
437+
);
428438

429439
String line = null;
430440
while ((line = in.readLine()) != null) {
431-
String line_ = line.replace("VAR " + nutUpsName + " ", "");
432-
stringBuilder.append(line_);
441+
String line_ = line
442+
.replace("VAR " + nutUpsName + " ", "")
443+
.replace(" \"", ": ")
444+
.replace("\"", "");
445+
stringBuilder.append(line_).append("\n");;
433446
Log.i(TAG, line_);
434447
if (line.contains("END LIST VAR")) {
435448
break;

app/src/main/java/com/nitramite/apcupsdmonitor/Mock.java

Lines changed: 100 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -54,44 +54,44 @@ public class Mock {
5454
"END APC : 2021-02-16 19:18:32 +0100\n";
5555
public static final String NUT_MOCK_DATA =
5656
"battery.charge: 100\n" +
57-
"battery.charge.low: 10\n" +
58-
"battery.charge.warning: 20\n" +
59-
"battery.mfr.date: CPS\n" +
60-
"battery.runtime: 1620\n" +
61-
"battery.runtime.low: 300\n" +
62-
"battery.type: PbAcid\n" +
63-
"battery.voltage: 16.0\n" +
64-
"battery.voltage.nominal: 24\n" +
65-
"device.mfr: CPS\n" +
66-
"device.model: CP900EPFCLCD\n" +
67-
"device.serial: 000000000000\n" +
68-
"device.type: ups\n" +
69-
"driver.name: usbhid-ups\n" +
70-
"driver.parameter.pollfreq: 30\n" +
71-
"driver.parameter.pollinterval: 5\n" +
72-
"driver.parameter.port: auto\n" +
73-
"driver.version: DSM6-2-25364-191230\n" +
74-
"driver.version.data: CyberPower HID 0.3\n" +
75-
"driver.version.internal: 0.38\n" +
76-
"input.transfer.high: 260\n" +
77-
"input.transfer.low: 170\n" +
78-
"input.voltage: 228.0\n" +
79-
"input.voltage.nominal: 230\n" +
80-
"output.voltage: 260.0\n" +
81-
"ups.beeper.status: enabled\n" +
82-
"ups.delay.shutdown: 20\n" +
83-
"ups.delay.start: 30\n" +
84-
"ups.load: 24\n" +
85-
"ups.mfr: CPS\n" +
86-
"ups.model: CP900EPFCLCD\n" +
87-
"ups.productid: 0501\n" +
88-
"ups.realpower.nominal: 540\n" +
89-
"ups.serial: 000000000000\n" +
90-
"ups.status: OL\n" +
91-
"ups.test.result: No test initiated\n" +
92-
"ups.timer.shutdown: -60\n" +
93-
"ups.timer.start: -60\n" +
94-
"ups.vendorid: 0764\n";
57+
"battery.charge.low: 10\n" +
58+
"battery.charge.warning: 20\n" +
59+
"battery.mfr.date: CPS\n" +
60+
"battery.runtime: 1620\n" +
61+
"battery.runtime.low: 300\n" +
62+
"battery.type: PbAcid\n" +
63+
"battery.voltage: 16.0\n" +
64+
"battery.voltage.nominal: 24\n" +
65+
"device.mfr: CPS\n" +
66+
"device.model: CP900EPFCLCD\n" +
67+
"device.serial: 000000000000\n" +
68+
"device.type: ups\n" +
69+
"driver.name: usbhid-ups\n" +
70+
"driver.parameter.pollfreq: 30\n" +
71+
"driver.parameter.pollinterval: 5\n" +
72+
"driver.parameter.port: auto\n" +
73+
"driver.version: DSM6-2-25364-191230\n" +
74+
"driver.version.data: CyberPower HID 0.3\n" +
75+
"driver.version.internal: 0.38\n" +
76+
"input.transfer.high: 260\n" +
77+
"input.transfer.low: 170\n" +
78+
"input.voltage: 228.0\n" +
79+
"input.voltage.nominal: 230\n" +
80+
"output.voltage: 260.0\n" +
81+
"ups.beeper.status: enabled\n" +
82+
"ups.delay.shutdown: 20\n" +
83+
"ups.delay.start: 30\n" +
84+
"ups.load: 24\n" +
85+
"ups.mfr: CPS\n" +
86+
"ups.model: CP900EPFCLCD\n" +
87+
"ups.productid: 0501\n" +
88+
"ups.realpower.nominal: 540\n" +
89+
"ups.serial: 000000000000\n" +
90+
"ups.status: OL\n" +
91+
"ups.test.result: No test initiated\n" +
92+
"ups.timer.shutdown: -60\n" +
93+
"ups.timer.start: -60\n" +
94+
"ups.vendorid: 0764\n";
9595
public static final String APC_NMC_MOCK_DATA = "E000: Success\n" +
9696
"Status of UPS: On Line, No Alarms Present\n" +
9797
"Last Transfer: Due to software command or UPS's test control\n" +
@@ -189,6 +189,7 @@ public class Mock {
189189
"Calibration Result: Unknown\n" +
190190
"Calibration Date: Unknown";
191191

192+
192193
/**
193194
* APCUPSD Mock data
194195
*/
@@ -259,4 +260,65 @@ public static InputStream APCNetworkCardMockDataAP9630() {
259260
}
260261

261262

263+
private static final String NUT_UPS_MOCK_DATA = "BEGIN LIST VAR" +
264+
"eatonbattery.charge \"11\"\n" +
265+
"battery.charge.low \"35\"\n" +
266+
"battery.runtime \"215\"\n" +
267+
"battery.type \"PbAc\"\n" +
268+
"device.mfr \"EATON\"\n" +
269+
"device.model \"Ellipse ECO 650\"\n" +
270+
"device.serial \"000000000\"\n" +
271+
"device.type \"ups\"\n" +
272+
"driver.name \"usbhid-ups\"\n" +
273+
"driver.parameter.pollfreq \"30\"\n" +
274+
"driver.parameter.pollinterval \"2\"\n" +
275+
"driver.parameter.port \"/dev/uhid\"\n" +
276+
"driver.parameter.synchronous \"no\"\n" +
277+
"driver.version \"2.7.4\"\n" +
278+
"driver.version.data \"MGE HID 1.40\"\n" +
279+
"driver.version.internal \"0.41\"\n" +
280+
"input.transfer.high \"264\"\n" +
281+
"input.transfer.low \"184\"\n" +
282+
"outlet.1.desc \"PowerShare Outlet 1\"\n" +
283+
"outlet.1.\n" +
284+
"id \"2\"\n" +
285+
"outlet.1.\n" +
286+
"status \"on\"\n" +
287+
"outlet.1.\n" +
288+
"switchable \"no\"\n" +
289+
"outlet.2.\n" +
290+
"desc \"PowerShare Outlet 2\"\n" +
291+
"outlet.2.id \"3\"\n" +
292+
"outlet.2.\n" +
293+
"status \"on\"\n" +
294+
"outlet.2.\n" +
295+
"switchable \"no\"\n" +
296+
"outlet.desc \"Main Outlet\"\n" +
297+
"outlet.id \"1\"\n" +
298+
"outlet.power \"25\"\n" +
299+
"outlet.switchable \"no\"\n" +
300+
"output.frequency.nominal \"50\"\n" +
301+
"output.voltage \"230.0\"\n" +
302+
"output.voltage.nominal \"230\"\n" +
303+
"ups.beeper.status \"enabled\"\n" +
304+
"ups.delay.shutdown \"20\"\n" +
305+
"ups.delay.start \"30\"\n" +
306+
"ups.firmware \"02\"\n" +
307+
"ups.load \"8\"\n" +
308+
"ups.mfr \"EATON\"\n" +
309+
"ups.model \"Ellipse ECO 650\"\n" +
310+
"ups.power.nominal \"650\"\n" +
311+
"ups.productid \"ffff\"\n" +
312+
"ups.serial \"000000000\"\n" +
313+
"ups.status \"OL\"\n" +
314+
"ups.timer.shutdown \"0\"\n" +
315+
"ups.timer.start \"0\"\n" +
316+
"ups.vendorid \"0463\"\n" +
317+
"END LIST VAR eaton";
318+
319+
public static InputStream NutUpsMockData() {
320+
return new ByteArrayInputStream(NUT_UPS_MOCK_DATA.getBytes(StandardCharsets.UTF_8));
321+
}
322+
323+
262324
}

app/src/main/res/values-ru/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
<string name="app_name">APCUPSD Monitor</string>
66

77
<!-- Generic -->
8-
98
<string name="stats">Статистика</string>
109
<string name="loading">ЗАГРУЗКА</string>
1110
<string name="error">ошибка</string>
@@ -203,5 +202,6 @@
203202
<string name="continue_btn">Продолжать</string>
204203
<string name="return_btn">Возвращение</string>
205204
<string name="donate_description">Пожертвования помогают поддерживать это приложение в актуальном состоянии и помогают в разработке новых функций.</string>
205+
<string name="nut_fqdn_error">Адрес Nut-сервера не в формате FQDN. Должно быть что-то вроде \"name@192.168.1.1\". </string>
206206

207207
</resources>

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,5 +202,6 @@
202202
<string name="continue_btn">Continue</string>
203203
<string name="return_btn">Return</string>
204204
<string name="donate_description">Donations helps to keep this app up to date and helps with developing new features.</string>
205+
<string name="nut_fqdn_error">Nut server address not in FQDN format. Must be something like \"name@192.168.1.1\". </string>
205206

206207
</resources>

0 commit comments

Comments
 (0)