diff --git a/.vscode/settings.json b/.vscode/settings.json index ff43457..dde7f69 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -76,6 +76,16 @@ "typeinfo": "cpp", "valarray": "cpp", "variant": "cpp", - "__nullptr": "cpp" + "__nullptr": "cpp", + "locale": "cpp", + "__bit_reference": "cpp", + "__functional_base": "cpp", + "__node_handle": "cpp", + "__memory": "cpp", + "filesystem": "cpp", + "__functional_base_03": "cpp", + "__hash_table": "cpp", + "__tree": "cpp", + "__tuple": "cpp" } } \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index a3bb33b..b10e8d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,9 +11,15 @@ project(app) # 设置通用编译选项 set(C_CPP_FLAGS "${C_CPP_FLAGS} ") -set(C_CPP_FLAGS "${C_CPP_FLAGS} -Wno-unused-local-typedefs -Wno-unused-but-set-variable -Wno-deprecated-declarations -Wno-unused-variable") -set(C_CPP_FLAGS "${C_CPP_FLAGS} -Wno-unused-local-typedefs -Wno-unused-but-set-variable -Wno-deprecated-declarations -Wno-unused-variable") -set(C_CPP_FLAGS "${C_CPP_FLAGS} -Werror=return-type -Werror=parentheses -Wfatal-errors -Wno-comment") +set(C_CPP_FLAGS + "${C_CPP_FLAGS} -Wno-unused-local-typedefs -Wno-unused-but-set-variable -Wno-deprecated-declarations -Wno-unused-variable" +) +set(C_CPP_FLAGS + "${C_CPP_FLAGS} -Wno-unused-local-typedefs -Wno-unused-but-set-variable -Wno-deprecated-declarations -Wno-unused-variable" +) +set(C_CPP_FLAGS + "${C_CPP_FLAGS} -Werror=return-type -Werror=parentheses -Wfatal-errors -Wno-comment" +) set(C_CPP_FLAGS "${C_CPP_FLAGS} -Wno-format-overflow") set(C_CPP_FLAGS "${C_CPP_FLAGS} -O0 -g3 -fPIC -Wall") @@ -27,7 +33,6 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-pessimizing-move -Wno-reorder") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14") message("CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}") - set(DEP_INCLUDE ${DEP_INCLUDE} ./dep/) include(dep/iflytopcpp/module.cmake) include(dep/asio1.12.2/module.cmake) @@ -51,6 +56,5 @@ zadd_executable( ${DEP_SRC} src/main.cpp src/service/device_io_service.cpp - src/service/main_control_service.cpp - ) - + src/service/device_io_service_mock.cpp + src/service/main_control_service.cpp) diff --git a/dep/iflytopcpp b/dep/iflytopcpp index 574b15a..ea4118d 160000 --- a/dep/iflytopcpp +++ b/dep/iflytopcpp @@ -1 +1 @@ -Subproject commit 574b15ad972bcaae593cfc434f9f60e6d6a13ca8 +Subproject commit ea4118ddeb8238ccc065a2c11237ad7be056f89e diff --git a/src/main.cpp b/src/main.cpp index 2a7b5df..f9fb783 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,6 +8,7 @@ #include "zwebservice/zwebservice.hpp" // #include "service/device_io_service.hpp" +#include "service/device_io_service_mock.hpp" #include "service/main_control_service.hpp" using namespace iflytop; @@ -41,12 +42,18 @@ int main(int argc, char *argv[]) { shared_ptr type##_val(new type(__VA_ARGS__)); \ ServiceContrainer::get().regService(type##_val); +#define BUILD_AND_REG_MOCK_SERRVICE(type, mocktype, ...) \ + logger->info("build {}.....", #type); \ + shared_ptr type##_val(new mocktype(__VA_ARGS__)); \ + ServiceContrainer::get().regService(type##_val); + /*********************************************************************************************************************** * =======================================================Main======================================================== * ***********************************************************************************************************************/ int Main::main(int argc, char *argv[]) { string g_host_server_ip; string g_device_id; +#if 0 auto cli = ( // (required("-device_id") & value("device_id", g_device_id)).doc("device_id") // ); @@ -54,6 +61,7 @@ int Main::main(int argc, char *argv[]) { cout << make_man_page(cli, argv[0]); exit(-1); } +#endif logger->info("#"); logger->info("# company:{}", "ifytop"); @@ -64,7 +72,11 @@ int Main::main(int argc, char *argv[]) { GET_SERVICE(Config)->initialize(); if (!g_device_id.empty()) GET_SERVICE(Config)->set_deviceId(g_device_id); +#if 0 BUILD_AND_REG_SERRVICE(DeviceIOService); +#else + BUILD_AND_REG_MOCK_SERRVICE(DeviceIOService, DeviceIOServiceMock); +#endif GET_SERVICE(DeviceIOService)->initialize(); BUILD_AND_REG_SERRVICE(ZWebService); diff --git a/src/service/device_io_service.cpp b/src/service/device_io_service.cpp index f414c89..35ecd00 100644 --- a/src/service/device_io_service.cpp +++ b/src/service/device_io_service.cpp @@ -50,7 +50,7 @@ void DeviceIOService::initialize() { } })); } -void DeviceIOService::relayControl(uint16_t off, bool value) { +void DeviceIOService::relayControl(relay_device_type_t type, bool value) { /** * @brief * 0(16Byte) | 继电器0 ->继电器15 掩码 @@ -58,6 +58,7 @@ void DeviceIOService::relayControl(uint16_t off, bool value) { * 2(16Byte) | 继电器0 ->继电器15 继电器状态 * 3(16Byte) | 继电器16->继电器31 继电器状态 */ + uint32_t off = (uint32_t)type; uint32_t mask = 1 << off; uint32_t status = value ? mask : 0; @@ -69,7 +70,7 @@ void DeviceIOService::relayControl(uint16_t off, bool value) { EXEC_MODBUS(modbusMaster->modbus10(ksubboarddeviceid, 0, 4, reg, kovertime)); } -bool DeviceIOService::relayStateGet(uint16_t off) { +DeviceIOService::RelayDeviceState DeviceIOService::relayStateGet() { /** * @brief * 0(16Byte) | 继电器0 ->继电器15 掩码 @@ -77,10 +78,12 @@ bool DeviceIOService::relayStateGet(uint16_t off) { * 2(16Byte) | 继电器0 ->继电器15 继电器状态 * 3(16Byte) | 继电器16->继电器31 继电器状态 */ + DeviceIOService::RelayDeviceState state = {}; Modbus03Rx modbus03rx; EXEC_MODBUS(modbusMaster->modbus03(ksubboarddeviceid, 2, 2, modbus03rx, kovertime)); uint32_t regstate = uint32_t(modbus03rx.getReg(2)) | uint32_t(modbus03rx.getReg(3) << 16); - return (regstate & (1 << off)) != 0; + state.state = regstate; + return state; } uint16_t DeviceIOService::getReg(int index) { @@ -88,7 +91,7 @@ uint16_t DeviceIOService::getReg(int index) { EXEC_MODBUS(modbusMaster->modbus03(ksubboarddeviceid, index, 1, modbus03rx, kovertime)); return modbus03rx.getReg(index); } - +#if 0 /*********************************************************************************************************************** * ==================================================路由器电源控制=================================================== * ***********************************************************************************************************************/ @@ -133,20 +136,22 @@ void DeviceIOService::lightSetPowerState(bool lightpower) { logger->debug("lightSetPowerState {}", lightpower); relayControl(4, lightpower); } +#endif -uint32_t DeviceIOService::getinputState() { +DeviceIOService::InputDeviceState DeviceIOService::getinputState() { + DeviceIOService::InputDeviceState inputDeviceState; Modbus03Rx modbus03rx; EXEC_MODBUS(modbusMaster->modbus03(ksubboarddeviceid, 4, 2, modbus03rx, kovertime)); uint32_t regstate = uint32_t(modbus03rx.getReg(4)) | uint32_t(modbus03rx.getReg(5) << 16); - return regstate; + inputDeviceState.state = regstate; + return inputDeviceState; } void DeviceIOService::inputStateMonitorLoop() { ThisThread thisThread; while (!thisThread.getExitFlag()) { - uint32_t regstate = 0; try { - regstate = getinputState(); + uint32_t regstate = getinputState().state; for (size_t i = 0; i < 32; i++) { bool state = (regstate & (1 << i)) != 0; bool oldstate = (keystate & (1 << i)) != 0; @@ -228,6 +233,17 @@ void DeviceIOService::fanGetState(int id, float& power, uint16_t& error) { logger->debug("fanGetState, id={},power={},error={}", id, power, error); return; } + +float DeviceIOService::fanGetState(int id) { + float power = 0; + uint16_t error = 0; + fanGetState(id, power, error); + if (error != 0) { + return -1; + } + return power; +} + void DeviceIOService::fanSetState(int id, float power) { logger->debug("fanSetState, id={},power={}", id, power); int startindex = 0; diff --git a/src/service/device_io_service.hpp b/src/service/device_io_service.hpp index ff45eb7..8374fa2 100644 --- a/src/service/device_io_service.hpp +++ b/src/service/device_io_service.hpp @@ -56,9 +56,7 @@ class DeviceIOService : public enable_shared_from_this { * 2(16Byte) | 继电器0 ->继电器15 继电器状态 * 3(16Byte) | 继电器16->继电器31 继电器状态 */ - void relayControl(uint16_t off, bool value); - bool relayStateGet(uint16_t off); - uint16_t getReg(int index); + virtual uint16_t getReg(int index); public: typedef enum { @@ -66,6 +64,11 @@ class DeviceIOService : public enable_shared_from_this { kWaterImmersionSensor, // 水浸传感器 kHumanProximitySensor, // 人体接近传感器 } input_device_type_t; + class InputDeviceState { + public: + uint32_t state; + bool getState(input_device_type_t inputtype) { return (state & (1 << inputtype)) != 0; } + }; string input_device_type2str(input_device_type_t type) { switch (type) { @@ -80,45 +83,56 @@ class DeviceIOService : public enable_shared_from_this { } } + typedef enum { + kRouterPower, + kTouchScreenPower, + kUsbChargerPower, + kCameraPower, + kLightPower, + } relay_device_type_t; + + string relay_device_type2str(relay_device_type_t type) { + switch (type) { + case kRouterPower: + return "kRouterPower"; + case kTouchScreenPower: + return "kTouchScreenPower"; + case kUsbChargerPower: + return "kUsbChargerPower"; + case kCameraPower: + return "kCameraPower"; + case kLightPower: + return "kLightPower"; + default: + return "unknow"; + } + } + + class RelayDeviceState { + public: + uint32_t state; + bool getState(relay_device_type_t inputtype) { return (state & (1 << inputtype)) != 0; } + }; + public: DeviceIOService(){}; - void initialize(); - /********************************************************************************************************************* - * =====================================================路由器====================================================== * - *********************************************************************************************************************/ - bool routerGetPowerState(); - void routerSetPowerState(bool routepower); - /********************************************************************************************************************* - * ===================================================触控屏供电==================================================== * - *********************************************************************************************************************/ - bool touchScreenGetPowerState(); - void touchScreenSetPowerState(bool screenpower); - /********************************************************************************************************************* - * ==================================================USB充电器供电================================================== * - *********************************************************************************************************************/ - bool usbChargerGetPowerState(); - void usbChargerSetPowerState(bool usbpower); - /********************************************************************************************************************* - * ===================================================摄像头供电==================================================== * - *********************************************************************************************************************/ - bool cameraGetPowerState(); - void cameraSetPowerState(bool camerapower); + virtual void initialize(); /********************************************************************************************************************* - * ===================================================照明灯控制==================================================== * + * ===================================================继电器控制==================================================== * *********************************************************************************************************************/ - bool lightGetPowerState(); - void lightSetPowerState(bool lightpower); + virtual void relayControl(relay_device_type_t type, bool value); + virtual RelayDeviceState relayStateGet(); /********************************************************************************************************************* * =================================================监听IO输入状态================================================== * *********************************************************************************************************************/ nod::signal onInputStateChange; - uint32_t getinputState(); + virtual InputDeviceState getinputState(); /********************************************************************************************************************* * ===================================================温度传感器==================================================== * *********************************************************************************************************************/ - uint32_t getInterTemperature(); + virtual uint32_t getInterTemperature(); /********************************************************************************************************************* * ===================================================环境传感器==================================================== * @@ -151,20 +165,21 @@ class DeviceIOService : public enable_shared_from_this { uint16_t hcho; } env_sensor_state_t; - env_sensor_state_t getEnvSensorState(); + virtual env_sensor_state_t getEnvSensorState(); /********************************************************************************************************************* * ==================================================散热风扇控制=================================================== * *********************************************************************************************************************/ - void fanGetState(int id, float& power, uint16_t& error); - void fanSetState(int id, float power); + virtual void fanGetState(int id, float& power, uint16_t& error); + virtual float fanGetState(int id); + virtual void fanSetState(int id, float power); /********************************************************************************************************************* * ====================================================刷卡控制===================================================== * *********************************************************************************************************************/ nod::signal onidcard; - void idcardread(bool& state, string& info); + virtual void idcardread(bool& state, string& info); private: void inputStateMonitorLoop(); diff --git a/src/service/device_io_service_mock.cpp b/src/service/device_io_service_mock.cpp new file mode 100644 index 0000000..574d7ed --- /dev/null +++ b/src/service/device_io_service_mock.cpp @@ -0,0 +1,68 @@ +#include "device_io_service_mock.hpp" + +using namespace iflytop; +using namespace std; +using namespace core; + +#if 0 +class DeviceIOServiceMock : public DeviceIOService { + public: + DeviceIOServiceMock() : DeviceIOService(){}; + virtual ~DeviceIOServiceMock() {} + + virtual void initialize() override; + virtual uint16_t getReg(int index) override; + virtual void relayControl(relay_device_type_t type, bool value) override; + virtual RelayDeviceState relayStateGet() override; + virtual InputDeviceState getinputState() override; + virtual uint32_t getInterTemperature() override; + virtual env_sensor_state_t getEnvSensorState() override; + virtual void fanGetState(int id, float& power, uint16_t& error) override; + virtual float fanGetState(int id) override; + virtual void fanSetState(int id, float power) override; + virtual void idcardread(bool& state, string& info) override; +}; +#endif + +void DeviceIOServiceMock::initialize() {} +uint16_t DeviceIOServiceMock::getReg(int index) { return 9973; } +void DeviceIOServiceMock::relayControl(relay_device_type_t type, bool value) { + logger->info("relayControl type:{}, value:{}", relay_device_type2str(type), value); +} +DeviceIOServiceMock::RelayDeviceState DeviceIOServiceMock::relayStateGet() { + RelayDeviceState state; + state.state = 0x55; + return state; +} +DeviceIOServiceMock::InputDeviceState DeviceIOServiceMock::getinputState() { + InputDeviceState state; + state.state = 0x55; + return state; +} +uint32_t DeviceIOServiceMock::getInterTemperature() { return 50; } +DeviceIOService::env_sensor_state_t DeviceIOServiceMock::getEnvSensorState() { + env_sensor_state_t state; + + state.wind_speed = 9973; + state.wind_direction = 9973; + state.temperature = 9973; + state.humidity = 9973; + state.noise = 9973; + state.pm2_5 = 9973; + state.pm10 = 9973; + state.co2 = 9973; + state.atmospheric_pressure = 9973; + state.tvoc = 9973; + state.hcho = 9973; + return state; +} +void DeviceIOServiceMock::fanGetState(int id, float& power, uint16_t& error) { + power = 0; + error = 0; +} +float DeviceIOServiceMock::fanGetState(int id) { return 9973; } +void DeviceIOServiceMock::fanSetState(int id, float power) { logger->info("fanSetState id:{}, power:{}", id, power); } +void DeviceIOServiceMock::idcardread(bool& state, string& info) { + state = true; + info = "mockinfo"; +} \ No newline at end of file diff --git a/src/service/device_io_service_mock.hpp b/src/service/device_io_service_mock.hpp new file mode 100644 index 0000000..86f4f94 --- /dev/null +++ b/src/service/device_io_service_mock.hpp @@ -0,0 +1,52 @@ +// +// Created by zwsd +// + +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "service/device_io_service.hpp" +/** + * @brief + * + * service: DeviceIOService + * + * 监听事件: + * 依赖状态: + * 依赖服务: + * 作用: + * + * 编写参考:http://192.168.1.3:3000/project_intelligent_light_pole/subboard + */ + +namespace iflytop { +using namespace std; +using namespace core; +using namespace nod; +class DeviceIOServiceMock : public DeviceIOService { + ENABLE_LOGGER(DeviceIOServiceMock); + public: + DeviceIOServiceMock() : DeviceIOService(){}; + virtual ~DeviceIOServiceMock() {} + + virtual void initialize() override; + virtual uint16_t getReg(int index) override; + virtual void relayControl(relay_device_type_t type, bool value) override; + virtual RelayDeviceState relayStateGet() override; + virtual InputDeviceState getinputState() override; + virtual uint32_t getInterTemperature() override; + virtual env_sensor_state_t getEnvSensorState() override; + virtual void fanGetState(int id, float& power, uint16_t& error) override; + virtual float fanGetState(int id) override; + virtual void fanSetState(int id, float power) override; + virtual void idcardread(bool& state, string& info) override; +}; +} // namespace iflytop \ No newline at end of file diff --git a/src/service/main_control_service.cpp b/src/service/main_control_service.cpp index 65cf9d0..e66d345 100644 --- a/src/service/main_control_service.cpp +++ b/src/service/main_control_service.cpp @@ -1,12 +1,28 @@ #include "main_control_service.hpp" +#include "iflytopcpp/core/components/string_util.hpp" #include "version.hpp" using namespace iflytop; using namespace core; using namespace std; +/*********************************************************************************************************************** + * ======================================================宏定义======================================================= * + ***********************************************************************************************************************/ + +#define SET_DEVICE_STATE(id, value, uint) \ + receipt["deviceState"][index]["id"] = id; \ + receipt["deviceState"][index]["value"] = fmt::format("{}", value); \ + receipt["deviceState"][index]["unit"] = uint; \ + index++; + +/********************************************************************************************************************* + * ======================================================代码======================================================= * + *********************************************************************************************************************/ + void MainControlService::initialize() { GET_TO_SERVICE(m_zwebService); + GET_TO_SERVICE(m_deviceIOService); // 监听从webservice来的websocket消息 m_zwebService->startWork([this](const json& command, json& receipt) { @@ -39,6 +55,95 @@ void MainControlService::processReceiveMessage(fromwhere_t fromwhere, const json } /********************************************************************************************************************* - * ======================================================其他======================================================= * + * ================================================硬件测试=============================================================* *********************************************************************************************************************/ + else if (in["command"] == "getDeviceState") { +#if 0 +{ + "deviceState":[ + { + "id":"wind_speed", + "value":"12", + "unit":"m/s" + } + ] +} +#endif + int index = 0; + DeviceIOService::env_sensor_state_t env = m_deviceIOService->getEnvSensorState(); + SET_DEVICE_STATE("wind_speed", env.wind_speed, "m/s"); + SET_DEVICE_STATE("wind_direction", env.wind_direction, "m/s"); + SET_DEVICE_STATE("temperature", env.temperature, "℃"); + SET_DEVICE_STATE("humidity", env.humidity, "%"); + SET_DEVICE_STATE("noise", env.noise, "dB"); + SET_DEVICE_STATE("pm2_5", env.pm2_5, "ug/m³"); + SET_DEVICE_STATE("pm10", env.pm10, "ug/m³"); + SET_DEVICE_STATE("co2", env.co2, "ppm"); + SET_DEVICE_STATE("atmospheric_pressure", env.atmospheric_pressure, "hPa"); + SET_DEVICE_STATE("tvoc", env.tvoc, "ppm"); + SET_DEVICE_STATE("hcho", env.hcho, "mg/m³"); + SET_DEVICE_STATE("InterTemperature", m_deviceIOService->getInterTemperature(), "℃"); + + SET_DEVICE_STATE("fan1powerRate", m_deviceIOService->fanGetState(0), "%"); + SET_DEVICE_STATE("fan2powerRate", m_deviceIOService->fanGetState(1), "%"); + + auto relaystate = m_deviceIOService->relayStateGet(); + SET_DEVICE_STATE("routerPower", relaystate.getState(DeviceIOService::kRouterPower), "-"); + SET_DEVICE_STATE("touchScreenPower", relaystate.getState(DeviceIOService::kTouchScreenPower), "-"); + SET_DEVICE_STATE("usbChargerPower", relaystate.getState(DeviceIOService::kUsbChargerPower), "-"); + SET_DEVICE_STATE("cameraPower", relaystate.getState(DeviceIOService::kCameraPower), "-"); + SET_DEVICE_STATE("lightPower", relaystate.getState(DeviceIOService::kLightPower), "-"); + + auto inputdeviceState = m_deviceIOService->getinputState(); + SET_DEVICE_STATE("emergency", inputdeviceState.getState(DeviceIOService::kEmergency), "-"); + SET_DEVICE_STATE("waterImmersionSensor", inputdeviceState.getState(DeviceIOService::kWaterImmersionSensor), "-"); + SET_DEVICE_STATE("humanProximitySensor", inputdeviceState.getState(DeviceIOService::kHumanProximitySensor), "-"); + } else if (in["command"] == "relayControl") { + int type = in["type"]; + bool value = in["value"]; + m_deviceIOService->relayControl((DeviceIOService::relay_device_type_t)type, value); + } else if (in["command"] == "fanSetState") { + int id = in["id"]; + float power = in["power"]; + m_deviceIOService->fanSetState(id, power); + } else if (in["command"] == "relayStateGet") { + auto relaystate = m_deviceIOService->relayStateGet(); + receipt["state"]["rawState"] = StringUtil().bytet2Binary(relaystate.state, 32, false); + receipt["state"]["routerPower"] = relaystate.getState(DeviceIOService::kRouterPower); + receipt["state"]["touchScreenPower"] = relaystate.getState(DeviceIOService::kTouchScreenPower); + receipt["state"]["usbChargerPower"] = relaystate.getState(DeviceIOService::kUsbChargerPower); + receipt["state"]["cameraPower"] = relaystate.getState(DeviceIOService::kCameraPower); + receipt["state"]["lightPower"] = relaystate.getState(DeviceIOService::kLightPower); + } else if (in["command"] == "inputStateGet") { + auto inputdeviceState = m_deviceIOService->getinputState(); + receipt["state"]["rawState"] = StringUtil().bytet2Binary(inputdeviceState.state, 32, false); + receipt["state"]["emergency"] = inputdeviceState.getState(DeviceIOService::kEmergency); + receipt["state"]["waterImmersionSensor"] = inputdeviceState.getState(DeviceIOService::kWaterImmersionSensor); + receipt["state"]["humanProximitySensor"] = inputdeviceState.getState(DeviceIOService::kHumanProximitySensor); + } else if (in["command"] == "idcardread") { + bool state = false; + string info; + m_deviceIOService->idcardread(state, info); + receipt["state"] = state; + receipt["info"] = info; + } else if (in["command"] == "getInterTemperature") { + receipt["temperature"] = m_deviceIOService->getInterTemperature(); + } else if (in["command"] == "getEnvSensorState") { + DeviceIOService::env_sensor_state_t env = m_deviceIOService->getEnvSensorState(); + receipt["wind_speed"] = env.wind_speed; + receipt["wind_direction"] = env.wind_direction; + receipt["temperature"] = env.temperature; + receipt["humidity"] = env.humidity; + receipt["noise"] = env.noise; + receipt["pm2_5"] = env.pm2_5; + receipt["pm10"] = env.pm10; + receipt["co2"] = env.co2; + receipt["atmospheric_pressure"] = env.atmospheric_pressure; + receipt["tvoc"] = env.tvoc; + receipt["hcho"] = env.hcho; + } else if (in["command"] == "fanGetState") { + // int id = in["id"]; + receipt["power"][0] = m_deviceIOService->fanGetState(0); + receipt["power"][1] = m_deviceIOService->fanGetState(0); + } } diff --git a/src/service/main_control_service.hpp b/src/service/main_control_service.hpp index c9dc6f2..60b0d9b 100644 --- a/src/service/main_control_service.hpp +++ b/src/service/main_control_service.hpp @@ -17,9 +17,9 @@ #include "iflytopcpp/core/spdlogfactory/logger.hpp" // #include "configs/config.hpp" +#include "service/device_io_service.hpp" #include "zservice_container/zservice_container.hpp" #include "zwebservice/zwebservice.hpp" - /** * @brief * @@ -39,6 +39,7 @@ class MainControlService : public enable_shared_from_this { ENABLE_LOGGER(MainControlService); shared_ptr m_zwebService; + shared_ptr m_deviceIOService; typedef enum { kzwebService, } fromwhere_t; diff --git a/webapp/debug/device_test.html b/webapp/debug/device_test.html new file mode 100644 index 0000000..0974e1a --- /dev/null +++ b/webapp/debug/device_test.html @@ -0,0 +1,241 @@ + + + + + + + + + 日志配置 + + + + + + + +
+

deviceStates

+ + + + + + + + + + + + + + + + +
KeyValue单位
------------
+ + +
+ + + + +
+

测试

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
relayControl type value + + +
fanSetState id value + + +
relayStateGet- +
inputStateGet- +
idcardread- +
getInterTemperature- +
getExterTemperature- +
fanGetState- +
+
+ + + + + + + + \ No newline at end of file diff --git a/webapp/debug/index.html b/webapp/debug/index.html index e69de29..42f5a6e 100644 --- a/webapp/debug/index.html +++ b/webapp/debug/index.html @@ -0,0 +1,88 @@ + + + + + + + + + 日志配置 + + + + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/webapp/debug/logger.html b/webapp/debug/logger.html index 42f5a6e..cc3fbf8 100644 --- a/webapp/debug/logger.html +++ b/webapp/debug/logger.html @@ -39,18 +39,14 @@ diff --git a/webapp/js/zcmd.js b/webapp/js/zcmd.js index 2a84226..e23e636 100644 --- a/webapp/js/zcmd.js +++ b/webapp/js/zcmd.js @@ -17,20 +17,56 @@ class ZCommand { this.connecting = false; this.cmdServerListener = new Map(); this.onConnect; - this.firstConnect = true; + this.onReceipts = []; + this.onReports = []; + this.onSendraws = []; + this.onConnects = []; + this.onDisConconnects = []; + } + call_onReceipts(message, receipt) { + for (var i = 0; i < this.onReceipts.length; i++) { + this.onReceipts[i](message, receipt); + } + } + call_onReports(message) { + for (var i = 0; i < this.onReports.length; i++) { + this.onReports[i](message); + } + } + + call_onSendraw(message) { + for (var i = 0; i < this.onSendraws.length; i++) { + this.onSendraws[i](message); + } + } + + call_onConnect() { + for (var i = 0; i < this.onConnects.length; i++) { + this.onConnects[i](); + } + } + + call_onDisConconnect() { + for (var i = 0; i < this.onDisConconnects.length; i++) { + this.onDisConconnects[i](); + } + } + + + start_auto_connect(wsurl, onFirstConnect) { var ThisClass = this; this.onFirstConnect = onFirstConnect; this.wsurl = wsurl; ThisClass.connectToCmdServer(); - setInterval(function () { - if (!ThisClass.isConnect()) { - console.info("ZcmdService try connect to server"); - ThisClass.connectToCmdServer(); - } - }, 2000); + // setInterval(function () { + // if (!ThisClass.isConnect()) { + // console.info("ZcmdService try connect to server"); + // ThisClass.connectToCmdServer(); + // } + // }, 2000); } isConnect() { @@ -50,16 +86,14 @@ class ZCommand { ThisClass.connecting = false; ThisClass.connected = true; console.info("ZcmdService connect to server"); - if (ThisClass.firstConnect && ThisClass.onFirstConnect) { - ThisClass.onFirstConnect(); - } - ThisClass.firstConnect = false; + ThisClass.call_onConnect(); } this.cmdServer.onerror = function () { ThisClass.connecting = false; ThisClass.connected = false; - console.info("websocket onerror"); + console.error("ZcmdService connect to server error"); + ThisClass.connectToCmdServer(); }; var ThisClass = this; this.cmdServer.onmessage = function (event) { @@ -67,17 +101,16 @@ class ZCommand { var messageId = obj["messageId"]; if (ThisClass.cmdServerListener.has(messageId)) { var txcontext = ThisClass.cmdServerListener.get(messageId); - txcontext.onreceipt(txcontext, obj); + txcontext.onReceipt(txcontext, obj); ThisClass.cmdServerListener.delete(messageId); } else { - if (ThisClass.onreport) { - ThisClass.onreport(obj) - } + ThisClass.call_onReports(obj); } } this.cmdServer.onclose = function () { ThisClass.connected = false; console.warn("websocket close"); + ThisClass.call_onDisConconnect(); } }; @@ -101,17 +134,13 @@ class ZCommand { ThisClass.cmdServerListener.delete(messageId); }, txcontext.overtime) - txcontext.onreceipt = function (_txcontext, receipt) { + txcontext.onReceipt = function (_txcontext, receipt) { clearTimeout(_txcontext.timerId) _txcontext.onMessage(receipt) - if (ThisClass.onreceipt) { - ThisClass.onreceipt(_txcontext.message, receipt) - } + ThisClass.call_onReceipts(_txcontext.message, receipt) } this.cmdServerListener.set(messageId, txcontext); - if (this.onsendraw) { - this.onsendraw(txcontext.message); - } + this.call_onSendraw(txcontext.message); this.cmdServer.send(JSON.stringify(txcontext.message)); }; @@ -135,15 +164,23 @@ class ZCommand { ) return p; }; - set_onreceipt(onreceipt) { - this.onreceipt = onreceipt; + set_onReceipt(onReceipt) { + this.onReceipts.push(onReceipt); + } + set_onReport(onReport) { + this.onReports.push(onReport); } - set_onreport(onreport) { - this.onreport = onreport; + set_onSendraw(onSendraw) { + this.onSendraws.push(onSendraw); } - set_onsendraw(onsendraw) { - this.onsendraw = onsendraw; + set_onConnect(onConnect) { + this.onConnects.push(onConnect); } + set_onDisConconnect(onDisConconnect) { + this.onDisConconnects.push(onDisConconnect); + } + + } // var zcmd = new ZCommand(); // zcmd.start_auto_connect(() => { }); \ No newline at end of file