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

改好在线离线推送

parent c0a496d3
......@@ -998,11 +998,10 @@ void MQ_CCU_Adapter::oninitmqttsdk() {
pushTopic = string("v3/dev/konkeGateway/")+deviceID;
subTopic = string("v3/dev/konkeGateway/")+deviceID; //****************临时信息
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());
int ret = mqttSdk->init(MQ_CCU_Config::GetInstance()->getBrokerAddr(), //正式环境
clientId,username,,willTopic,heartbeat_Topic,gw_id);
int ret = mqttSdk->init("40.73.74.45:1883", clientId,username,password,willTopic,heartbeat_Topic,gw_id);
mqttOnline = false;
if(ret == 0){
mqttSdk->con(1,3);
......@@ -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){
try {
//发送删除多路设备
string Sn;
string evts_msg;
if(load == 1){ //小K删除
Sn = devSn;
}else if(load == 0){ //云端APP删除
......@@ -1217,46 +1216,55 @@ int MQ_CCU_Adapter::send_Deletemsg_to_kangjia(string devSn,string devProdId,int
payload["key"] = "_ChildRemoved";
if(devProdId == ZeroFire2ChanChopinSwitch_PID){ //肖邦-二路灯控
payload["val"] = Sn+"01";
evts_msg = "["+ EH_ToolKit::JsonToString(payload) +"]";
push_to_kangjia("","","_RemoveChild","[]",evts_msg);
push_to_kangjia("","","_RemoveChild","",payload);
payload["val"] = Sn+"02";
evts_msg = "["+ EH_ToolKit::JsonToString(payload) +"]";
push_to_kangjia("","","_RemoveChild","[]",evts_msg);
push_to_kangjia("","","_RemoveChild","",payload);
}else if(devProdId == ZeroFire3ChanChopinSwitch_PID){ //肖邦-三路灯控
payload["val"] = Sn+"01";
evts_msg = "["+ EH_ToolKit::JsonToString(payload) +"]";
push_to_kangjia("","","_RemoveChild","[]",evts_msg);
push_to_kangjia("","","_RemoveChild","",payload);
payload["val"] = Sn+"02";
evts_msg = "["+ EH_ToolKit::JsonToString(payload) +"]";
push_to_kangjia("","","_RemoveChild","[]",evts_msg);
push_to_kangjia("","","_RemoveChild","",payload);
payload["val"] = Sn+"03";
evts_msg = "["+ EH_ToolKit::JsonToString(payload) +"]";
push_to_kangjia("","","_RemoveChild","[]",evts_msg);
push_to_kangjia("","","_RemoveChild","",payload);
}else if(devProdId == DAIKINCentralACgw_PID){ //中央空调网关
}else{
payload["val"] = devSn;
evts_msg = "["+ EH_ToolKit::JsonToString(payload) +"]";
push_to_kangjia("","","_RemoveChild","[]",evts_msg);
push_to_kangjia("","","_RemoveChild","",payload);
}
}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){
try {
string respTopic = pushTopic+"/upward";
EH::Json::Value payload;
EH::Json::Value data_msg;
EH::Json::Value svcs_msg;
payload["typ"] = 0;
payload["tms"] = EH_ToolKit::GetTimestamp();
data_msg["devID"] = "";
data_msg["prodID"] = "";
data_msg["devID"] = devID;
data_msg["prodID"] = prodID;
svcs_msg["sid"] = sid;
svcs_msg["attrs"] = attrs_msg;
svcs_msg["evts"] = evts_msg;
if(attrs_msg == ""){
svcs_msg["attrs"].resize(0); //空数组
}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 删除
......@@ -1272,7 +1280,7 @@ int MQ_CCU_Adapter::loadDelete(EH::Json::Value arg){
if(it != hwSubDevs.end()){
string channel= "1";
string devMac = it->second->mac;
// KK_HwSdk::GetInstance()->changeDevOnline(devSn, false);
// KK_HwSdk::GetInstance()->changeDevOnline(devSn, false);
it->second->online = false;
if(it->second->dev_model_id == DAIKINCentralACgw_PID){
handleACindoorDevNolinePush(arg.asString());
......@@ -1294,54 +1302,54 @@ int MQ_CCU_Adapter::loadDelete(EH::Json::Value arg){
}
//删除空调网关时,也删除其下的内机。
int MQ_CCU_Adapter::onACindoorDelete(string devMac){
string sn;
try {
map<string,vector<string> >::iterator numIt = controllerModel.find(devMac);
if (numIt != controllerModel.end()) {
for (vector<string>::iterator it = numIt->second.begin(); it != numIt->second.end(); it++) {
sn = (*it).c_str();
//子设备解绑或移除
string respTopic;
respTopic = pushTopic+"/deviceoffline";//子设备离线
EH::Json::Value payload;
payload["dev_id"] = sn; //请求发起者
sendtoRoma(payload,respTopic); //网关离线,内机向华为推送离线。 //删除空调网关也会删除内机,
LOGI("删除内机sn:%s .\n",sn.c_str());
hwSubDevs.erase(sn);
}
}else{
LOGD("这个中央空调网关没有内机.\n");
}
}catch (exception &e) {
LOGW("%s.\n", e.what());
}
return 0;
// string sn;
// try {
// map<string,vector<string> >::iterator numIt = controllerModel.find(devMac);
// if (numIt != controllerModel.end()) {
// for (vector<string>::iterator it = numIt->second.begin(); it != numIt->second.end(); it++) {
// sn = (*it).c_str();
// //子设备解绑或移除
// string respTopic;
// respTopic = pushTopic+"/deviceoffline";//子设备离线
// EH::Json::Value payload;
// payload["dev_id"] = sn; //请求发起者
// sendtoRoma(payload,respTopic); //网关离线,内机向华为推送离线。 //删除空调网关也会删除内机,
// LOGI("删除内机sn:%s .\n",sn.c_str());
// hwSubDevs.erase(sn);
// }
// }else{
// LOGD("这个中央空调网关没有内机.\n");
// }
// }catch (exception &e) {
// LOGW("%s.\n", e.what());
// }
// return 0;
}
void MQ_CCU_Adapter::handleACindoorDevNolinePush(string mac){
try {
string sn;
map<string,vector<string> >::iterator numIt = controllerModel.find(mac);
if (numIt != controllerModel.end()) {
for (vector<string>::iterator it = numIt->second.begin(); it != numIt->second.end(); it++) {
EH::Json::Value idJson;
sn = (*it).c_str();
map<string, kk_handleDeviceInfo::HwSubDev*>::iterator subDevIt = hwSubDevs.find(sn);
//子设备解绑或移除
string respTopic;
respTopic = pushTopic + "/deviceoffline";//子设备离线
EH::Json::Value payload;
payload["dev_id"] = sn; //请求发起者
sendtoRoma(payload,respTopic); //网关离线,内机向华为推送离线。 //删除空调网关也会删除内机,
subDevIt->second->online = false;
LOGI("删除内机sn:%s .\n",sn.c_str());
hwSubDevs.erase(sn);
}
}
}catch (exception &e) {
LOGW("%s.\n", e.what());
}
// try {
// string sn;
// map<string,vector<string> >::iterator numIt = controllerModel.find(mac);
// if (numIt != controllerModel.end()) {
// for (vector<string>::iterator it = numIt->second.begin(); it != numIt->second.end(); it++) {
// EH::Json::Value idJson;
// sn = (*it).c_str();
// map<string, kk_handleDeviceInfo::HwSubDev*>::iterator subDevIt = hwSubDevs.find(sn);
// //子设备解绑或移除
// string respTopic;
// respTopic = pushTopic + "/deviceoffline";//子设备离线
// EH::Json::Value payload;
// payload["dev_id"] = sn; //请求发起者
// sendtoRoma(payload,respTopic); //网关离线,内机向华为推送离线。 //删除空调网关也会删除内机,
// subDevIt->second->online = false;
// LOGI("删除内机sn:%s .\n",sn.c_str());
// hwSubDevs.erase(sn);
// }
// }
// }catch (exception &e) {
// LOGW("%s.\n", e.what());
// }
}
int MQ_CCU_Adapter::sendtoRoma(EH::Json::Value payload,string respTopic){
......
......@@ -109,7 +109,7 @@ private:
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);
//获取网关的nodeID
......
......@@ -665,7 +665,7 @@ int kk_handleDeviceInfo::onSetDevService(map<string,kk_handleDeviceInfo::HwSubDe
// jsonarg = *it;
// }
// 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
// || dev_model_id == ZeroFire2ChanModularSwitch_PID){ //灯控 /灯控模块
// KKChannelDev* chanDev = subDevIt->second->channelDevs[channel];
......@@ -1175,26 +1175,26 @@ int kk_handleDeviceInfo::onSetDevService(map<string,kk_handleDeviceInfo::HwSubDe
LOGW("%s.\n", e.what());
}
if(opcode!=""){
EH::Json::Value json;
json["opcode"] = opcode;
json["nodeid"] = nodeid;
json["arg"] = arg;
if (dev_model_id == DAIKINCentralACindoor_PID) { //中央空调内机
json["requester"] = "HJ_CentralAC";
}else if(opcode == "SETUP_NODE"){
json["requester"] = "HJ_Config";
} else{
json["requester"] = "HJ_Server";
}
string wholeMsg = EH_ToolKit::JsonToString(json);
if(MQ_CCU_Adapter::GetInstance()->send_Control_Info(wholeMsg) != 0){
LOGW("Send msg to IotHandler failed.msg is %s\n",wholeMsg.c_str());
}
}else{
LOGW("dev:%s not support set property. \n",sn.c_str());
return -1;
}
// if(opcode!=""){
// EH::Json::Value json;
// json["opcode"] = opcode;
// json["nodeid"] = nodeid;
// json["arg"] = arg;
// if (dev_model_id == DAIKINCentralACindoor_PID) { //中央空调内机
// json["requester"] = "HJ_CentralAC";
// }else if(opcode == "SETUP_NODE"){
// json["requester"] = "HJ_Config";
// } else{
// json["requester"] = "HJ_Server";
// }
// string wholeMsg = EH_ToolKit::JsonToString(json);
// if(MQ_CCU_Adapter::GetInstance()->send_Control_Info(wholeMsg) != 0){
// LOGW("Send msg to IotHandler failed.msg is %s\n",wholeMsg.c_str());
// }
// }else{
// LOGW("dev:%s not support set property. \n",sn.c_str());
// return -1;
// }
return 0;
}
......
......@@ -378,32 +378,28 @@ int KK_MQTTSDK::con(int autoRecon,int timeoutInSec){
/*线程标识符。属性类型的结构不是故意暴露。*/
pthread_t tid;
// /*创建一个新线程,从执行START-ROUTINE开始
// 正在传递ARG。创造属性来自属性。新的
// 句柄存储在*NEWTHREAD中。*/
// pthread_create(&tid, NULL, run0, this);
/*创建一个新线程,从执行START-ROUTINE开始
正在传递ARG。创造属性来自属性。新的
句柄存储在*NEWTHREAD中。*/
pthread_create(&tid, NULL, run0, this);
}
return -1;
}
// void* KK_MQTTSDK::run0(void* opt) {
// KK_MQTTSDK* mqttheartbeat_pthread = (KK_MQTTSDK*) opt; //这个的含义是什么?
// return mqttheartbeat_pthread->run(opt);
// }
// void* KK_MQTTSDK::run(void* opt){
// while (true) {
// EH::Json::FastWriter writer;
// EH::Json::Value Payload;
// Payload["gw_id"] = gw_id;
// string sendPayload = writer.write(Payload);
// //与Roma平台30秒心跳
// sleep(30);
// LOGD("Topic:%s Payload:%s\n",heartbeat_Topic.c_str(),sendPayload.c_str());
// sendMsg(heartbeat_Topic,sendPayload,0);
// }
// //delete this;
// return NULL;
// }
void* KK_MQTTSDK::run0(void* opt) {
KK_MQTTSDK* mqttheartbeat_pthread = (KK_MQTTSDK*) opt; //这个的含义是什么?
return mqttheartbeat_pthread->run(opt);
}
void* KK_MQTTSDK::run(void* opt){
while (true) {
EH::Json::FastWriter writer;
//与Roma平台30秒心跳
sleep(5);
LOGD("Topic:%s Payload:""\n",heartbeat_Topic.c_str());
sendMsg(heartbeat_Topic,"",0);
}
//delete this;
return NULL;
}
int KK_MQTTSDK::discon(){
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
/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
......
#!/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