diff --git a/makefile b/makefile
index 1130b6719..df2c1d4a5 100644
--- a/makefile
+++ b/makefile
@@ -13,7 +13,7 @@ MAKEFLAGS+="j "
#TARGET := $(notdir $(CURDIR))
TARGET := emsesp
BUILD := build
-SOURCES := src lib_standalone lib/rtcvars lib/uuid-common/src lib/uuid-console/src lib/uuid-log/src src/devices
+SOURCES := src lib_standalone lib/rtcvars lib/uuid-common/src lib/uuid-console/src lib/uuid-log/src src/devices src/test
INCLUDES := lib_standalone/ArduinoJson/src lib_standalone lib/rtcvars lib/uuid-common/src lib/uuid-console/src lib/uuid-log/src lib/uuid-telnet/src lib/uuid-syslog/src src/devices src
LIBRARIES :=
diff --git a/src/test_data.h b/src/test/test.cpp
similarity index 68%
rename from src/test_data.h
rename to src/test/test.cpp
index f65e9a8db..c39e12121 100644
--- a/src/test_data.h
+++ b/src/test/test.cpp
@@ -1,10 +1,34 @@
+
+/*
+ * EMS-ESP - https://github.com/proddy/EMS-ESP
+ * Copyright 2019 Paul Derbyshire
+ *
+ * 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 .
+ */
+
+
+#include "test.h"
+
+namespace emsesp {
+
// create some fake test data
// used with the 'test' command, under su/admin
-void EMSESP::run_test(uuid::console::Shell & shell, const std::string & command) {
+void Test::run_test(uuid::console::Shell & shell, const std::string & command) {
if (command == "devices") {
- rxservice_.ems_mask(EMSbus::EMS_MASK_BUDERUS); // this is important otherwise nothing will be picked up!
+ EMSESP::rxservice_.ems_mask(EMSbus::EMS_MASK_BUDERUS); // this is important otherwise nothing will be picked up!
- emsdevices.push_back(EMSFactory::add(EMSdevice::DeviceType::BOILER, EMSdevice::EMS_DEVICE_ID_BOILER, 0, "", "My Boiler", 0, 0));
+ //emsdevices.push_back(EMSFactory::add(EMSdevice::DeviceType::BOILER, EMSdevice::EMS_DEVICE_ID_BOILER, 0, "", "My Boiler", 0, 0));
// A fake response - UBADevices(0x07)
rx_telegram({0x08, 0x00, 0x07, 0x00, 0x0B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00});
@@ -13,14 +37,14 @@ void EMSESP::run_test(uuid::console::Shell & shell, const std::string & command)
if (command == "boiler2") {
// question: do we need to set the mask?
std::string version("1.2.3");
- add_device(0x08, 123, version, EMSdevice::Brand::BUDERUS); // Nefit Trendline
+ EMSESP::add_device(0x08, 123, version, EMSdevice::Brand::BUDERUS); // Nefit Trendline
}
if (command == "unknown") {
// question: do we need to set the mask?
std::string version("1.2.3");
- add_device(0x09, 89, version, EMSdevice::Brand::BUDERUS);
- rxservice_.loop();
+ EMSESP::add_device(0x09, 89, version, EMSdevice::Brand::BUDERUS);
+ EMSESP::rxservice_.loop();
// simulate getting version information back from an unknown device
rx_telegram({0x09, 0x0B, 0x02, 0x00, 0x59, 0x01, 0x02});
@@ -41,8 +65,8 @@ void EMSESP::run_test(uuid::console::Shell & shell, const std::string & command)
// add thermostat - Thermostat: RC300/RC310/Moduline 3000/CW400/Sense II (DeviceID:0x10, ProductID:158, Version:03.03) ** master device **
std::string version("01.03");
- add_device(0x10, 158, version, EMSdevice::Brand::BUDERUS);
- rxservice_.loop();
+ EMSESP::add_device(0x10, 158, version, EMSdevice::Brand::BUDERUS);
+ EMSESP::rxservice_.loop();
// simulate incoming telegram
// Thermostat(0x10) -> 48(0x48), ?(0x26B), data: 6B 08 4F 00 00 00 02 00 00 00 02 00 03 00 03 00 03
@@ -60,18 +84,18 @@ void EMSESP::run_test(uuid::console::Shell & shell, const std::string & command)
// add_device(0x17, 93, version, EMSdevice::Brand::BUDERUS);
// add_device(0x17, 254, version, EMSdevice::Brand::BUDERUS); // test unknown product_id
- add_device(0x18, 157, version, EMSdevice::Brand::BOSCH); // Bosch CR100 - https://github.com/proddy/EMS-ESP/issues/355
+ EMSESP::add_device(0x18, 157, version, EMSdevice::Brand::BOSCH); // Bosch CR100 - https://github.com/proddy/EMS-ESP/issues/355
}
if (command == "solar") {
shell.printfln(F("Testing Solar"));
- rxservice_.ems_mask(EMSbus::EMS_MASK_BUDERUS);
+ EMSESP::rxservice_.ems_mask(EMSbus::EMS_MASK_BUDERUS);
std::string version("1.2.3");
- add_device(0x30, 163, version, EMSdevice::Brand::BUDERUS); // SM100
+ EMSESP::add_device(0x30, 163, version, EMSdevice::Brand::BUDERUS); // SM100
- rxservice_.loop();
+ EMSESP::rxservice_.loop();
// SM100Monitor - type 0x0362 EMS+ - for SM100 and SM200
// B0 0B FF 00 02 62 00 44 02 7A 80 00 80 00 80 00 80 00 80 00 80 00 00 7C 80 00 80 00 80 00 80
@@ -82,11 +106,11 @@ void EMSESP::run_test(uuid::console::Shell & shell, const std::string & command)
if (command == "cr100") {
shell.printfln(F("Testing CR100"));
- rxservice_.ems_mask(EMSbus::EMS_MASK_HT3); // switch to junkers
+ EMSESP::rxservice_.ems_mask(EMSbus::EMS_MASK_HT3); // switch to junkers
std::string version("1.2.3");
- add_device(0x18, 157, version, EMSdevice::Brand::BOSCH); // Bosch CR100 - https://github.com/proddy/EMS-ESP/issues/355
- rxservice_.loop();
+ EMSESP::add_device(0x18, 157, version, EMSdevice::Brand::BOSCH); // Bosch CR100 - https://github.com/proddy/EMS-ESP/issues/355
+ EMSESP::rxservice_.loop();
// RCPLUSStatusMessage_HC1(0x01A5)
// 98 00 FF 00 01 A5 00 CF 21 2E 00 00 2E 24 03 25 03 03 01 03 25 00 C8 00 00 11 01 03
@@ -94,10 +118,10 @@ void EMSESP::run_test(uuid::console::Shell & shell, const std::string & command)
0x03, 0x25, 0x03, 0x03, 0x01, 0x03, 0x25, 0x00, 0xC8, 0x00, 0x00, 0x11, 0x01, 0x03});
shell.loop_all();
- rxservice_.loop();
- txservice_.flush_tx_queue();
+ EMSESP::rxservice_.loop();
+ EMSESP::txservice_.flush_tx_queue();
shell.loop_all();
- show_values(shell);
+ EMSESP::show_values(shell);
shell.invoke_command("thermostat");
shell.loop_all();
@@ -106,10 +130,10 @@ void EMSESP::run_test(uuid::console::Shell & shell, const std::string & command)
shell.invoke_command("set mode auto");
shell.loop_all();
- show_emsbus(shell);
+ EMSESP::show_emsbus(shell);
shell.loop_all();
- txservice_.send(); // send it to UART
+ EMSESP::txservice_.send(); // send it to UART
}
if (command == "rx") {
@@ -131,7 +155,7 @@ void EMSESP::run_test(uuid::console::Shell & shell, const std::string & command)
// bad CRC - corrupt telegram - CRC should be 0x8E
uint8_t t5[] = {0x17, 0x0B, 0x91, 0x05, 0x44, 0x45, 0x46, 0x47, 0x99};
- rxservice_.add(t5, sizeof(t5));
+ EMSESP::rxservice_.add(t5, sizeof(t5));
// simulating a Tx record
uart_telegram({0x0B, 0x88, 0x07, 0x00, 0x20});
@@ -168,127 +192,127 @@ void EMSESP::run_test(uuid::console::Shell & shell, const std::string & command)
if (command == "send") {
shell.printfln(F("Sending to Tx..."));
- show_emsbus(shell);
- txservice_.send(); // send it to UART
+ EMSESP::show_emsbus(shell);
+ EMSESP::txservice_.send(); // send it to UART
}
if (command == "tx") {
shell.printfln(F("Testing Tx..."));
- txservice_.flush_tx_queue();
+ EMSESP::txservice_.flush_tx_queue();
// TX queue example - Me -> Thermostat, (0x91), telegram: 0B 17 91 05 44 45 46 47 (#data=4)
// uint8_t t11[] = {0x44, 0x45, 0x46, 0x47};
- // txservice_.add(Telegram::Operation::TX_RAW, 0x17, 0x91, 0x05, t11, sizeof(t11));
+ // EMSESP::txservice_.add(Telegram::Operation::TX_RAW, 0x17, 0x91, 0x05, t11, sizeof(t11));
// TX - raw example test
// uint8_t t12[] = {0x10, 0x08, 0x63, 0x04, 0x64};
- // txservice_.add(t12, sizeof(t12));
+ // EMSESP::txservice_.add(t12, sizeof(t12));
// TX - sending raw string
- // txservice_.send_raw("10 08 63 03 64 65 66");
+ // EMSESP::txservice_.send_raw("10 08 63 03 64 65 66");
// TX - send a read request
- send_read_request(0x18, 0x08);
+ EMSESP::send_read_request(0x18, 0x08);
// TX - send a write request
// uint8_t t18[] = {0x52, 0x79};
// send_write_request(0x91, 0x17, 0x00, t18, sizeof(t18));
- console_.loop();
- show_emsbus(shell);
- txservice_.send(); // send it to UART
+ shell.loop_all();
+ EMSESP::show_emsbus(shell);
+ EMSESP::txservice_.send(); // send it to UART
- txservice_.flush_tx_queue();
+ EMSESP::txservice_.flush_tx_queue();
}
if (command == "poll") {
shell.printfln(F("Testing Poll..."));
// check if sending works when a poll comes in, with retries
- txservice_.flush_tx_queue();
+ EMSESP::txservice_.flush_tx_queue();
// simulate sending a read request
// uint8_t t16[] = {0x44, 0x45, 0x46, 0x47}; // Me -> Thermostat, (0x91), telegram: 0B 17 91 05 44 45 46 47 (#data=4)
- // txservice_.add(Telegram::Operation::TX_RAW, 0x17, 0x91, 0x05, t16, sizeof(t16));
- send_read_request(0x91, 0x17);
- // txservice_.show_tx_queue();
+ // EMSESP::txservice_.add(Telegram::Operation::TX_RAW, 0x17, 0x91, 0x05, t16, sizeof(t16));
+ EMSESP::send_read_request(0x91, 0x17);
+ // EMSESP::txservice_.show_tx_queue();
// Simulate adding a Poll, so read request is sent
uint8_t poll[1] = {0x8B};
- incoming_telegram(poll, 1);
+ EMSESP::incoming_telegram(poll, 1);
// incoming Rx
uart_telegram({0x17, 0x08, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A});
// Simulate adding a Poll - should send retry
- incoming_telegram(poll, 1);
+ EMSESP::incoming_telegram(poll, 1);
- show_emsbus(shell);
+ EMSESP::show_emsbus(shell);
uint8_t t2[] = {0x21, 0x22};
- send_write_request(0x91, 0x17, 0x00, t2, sizeof(t2), 0);
- show_emsbus(shell);
+ EMSESP::send_write_request(0x91, 0x17, 0x00, t2, sizeof(t2), 0);
+ EMSESP::show_emsbus(shell);
- txservice_.flush_tx_queue();
+ EMSESP::txservice_.flush_tx_queue();
}
if (command == "mqtt1") {
shell.printfln(F("Testing MQTT..."));
// MQTT test
- txservice_.flush_tx_queue();
- mqtt_.publish("boiler_cmd", "test me");
- // mqtt_.show_queue();
+ EMSESP::txservice_.flush_tx_queue();
+ EMSESP::EMSESP::mqtt_.publish("boiler_cmd", "test me");
+ // EMSESP::mqtt_.show_queue();
// simulate an incoming mqtt msg
char topic[Mqtt::MQTT_TOPIC_MAX_SIZE];
char payload[100];
strcpy(topic, "boiler_cmd");
strcpy(payload, "12345");
- mqtt_.incoming(topic, payload);
- mqtt_.incoming(payload, payload); // should report error
+ EMSESP::mqtt_.incoming(topic, payload);
+ EMSESP::mqtt_.incoming(payload, payload); // should report error
strcpy(topic, "thermostat_cmd_mode");
strcpy(payload, "auto");
- mqtt_.incoming(topic, payload);
+ EMSESP::mqtt_.incoming(topic, payload);
strcpy(topic, "thermostat_cmd_temp");
strcpy(payload, "20");
- mqtt_.incoming(topic, payload);
+ EMSESP::mqtt_.incoming(topic, payload);
strcpy(topic, "thermostat_cmd");
strcpy(payload, "{\"cmd\":\"temp\",\"data\":22.52}");
- mqtt_.incoming(topic, payload);
+ EMSESP::mqtt_.incoming(topic, payload);
strcpy(topic, "boiler_cmd_wwtemp");
strcpy(payload, "66");
- mqtt_.incoming(topic, payload);
+ EMSESP::mqtt_.incoming(topic, payload);
strcpy(topic, "thermostat_cmd");
strcpy(payload, "{\"cmd\":\"temp\",\"hc\":2,\"data\":22}");
- mqtt_.incoming(topic, payload);
+ EMSESP::mqtt_.incoming(topic, payload);
strcpy(topic, "home/ems-esp/cmd");
strcpy(payload, "restart");
- mqtt_.incoming(topic, payload);
+ EMSESP::mqtt_.incoming(topic, payload);
- // txservice_.show_tx_queue();
+ // EMSESP::txservice_.show_tx_queue();
- publish_all_values();
+ EMSESP::publish_all_values();
}
if (command == "poll2") {
shell.printfln(F("Testing Tx Sending last message on queue..."));
- show_emsbus(shell);
+ EMSESP::show_emsbus(shell);
uint8_t poll[1] = {0x8B};
- incoming_telegram(poll, 1);
+ EMSESP::incoming_telegram(poll, 1);
- rxservice_.loop();
+ EMSESP::rxservice_.loop();
- show_emsbus(shell);
- txservice_.flush_tx_queue();
+ EMSESP::show_emsbus(shell);
+ EMSESP::txservice_.flush_tx_queue();
}
if (command == "rx2") {
@@ -304,7 +328,7 @@ void EMSESP::run_test(uuid::console::Shell & shell, const std::string & command)
}
if (command == "mqtt2") {
- // Mqtt::subscribe("cmd", std::bind(&EMSESP::dummy_mqtt_commands, this, _1));
+ // Mqtt::subscribe("cmd", std::bind(&EMSESP::dummy_EMSESP::mqtt_commands, this, _1));
for (uint8_t i = 0; i < 30; i++) {
Mqtt::subscribe("cmd", dummy_mqtt_commands);
}
@@ -319,19 +343,19 @@ void EMSESP::run_test(uuid::console::Shell & shell, const std::string & command)
// send read request with offset
if (command == "offset") {
// send_read_request(0x18, 0x08);
- txservice_.read_request(0x18, 0x08, 27); // no offset
+ EMSESP::txservice_.read_request(0x18, 0x08, 27); // no offset
}
if (command == "mixing") {
shell.printfln(F("Mixing Solar"));
- rxservice_.ems_mask(EMSbus::EMS_MASK_BUDERUS);
+ EMSESP::rxservice_.ems_mask(EMSbus::EMS_MASK_BUDERUS);
std::string version("1.2.3");
- add_device(0x28, 160, version, EMSdevice::Brand::BUDERUS); // MM100, WWC
- add_device(0x29, 161, version, EMSdevice::Brand::BUDERUS); // MM200, WWC
+ EMSESP::add_device(0x28, 160, version, EMSdevice::Brand::BUDERUS); // MM100, WWC
+ EMSESP::add_device(0x29, 161, version, EMSdevice::Brand::BUDERUS); // MM200, WWC
- rxservice_.loop();
+ EMSESP::rxservice_.loop();
// WWC1 on 0x29
rx_telegram({0xA9, 0x00, 0xFF, 0x00, 0x02, 0x32, 0x02, 0x6C, 0x00, 0x3C, 0x00, 0x3C, 0x3C, 0x46, 0x02, 0x03, 0x03, 0x00, 0x3C});
@@ -345,29 +369,31 @@ void EMSESP::run_test(uuid::console::Shell & shell, const std::string & command)
}
// simulates a telegram in the Rx queue, but without the CRC which is added automatically
-void EMSESP::rx_telegram(const std::vector & rx_data) {
+void Test::rx_telegram(const std::vector & rx_data) {
uint8_t len = rx_data.size();
uint8_t data[50];
std::copy(rx_data.begin(), rx_data.end(), data);
- data[len] = rxservice_.calculate_crc(rx_data.data(), len);
- rxservice_.add(data, len + 1);
- rxservice_.loop();
+ data[len] = EMSESP::rxservice_.calculate_crc(rx_data.data(), len);
+ EMSESP::rxservice_.add(data, len + 1);
+ EMSESP::rxservice_.loop();
}
// simulates a telegram straight from UART, but without the CRC which is added automatically
-void EMSESP::uart_telegram(const std::vector & rx_data) {
+void Test::uart_telegram(const std::vector & rx_data) {
uint8_t len = rx_data.size();
uint8_t data[50];
std::copy(rx_data.begin(), rx_data.end(), data);
- data[len] = rxservice_.calculate_crc(rx_data.data(), len);
- incoming_telegram(data, len + 1);
+ data[len] = EMSESP::rxservice_.calculate_crc(rx_data.data(), len);
+ EMSESP::incoming_telegram(data, len + 1);
}
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
-void EMSESP::dummy_mqtt_commands(const char * message) {
+void Test::dummy_mqtt_commands(const char * message) {
//
}
#pragma GCC diagnostic pop
+
+} // namespace emsesp
diff --git a/src/test/test.h b/src/test/test.h
new file mode 100644
index 000000000..86a28f88b
--- /dev/null
+++ b/src/test/test.h
@@ -0,0 +1,50 @@
+/*
+ * EMS-ESP - https://github.com/proddy/EMS-ESP
+ * Copyright 2019 Paul Derbyshire
+ *
+ * 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 .
+ */
+
+#ifndef EMSESP_TEST_H
+#define EMSESP_TEST_H
+
+#include
+
+#include
+#include
+
+#include
+#include
+#include
+
+#include "emsdevice.h"
+#include "emsfactory.h"
+#include "telegram.h"
+#include "mqtt.h"
+#include "emsesp.h"
+
+namespace emsesp {
+
+class Test {
+ public:
+
+ static void run_test(uuid::console::Shell & shell, const std::string & command); // only for testing
+ static void dummy_mqtt_commands(const char * message);
+ static void rx_telegram(const std::vector & data);
+ static void uart_telegram(const std::vector & rx_data);
+};
+
+} // namespace emsesp
+
+#endif