alarmlight.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #include "alarmlight.h"
  2. #include <QJsonArray>
  3. #include <QJsonObject>
  4. #include <QJsonDocument>
  5. #include <QtCore/QTextCodec>
  6. #include <fstream>
  7. Alarmlight::Alarmlight()
  8. {
  9. m_mpDeviceLastCommand.clear();
  10. m_mpRegulation.clear();
  11. m_pDataConsumer = nullptr;
  12. }
  13. bool Alarmlight::isInheritedFrom(std::string tp)
  14. {
  15. bool bEqual = (strcasecmp(tp.c_str(), "BaseModule") == 0);
  16. return bEqual;
  17. }
  18. void Alarmlight::regConsumer(DataConsumer* pDC)
  19. {
  20. m_pDataConsumer = pDC;
  21. }
  22. void Alarmlight::Setup(ModuleInfo moduleInfo)
  23. {
  24. // 把模块里的关键信息读出来,例如怎么干活,什么条件让哪个设备干嘛?
  25. std::map<QString,QVariant> vSettings;
  26. for(std::vector<Setting>::iterator it = moduleInfo.vSettings.begin();it != moduleInfo.vSettings.end();it++)
  27. {
  28. vSettings[(*it).Name.c_str()] = (*it).qValue;
  29. }
  30. if(vSettings.find("num") != vSettings.end())
  31. {
  32. int number = vSettings["num"].toInt();
  33. for(int i = 1;i <= number;i++)
  34. {
  35. oneregulation one;
  36. if(vSettings.find(QString("object_%1").arg(i)) == vSettings.end())
  37. continue;
  38. one.sourceobject = vSettings[QString("object_%1").arg(i)].toString();
  39. if(vSettings.find(QString("operator_%1").arg(i)) == vSettings.end())
  40. continue;
  41. one.useoperator = vSettings[QString("operator_%1").arg(i)].toString();
  42. if(vSettings.find(QString("operator1_%1").arg(i)) == vSettings.end())
  43. continue;
  44. one.operator1 = vSettings[QString("operator1_%1").arg(i)].toDouble();
  45. if(vSettings.find(QString("operator2_%1").arg(i)) == vSettings.end())
  46. continue;
  47. one.operator2 = vSettings[QString("operator2_%1").arg(i)].toDouble();
  48. if(vSettings.find(QString("device_%1").arg(i)) == vSettings.end())
  49. continue;
  50. one.targetdevice = vSettings[QString("device_%1").arg(i)].toString();
  51. if(vSettings.find(QString("devicecommand_%1").arg(i)) == vSettings.end())
  52. continue;
  53. one.targetdevicecommand = vSettings[QString("devicecommand_%1").arg(i)].toString();
  54. this->m_mpRegulation.insert(std::pair<std::string,oneregulation>(one.sourceobject.toStdString(),one));
  55. }
  56. }
  57. }
  58. void Alarmlight::OnSubData(std::string name,std::string val)
  59. {
  60. QByteArray byteArray(val.c_str(), val.length());
  61. QJsonParseError err;
  62. QJsonDocument jsonDoc(QJsonDocument::fromJson(byteArray,&err));
  63. QJsonObject jsonObject = jsonDoc.object();
  64. QStringList keys = jsonObject.keys();
  65. for(int i = 0;i < keys.size();i++)
  66. {
  67. QString realkey = QString("%1.%2").arg(name.c_str()).arg(keys.at(i));
  68. double realvalue = jsonObject[keys.at(i)].toDouble();
  69. // 传入数据,判断数据,用m_pDataConsumer的ondata输出设
  70. std::multimap<std::string,oneregulation>::iterator it = this->m_mpRegulation.find(realkey.toStdString());
  71. if(it != this->m_mpRegulation.end())
  72. {
  73. for(; it != this->m_mpRegulation.end(); it++)
  74. {
  75. if((*it).first == realkey.toStdString())
  76. {
  77. oneregulation one = (*it).second;
  78. //double value = std::stod(val);
  79. bool send = false;
  80. if(one.useoperator == "beyond")
  81. {
  82. if(realvalue > one.operator1)
  83. {
  84. send = true;
  85. }
  86. }
  87. else if(one.useoperator == "below")
  88. {
  89. if(realvalue < one.operator1)
  90. {
  91. send = true;
  92. }
  93. }
  94. else if(one.useoperator == "range")
  95. {
  96. if(realvalue >= one.operator1 && realvalue <= one.operator2)
  97. {
  98. send = true;
  99. }
  100. }
  101. if(send == true)
  102. {
  103. if(this->m_mpDeviceLastCommand.find(one.targetdevice) != this->m_mpDeviceLastCommand.end())
  104. {
  105. if(this->m_mpDeviceLastCommand[one.targetdevice] == one.targetdevicecommand)
  106. send = false;
  107. }
  108. if(send == true)
  109. {
  110. m_pDataConsumer->OnData(one.targetdevice.toStdString(),QVariant(one.targetdevicecommand));
  111. this->m_mpDeviceLastCommand[one.targetdevice] = one.targetdevicecommand;
  112. }
  113. }
  114. }
  115. else
  116. {
  117. break;
  118. }
  119. }
  120. }
  121. }
  122. }
  123. BaseModule* instance()
  124. {
  125. return new Alarmlight();
  126. }
  127. void destroy(BaseModule* pInstance)
  128. {
  129. if( pInstance )
  130. {
  131. delete pInstance;
  132. }
  133. }