Browse Source

update

master
zhaohe 2 years ago
parent
commit
10bc6e738d
  1. 4
      src/db/db_service.cpp
  2. 88
      src/main_control_service.cpp
  3. 2
      src/main_control_service.hpp
  4. 125
      src/service/disinfection_ctl_service.cpp
  5. 13
      src/service/disinfection_ctl_service.hpp

4
src/db/db_service.cpp

@ -151,10 +151,10 @@ id setting_name setting_name_ch val_upper_limit val_lower_limi
storage.insert(Setting{5, "max_humidity", "允许消毒最大湿度", 0, 100, 1, 90});
if (storage.get_all<Setting>(where(c(&Setting::id) == 6)).size() == 0)
storage.insert(Setting{6, "drainage_pump_speed", "排液蠕动泵转速", 0, 2000, 2, 500});
storage.insert(Setting{6, "drainage_pump_speed", "排液蠕动泵转速", 0, 350, 2, 300});
if (storage.get_all<Setting>(where(c(&Setting::id) == 7)).size() == 0)
storage.insert(Setting{7, "injection_pump_speed", "喷射蠕动泵转速", 0, 2000, 2, 500});
storage.insert(Setting{7, "injection_pump_speed", "喷射蠕动泵转速", 0, 350, 2, 300});
suc = true;
} catch (const std::exception& e) {

88
src/main_control_service.cpp

@ -59,7 +59,16 @@ void MainControlService::initialize() {
m_iflytopwsService.reset(new IflytopFrontEndService());
m_iflytopwsService->initialize("0.0.0.0");
m_iflytopwsService->onMessage.connect([this](weak_ptr<WebSocket> webSocket, json& cmd, json& receipt) { processFrontEndMessage(webSocket, cmd, receipt); });
m_iflytopwsService->onMessage.connect([this](weak_ptr<WebSocket> webSocket, json& cmd, json& receipt) {
string cmdstr = cmd["command"];
if (cmdstr != "getState") {
logger->info("rx:{}", cmd.dump());
}
processFrontEndMessage(webSocket, cmd, receipt);
if (cmdstr != "getState") {
logger->info("tx:{}", receipt.dump());
}
});
m_iflytopwsService->onUdpCmdMessage.connect([this](struct sockaddr_in* from, char* data, size_t len) {
//
@ -162,77 +171,24 @@ json MainControlService::createSensorDataJson() {
report["waterImmersionSensor1"] = 1;
report["waterImmersionSensor2"] = 1;
// Water immersion sensor
report["disinfectant_volume"] = 99;
report["h2o2_1"] = 10;
report["temp_1"] = 11;
report["humid_1"] = 12;
report["saturation_1"] = 13;
report["h2o2_2"] = 14;
report["temp_2"] = 15;
report["humid_2"] = 16;
report["saturation_2"] = 17;
report["h2o2_3"] = 18;
report["temp_3"] = 19;
report["humid_3"] = 20;
report["saturation_3"] = 21;
report["h2o2_2"] = -1;
report["temp_2"] = -1;
report["humid_2"] = -1;
report["saturation_2"] = -1;
report["h2o2_3"] = -1;
report["temp_3"] = -1;
report["humid_3"] = -1;
report["saturation_3"] = -1;
return report;
}
// {"command":"startReplenishingFluids","messageId":"startReplenishingFluids","stopAt":123}
void MainControlService::processFrontEndMessage(weak_ptr<WebSocket> webSocket, json& cmd, json& receipt) {
#if 0
//login
{
"command":"login",
"userid":"zhaohe",
"passwd":"xxxxxx"
}
//unlogin
{
"command":"unlogin"
}
//chpasswd
{
"command":"chpasswd",
"userId":"1",
"passwd":"xxxxxxxxx"
}
//shutdown
{
"command":"shutdown",
"delayms": 10,
}
//
//startDisinfection
{
"command":"startDisinfection",
}
//stopDisinfection
{
"command":"stopDisinfection",
}
---------------------------------------------------
//getState
{
"command":"getState",
}
//receipt
{
"ackcode":0
"state":{
//存放所有当前设备的状态信息
"loginuser":"",
"permissionLevel":1,
"workState":0, //0,idle,1,消毒中,2,测试中
"estimatedRemainingTimeS":10000,//预计消毒结束剩余时间,数值是不断修正的,可能会变大。
"disinfection_id":"2023-0825-111059"
}
}
#endif
string cmdstr = cmd["command"];
/*******************************************************************************
* LOGIN_CMD *
@ -285,7 +241,11 @@ void MainControlService::processFrontEndMessage(weak_ptr<WebSocket> webSocket, j
if (cmdstr == "shutdown") {
int delayms = jsonGet<int>(cmd["delayms"]);
logger->info("shutdown {} ms", delayms);
// system("shutdown -r -t");
m_autoshutdownThread.reset(new Thread("autoShutdown",[delayms]() {
ThisThread thisThread;
thisThread.sleepForMs(delayms);
system("shutdown -h now");
}));
return;
}

2
src/main_control_service.hpp

@ -60,6 +60,8 @@ class MainControlService : public enable_shared_from_this<MainControlService> {
unique_ptr<Thread> m_reportThread;
unique_ptr<Thread> m_autoshutdownThread;
public:
MainControlService(){};
void initialize();

125
src/service/disinfection_ctl_service.cpp

@ -2,6 +2,44 @@
using namespace iflytop;
using namespace std;
void DisinfectionCtrlService::drainingPump_open() { m_zcanHost->pumpctrl_c1004(1, 300, -300, 1, 20); }
void DisinfectionCtrlService::drainingPump_close() { m_zcanHost->pumpctrl_c1004(1, 300, 0, 1, 20); }
void DisinfectionCtrlService::replenishingFluidsPump_open() { m_zcanHost->pumpctrl_c1004(1, 300, 300, 1, 20); }
void DisinfectionCtrlService::replenishingFluidsPump_close() { m_zcanHost->pumpctrl_c1004(1, 300, 0, 1, 20); }
void DisinfectionCtrlService::sprayLiquidPump_open() { m_zcanHost->pumpctrl_c1004(1, 300, 300, 1, 10); }
void DisinfectionCtrlService::sprayLiquidPump_close() { m_zcanHost->pumpctrl_c1004(1, 300, 0, 1, 10); }
void DisinfectionCtrlService::airCompressor(bool val) {
if (val) {
m_zcanHost->writeio(0, 1);
m_zcanHost->writeio(1, 1);
} else {
m_zcanHost->writeio(0, 0);
m_zcanHost->writeio(1, 0);
}
}
void DisinfectionCtrlService::blower_setPower(bool val) {
if (val) {
m_zcanHost->writeio(2, 1);
m_zcanHost->writeio(3, 1);
} else {
m_zcanHost->writeio(2, 0);
m_zcanHost->writeio(3, 0);
}
}
void DisinfectionCtrlService::heartingPlate_setPower(bool val) {
if (val) {
m_zcanHost->writeio(4, 1);
m_zcanHost->writeio(5, 1);
} else {
m_zcanHost->writeio(4, 0);
m_zcanHost->writeio(5, 0);
}
}
DisinfectionCtrlService::DisinfectionCtrlService() {}
string DisinfectionCtrlService::createDisinfectionID() {
@ -34,24 +72,10 @@ void DisinfectionCtrlService::startDisinfection(int loglevel, float roomVol) {
stopDisinfection();
}
m_disinfectionID = createDisinfectionID();
m_remaintime = 20 * 60;
m_isDisinfectionRunning = true;
logger->info("startDisinfection {} {} {}", loglevel, roomVol, m_disinfectionID);
m_drainingWorkState = 1;
m_disinfectionID = createDisinfectionID();
m_remaintime = loglevel * 20 * 60;
m_zcanHost->writeio(0, 1);
m_zcanHost->writeio(1, 1);
sleep(1);
m_zcanHost->writeio(2, 1);
m_zcanHost->writeio(3, 1);
sleep(1);
m_zcanHost->writeio(4, 1);
m_zcanHost->writeio(5, 1);
sleep(1);
m_zcanHost->pumpctrl_c1004(2, 300, 1000);
m_disinfectionThread.reset(new Thread("m_disinfectionThread", [this, loglevel]() {
m_disinfectionThread.reset(new Thread("m_disinfectionThread", [this, roomVol, loglevel]() {
// do something
// m_disinfectionThread->detach();
ThisThread thisThread;
@ -59,30 +83,44 @@ void DisinfectionCtrlService::startDisinfection(int loglevel, float roomVol) {
// 发送开始拍照消息
logger->info("start disinfection {}", m_disinfectionID);
m_isDisinfectionRunning = true;
m_disinfectionWorkState = 1;
logger->info("startDisinfection {} {} {}", loglevel, roomVol, m_disinfectionID);
airCompressor(true);
usleep(100 * 1000);
blower_setPower(true);
usleep(100 * 1000);
heartingPlate_setPower(true);
usleep(100 * 1000);
sprayLiquidPump_open();
while (!thisThread.getExitFlag()) {
thisThread.sleepForMs(1000);
if (m_disinfectionWorkState == 2) {
logger->info("disinfection paused {} {}", m_disinfectionID, m_remaintime);
continue;
}
m_remaintime--;
if (m_remaintime == 0) {
logger->info("disinfection finished {}", m_disinfectionID);
break;
}
logger->info("disinfection running {} {}s", m_disinfectionID, m_remaintime);
thisThread.sleepForMs(1000);
}
m_remaintime = 0;
logger->info("stop disinfection {}", m_disinfectionID);
m_zcanHost->writeio(0, 0);
m_zcanHost->writeio(1, 0);
sleep(1);
m_zcanHost->writeio(2, 0);
m_zcanHost->writeio(3, 0);
sleep(1);
m_zcanHost->writeio(4, 0);
m_zcanHost->writeio(5, 0);
sleep(1);
m_zcanHost->pumpctrl_c1004(2, 300, 0);
m_disinfectionWorkState = 0;
airCompressor(false);
usleep(10 * 1000);
blower_setPower(false);
usleep(10 * 1000);
heartingPlate_setPower(false);
usleep(10 * 1000);
sprayLiquidPump_close();
m_disinfectionWorkState = 3;
}));
}
@ -114,54 +152,49 @@ string DisinfectionCtrlService::getDisinfectionID() {
// 加液
void DisinfectionCtrlService::startReplenishingFluids() {
lock_guard<recursive_mutex> lock(lock_);
if (m_disinfectionThread) {
m_disinfectionThread->join();
m_disinfectionThread = nullptr;
}
logger->info("startReplenishingFluids");
m_zcanHost->pumpctrl_c1004(1, 300, 300, 1, 20);
replenishingFluidsPump_open();
m_replenishingFluidsWorkState = 1;
}
// 停止加液
void DisinfectionCtrlService::stopReplenishingFluids() {
lock_guard<recursive_mutex> lock(lock_);
logger->info("stopReplenishingFluids");
m_zcanHost->pumpctrl_c1004(1, 300, 0, 1, 20);
m_replenishingFluidsWorkState = 0;
if (m_disinfectionThread) {
m_disinfectionThread->join();
m_disinfectionThread = nullptr;
}
logger->info("stopReplenishingFluids");
replenishingFluidsPump_close();
m_replenishingFluidsWorkState = 0;
}
// 开始排液
void DisinfectionCtrlService::startDraining() {
lock_guard<recursive_mutex> lock(lock_);
logger->info("startDraining");
m_zcanHost->pumpctrl_c1004(1, 300, -300, 1, 20);
m_drainingWorkState = 1;
if (m_disinfectionThread) {
m_disinfectionThread->join();
m_disinfectionThread = nullptr;
}
logger->info("startDraining");
drainingPump_open();
m_drainingWorkState = 1;
}
// 停止排液体
void DisinfectionCtrlService::stopDraining() {
lock_guard<recursive_mutex> lock(lock_);
logger->info("stopDraining");
m_zcanHost->pumpctrl_c1004(1, 300, 0, 1, 20);
m_drainingWorkState = 0;
if (m_disinfectionThread) {
m_disinfectionThread->join();
m_disinfectionThread = nullptr;
}
logger->info("stopDraining");
m_drainingWorkState = 0;
drainingPump_close();
}
int DisinfectionCtrlService::getReplenishingFluidsWorkState() { return m_replenishingFluidsWorkState; }
int DisinfectionCtrlService::getDrainingWorkState() { return m_drainingWorkState; }

13
src/service/disinfection_ctl_service.hpp

@ -87,5 +87,18 @@ class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlS
private:
string createDisinfectionID();
void drainingPump_open();
void drainingPump_close();
void replenishingFluidsPump_open();
void replenishingFluidsPump_close();
void sprayLiquidPump_open();
void sprayLiquidPump_close();
void heartingPlate_setPower(bool val);
void blower_setPower(bool val);
void airCompressor(bool val);
};
} // namespace iflytop
Loading…
Cancel
Save