File: ut_obis.cpp

package info (click to toggle)
vzlogger 0.8.9-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,140 kB
  • sloc: cpp: 12,020; sh: 331; ansic: 157; makefile: 25
file content (124 lines) | stat: -rw-r--r-- 3,170 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include "Obis.hpp"
#include "VZException.hpp"
#include "gtest/gtest.h"

// dirty hack until we find a better solution:
// (already in MeterD0.cpp) #include "../src/Obis.cpp"

TEST(Obis, Obis_basic) {
	// empty Obis constructor
	Obis o1;
	ASSERT_TRUE(o1.isAllNotGiven());
	ASSERT_TRUE(!o1.isManufacturerSpecific());

	// 2nd constructor:
	Obis o2(0x1, 0x2, 0x3, 0x4, 0x5, 0x6);
	ASSERT_FALSE(o1 == o2);
	ASSERT_FALSE(o2.isAllNotGiven());
	ASSERT_EQ(o2, o2); // check comparison op.
	// 3rd constructor:
	Obis o3("1-2:3.4.5*6");
	ASSERT_EQ(o2, o3);
}

TEST(Obis, Obis_strparsing) {
	Obis o1(0x1, 0x1, 97, 97, 0xff, 0xff); // 97 = SC_F
	Obis o2("1-1:F.F");
	ASSERT_EQ(o1, o2);

	Obis o3(0x1, 0x1, 96, 98, 0xff, 0xff); // 96 = SC_C, 98 = SC_L
	Obis o4("1-1:C.L");
	ASSERT_EQ(o3, o4);

	Obis o5(0x1, 0x1, 96, 99, 0xff, 0xff); // 96 = SC_C, 99 = SC_P
	Obis o6("1-1:C.P");
	ASSERT_EQ(o5, o6);

	ASSERT_THROW(Obis o7("1-1:x:y"), vz::VZException);
	Obis o8("power-l1");
	ASSERT_EQ(Obis("1-0:21.7"), o8);
}

TEST(Obis, Obis_extStrParsing) {
	Obis o1(0xff, 0xff, 0x0, 0x0, 0x0, 0xff);
	Obis o2("0.0.0");
	ASSERT_EQ(o1, o2) << o1.toString() << o2.toString();
	ASSERT_EQ(o1.toString(), o2.toString());

	Obis o3(0xff, 0xff, 0x1, 0x2, 0x3, 0xff);
	Obis o4("1.2.3");
	ASSERT_EQ(o3, o4);
	ASSERT_EQ(o3.toString(), o4.toString());

	Obis o5(0xff, 0xff, 0x61, 0x61, 0xff, 0xff);
	Obis o6("F.F");
	ASSERT_EQ(o5, o6);

	Obis o7(0xff, 0xff, 0x0, 0x0, 0x2, 0xff);
	Obis o8("0.0.2");
	ASSERT_EQ(o7, o8);

	// this should throw an exception as hex codes are not valid inside obis codes.
	ASSERT_THROW(Obis o10("1.8.0*FF"), vz::VZException);
	ASSERT_THROW(Obis o10("1.8.0*F1"), vz::VZException);
}

TEST(Obis, Obis_parse_LuG_E350) // all known codes from Landis+Gyr E350
{
	// commented ones are covered by other tests
	// 	F.F       00
	{
		Obis o1(0xff, 0xff, 0, 0, 0xff, 0xff);
		Obis o2("0.0");
		ASSERT_EQ(o1, o2) << o1.toString() << o2.toString();
		ASSERT_EQ(o1.toString(), o2.toString());
	}
	{
		Obis o1(0xff, 0xff, 96, 1, 0, 0xff);
		Obis o2("C.1.0");
		ASSERT_EQ(o1, o2) << o1.toString() << o2.toString();
		ASSERT_EQ(o1.toString(), o2.toString());
	}
	//	C.1.1
	//	1.8.1     003400.447 kWh
	//	1.8.2     005230.688 kWh
	//	2.8.1     000000.000 kWh
	//	2.8.2     000000.842 kWh
	//	1.8.0     008631.135 kWh
	//	2.8.0     000000.842 kWh
	{
		Obis o1(0xff, 0xff, 15, 8, 0, 0xff);
		Obis o2("15.8.0");
		ASSERT_EQ(o1, o2) << o1.toString() << o2.toString();
		ASSERT_EQ(o1.toString(), o2.toString());
	}
	{
		Obis o1(0xff, 0xff, 16, 7, 0xff, 0xff);
		Obis o2("16.7");
		ASSERT_EQ(o1, o2) << o1.toString() << o2.toString();
		ASSERT_EQ(o1.toString(), o2.toString());
	}
	{
		Obis o1(0xff, 0xff, 72, 7, 0xff, 0xff);
		Obis o2("72.7");
		ASSERT_EQ(o1, o2) << o1.toString() << o2.toString();
		ASSERT_EQ(o1.toString(), o2.toString());
	}

	//	32.7      248 V
	//	52.7      248 V
	//	72.7      009 V
	//	31.7      000.03 A
	//	51.7      000.04 A
	//	71.7      000.05 A
	{
		Obis o1(0xff, 0xff, 82, 8, 2, 0xff);
		Obis o2("82.8.2");
		ASSERT_EQ(o1, o2) << o1.toString() << o2.toString();
		ASSERT_EQ(o1.toString(), o2.toString());
	}

	//	82.8.1    0001
	//	0.2.0     M23
	//	C.5.0     0433
}