diff --git a/src/db/db_service.cpp b/src/db/db_service.cpp index b9b805f..161c940 100644 --- a/src/db/db_service.cpp +++ b/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(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(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) { diff --git a/src/main_control_service.cpp b/src/main_control_service.cpp index 5b9043f..0b34ebd 100644 --- a/src/main_control_service.cpp +++ b/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, json& cmd, json& receipt) { processFrontEndMessage(webSocket, cmd, receipt); }); + m_iflytopwsService->onMessage.connect([this](weak_ptr 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, 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, j if (cmdstr == "shutdown") { int delayms = jsonGet(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; } diff --git a/src/main_control_service.hpp b/src/main_control_service.hpp index adfd7a8..f3849e9 100644 --- a/src/main_control_service.hpp +++ b/src/main_control_service.hpp @@ -60,6 +60,8 @@ class MainControlService : public enable_shared_from_this { unique_ptr m_reportThread; + unique_ptr m_autoshutdownThread; + public: MainControlService(){}; void initialize(); diff --git a/src/service/disinfection_ctl_service.cpp b/src/service/disinfection_ctl_service.cpp index 29cb524..0f338ac 100644 --- a/src/service/disinfection_ctl_service.cpp +++ b/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 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 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 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 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; } \ No newline at end of file diff --git a/src/service/disinfection_ctl_service.hpp b/src/service/disinfection_ctl_service.hpp index d1a49d0..469b3cc 100644 --- a/src/service/disinfection_ctl_service.hpp +++ b/src/service/disinfection_ctl_service.hpp @@ -87,5 +87,18 @@ class DisinfectionCtrlService : public enable_shared_from_this