Browse Source

添加硬件测试

master
zhaohe 3 years ago
parent
commit
671582af33
  1. 12
      .vscode/settings.json
  2. 18
      CMakeLists.txt
  3. 2
      dep/iflytopcpp
  4. 12
      src/main.cpp
  5. 32
      src/service/device_io_service.cpp
  6. 81
      src/service/device_io_service.hpp
  7. 68
      src/service/device_io_service_mock.cpp
  8. 52
      src/service/device_io_service_mock.hpp
  9. 107
      src/service/main_control_service.cpp
  10. 3
      src/service/main_control_service.hpp
  11. 241
      webapp/debug/device_test.html
  12. 88
      webapp/debug/index.html
  13. 20
      webapp/debug/logger.html
  14. 95
      webapp/js/zcmd.js

12
.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"
}
}

18
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)

2
dep/iflytopcpp

@ -1 +1 @@
Subproject commit 574b15ad972bcaae593cfc434f9f60e6d6a13ca8
Subproject commit ea4118ddeb8238ccc065a2c11237ad7be056f89e

12
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> 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> 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);

32
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;

81
src/service/device_io_service.hpp

@ -56,9 +56,7 @@ class DeviceIOService : public enable_shared_from_this<DeviceIOService> {
* 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<DeviceIOService> {
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<DeviceIOService> {
}
}
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<void(input_device_type_t inputtype, bool value)> 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<DeviceIOService> {
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<void(string cardinfo)> onidcard;
void idcardread(bool& state, string& info);
virtual void idcardread(bool& state, string& info);
private:
void inputStateMonitorLoop();

68
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";
}

52
src/service/device_io_service_mock.hpp

@ -0,0 +1,52 @@
//
// Created by zwsd
//
#pragma once
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <set>
#include <sstream>
#include <string>
#include <vector>
#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

107
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);
}
}

3
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<MainControlService> {
ENABLE_LOGGER(MainControlService);
shared_ptr<ZWebService> m_zwebService;
shared_ptr<DeviceIOService> m_deviceIOService;
typedef enum {
kzwebService,
} fromwhere_t;

241
webapp/debug/device_test.html

@ -0,0 +1,241 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.js"></script>
<script src="../js/zcmd.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>日志配置</title>
<style>
</style>
<script>
</script>
</head>
<body>
<script>
var zcmd = new ZCommand();
zcmd.set_onSendraw(function (data) {
console.log("zcmd send:" + JSON.stringify(data, null, 0));
});
zcmd.set_onReceipt(function (tx, rx) {
console.log("zcmd receipt:" + JSON.stringify(rx, null, 0));
});
</script>
<!--
/*******************************************************************************************************************
* =================================================deviceStates================================================== *
*******************************************************************************************************************/
-->
<div>
<h1>deviceStates</h1>
<select id="RefreshPeriod">
<option value=1000>1s</option>
<option value=2000>2s</option>
<option value=3000>3s</option>
<option value=4000>4s</option>
<option value=5000>5s</option>
</select>
<!-- 开始刷新 -->
<button id="startRefresh">Start Refresh</button>
<!-- 停止刷新 -->
<button id="stopRefresh">Stop Refresh</button>
<table id="deviceStates">
<tr>
<td>Key</td>
<td>Value</td>
<td>单位</td>
</tr>
<tr>
<td>----</td>
<td>----</td>
<td>----</td>
</tr>
</table>
<script>
zcmd.set_onConnect(function () {
alert("connect to server");
});
var refreshId;
$("#startRefresh").click(function () {
if (refreshId)
clearInterval(refreshId);
refreshId = setInterval(function () {
zcmd.send_message({
"command": "getDeviceState",
"need_receipt": true,
}, 4000).then((data) => {
console.log(data);
var html = "";
html += "<tr>";
html += "<td>Key</td>";
html += "<td>Value</td>";
html += "<td>单位</td>";
html += "</tr>";
for (var i = 0; i < data.deviceState.length; i++) {
html += "<tr>";
html += "<td>" + data.deviceState[i].id + "</td>";
html += "<td>" + data.deviceState[i].value + "</td>";
html += "<td>" + data.deviceState[i].unit + "</td>";
html += "</tr>";
}
$("#deviceStates").html(html);
});
}, $("#RefreshPeriod").val());
});
$("#stopRefresh").click(function () {
clearInterval(refreshId);
});
</script>
</div>
<!--
/*******************************************************************************************************************
* ==================================================测试按键=================================================== *
*******************************************************************************************************************/
-->
<!--
type(option),value(false,true),relayControl
type->option:
0,kRouterPower,
1,kTouchScreenPower,
2,kUsbChargerPower,
3,kCameraPower,
4,kLightPower,
-->
<div>
<h1>测试</h1>
<table>
<tr>
<td>relayControl type value</td>
<td>
<select id="relayControl_type">
<option value=0>kRouterPower</option>
<option value=1>kTouchScreenPower</option>
<option value=2>kUsbChargerPower</option>
<option value=3>kCameraPower</option>
<option value=4>kLightPower</option>
</select>
<select id="relayControl_value">
<option value=0>false</option>
<option value=1>true</option>
</select>
</td>
<td> <button id="relayControl">Trigger</button> </td>
<script>
$("#relayControl").click(function () {
zcmd.send_message({
"command": "relayControl",
"need_receipt": true,
"type": Number($("#relayControl_type").val()),
"value": ($("#relayControl_value").val() == 'true'),
}, 4000);
});
</script>
</tr>
<tr>
<td>fanSetState id value</td>
<td>
<select id="fanSetState_id">
<option value=0>0</option>
<option value=1>1</option>
</select>
<select id="fanSetState_power">
<option value=0>0</option>
<option value=10>10</option>
<option value=20>20</option>
<option value=30>30</option>
<option value=40>40</option>
<option value=50>50</option>
<option value=60>60</option>
<option value=70>70</option>
<option value=80>80</option>
<option value=90>90</option>
<option value=100>100</option>
</select>
</td>
<td> <button id="fanSetState">Trigger</button> </td>
<script>
$("#fanSetState").click(function () {
zcmd.send_message({
"command": "fanSetState",
"need_receipt": true,
"id": Number($("#fanSetState_id").val()),
"power": Number($("#fanSetState_power").val()),
}, 4000).then((data) => {
// console.log(data);
});
});
</script>
</tr>
<tr>
<td>relayStateGet</td>
<td>-</td>
<td><button
onclick='zcmd.send_message({"command": "relayStateGet"},1000).then((data) => {alert(JSON.stringify(data,null,2))})'>Trigger</button>
</td>
</tr>
<tr>
<td>inputStateGet</td>
<td>-</td>
<td><button
onclick='zcmd.send_message({"command": "inputStateGet"},1000).then((data) => {alert(JSON.stringify(data,null,2))})'>Trigger</button>
</td>
</tr>
<tr>
<td>idcardread</td>
<td>-</td>
<td><button
onclick='zcmd.send_message({"command": "idcardread"},1000).then((data) => {alert(JSON.stringify(data,null,2))})'>Trigger</button>
</td>
</tr>
<tr>
<td>getInterTemperature</td>
<td>-</td>
<td><button
onclick='zcmd.send_message({"command": "getInterTemperature"},1000).then((data) => {alert(JSON.stringify(data,null,2))})'>Trigger</button>
</td>
</tr>
<tr>
<td>getExterTemperature</td>
<td>-</td>
<td><button
onclick='zcmd.send_message({"command": "getExterTemperature"},1000).then((data) => {alert(JSON.stringify(data,null,2))})'>Trigger</button>
</td>
</tr>
<tr>
<td>fanGetState</td>
<td>-</td>
<td><button
onclick='zcmd.send_message({"command": "fanGetState"},1000).then((data) => {alert(JSON.stringify(data,null,2))})'>Trigger</button>
</td>
</tr>
</table>
</div>
<script>
$(function () {
ZWSURL = "ws://127.0.0.1:19000";
zcmd.start_auto_connect(ZWSURL);
});
</script>
</body>
</html>

88
webapp/debug/index.html

@ -0,0 +1,88 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.js"></script>
<script src="../js/zcmd.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>日志配置</title>
<style>
</style>
<script>
</script>
</head>
<body>
<!--
选择框:main,service
选择框:等级(debug,info,warning,error)
设置日志等级:按钮
-->
<div>
<select id="logger">
<option value="main">main</option>
<option value="service">service</option>
</select>
<select id="level">
<option value=0>trace</option>
<option value=1>debug</option>
<option value=2>info</option>
<option value=3>warning</option>
<option value=4>error</option>
<option value=5>critical</option>
</select>
<button id="set">设置日志等级</button>
</div>
<script>
$(function () {
var zcmd = new ZCommand();
zcmd.onsendraw = function (data/*json*/) {
console.log("zcmd send:" + JSON.stringify(data, null, 0));
}
zcmd.onreceipt = function (tx, rx) {
console.log("zcmd receipt:" + JSON.stringify(rx, null, 0));
}
ZWSURL = "ws://127.0.0.1:19000";
//连接后端
zcmd.start_auto_connect(ZWSURL, () => {
console.log("zcmd connected");
//请求日志名称
zcmd.send_message({
"command": "loggerGetAllLoggers",
"need_receipt": true,
}, 4000).then((data) => {
console.log(data);
var html = "";
for (var i = 0; i < data.loggers.length; i++) {
html += "<option value='" + data.loggers[i] + "'>" + data.loggers[i] + "</option>";
}
$("#logger").html(html);
});
$("#set").click(function () {
zcmd.send_message({
"command": "loggerSetLevel",
"need_receipt": true,
"loggerLevel": Number($("#level").val()),
"loggerName": $("#logger").val(),
}, 4000).then((data) => {
if (data.success) {
alert("设置成功");
} else {
alert("设置失败")
}
});
});
});
});
</script>
</body>
</html>

20
webapp/debug/logger.html

@ -39,18 +39,14 @@
<script>
$(function () {
var zcmd = new ZCommand();
zcmd.onsendraw = function (data/*json*/) {
zcmd.set_onSendraw(function (data) {
console.log("zcmd send:" + JSON.stringify(data, null, 0));
}
zcmd.onreceipt = function (tx, rx) {
});
zcmd.set_onReceipt(function (tx, rx) {
console.log("zcmd receipt:" + JSON.stringify(rx, null, 0));
}
ZWSURL = "ws://127.0.0.1:19000";
//连接后端
zcmd.start_auto_connect(ZWSURL, () => {
});
zcmd.set_onConnected(function () {
console.log("zcmd connected");
//请求日志名称
zcmd.send_message({
"command": "loggerGetAllLoggers",
@ -63,7 +59,7 @@
}
$("#logger").html(html);
});
});
$("#set").click(function () {
zcmd.send_message({
"command": "loggerSetLevel",
@ -78,7 +74,9 @@
}
});
});
});
ZWSURL = "ws://127.0.0.1:19000";
zcmd.start_auto_connect(ZWSURL);
});
</script>

95
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(() => { });
Loading…
Cancel
Save