Commit 90150f1d authored by 杨熙's avatar 杨熙

改好在线离线推送

parent c0a496d3
...@@ -998,11 +998,10 @@ void MQ_CCU_Adapter::oninitmqttsdk() { ...@@ -998,11 +998,10 @@ void MQ_CCU_Adapter::oninitmqttsdk() {
pushTopic = string("v3/dev/konkeGateway/")+deviceID; pushTopic = string("v3/dev/konkeGateway/")+deviceID;
subTopic = string("v3/dev/konkeGateway/")+deviceID; //****************临时信息 subTopic = string("v3/dev/konkeGateway/")+deviceID; //****************临时信息
willTopic = string("v3/dev/konkeGateway/")+deviceID+"/offline"; //遗嘱信息 willTopic = string("v3/dev/konkeGateway/")+deviceID+"/offline"; //遗嘱信息
heartbeat_Topic = string("v3/dev/konkeGateway/")+deviceID+"/heartbeat"; heartbeat_Topic = string("v3/dev/konkeGateway/")+deviceID+"/online";
LOGD("pushTopic is: %s subTopic is: %s willTopic is: %s\n",pushTopic.c_str(),subTopic.c_str(),willTopic.c_str()); LOGD("pushTopic is: %s subTopic is: %s willTopic is: %s\n",pushTopic.c_str(),subTopic.c_str(),willTopic.c_str());
int ret = mqttSdk->init(MQ_CCU_Config::GetInstance()->getBrokerAddr(), //正式环境 int ret = mqttSdk->init("40.73.74.45:1883", clientId,username,password,willTopic,heartbeat_Topic,gw_id);
clientId,username,,willTopic,heartbeat_Topic,gw_id);
mqttOnline = false; mqttOnline = false;
if(ret == 0){ if(ret == 0){
mqttSdk->con(1,3); mqttSdk->con(1,3);
...@@ -1204,9 +1203,9 @@ int MQ_CCU_Adapter::onDeviceRequestDelete(string devSn){ ...@@ -1204,9 +1203,9 @@ int MQ_CCU_Adapter::onDeviceRequestDelete(string devSn){
//发送删除多路设备 //发送删除多路设备
int MQ_CCU_Adapter::send_Deletemsg_to_kangjia(string devSn,string devProdId,int load){ int MQ_CCU_Adapter::send_Deletemsg_to_kangjia(string devSn,string devProdId,int load){
try {
//发送删除多路设备 //发送删除多路设备
string Sn; string Sn;
string evts_msg;
if(load == 1){ //小K删除 if(load == 1){ //小K删除
Sn = devSn; Sn = devSn;
}else if(load == 0){ //云端APP删除 }else if(load == 0){ //云端APP删除
...@@ -1217,76 +1216,85 @@ int MQ_CCU_Adapter::send_Deletemsg_to_kangjia(string devSn,string devProdId,int ...@@ -1217,76 +1216,85 @@ int MQ_CCU_Adapter::send_Deletemsg_to_kangjia(string devSn,string devProdId,int
payload["key"] = "_ChildRemoved"; payload["key"] = "_ChildRemoved";
if(devProdId == ZeroFire2ChanChopinSwitch_PID){ //肖邦-二路灯控 if(devProdId == ZeroFire2ChanChopinSwitch_PID){ //肖邦-二路灯控
payload["val"] = Sn+"01"; payload["val"] = Sn+"01";
evts_msg = "["+ EH_ToolKit::JsonToString(payload) +"]"; push_to_kangjia("","","_RemoveChild","",payload);
push_to_kangjia("","","_RemoveChild","[]",evts_msg);
payload["val"] = Sn+"02"; payload["val"] = Sn+"02";
evts_msg = "["+ EH_ToolKit::JsonToString(payload) +"]"; push_to_kangjia("","","_RemoveChild","",payload);
push_to_kangjia("","","_RemoveChild","[]",evts_msg);
}else if(devProdId == ZeroFire3ChanChopinSwitch_PID){ //肖邦-三路灯控 }else if(devProdId == ZeroFire3ChanChopinSwitch_PID){ //肖邦-三路灯控
payload["val"] = Sn+"01"; payload["val"] = Sn+"01";
evts_msg = "["+ EH_ToolKit::JsonToString(payload) +"]"; push_to_kangjia("","","_RemoveChild","",payload);
push_to_kangjia("","","_RemoveChild","[]",evts_msg);
payload["val"] = Sn+"02"; payload["val"] = Sn+"02";
evts_msg = "["+ EH_ToolKit::JsonToString(payload) +"]"; push_to_kangjia("","","_RemoveChild","",payload);
push_to_kangjia("","","_RemoveChild","[]",evts_msg);
payload["val"] = Sn+"03"; payload["val"] = Sn+"03";
evts_msg = "["+ EH_ToolKit::JsonToString(payload) +"]"; push_to_kangjia("","","_RemoveChild","",payload);
push_to_kangjia("","","_RemoveChild","[]",evts_msg);
}else if(devProdId == DAIKINCentralACgw_PID){ //中央空调网关 }else if(devProdId == DAIKINCentralACgw_PID){ //中央空调网关
}else{ }else{
payload["val"] = devSn; payload["val"] = devSn;
evts_msg = "["+ EH_ToolKit::JsonToString(payload) +"]"; push_to_kangjia("","","_RemoveChild","",payload);
push_to_kangjia("","","_RemoveChild","[]",evts_msg);
} }
}catch (exception &e) {
LOGW("%s.\n", e.what());
}
} }
int MQ_CCU_Adapter::push_to_kangjia(string devID,string prodID,string sid,string attrs_msg,string evts_msg){ int MQ_CCU_Adapter::push_to_kangjia(string devID,string prodID,string sid,EH::Json::Value attrs_msg,EH::Json::Value evts_msg){
string respTopic = pushTopic+"/upward"; try {
EH::Json::Value payload; string respTopic = pushTopic+"/upward";
EH::Json::Value data_msg; EH::Json::Value payload;
EH::Json::Value svcs_msg; EH::Json::Value data_msg;
payload["typ"] = 0; EH::Json::Value svcs_msg;
payload["tms"] = EH_ToolKit::GetTimestamp(); payload["typ"] = 0;
data_msg["devID"] = ""; payload["tms"] = EH_ToolKit::GetTimestamp();
data_msg["prodID"] = ""; data_msg["devID"] = devID;
svcs_msg["sid"] = sid; data_msg["prodID"] = prodID;
svcs_msg["attrs"] = attrs_msg; svcs_msg["sid"] = sid;
svcs_msg["evts"] = evts_msg;
data_msg["svcs"].append(svcs_msg); if(attrs_msg == ""){
payload["data"] = data_msg; svcs_msg["attrs"].resize(0); //空数组
sendtoRoma(payload,respTopic); }else{
svcs_msg["attrs"].append(attrs_msg);
}
if(evts_msg == ""){
svcs_msg["evts"].resize(0); //空数组
}else{
svcs_msg["evts"].append(evts_msg);
}
data_msg["svcs"].append(svcs_msg);
payload["data"] = data_msg;
sendtoRoma(payload,respTopic);
}catch (exception &e) {
LOGW("%s.\n", e.what());
}
} }
//小K 删除 //小K 删除
int MQ_CCU_Adapter::loadDelete(EH::Json::Value arg){ int MQ_CCU_Adapter::loadDelete(EH::Json::Value arg){
try { try {
string devSn = Replace(arg.asString(),":",""); string devSn = Replace(arg.asString(),":","");
if(Deletesn == devSn){ //兴海app删 if(Deletesn == devSn){ //兴海app删
Deletesn = ""; Deletesn = "";
}else{ //小K app删 }else{ //小K app删
mtx.acquire(); mtx.acquire();
map<string, kk_handleDeviceInfo::HwSubDev*>::iterator it = hwSubDevs.find(devSn); map<string, kk_handleDeviceInfo::HwSubDev*>::iterator it = hwSubDevs.find(devSn);
string devProdId = it->second->dev_model_id; string devProdId = it->second->dev_model_id;
if(it != hwSubDevs.end()){ if(it != hwSubDevs.end()){
string channel= "1"; string channel= "1";
string devMac = it->second->mac; string devMac = it->second->mac;
// KK_HwSdk::GetInstance()->changeDevOnline(devSn, false); // KK_HwSdk::GetInstance()->changeDevOnline(devSn, false);
it->second->online = false; it->second->online = false;
if(it->second->dev_model_id == DAIKINCentralACgw_PID){ if(it->second->dev_model_id == DAIKINCentralACgw_PID){
handleACindoorDevNolinePush(arg.asString()); handleACindoorDevNolinePush(arg.asString());
}
LOGI("本地删除设备sn:%s 推送设备离线:%s.\n",devSn.c_str(),devSn.c_str());
hwSubDevs.erase(devSn);
hwBindDevMap.erase(devMac);
//子设备解绑或移除
send_Deletemsg_to_kangjia(devSn,devProdId,1);
}else{
LOGW("这个设备已删除,不推送.\n");
} }
LOGI("本地删除设备sn:%s 推送设备离线:%s.\n",devSn.c_str(),devSn.c_str()); mtx.release();
hwSubDevs.erase(devSn);
hwBindDevMap.erase(devMac);
//子设备解绑或移除
send_Deletemsg_to_kangjia(devSn,devProdId,1);
}else{
LOGW("这个设备已删除,不推送.\n");
} }
mtx.release();
}
}catch (exception &e) { }catch (exception &e) {
LOGW("%s.\n", e.what()); LOGW("%s.\n", e.what());
} }
...@@ -1294,54 +1302,54 @@ int MQ_CCU_Adapter::loadDelete(EH::Json::Value arg){ ...@@ -1294,54 +1302,54 @@ int MQ_CCU_Adapter::loadDelete(EH::Json::Value arg){
} }
//删除空调网关时,也删除其下的内机。 //删除空调网关时,也删除其下的内机。
int MQ_CCU_Adapter::onACindoorDelete(string devMac){ int MQ_CCU_Adapter::onACindoorDelete(string devMac){
string sn; // string sn;
try { // try {
map<string,vector<string> >::iterator numIt = controllerModel.find(devMac); // map<string,vector<string> >::iterator numIt = controllerModel.find(devMac);
if (numIt != controllerModel.end()) { // if (numIt != controllerModel.end()) {
for (vector<string>::iterator it = numIt->second.begin(); it != numIt->second.end(); it++) { // for (vector<string>::iterator it = numIt->second.begin(); it != numIt->second.end(); it++) {
sn = (*it).c_str(); // sn = (*it).c_str();
//子设备解绑或移除 // //子设备解绑或移除
string respTopic; // string respTopic;
respTopic = pushTopic+"/deviceoffline";//子设备离线 // respTopic = pushTopic+"/deviceoffline";//子设备离线
EH::Json::Value payload; // EH::Json::Value payload;
payload["dev_id"] = sn; //请求发起者 // payload["dev_id"] = sn; //请求发起者
sendtoRoma(payload,respTopic); //网关离线,内机向华为推送离线。 //删除空调网关也会删除内机, // sendtoRoma(payload,respTopic); //网关离线,内机向华为推送离线。 //删除空调网关也会删除内机,
LOGI("删除内机sn:%s .\n",sn.c_str()); // LOGI("删除内机sn:%s .\n",sn.c_str());
hwSubDevs.erase(sn); // hwSubDevs.erase(sn);
} // }
}else{ // }else{
LOGD("这个中央空调网关没有内机.\n"); // LOGD("这个中央空调网关没有内机.\n");
} // }
}catch (exception &e) { // }catch (exception &e) {
LOGW("%s.\n", e.what()); // LOGW("%s.\n", e.what());
} // }
return 0; // return 0;
} }
void MQ_CCU_Adapter::handleACindoorDevNolinePush(string mac){ void MQ_CCU_Adapter::handleACindoorDevNolinePush(string mac){
try { // try {
string sn; // string sn;
map<string,vector<string> >::iterator numIt = controllerModel.find(mac); // map<string,vector<string> >::iterator numIt = controllerModel.find(mac);
if (numIt != controllerModel.end()) { // if (numIt != controllerModel.end()) {
for (vector<string>::iterator it = numIt->second.begin(); it != numIt->second.end(); it++) { // for (vector<string>::iterator it = numIt->second.begin(); it != numIt->second.end(); it++) {
EH::Json::Value idJson; // EH::Json::Value idJson;
sn = (*it).c_str(); // sn = (*it).c_str();
map<string, kk_handleDeviceInfo::HwSubDev*>::iterator subDevIt = hwSubDevs.find(sn); // map<string, kk_handleDeviceInfo::HwSubDev*>::iterator subDevIt = hwSubDevs.find(sn);
//子设备解绑或移除 // //子设备解绑或移除
string respTopic; // string respTopic;
respTopic = pushTopic + "/deviceoffline";//子设备离线 // respTopic = pushTopic + "/deviceoffline";//子设备离线
EH::Json::Value payload; // EH::Json::Value payload;
payload["dev_id"] = sn; //请求发起者 // payload["dev_id"] = sn; //请求发起者
sendtoRoma(payload,respTopic); //网关离线,内机向华为推送离线。 //删除空调网关也会删除内机, // sendtoRoma(payload,respTopic); //网关离线,内机向华为推送离线。 //删除空调网关也会删除内机,
subDevIt->second->online = false; // subDevIt->second->online = false;
LOGI("删除内机sn:%s .\n",sn.c_str()); // LOGI("删除内机sn:%s .\n",sn.c_str());
hwSubDevs.erase(sn); // hwSubDevs.erase(sn);
} // }
} // }
}catch (exception &e) { // }catch (exception &e) {
LOGW("%s.\n", e.what()); // LOGW("%s.\n", e.what());
} // }
} }
int MQ_CCU_Adapter::sendtoRoma(EH::Json::Value payload,string respTopic){ int MQ_CCU_Adapter::sendtoRoma(EH::Json::Value payload,string respTopic){
......
...@@ -109,7 +109,7 @@ private: ...@@ -109,7 +109,7 @@ private:
int onACindoorDelete(string devMac); int onACindoorDelete(string devMac);
//推送信息到康佳平台 //推送信息到康佳平台
int push_to_kangjia(string devID,string prodID,string sid,string attrs_msg,string evts_msg); int push_to_kangjia(string devID,string prodID,string sid,EH::Json::Value attrs_msg,EH::Json::Value evts_msg);
//解绑网关 //解绑网关
int on_unbind_gateway(string device_name,string client_id,string method); int on_unbind_gateway(string device_name,string client_id,string method);
//获取网关的nodeID //获取网关的nodeID
......
...@@ -665,7 +665,7 @@ int kk_handleDeviceInfo::onSetDevService(map<string,kk_handleDeviceInfo::HwSubDe ...@@ -665,7 +665,7 @@ int kk_handleDeviceInfo::onSetDevService(map<string,kk_handleDeviceInfo::HwSubDe
// jsonarg = *it; // jsonarg = *it;
// } // }
// LOGD("prodId:%s . \n",dev_model_id.c_str()); // LOGD("prodId:%s . \n",dev_model_id.c_str());
// try { try {
// if(dev_model_id == ZeroFire1ChanChopinSwitch_PID||dev_model_id == ZeroFire2ChanChopinSwitch_PID||dev_model_id == ZeroFire3ChanChopinSwitch_PID // if(dev_model_id == ZeroFire1ChanChopinSwitch_PID||dev_model_id == ZeroFire2ChanChopinSwitch_PID||dev_model_id == ZeroFire3ChanChopinSwitch_PID
// || dev_model_id == ZeroFire2ChanModularSwitch_PID){ //灯控 /灯控模块 // || dev_model_id == ZeroFire2ChanModularSwitch_PID){ //灯控 /灯控模块
// KKChannelDev* chanDev = subDevIt->second->channelDevs[channel]; // KKChannelDev* chanDev = subDevIt->second->channelDevs[channel];
...@@ -1175,26 +1175,26 @@ int kk_handleDeviceInfo::onSetDevService(map<string,kk_handleDeviceInfo::HwSubDe ...@@ -1175,26 +1175,26 @@ int kk_handleDeviceInfo::onSetDevService(map<string,kk_handleDeviceInfo::HwSubDe
LOGW("%s.\n", e.what()); LOGW("%s.\n", e.what());
} }
if(opcode!=""){ // if(opcode!=""){
EH::Json::Value json; // EH::Json::Value json;
json["opcode"] = opcode; // json["opcode"] = opcode;
json["nodeid"] = nodeid; // json["nodeid"] = nodeid;
json["arg"] = arg; // json["arg"] = arg;
if (dev_model_id == DAIKINCentralACindoor_PID) { //中央空调内机 // if (dev_model_id == DAIKINCentralACindoor_PID) { //中央空调内机
json["requester"] = "HJ_CentralAC"; // json["requester"] = "HJ_CentralAC";
}else if(opcode == "SETUP_NODE"){ // }else if(opcode == "SETUP_NODE"){
json["requester"] = "HJ_Config"; // json["requester"] = "HJ_Config";
} else{ // } else{
json["requester"] = "HJ_Server"; // json["requester"] = "HJ_Server";
} // }
string wholeMsg = EH_ToolKit::JsonToString(json); // string wholeMsg = EH_ToolKit::JsonToString(json);
if(MQ_CCU_Adapter::GetInstance()->send_Control_Info(wholeMsg) != 0){ // if(MQ_CCU_Adapter::GetInstance()->send_Control_Info(wholeMsg) != 0){
LOGW("Send msg to IotHandler failed.msg is %s\n",wholeMsg.c_str()); // LOGW("Send msg to IotHandler failed.msg is %s\n",wholeMsg.c_str());
} // }
}else{ // }else{
LOGW("dev:%s not support set property. \n",sn.c_str()); // LOGW("dev:%s not support set property. \n",sn.c_str());
return -1; // return -1;
} // }
return 0; return 0;
} }
......
...@@ -378,32 +378,28 @@ int KK_MQTTSDK::con(int autoRecon,int timeoutInSec){ ...@@ -378,32 +378,28 @@ int KK_MQTTSDK::con(int autoRecon,int timeoutInSec){
/*线程标识符。属性类型的结构不是故意暴露。*/ /*线程标识符。属性类型的结构不是故意暴露。*/
pthread_t tid; pthread_t tid;
// /*创建一个新线程,从执行START-ROUTINE开始 /*创建一个新线程,从执行START-ROUTINE开始
// 正在传递ARG。创造属性来自属性。新的 正在传递ARG。创造属性来自属性。新的
// 句柄存储在*NEWTHREAD中。*/ 句柄存储在*NEWTHREAD中。*/
// pthread_create(&tid, NULL, run0, this); pthread_create(&tid, NULL, run0, this);
} }
return -1; return -1;
} }
// void* KK_MQTTSDK::run0(void* opt) { void* KK_MQTTSDK::run0(void* opt) {
// KK_MQTTSDK* mqttheartbeat_pthread = (KK_MQTTSDK*) opt; //这个的含义是什么? KK_MQTTSDK* mqttheartbeat_pthread = (KK_MQTTSDK*) opt; //这个的含义是什么?
// return mqttheartbeat_pthread->run(opt); return mqttheartbeat_pthread->run(opt);
// } }
// void* KK_MQTTSDK::run(void* opt){ void* KK_MQTTSDK::run(void* opt){
// while (true) { while (true) {
// EH::Json::FastWriter writer; EH::Json::FastWriter writer;
// EH::Json::Value Payload; //与Roma平台30秒心跳
// Payload["gw_id"] = gw_id; sleep(5);
// string sendPayload = writer.write(Payload); LOGD("Topic:%s Payload:""\n",heartbeat_Topic.c_str());
sendMsg(heartbeat_Topic,"",0);
// //与Roma平台30秒心跳 }
// sleep(30); //delete this;
// LOGD("Topic:%s Payload:%s\n",heartbeat_Topic.c_str(),sendPayload.c_str()); return NULL;
// sendMsg(heartbeat_Topic,sendPayload,0); }
// }
// //delete this;
// return NULL;
// }
int KK_MQTTSDK::discon(){ int KK_MQTTSDK::discon(){
int rc = MQTTAsync_isConnected(S_client); int rc = MQTTAsync_isConnected(S_client);
......
#!/bin/bash
cd /home/hj/KonkeKangJia/bin/
nohup /home/hj/KonkeKangJia/bin/KonkeKangJia >> /dev/null 2>&1 &
#nohup ./KonkeKangJia 2>&1|logger -i -t "KonkeKangJia" &
#!/bin/sh
while :
do
stillRunning=$(ps -e |grep KonkeKangJia)
if [ "$stillRunning" ] ; then
echo "KonkeKangJia is running."
else
echo "try to start KonkeKangJia"
killall KonkeKangJia
sleep 1
mv /tmp/KonkeKangJia/bin/KonkeKangJia /home/hj/KonkeKangJia/bin/
mv /tmp/KonkeKangJia/config/hj_hwprofile.json /home/hj/KonkeKangJia/config/
sh /home/hj/KonkeKangJia/bin/start.sh &
fi
sleep 60
done
#!/bin/bash
#1:system config
#2:KonkeKangJia config
mkdir /home/hj/KonkeKangJia/
mv bin/ /home/hj/KonkeKangJia/
mv config/ /home/hj/KonkeKangJia/
#3:ccu config
mv check_KonkeKangJia.sh /usr/local/bin/hj/
mv on_boot.sh /usr/local/bin/hj/
echo "install KonkeKangJia ok,sys will reboot in 1s."
reboot
...@@ -25,7 +25,7 @@ fi ...@@ -25,7 +25,7 @@ fi
/usr/local/bin/hj/HJ_Firmware monitor upgrade.cloud.hijaytech.com upgrade.cloud.hijaytech.com >/dev/null 2>&1 & /usr/local/bin/hj/HJ_Firmware monitor upgrade.cloud.hijaytech.com upgrade.cloud.hijaytech.com >/dev/null 2>&1 &
sh /usr/local/bin/hj/check_Konkexinghai.sh & sh /usr/local/bin/hj/check_KonkeKangJia.sh &
sleep 1 sleep 1
......
#!/bin/bash
cd /home/hj/Roma/bin/
nohup /home/hj/Roma/bin/Konkexinghai >> /dev/null 2>&1 &
#nohup ./Konkexinghai 2>&1|logger -i -t "Konkexinghai" &
#!/bin/sh
while :
do
stillRunning=$(ps -e |grep Konkexinghai)
if [ "$stillRunning" ] ; then
echo "Konkexinghai is running."
else
echo "try to start Konkexinghai"
killall Konkexinghai
sleep 1
mv /tmp/Roma/bin/Konkexinghai /home/hj/Roma/bin/
mv /tmp/Roma/config/hj_hwprofile.json /home/hj/Roma/config/
sh /home/hj/Roma/bin/start.sh &
fi
sleep 60
done
#!/bin/bash
#1:system config
#2:Roma config
mkdir /home/hj/Roma/
mv bin/ /home/hj/Roma/
mv config/ /home/hj/Roma/
#3:ccu config
mv check_Konkexinghai.sh /usr/local/bin/hj/
mv on_boot.sh /usr/local/bin/hj/
echo "install Konkexinghai ok,sys will reboot in 1s."
reboot
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment