Browse Source

消毒控制对接完成

storage-in-realtime
zhaohe 12 months ago
parent
commit
81a730327d
  1. 1
      appsrc/baseservice/db/formula_db_dao.cpp
  2. 1
      appsrc/baseservice/db/formula_db_dao.hpp
  3. 25
      appsrc/baseservice/db/setting_db_dao.cpp
  4. 8
      appsrc/baseservice/db/setting_db_dao.hpp
  5. 139
      appsrc/service/app/disinfection_ctrl_service.cpp
  6. 55
      appsrc/service/app/disinfection_ctrl_service.hpp

1
appsrc/baseservice/db/formula_db_dao.cpp

@ -51,3 +51,4 @@ json FormulaDBDao::newFormula() {
keyvaldb.set(formula["formula_id"], formula.dump());
return formula;
}
json FormulaDBDao::getFormula(string formulaid) { return keyvaldb.get(formulaid); }

1
appsrc/baseservice/db/formula_db_dao.hpp

@ -52,6 +52,7 @@ class FormulaDBDao : public enable_shared_from_this<FormulaDBDao> {
void updateFormula(string formulaid, json formula);
void updateFormula(string formulaid, string key, string val);
void deleteFormula(string formulaid);
json getFormula(string formulaid);
json newFormula();
public:

25
appsrc/baseservice/db/setting_db_dao.cpp

@ -4,7 +4,7 @@
* BASIC *
*******************************************************************************/
#define SETTING_DB "setting.db"
#define DB_VERSION "1.0.1" // 更新这个参数,会自动重置数据库
#define DB_VERSION "1.0.2" // 更新这个参数,会自动重置数据库
namespace iflytop {
namespace db {
@ -22,8 +22,8 @@ void to_json(json& j, const Setting& p) {
j["val_upper_limit"] = p.val_upper_limit;
j["val"] = p.val;
j["default_val"] = p.default_val;
j["enum_vals"] = p.enum_vals;
j["enum_dis_vals"] = p.enum_dis_vals;
j["enums"] = p.enums;
j["enum_display_names"] = p.enum_display_names;
j["is_editable"] = p.is_editable;
j["is_visible_in_setting_page"] = p.is_visible_in_setting_page;
j["is_visible_in_formula_page"] = p.is_visible_in_formula_page;
@ -37,8 +37,8 @@ void from_json(const json& j, Setting& p) {
j.at("val_upper_limit").get_to(p.val_upper_limit);
j.at("val").get_to(p.val);
j.at("default_val").get_to(p.default_val);
j.at("enum_vals").get_to(p.enum_vals);
j.at("enum_dis_vals").get_to(p.enum_dis_vals);
j.at("enums").get_to(p.enums);
j.at("enum_display_names").get_to(p.enum_display_names);
j.at("is_editable").get_to(p.is_editable);
j.at("is_visible_in_setting_page").get_to(p.is_visible_in_setting_page);
j.at("is_visible_in_formula_page").get_to(p.is_visible_in_formula_page);
@ -56,8 +56,8 @@ using namespace db;
#define INT_SETTING(setting_id, name_ch, default_val, val_lower_limit, val_upper_limit, is_editable, is_visible_in_setting_page, is_visible_in_formula_page, is_visible_in_rt_page) \
Setting { setting_id, name_ch, "int", default_val, default_val, val_lower_limit, val_upper_limit, {}, {}, is_editable, is_visible_in_setting_page, is_visible_in_formula_page, is_visible_in_rt_page }
#define ENUM_SETTING(setting_id, name_ch, default_val, enum_vals, enum_dis_vals, is_editable, is_visible_in_setting_page, is_visible_in_formula_page, is_visible_in_rt_page) \
Setting { setting_id, name_ch, "enum", default_val, default_val, "", "", enum_vals, enum_dis_vals, is_editable, is_visible_in_setting_page, is_visible_in_formula_page, is_visible_in_rt_page }
#define ENUM_SETTING(setting_id, name_ch, default_val, enums, enum_display_names, is_editable, is_visible_in_setting_page, is_visible_in_formula_page, is_visible_in_rt_page) \
Setting { setting_id, name_ch, "enum", default_val, default_val, "", "", enums, enum_display_names, is_editable, is_visible_in_setting_page, is_visible_in_formula_page, is_visible_in_rt_page }
#define BOOL_SETTING(setting_id, name_ch, default_val, is_editable, is_visible_in_setting_page, is_visible_in_formula_page, is_visible_in_rt_page) \
Setting { setting_id, name_ch, "bool", default_val, default_val, "", "", {}, {}, is_editable, is_visible_in_setting_page, is_visible_in_formula_page, is_visible_in_rt_page }
#define FLOAT_SETTING(setting_id, name_ch, default_val, val_lower_limit, val_upper_limit, is_editable, is_visible_in_setting_page, is_visible_in_formula_page, is_visible_in_rt_page) \
@ -88,6 +88,17 @@ static Setting settingInitTable[] = {
};
list<shared_ptr<Setting>> SettingDBDao::getRealtimeSetting() {
list<shared_ptr<Setting>> settings;
auto all = getAllSetting();
for (auto& setting : all) {
if (setting->is_visible_in_rt_page) {
settings.push_back(make_shared<Setting>(*setting));
}
}
return settings;
}
void SettingDBDao::initialize() { //
try {
keyvaldb.initialize("setting.db", "setting");

8
appsrc/baseservice/db/setting_db_dao.hpp

@ -20,8 +20,6 @@
#include "base/keyvaldb.hpp"
#include "user_behavior_des.hpp"
namespace iflytop {
using namespace std;
using namespace std;
@ -48,8 +46,8 @@ class Setting {
string val_lower_limit;
string val_upper_limit;
vector<string> enum_vals;
vector<string> enum_dis_vals;
vector<string> enums;
vector<string> enum_display_names;
bool is_editable = true;
bool is_visible_in_setting_page = true;
@ -94,6 +92,8 @@ class SettingDBDao : public enable_shared_from_this<SettingDBDao> {
shared_ptr<Setting> getSetting(string name);
void updateSetting(shared_ptr<Setting> setting);
list<shared_ptr<Setting>> getRealtimeSetting();
bool setSettingVal(string name, string val);
int getSettingValAsInt(string name);
string getSettingValAsString(string name);

139
appsrc/service/app/disinfection_ctrl_service.cpp

@ -1,5 +1,7 @@
#include "disinfection_ctrl_service.hpp"
using namespace iflytop;
#define SETTING_DB SettingDBDao::ins()
#define FORMULA_DB FormulaDBDao::ins()
static string disinfectionState2DisplayName(disinfection_state_t state) {
switch (state) {
@ -25,116 +27,51 @@ static string disinfectionState2DisplayName(disinfection_state_t state) {
}
void DisinfectionCtrlService::initialize() {
REGFNV2(DisinfectionCtrlService, enableDehumidifyBD);
REGFNV2(DisinfectionCtrlService, setDehumidifyBDThreshold);
REGFNV2(DisinfectionCtrlService, enableDehumidifyAD);
REGFNV2(DisinfectionCtrlService, setDehumidifyADThreshold);
REGFNV2(DisinfectionCtrlService, enableDegradeAD);
REGFNV2(DisinfectionCtrlService, startDisinfection);
REGFNV2(DisinfectionCtrlService, changeDisinfectionParameter);
REGFNV2(DisinfectionCtrlService, getDisinfectionConfig);
REGFNV2(DisinfectionCtrlService, stopDisinfection);
REGFNV2(DisinfectionCtrlService, start);
REGFNV2(DisinfectionCtrlService, startWithFormula);
REGFNV2(DisinfectionCtrlService, stop);
REGFNV2(DisinfectionCtrlService, getState);
REGFNV2(DisinfectionCtrlService, getServiceConfig);
REGFNV2(DisinfectionCtrlService, getRealtimeConfig);
}
/*******************************************************************************
* *
*******************************************************************************/
// 消毒前除
void DisinfectionCtrlService::fn_enableDehumidifyBD(shared_ptr<MsgProcessContext> cxt) {
//
bool enable = cxt->params["val"];
m_enableDehumidifyBD = enable;
void DisinfectionCtrlService::fn_start(shared_ptr<MsgProcessContext> cxt) {
// 从setting中获取实时参数
m_formulaid = "";
auto allrealtimesetting = SETTING_DB->getRealtimeSetting();
for (auto& setting : allrealtimesetting) {
m_realtimeCfg[string(setting->setting_id)] = setting->val;
}
m_state = kstate_preheat;
}
void DisinfectionCtrlService::fn_setDehumidifyBDThreshold(shared_ptr<MsgProcessContext> cxt) {
int threshold = cxt->params["val"];
m_dehumidifyBDThreshold = threshold;
void DisinfectionCtrlService::fn_startWithFormula(shared_ptr<MsgProcessContext> cxt) { //
m_formulaid = cxt->params["formula_id"];
m_defaultFormulaJson = FORMULA_DB->getFormula(m_formulaid);
auto allrealtimesetting = SETTING_DB->getRealtimeSetting();
for (auto& setting : allrealtimesetting) {
m_realtimeCfg[string(setting->setting_id)] = m_defaultFormulaJson[string(setting->setting_id)];
}
m_state = kstate_preheat;
}
void DisinfectionCtrlService::fn_enableDehumidifyAD(shared_ptr<MsgProcessContext> cxt) {
bool enable = cxt->params["val"];
m_enableDehumidifyAD = enable;
} // 消毒后除
void DisinfectionCtrlService::fn_setDehumidifyADThreshold(shared_ptr<MsgProcessContext> cxt) {
int threshold = cxt->params["val"];
m_dehumidifyADThreshold = threshold;
void DisinfectionCtrlService::fn_stop(shared_ptr<MsgProcessContext> cxt) {
m_formulaid = "";
m_state = kstate_idle;
}
void DisinfectionCtrlService::fn_enableDegradeAD(shared_ptr<MsgProcessContext> cxt) {
bool enable = cxt->params["val"];
m_enableDegradeAD = enable;
} // 消毒后降
/*******************************************************************************
* *
*******************************************************************************/
void DisinfectionCtrlService::fn_startDisinfection(shared_ptr<MsgProcessContext> cxt) { //
m_state = kstate_preheat;
void DisinfectionCtrlService::fn_getRealtimeConfig(shared_ptr<MsgProcessContext> cxt) {
json& rely = cxt->content;
for (auto& cfg : m_realtimeCfg) {
rely[cfg.first] = cfg.second;
}
}
void DisinfectionCtrlService::fn_changeDisinfectionParameter(shared_ptr<MsgProcessContext> cxt) {
int injection_pump_speed = m_runCfg.injection_pump_speed;
int stoped_gs = m_runCfg.stoped_gs;
int continued_gs = m_runCfg.continued_gs;
int stoped_satur = m_runCfg.stoped_satur;
int continued_satur = m_runCfg.continued_satur;
int stoped_humi = m_runCfg.stoped_humi;
int continued_humi = m_runCfg.continued_humi;
// if (cmd.find("injection_pump_speed") != cmd.end()) {
// injection_pump_speed = jsonGet<int>(cmd["injection_pump_speed"]);
// }
// if (cmd.find("stoped_gs") != cmd.end()) {
// stoped_gs = jsonGet<int>(cmd["stoped_gs"]);
// }
// if (cmd.find("continued_gs") != cmd.end()) {
// continued_gs = jsonGet<int>(cmd["continued_gs"]);
// }
// if (cmd.find("stoped_satur") != cmd.end()) {
// stoped_satur = jsonGet<int>(cmd["stoped_satur"]);
// }
// if (cmd.find("continued_satur") != cmd.end()) {
// continued_satur = jsonGet<int>(cmd["continued_satur"]);
// }
// if (cmd.find("stoped_humi") != cmd.end()) {
// stoped_humi = jsonGet<int>(cmd["stoped_humi"]);
// }
// if (cmd.find("continued_humi") != cmd.end()) {
// continued_humi = jsonGet<int>(cmd["continued_humi"]);
// }
// dfs->setInjectionPumpSpeed(injection_pump_speed);
// dfs->setStopedGS(stoped_gs);
// dfs->setContinuedGS(continued_gs);
// dfs->setStopedSatur(stoped_satur);
// dfs->setContinuedSatur(continued_satur);
// dfs->setStopedHumi(stoped_humi);
// dfs->setContinuedHumi(continued_humi);
// m_disinfectionCtrlService->changeDisinfectionParameter();
return;
void DisinfectionCtrlService::fn_setRealtimeConfig(shared_ptr<MsgProcessContext> cxt) {
string key = cxt->params["key"];
string val = cxt->params["val"];
m_realtimeCfg[key] = val;
}
void DisinfectionCtrlService::fn_getDisinfectionConfig(shared_ptr<MsgProcessContext> cxt) {}
void DisinfectionCtrlService::fn_stopDisinfection(shared_ptr<MsgProcessContext> cxt) {}
/*******************************************************************************
* *
*******************************************************************************/
void DisinfectionCtrlService::fn_getState(shared_ptr<MsgProcessContext> cxt) {
json content;
content["cfg"]["enableDehumidifyBD"] = m_enableDehumidifyBD;
content["cfg"]["dehumidifyBDThreshold"] = m_dehumidifyBDThreshold;
content["cfg"]["enableDehumidifyAD"] = m_enableDehumidifyAD;
content["cfg"]["dehumidifyADThreshold"] = m_dehumidifyADThreshold;
content["cfg"]["enableDegradeAD"] = m_enableDegradeAD;
content["state"]["disinfectionState"] = disinfectionState2DisplayName(m_state);
content["state"]["dval"] = 12.3;
content["state"]["nlog"] = 1.0;
content["state"]["tlog"] = 3.0;
cxt->content = content;
json& rely = cxt->content;
rely["statedisplayName"] = disinfectionState2DisplayName(m_state);
rely["state"] = toString(m_state);
}
void DisinfectionCtrlService::fn_getServiceConfig(shared_ptr<MsgProcessContext> cxt) {
//
//
}
void DisinfectionCtrlService::fn_getServiceConfig(shared_ptr<MsgProcessContext> cxt) { json& rely = cxt->content; }

55
appsrc/service/app/disinfection_ctrl_service.hpp

@ -15,66 +15,31 @@
namespace iflytop {
class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlService> {
THISCLASS(DisinfectionCtrlService);
typedef struct {
int pre_heat_time_s;
int stoped_gs;
int continued_gs;
int stoped_satur;
int continued_satur;
int stoped_humi;
int continued_humi;
int injection_pump_speed;
} cfg_t;
typedef struct {
bool enable_bf_dinft_dehumidification;
bool enable_af_dinft_dehumidification;
bool enable_degradation;
int bf_dinft_dehumidification_target_val;
int af_dinft_dehumidification_target_val;
int degradation_target_val;
} beforeRunCfg_t;
public:
shared_ptr<DBService> m_db;
shared_ptr<DeviceStateService> m_ds;
shared_ptr<GConfig> m_gConfig;
bool m_enableDehumidifyBD = false;
int m_dehumidifyBDThreshold = 0;
bool m_enableDehumidifyAD = false;
int m_dehumidifyADThreshold = 0;
bool m_enableDegradeAD = false;
cfg_t m_runCfg;
beforeRunCfg_t m_beforeRunCfg;
disinfection_state_t m_state = kstate_idle;
map<string, string> m_realtimeCfg;
json m_defaultFormulaJson;
string m_formulaid;
public:
void initialize();
public:
public:
/*******************************************************************************
* *
*******************************************************************************/
void fn_enableDehumidifyBD(shared_ptr<MsgProcessContext> cxt); // 消毒前除湿
void fn_setDehumidifyBDThreshold(shared_ptr<MsgProcessContext> cxt);
void fn_enableDehumidifyAD(shared_ptr<MsgProcessContext> cxt); // 消毒后除湿
void fn_setDehumidifyADThreshold(shared_ptr<MsgProcessContext> cxt);
void fn_enableDegradeAD(shared_ptr<MsgProcessContext> cxt); // 消毒后降解
/*******************************************************************************
* *
*******************************************************************************/
void fn_startDisinfection(shared_ptr<MsgProcessContext> cxt);
void fn_changeDisinfectionParameter(shared_ptr<MsgProcessContext> cxt);
void fn_getDisinfectionConfig(shared_ptr<MsgProcessContext> cxt);
void fn_stopDisinfection(shared_ptr<MsgProcessContext> cxt);
void fn_start(shared_ptr<MsgProcessContext> cxt);
void fn_startWithFormula(shared_ptr<MsgProcessContext> cxt);
void fn_stop(shared_ptr<MsgProcessContext> cxt);
void fn_getRealtimeConfig(shared_ptr<MsgProcessContext> cxt);
void fn_setRealtimeConfig(shared_ptr<MsgProcessContext> cxt);
/*******************************************************************************
* *
*******************************************************************************/

Loading…
Cancel
Save