Skip to content

Commit

Permalink
energy meter json self test
Browse files Browse the repository at this point in the history
  • Loading branch information
openshwprojects committed Dec 30, 2022
1 parent 3119dd1 commit 7d6dc11
Show file tree
Hide file tree
Showing 8 changed files with 138 additions and 4 deletions.
2 changes: 2 additions & 0 deletions openBeken_win32_mvsc2017.vcxproj
Expand Up @@ -512,6 +512,7 @@
<ClCompile Include="src\selftest\selftest_cmd_alias.c" />
<ClCompile Include="src\selftest\selftest_cmd_channels.c" />
<ClCompile Include="src\selftest\selftest_deviceGroups.c" />
<ClCompile Include="src\selftest\selftest_energyMeter.c" />
<ClCompile Include="src\selftest\selftest_expandConstant.c" />
<ClCompile Include="src\selftest\selftest_expressions.c" />
<ClCompile Include="src\selftest\selftest_http.c" />
Expand All @@ -524,6 +525,7 @@
<ClCompile Include="src\selftest\selftest_ntp.c" />
<ClCompile Include="src\selftest\selftest_repeatingEvents.c" />
<ClCompile Include="src\selftest\selftest_script.c" />
<ClCompile Include="src\selftest\selftest_tasmota.c" />
<ClCompile Include="src\selftest\selftest_tokenizer.c" />
<ClCompile Include="src\selftest\selftest_tuyaMCU.c" />
<ClCompile Include="src\selftest\selftest_util_mqtt.c" />
Expand Down
6 changes: 6 additions & 0 deletions openBeken_win32_mvsc2017.vcxproj.filters
Expand Up @@ -441,6 +441,12 @@
<ClCompile Include="src\selftest\selftest_mqtt.c">
<Filter>SelfTest</Filter>
</ClCompile>
<ClCompile Include="src\selftest\selftest_tasmota.c">
<Filter>SelfTest</Filter>
</ClCompile>
<ClCompile Include="src\selftest\selftest_energyMeter.c">
<Filter>SelfTest</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\new_cfg.h" />
Expand Down
1 change: 1 addition & 0 deletions src/new_common.h
Expand Up @@ -117,6 +117,7 @@ This platform is not supported, error!

#include <time.h>
#include <stdint.h>
#include <math.h>

#define bk_printf printf

Expand Down
83 changes: 83 additions & 0 deletions src/selftest/selftest_energyMeter.c
@@ -0,0 +1,83 @@
#ifdef WINDOWS

#include "selftest_local.h"

void Test_EnergyMeter_Basic() {
SIM_ClearOBK();
SIM_ClearAndPrepareForMQTTTesting("miscDevice");

PIN_SetPinRoleForPinIndex(9, IOR_Relay);
PIN_SetPinChannelForPinIndex(9, 1);


CMD_ExecuteCommand("startDriver TESTPOWER", 0);
CMD_ExecuteCommand("SetupTestPower 0 0 0 0", 0);

Sim_RunSeconds(10, false);
CMD_ExecuteCommand("SetupTestPower 230 0.26 60 0", 0);
Sim_RunSeconds(10, false);

SELFTEST_ASSERT_HAD_MQTT_PUBLISH_FLOAT("miscDevice/voltage/get", 230.0f, false);
SELFTEST_ASSERT_HAD_MQTT_PUBLISH_FLOAT("miscDevice/current/get", 0.26f, false);
SELFTEST_ASSERT_HAD_MQTT_PUBLISH_FLOAT("miscDevice/power/get", 60.0f, false);

SIM_ClearMQTTHistory();

CMD_ExecuteCommand("SetupTestPower 241 0.36 80 0", 0);
Sim_RunSeconds(10, false);

SELFTEST_ASSERT_HAD_MQTT_PUBLISH_FLOAT("miscDevice/voltage/get", 241.0f, false);
SELFTEST_ASSERT_HAD_MQTT_PUBLISH_FLOAT("miscDevice/current/get", 0.36f, false);
SELFTEST_ASSERT_HAD_MQTT_PUBLISH_FLOAT("miscDevice/power/get", 80.0f, false);

SIM_ClearMQTTHistory();

CMD_ExecuteCommand("SetupTestPower 221 0.46 70 0", 0);
Sim_RunSeconds(10, false);

SELFTEST_ASSERT_HAD_MQTT_PUBLISH_FLOAT("miscDevice/voltage/get", 221.0f, false);
SELFTEST_ASSERT_HAD_MQTT_PUBLISH_FLOAT("miscDevice/current/get", 0.46f, false);
SELFTEST_ASSERT_HAD_MQTT_PUBLISH_FLOAT("miscDevice/power/get", 70.0f, false);

SIM_ClearMQTTHistory();
}
void Test_EnergyMeter_Tasmota() {
SIM_ClearOBK();
SIM_ClearAndPrepareForMQTTTesting("miscDevice");

PIN_SetPinRoleForPinIndex(9, IOR_Relay);
PIN_SetPinChannelForPinIndex(9, 1);


CMD_ExecuteCommand("startDriver TESTPOWER", 0);
CMD_ExecuteCommand("SetupTestPower 0 0 0 0", 0);

Sim_RunSeconds(10, false);
CMD_ExecuteCommand("SetupTestPower 230 0.26 60 0", 0);
Sim_RunSeconds(10, false);


// read power
Test_FakeHTTPClientPacket_JSON("cm?cmnd=STATUS%208");
SELFTEST_ASSERT_JSON_VALUE_FLOAT_NESTED2("StatusSNS", "ENERGY", "Voltage", 230);
SELFTEST_ASSERT_JSON_VALUE_FLOAT_NESTED2("StatusSNS", "ENERGY", "Current", 0.26f);
SELFTEST_ASSERT_JSON_VALUE_FLOAT_NESTED2("StatusSNS", "ENERGY", "Power", 60.0f);

Sim_RunSeconds(10, false);
CMD_ExecuteCommand("SetupTestPower 240 0.31 70 0", 0);
Sim_RunSeconds(10, false);

// read power
Test_FakeHTTPClientPacket_JSON("cm?cmnd=STATUS%208");
SELFTEST_ASSERT_JSON_VALUE_FLOAT_NESTED2("StatusSNS", "ENERGY", "Voltage", 240);
SELFTEST_ASSERT_JSON_VALUE_FLOAT_NESTED2("StatusSNS", "ENERGY", "Current", 0.31f);
SELFTEST_ASSERT_JSON_VALUE_FLOAT_NESTED2("StatusSNS", "ENERGY", "Power", 70.0f);

SIM_ClearMQTTHistory();
}
void Test_EnergyMeter() {
Test_EnergyMeter_Basic();
Test_EnergyMeter_Tasmota();
}

#endif
36 changes: 35 additions & 1 deletion src/selftest/selftest_http.c
Expand Up @@ -124,9 +124,24 @@ void Test_FakeHTTPClientPacket_JSON(const char *tg) {
if (g_json) {
cJSON_Delete(g_json);
}
printf("Received JSON: %s\n", replyAt);
g_json = cJSON_Parse(replyAt);
g_sec_power = cJSON_GetObjectItemCaseSensitive(g_json, "POWER");
}
cJSON *Test_GetJSONValue_Generic_Nested2(const char *par1, const char *par2, const char *keyword) {
cJSON *tmp;
cJSON *parent;
parent = cJSON_GetObjectItemCaseSensitive(g_json, par1);
if (parent == 0)
return 0;
parent = cJSON_GetObjectItemCaseSensitive(parent, par2);
if (parent == 0)
return 0;
tmp = cJSON_GetObjectItemCaseSensitive(parent, keyword);
if (tmp == 0)
return 0;
return tmp;
}
cJSON *Test_GetJSONValue_Generic(const char *keyword, const char *obj) {
cJSON *tmp;
cJSON *parent;
Expand All @@ -143,7 +158,26 @@ cJSON *Test_GetJSONValue_Generic(const char *keyword, const char *obj) {
return 0;
return tmp;
}
const char *Test_GetJSONValue_Integer(const char *keyword, const char *obj) {
int Test_GetJSONValue_Integer_Nested2(const char *par1, const char *par2, const char *keyword) {
cJSON *tmp;
tmp = Test_GetJSONValue_Generic_Nested2(par1, par2, keyword);
if (tmp == 0) {
return -999999;
}
printf("Test_GetJSONValue_Integer_Nested2 will return %i for %s\n", tmp->valueint, keyword);
return tmp->valueint;
}
float Test_GetJSONValue_Float_Nested2(const char *par1, const char *par2, const char *keyword) {
cJSON *tmp;
tmp = Test_GetJSONValue_Generic_Nested2(par1, par2, keyword);
if (tmp == 0) {
return -999999;
}
float ret = tmp->valuedouble;
printf("Test_GetJSONValue_Float_Nested2 will return %f for %s\n", ret, keyword);
return ret;
}
int Test_GetJSONValue_Integer(const char *keyword, const char *obj) {
cJSON *tmp;
tmp = Test_GetJSONValue_Generic(keyword, obj);
if (tmp == 0) {
Expand Down
11 changes: 9 additions & 2 deletions src/selftest/selftest_local.h
Expand Up @@ -21,15 +21,17 @@ void SelfTest_Failed(const char *file, const char *function, int line, const cha
#define SELFTEST_ASSERT_ARGUMENTS_COUNT(wantedCount) SELFTEST_ASSERT((Tokenizer_GetArgsCount()==wantedCount));
#define SELFTEST_ASSERT_JSON_VALUE_STRING(obj, varName, res) SELFTEST_ASSERT(!strcmp(Test_GetJSONValue_String(varName,obj), res));
#define SELFTEST_ASSERT_JSON_VALUE_INTEGER(obj, varName, res) SELFTEST_ASSERT((Test_GetJSONValue_Integer(varName,obj) == res));
#define SELFTEST_ASSERT_JSON_VALUE_INTEGER_NESTED2(par1, par2, varName, res) SELFTEST_ASSERT((Test_GetJSONValue_Integer_Nested2(par1, par2,varName) == res));
#define SELFTEST_ASSERT_JSON_VALUE_FLOAT_NESTED2(par1, par2, varName, res) SELFTEST_ASSERT((Float_Equals(Test_GetJSONValue_Float_Nested2(par1, par2,varName),res)));
#define SELFTEST_ASSERT_STRING(current,expected) SELFTEST_ASSERT((strcmp(expected,current) == 0));
#define SELFTEST_ASSERT_INTEGER(current,expected) SELFTEST_ASSERT((expected==current));
#define SELFTEST_ASSERT_HTML_REPLY(expected) SELFTEST_ASSERT((strcmp(Test_GetLastHTMLReply(),expected) == 0));
#define SELFTEST_ASSERT_HAD_MQTT_PUBLISH_STR(topic, value, bRetain) SELFTEST_ASSERT(SIM_CheckMQTTHistoryForString(topic,value,bRetain));
#define SELFTEST_ASSERT_HAD_MQTT_PUBLISH_FLOAT(topic, value, bRetain) SELFTEST_ASSERT(SIM_CheckMQTTHistoryForFloat(topic,value,bRetain));

//#define FLOAT_EQUALS (a,b) (abs(a-b)<0.001f)
//#define FLOAT_EQUALS (a,b) (fabs(a-b)<0.001f)
inline bool Float_Equals(float a, float b) {
float res = abs(a - b);
float res = fabs(a - b);
return res < 0.001f;
}

Expand All @@ -50,6 +52,7 @@ void Test_DeviceGroups();
void Test_NTP();
void Test_MQTT();
void Test_Tasmota();
void Test_EnergyMeter();

void Test_FakeHTTPClientPacket_GET(const char *tg);
void Test_FakeHTTPClientPacket_POST(const char *tg, const char *data);
Expand All @@ -61,6 +64,10 @@ void Sim_RunMiliseconds(int ms, bool bApplyRealtimeWait);
void Sim_RunSeconds(float f, bool bApplyRealtimeWait);
void Sim_RunFrames(int n, bool bApplyRealtimeWait);

int Test_GetJSONValue_Integer_Nested2(const char *par1, const char *par2, const char *keyword);
float Test_GetJSONValue_Float_Nested2(const char *par1, const char *par2, const char *keyword);
int Test_GetJSONValue_Integer(const char *keyword, const char *obj);
const char *Test_GetJSONValue_String(const char *keyword, const char *obj);

void SIM_SendFakeMQTTAndRunSimFrame_CMND(const char *command, const char *arguments);
void SIM_SendFakeMQTTRawChannelSet(int channelIndex, const char *arguments);
Expand Down
1 change: 0 additions & 1 deletion src/selftest/selftest_mqtt.c
Expand Up @@ -208,7 +208,6 @@ void Test_MQTT(){
Test_MQTT_Channels();
Test_MQTT_LED_CW();
Test_MQTT_LED_RGB();
Test_Tasmota();
}

#endif
2 changes: 2 additions & 0 deletions src/win_main.c
Expand Up @@ -120,6 +120,8 @@ void SIM_DoFreshOBKBoot() {
void Win_DoUnitTests() {


Test_EnergyMeter();
Test_Tasmota();
Test_NTP();
Test_MQTT();
Test_HTTP_Client();
Expand Down

0 comments on commit 7d6dc11

Please sign in to comment.