appweb_handle.c 137 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512
  1. #include "http.h"
  2. #include "cJSON.h"
  3. #include "common.h"
  4. #include "json_handle.h"
  5. #include "sqlite_handle.h"
  6. #include "cJSON.h"
  7. #include "switch_ctrl.h"
  8. #include "sys.h"
  9. #include "thread.h"
  10. #include "cfg.h"
  11. #include "cascade.h"
  12. #include "appweb.h"
  13. #include "upg.h"
  14. #include "language_common.h"
  15. #include "websocket_handle.h"
  16. typedef void (*http_fn_t)(void *arg);
  17. static void file_to_base64(void)
  18. {
  19. //mg_base64_encode();
  20. }
  21. #ifdef USE_WEBAPP
  22. #include "http.h"
  23. #else
  24. #include "mongoose.h"
  25. #define FN_MAX 30
  26. typedef struct {
  27. struct mg_connection *c;
  28. int ev;
  29. void *ev_data;
  30. }mg_stream_t;
  31. typedef struct {
  32. http_fn_t f;
  33. char *uri;
  34. }mg_fn_t;
  35. typedef struct {
  36. int cnt;
  37. mg_fn_t fn[FN_MAX];
  38. char rootDir[MG_PATH_MAX];
  39. pthread_t tid;
  40. }mg_handle_t;
  41. #endif
  42. typedef struct {
  43. #ifndef USE_WEBAPP
  44. mg_handle_t mg;
  45. #endif
  46. pthread_t tid;
  47. }web_handle_t;
  48. static web_handle_t webHandle;
  49. static char* g_product_board_cpu[] = {
  50. "xxx",
  51. "T113"
  52. };
  53. static char* g_product_type_str[] = {
  54. "SmartPdu(DC)",
  55. "SmartPdu(AC)",
  56. "SmartPdu(Tree_AC_Tree)",
  57. "SmartPdu(Tree_AC_One)",
  58. };
  59. static char* g_product_pwr_type_str[] = {
  60. "xxx",
  61. "直流",
  62. "交流单相",
  63. "交流三相三出",
  64. "交流三相单出",
  65. };
  66. static int webSetCallback(void);
  67. static int http_reply(void *conn, int status, char *ack)
  68. {
  69. int r=0;
  70. #ifdef USE_WEBAPP
  71. HttpStream *s=(HttpStream*)conn;
  72. httpSetStatus(s, status);
  73. if(ack && strlen(ack)>0) {
  74. httpWrite(s->writeq, ack);
  75. }
  76. httpFinalize(s);
  77. #else
  78. mg_stream_t *s=(mg_stream_t*)conn;
  79. mg_http_reply2(s->c, status, "", ack);
  80. #endif
  81. return r;
  82. }
  83. static void httpAddCallback(char *uri, http_fn_t f)
  84. {
  85. #ifdef USE_WEBAPP
  86. httpDefineAction(uri, (HttpAction)f);
  87. #else
  88. mg_handle_t *h=&webHandle.mg;
  89. if(h->cnt<FN_MAX-1) {
  90. h->fn[h->cnt].uri = uri;
  91. h->fn[h->cnt].f = f;
  92. h->cnt++;
  93. }
  94. #endif
  95. }
  96. #ifdef USE_WEBAPP
  97. static void *web_thread(void *arg)
  98. {
  99. Mpr *mpr;
  100. int rc;
  101. char path[MG_PATH_MAX];
  102. thread_handle_t *h=(thread_handle_t*)arg;
  103. rc = MPR_ERR_CANT_CREATE;
  104. if ((mpr = mprCreate(0, NULL, MPR_USER_EVENTS_THREAD)) == 0) {
  105. mprError("Cannot create runtime");
  106. return NULL;
  107. }
  108. if (httpCreate(HTTP_CLIENT_SIDE | HTTP_SERVER_SIDE) == 0) {
  109. mprError("Cannot create the HTTP services");
  110. return NULL;
  111. }
  112. mprStart();
  113. sys_get_path(path, ME_CONFIG_FILE);
  114. log_d("____ web root: %s\n", path);
  115. if (maParseConfig(path) < 0) {
  116. mprError("Cannot parse the config file %s", ME_CONFIG_FILE);
  117. return NULL;
  118. }
  119. webSetCallback();
  120. //httpAddFileHandler(host);
  121. if (httpStartEndpoints() < 0) {
  122. mprError("Cannot start the web server");
  123. return NULL;
  124. }
  125. mprServiceEvents(-1, 0);
  126. mprDestroy();
  127. pthread_exit(NULL);
  128. }
  129. #else
  130. typedef struct {
  131. size_t expected; // POST data length, bytes
  132. size_t received; // Already received bytes
  133. void *fp; // Opened uploaded file
  134. }upload_stat_t;
  135. static void http_mg_cb(struct mg_connection *c, int ev, void *ev_data)
  136. {
  137. int i,j;
  138. mg_handle_t *h=&webHandle.mg;
  139. mg_stream_t s={c,ev,ev_data};
  140. if (ev == MG_EV_HTTP_MSG) {
  141. struct mg_http_message *hm = ev_data;
  142. for(i=0; i<h->cnt; i++) {
  143. if (h->fn[i].f && h->fn[i].uri && mg_match(hm->uri, mg_str(h->fn[i].uri), NULL)) {
  144. h->fn[i].f(&s); c->pfn = NULL;
  145. }
  146. }
  147. if (c->pfn != NULL) {
  148. struct mg_http_serve_opts opts = {.root_dir = h->rootDir};
  149. mg_http_serve_dir(c, ev_data, &opts);
  150. }
  151. }
  152. }
  153. static void *web_thread(void *arg)
  154. {
  155. struct mg_mgr mgr;
  156. struct mg_connection *c;
  157. mg_handle_t *mh=&webHandle.mg;
  158. thread_handle_t *h=(thread_handle_t*)arg;
  159. const char *listen_addr="http://0.0.0.0:80";
  160. //mg_log_set(MG_LL_ERROR);
  161. mg_mgr_init(&mgr);
  162. //sys_get_path(h->rootDir, WEB_ROOT);
  163. strcpy(mh->rootDir, "/root/run/web");
  164. if ((c = mg_http_listen(&mgr, listen_addr, http_mg_cb, NULL)) == NULL) {
  165. MG_ERROR(("cannot listen on %s. use http://address:port or :port\n", listen_addr));
  166. return NULL;
  167. }
  168. webSetCallback();
  169. printf("_____mgHandle.cnt: %d, rootdir: %s\n", mh->cnt, mh->rootDir);
  170. while(h->quit==0) {
  171. mg_mgr_poll(&mgr, 50);
  172. }
  173. mg_mgr_free(&mgr);
  174. pthread_exit(NULL);
  175. }
  176. #endif
  177. /// @brief 系统信息
  178. /// @param stream
  179. static void systemConfiguration(void* conn)
  180. {
  181. char *ack_str = NULL;
  182. char* rx_Head_buf = NULL;
  183. char *g_token = NULL;
  184. #ifdef USE_WEBAPP
  185. HttpStream *s = (HttpStream *)conn;
  186. rx_Head_buf = (char *)httpGetHeader(s, "Authorization");
  187. usleep(500000);
  188. #else
  189. mg_stream_t *s = (mg_stream_t *)conn;
  190. struct mg_http_message *msg = s->ev_data;
  191. rx_Head_buf = (char *)msg->head.buf;
  192. #endif
  193. g_token = json_to_Token_info(rx_Head_buf);
  194. // 检查token是否有效
  195. if (g_token != NULL && !CheckLoginStatus(g_token))
  196. {
  197. ack_str = log_AthFailedinfo_to_json();
  198. }
  199. else
  200. {
  201. ack_str = json_to_system_config_info();
  202. }
  203. http_reply(conn, 200, ack_str);
  204. if (g_token != NULL)
  205. {
  206. free(g_token);
  207. }
  208. cJSON_free((void *)ack_str);
  209. }
  210. /// @brief 多语言切换
  211. /// @param stream
  212. static void changeLanguages(void* conn)
  213. {
  214. char* ack_str = NULL;
  215. char* rx_body_buf = NULL;
  216. #ifdef USE_WEBAPP
  217. HttpStream *s=(HttpStream*)conn;
  218. rx_body_buf = (char*)httpGetBodyInput(s);
  219. #else
  220. mg_stream_t *s=(mg_stream_t*)conn;
  221. struct mg_http_message *msg=s->ev_data;
  222. rx_body_buf = (char*)msg->body.buf;
  223. #endif
  224. json_to_switch_language(rx_body_buf);
  225. dev_update_device_genera_info(__globalDeviceManage.db,__globalDeviceManage._global_device_info);
  226. ack_str = ctrl_sts_ack_to_json();
  227. http_reply(conn, 200, ack_str);
  228. cJSON_free((void*)ack_str);
  229. }
  230. /// @brief 登录信息
  231. /// @param stream
  232. static void loginFunc(void* conn)
  233. {
  234. char* ack_str = NULL ;
  235. char g_token[64] = {0};
  236. cchar* rx_body_buf = NULL;
  237. #ifdef USE_WEBAPP
  238. HttpStream *s=(HttpStream*)conn;
  239. rx_body_buf = httpGetBodyInput(s);
  240. #else
  241. mg_stream_t *s=(mg_stream_t*)conn;
  242. struct mg_http_message *msg=s->ev_data;
  243. rx_body_buf = msg->body.buf;
  244. #endif
  245. //用户信息创建-未析构
  246. _User_Log *_newUserLogin = (_User_Log *)malloc(sizeof(_User_Log));
  247. memset(_newUserLogin, 0, sizeof(_User_Log));
  248. //转换json参数
  249. if(json_to_User_login_info(rx_body_buf,_newUserLogin)!=0)
  250. {
  251. httpSetStatus(stream, 400);
  252. httpFinalize(stream);
  253. return ;
  254. }
  255. bool LoginFlag = false;
  256. // 查询用户信息
  257. UserInfo User_list;
  258. INIT_LIST_HEAD(&User_list.list);
  259. if (0 == dev_get_user_info(__globalDeviceManage.db, &User_list))
  260. {
  261. UserInfo *_UserInfoTemp = NULL;
  262. list_for_each_entry(_UserInfoTemp, &User_list.list, list)
  263. {
  264. if (_UserInfoTemp == NULL)
  265. break;
  266. if (strcmp(_UserInfoTemp->userName,_newUserLogin->user_name)==0 && strcmp(_UserInfoTemp->userPW,_newUserLogin->user_password)==0)
  267. {
  268. LoginFlag=true;
  269. _GlobalUserInfoNew = *_UserInfoTemp;
  270. break;
  271. }
  272. }
  273. }
  274. //if (strcmp(_newUserLogin.user_name, "gowone") == 0 && strcmp(_newUserLogin.user_password,"gowone520") == 0)
  275. //{
  276. // LoginFlag = true;
  277. //}
  278. //获取随机token
  279. get_rand_str(g_token,32);
  280. //记录token
  281. strcpy(_newUserLogin->user_token,g_token);
  282. int ack_code=0;
  283. if (!LoginFlag)
  284. {
  285. ack_str = log_LoginFailedinfo_to_json();
  286. ack_code = 201;
  287. }
  288. else
  289. {
  290. strcpy(_GlobalUserToken,g_token);
  291. list_add_tail(&_newUserLogin->list, &_GlobalUserLoginInfo.list);
  292. ack_str = log_info_to_json(g_token);
  293. ack_code = 200;
  294. }
  295. http_reply(conn, ack_code, ack_str);
  296. cJSON_free((void*)ack_str);
  297. }
  298. /// @brief 注销信息
  299. /// @param stream
  300. static void loginOutFunc(void* conn)
  301. {
  302. __globalDeviceManage.view_page=-1;
  303. char* ack_str = NULL ;
  304. char* rx_body_buf = NULL;
  305. char* g_token;
  306. #ifdef USE_WEBAPP
  307. HttpStream *s=(HttpStream*)conn;
  308. rx_body_buf = (char*)httpGetBodyInput(s);
  309. #else
  310. mg_stream_t *s=(mg_stream_t*)conn;
  311. struct mg_http_message *msg=s->ev_data;
  312. rx_body_buf = (char*)msg->body.buf;
  313. #endif
  314. //转换json参数
  315. if(json_to_User_loginOut_info(rx_body_buf,&g_token)!=0)
  316. {
  317. http_reply(conn, 400, NULL);
  318. return ;
  319. }
  320. ack_str = log_info_to_json(g_token);
  321. http_reply(conn, 200, ack_str);
  322. free(g_token);
  323. cJSON_free((void*)ack_str);
  324. }
  325. /// @brief 获取用户信息
  326. /// @param stream
  327. static void getUserInfo(void* conn)
  328. {
  329. char* ack_str = NULL ;
  330. char* rx_body_buf = NULL;
  331. ack_str = user_info_to_json();
  332. http_reply(conn, 200, ack_str);
  333. cJSON_free((void*)ack_str);
  334. }
  335. /// @brief 获取菜单数据
  336. /// @param stream
  337. static void getUserRouters(void* conn)
  338. {
  339. char* ack_str = NULL ;
  340. char* rx_Head_buf = NULL;
  341. char* g_token=NULL;
  342. #ifdef USE_WEBAPP
  343. HttpStream *s=(HttpStream*)conn;
  344. rx_Head_buf = (char*)httpGetHeader(s,"Authorization");
  345. usleep(500000);
  346. #else
  347. mg_stream_t *s=(mg_stream_t*)conn;
  348. struct mg_http_message *msg=s->ev_data;
  349. rx_Head_buf = (char*)msg->head.buf;
  350. #endif
  351. g_token = json_to_Token_info(rx_Head_buf);
  352. // 根据token获取用户及用户权限
  353. ack_str = user_routers_info_to_json();
  354. http_reply(conn, 200, ack_str);
  355. if (g_token != NULL)
  356. {
  357. free(g_token);
  358. }
  359. cJSON_free((void*)ack_str);
  360. }
  361. /// @brief 设备总体信息
  362. /// @param stream
  363. static void overallStatusMonitoring(void* conn)
  364. {
  365. int ret = -1 ;
  366. cJSON *cjson=NULL;
  367. cmd_data_t cmd;
  368. _Over_All_Sts_Monitor _over_all_sts_monitor={0};
  369. _OverBackStsInfo _over_back_sts_info; //设备总体状态信息
  370. _OverAllPwrAckInfo _over_all_pwr_back_info; //设备电源信息
  371. char* rx_body_buf = NULL;
  372. char* ack_str=NULL;
  373. #ifdef USE_WEBAPP
  374. HttpStream *s=(HttpStream*)conn;
  375. rx_body_buf = (char*)httpGetBodyInput(s);
  376. usleep(500000);
  377. #else
  378. mg_stream_t *s=(mg_stream_t*)conn;
  379. struct mg_http_message *msg=s->ev_data;
  380. rx_body_buf = (char*)msg->body.buf;
  381. #endif
  382. //转换json参数
  383. cjson = json_to_overall_status_monitor(rx_body_buf,&_over_all_sts_monitor);
  384. if(cjson==NULL)
  385. {
  386. http_reply(conn, 400, NULL);
  387. return ;
  388. }
  389. //总电压电流信息
  390. if(strcmp(_over_all_sts_monitor.type,"listQuery")==0)
  391. {
  392. //总信息
  393. __globalDeviceManage.view_page = 1 ;
  394. cur_dev_addr = _over_all_sts_monitor.product_id;
  395. if(cur_dev_addr>0) {
  396. int r=0;
  397. cmd.cmd = CASCADE_CMD_GET_INFO;
  398. cmd.obj = OBJ_OVERALL;
  399. r = cascade_request(&cmd);
  400. if(r) {
  401. goto quit;
  402. }
  403. cmd.cmd = CASCADE_CMD_QUERY_CH;
  404. cascade_request(&cmd);
  405. goto quit;
  406. }
  407. else {
  408. GlobalPowerInfo __globalPowerInfo;
  409. memset(&__globalPowerInfo,0,sizeof(GlobalPowerInfo));
  410. _over_all_pwr_back_info.product_name = __globalDeviceManage._global_device_info->product_name;
  411. _over_all_pwr_back_info.product_id = __globalDeviceManage._global_device_info->product_id;
  412. _over_all_pwr_back_info.product_number = __globalDeviceManage._global_device_info->product_number;
  413. //查询数据库总电源信息
  414. if (__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_Tree
  415. ||__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_One
  416. ||__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_One_B
  417. )
  418. {
  419. if (strcmp(_over_all_sts_monitor.product_phOrder, "L1") == 0) // a相
  420. {
  421. __globalDeviceManage.nTreeACLshow = 0;
  422. dev_search_latest_t_ac_power_statistic_info(0, 0, &_over_all_pwr_back_info,&__globalDeviceManage);
  423. ack_str = over_all_pwr_monitor_to_json(0,&_over_all_pwr_back_info);
  424. }
  425. else if (strcmp(_over_all_sts_monitor.product_phOrder, "L2") == 0) // b相
  426. {
  427. __globalDeviceManage.nTreeACLshow = 1;
  428. dev_search_latest_t_ac_power_statistic_info(0, 1, &_over_all_pwr_back_info,&__globalDeviceManage);
  429. ack_str = over_all_pwr_monitor_to_json(1,&_over_all_pwr_back_info);
  430. }
  431. else if (strcmp(_over_all_sts_monitor.product_phOrder, "L3") == 0) // c相
  432. {
  433. __globalDeviceManage.nTreeACLshow = 2;
  434. dev_search_latest_t_ac_power_statistic_info(0, 2, &_over_all_pwr_back_info,&__globalDeviceManage);
  435. ack_str = over_all_pwr_monitor_to_json(2,&_over_all_pwr_back_info);
  436. }
  437. }
  438. else {
  439. if (dev_search_latest_power_info(__globalDeviceManage.db, __globalDeviceManage._global_device_info->product_id, 0, &__globalPowerInfo) != 0)
  440. {
  441. log_e("serach total pwr err.");
  442. }
  443. _over_all_pwr_back_info.voltage = __globalPowerInfo._power_info.voltage ;
  444. _over_all_pwr_back_info.current = __globalPowerInfo._power_info.current ;
  445. _over_all_pwr_back_info.power = __globalPowerInfo._power_info.power ;
  446. _over_all_pwr_back_info.freq = __globalPowerInfo._power_info.freq ;
  447. _over_all_pwr_back_info.consumption = __globalPowerInfo._power_info.consumption ;
  448. _over_all_pwr_back_info.factor = __globalPowerInfo._power_info.factor ;
  449. }
  450. ack_str = over_all_pwr_monitor_to_json(0,&_over_all_pwr_back_info);
  451. }
  452. }
  453. //打开所有开关
  454. else if(strcmp(_over_all_sts_monitor.type,"open")==0)
  455. {
  456. log_i("over all request:open");
  457. //总开
  458. int nSendAddr=0;
  459. char buff[256];
  460. if(cur_dev_addr>0) {
  461. cmd.cmd = CASCADE_CMD_OPEN;
  462. cmd.obj = OBJ_OVERALL;
  463. cmd.chId = 0xff;
  464. cascade_request(&cmd);
  465. ack_str = ctrl_sts_ack_to_json();
  466. goto quit;
  467. }
  468. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  469. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  470. {
  471. if(_globalPowerMangerTemp==NULL)
  472. break;
  473. if(_globalPowerMangerTemp->product_saddr==nSendAddr)continue;
  474. nSendAddr=_globalPowerMangerTemp->product_saddr;
  475. log_i("Open All address Start");
  476. int rec=g_switch_set_all_ctrl(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_ch_type,_globalPowerMangerTemp->product_saddr,1);
  477. if(rec<0)log_i("Open All address:%d rec:%d:%s",nSendAddr,rec,modbus_strerror(errno));
  478. }
  479. sprintf(buff,"$开启$|$所有$|$通道$");
  480. dev_insert_alarm_ctrl(__globalDeviceManage.db,_globalPowerMangerTemp->product_id,3,buff);
  481. ack_str = ctrl_sts_ack_to_json();
  482. }
  483. //关闭所有开关
  484. else if(strcmp(_over_all_sts_monitor.type,"close")==0)
  485. {
  486. log_i("over all request:close");
  487. if(cur_dev_addr>0) {
  488. cmd.cmd = CASCADE_CMD_CLOSE;
  489. cmd.obj = OBJ_OVERALL;
  490. cmd.chId = 0xff;
  491. cascade_request(&cmd);
  492. ack_str = ctrl_sts_ack_to_json();
  493. goto quit;
  494. }
  495. //总关
  496. int nSendAddr=0;
  497. char buff[256];
  498. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  499. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  500. {
  501. if(_globalPowerMangerTemp==NULL)
  502. break;
  503. if(_globalPowerMangerTemp->product_saddr==nSendAddr)continue;
  504. nSendAddr=_globalPowerMangerTemp->product_saddr;
  505. log_i("Close All address Start");
  506. int rec=g_switch_set_all_ctrl(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_ch_type,_globalPowerMangerTemp->product_saddr,0);
  507. if(rec<0)log_i("Close All address:%d rec:%d:%s",nSendAddr,rec,modbus_strerror(errno));
  508. }
  509. sprintf(buff,"$关闭$|$所有$|$通道$");
  510. dev_insert_alarm_ctrl(__globalDeviceManage.db,_globalPowerMangerTemp->product_id,3,buff);
  511. ack_str = ctrl_sts_ack_to_json();
  512. }
  513. //查询历史记录
  514. //ok
  515. else if(strcmp(_over_all_sts_monitor.type,"listHisQuery")==0)
  516. {
  517. #if 0
  518. log_i("over all request:listHisQuery");
  519. int ret = 0 ;
  520. int size = 0 ;
  521. int page_num = 0 ;
  522. int page_size = 0 ;
  523. page_num = atoi(_over_all_sts_monitor.page_num);
  524. page_size = atoi(_over_all_sts_monitor.page_size);
  525. GlobalPowerInfo _globalPowerInfo;
  526. INIT_LIST_HEAD(&_globalPowerInfo.list);
  527. ret = dev_search_power_info(__globalDeviceManage.db,
  528. __globalDeviceManage._global_device_info->product_id,
  529. 0,
  530. _over_all_sts_monitor.start_time,
  531. _over_all_sts_monitor.end_time,
  532. page_num,
  533. page_size,
  534. &size,
  535. &_globalPowerInfo);
  536. if(ret!=0)
  537. {
  538. log_e("dev all status history get error.\n");
  539. }
  540. //返回应答
  541. ack_str = overall_power_history_to_json(&_globalPowerInfo,&__globalDeviceManage);
  542. //释放资源
  543. GlobalPowerInfo* node;
  544. GlobalPowerInfo* next;
  545. list_for_each_entry_safe(node, next, &_globalPowerInfo.list, list)
  546. {
  547. list_del(&node->list);
  548. free(node);
  549. }
  550. #endif
  551. }
  552. //电压统计
  553. //1分钟1个点 6个小时 共360个点
  554. else if(strcmp(_over_all_sts_monitor.type,"listDyTotalQuery")==0)
  555. {
  556. #if DBUG_INFO
  557. log_i("over all request: listDyTotalQuery\n");
  558. #endif
  559. //申请电压统计信息参数
  560. GlobalPowerInfo __globalPowerInfo;
  561. //清0
  562. memset(&__globalPowerInfo,0,sizeof(GlobalPowerInfo));
  563. if (_over_all_sts_monitor.product_pwr_type==SmartPDU_Tree_AC_Tree)
  564. {
  565. ack_str = over_all_data_t_ac_to_json(&_over_all_pwr_back_info,&_over_all_sts_monitor, TOTAL_VOLTAGE_TYPE);
  566. }
  567. else
  568. {
  569. //查询数据库总电源信息 传给所申请的参数结构体
  570. if(dev_search_time_power_info(__globalDeviceManage.db,__globalDeviceManage._global_device_info->product_id,0,TOTAL_VOLTAGE_TYPE,&__globalPowerInfo,_over_all_sts_monitor.start_time,_over_all_sts_monitor.end_time)!=0)
  571. {
  572. log_e("serach total voltage err.");
  573. }
  574. //传值给总管理结构体
  575. #define TOTAL_COUNT 60
  576. for(int i=0;i< TOTAL_COUNT;i++)
  577. {
  578. strcpy(_over_all_pwr_back_info._total_voltage.xAxis[i],__globalPowerInfo._total_voltage.xAxis[i]);
  579. _over_all_pwr_back_info._total_voltage.ydata[i] = __globalPowerInfo._total_voltage.ydata[i];
  580. }
  581. //返回电压统计
  582. ack_str = over_all_total_info_to_json(&_over_all_pwr_back_info,TOTAL_VOLTAGE_TYPE);
  583. }
  584. }
  585. //电流统计
  586. else if(strcmp(_over_all_sts_monitor.type,"listDlTotalQuery")==0)
  587. {
  588. #if DBUG_INFO
  589. log_i("over all request: listDlTotalQuery\n");
  590. #endif
  591. //申请电流统计信息参数
  592. GlobalPowerInfo __globalPowerInfo;
  593. //清0
  594. memset(&__globalPowerInfo,0,sizeof(GlobalPowerInfo));
  595. if (_over_all_sts_monitor.product_pwr_type == SmartPDU_Tree_AC_Tree)
  596. {
  597. ack_str = over_all_data_t_ac_to_json(&_over_all_pwr_back_info, &_over_all_sts_monitor, TOTAL_CURRENT_TYPE);
  598. }
  599. else
  600. {
  601. //查询数据库总电源信息 传给所申请的参数结构体
  602. if(dev_search_time_power_info(__globalDeviceManage.db,__globalDeviceManage._global_device_info->product_id,0,TOTAL_CURRENT_TYPE,&__globalPowerInfo,_over_all_sts_monitor.start_time,_over_all_sts_monitor.end_time)!=0)
  603. {
  604. log_e("serach total current err.");
  605. }
  606. //传值给总管理结构体
  607. for(int i=0;i< TOTAL_COUNT;i++)
  608. {
  609. strcpy(_over_all_pwr_back_info._total_current.xAxis[i],__globalPowerInfo._total_current.xAxis[i]);
  610. _over_all_pwr_back_info._total_current.ydata[i] = __globalPowerInfo._total_current.ydata[i];
  611. }
  612. //返回电流统计
  613. ack_str = over_all_total_info_to_json(&_over_all_pwr_back_info,TOTAL_CURRENT_TYPE);
  614. }
  615. }
  616. //功率统计
  617. else if(strcmp(_over_all_sts_monitor.type,"listGlTotalQuery")==0)
  618. {
  619. #if DBUG_INFO
  620. log_i("over all request: listGlTotalQuery\n");
  621. #endif
  622. //申请功率统计信息参数
  623. GlobalPowerInfo __globalPowerInfo;
  624. //清0
  625. memset(&__globalPowerInfo,0,sizeof(GlobalPowerInfo));
  626. if (_over_all_sts_monitor.product_pwr_type == SmartPDU_Tree_AC_Tree)
  627. {
  628. ack_str = over_all_data_t_ac_to_json(&_over_all_pwr_back_info, &_over_all_sts_monitor, TOTAL_POWER_TYPE);
  629. }
  630. else
  631. {
  632. //查询数据库总电源信息 传给所申请的参数结构体
  633. if(dev_search_time_power_info(__globalDeviceManage.db,__globalDeviceManage._global_device_info->product_id,0,TOTAL_POWER_TYPE,&__globalPowerInfo,_over_all_sts_monitor.start_time,_over_all_sts_monitor.end_time)!=0)
  634. {
  635. log_e("serach total power err.");
  636. }
  637. //传值给总管理结构体
  638. for(int i=0;i< TOTAL_COUNT;i++)
  639. {
  640. strcpy(_over_all_pwr_back_info._total_power.xAxis[i],__globalPowerInfo._total_power.xAxis[i]);
  641. _over_all_pwr_back_info._total_power.ydata[i] = __globalPowerInfo._total_power.ydata[i];
  642. }
  643. //返回功率统计
  644. ack_str = over_all_total_info_to_json(&_over_all_pwr_back_info,TOTAL_POWER_TYPE);
  645. }
  646. }
  647. //耗电量统计
  648. else if(strcmp(_over_all_sts_monitor.type,"listHdlTotalQuery")==0)
  649. {
  650. #if DBUG_INFO
  651. log_i("over all request: listHdlTotalQuery\n");
  652. #endif
  653. //申请耗电量统计信息参数
  654. GlobalPowerInfo __globalPowerInfo;
  655. //清0
  656. memset(&__globalPowerInfo,0,sizeof(GlobalPowerInfo));
  657. if (_over_all_sts_monitor.product_pwr_type == SmartPDU_Tree_AC_Tree)
  658. {
  659. ack_str = over_all_data_t_ac_to_json(&_over_all_pwr_back_info, &_over_all_sts_monitor, TOTAL_POWER_CONS_TYPE);
  660. }
  661. else
  662. {
  663. //查询数据库总电源信息 传给所申请的参数结构体
  664. if(dev_search_time_power_info(__globalDeviceManage.db,__globalDeviceManage._global_device_info->product_id,0,TOTAL_POWER_CONS_TYPE,&__globalPowerInfo,_over_all_sts_monitor.start_time,_over_all_sts_monitor.end_time)!=0)
  665. {
  666. log_e("serach total power consumption err.");
  667. }
  668. //传值给总管理结构体
  669. for(int i=0;i< TOTAL_COUNT;i++)
  670. {
  671. strcpy(_over_all_pwr_back_info._total_consumption.xAxis[i],__globalPowerInfo._total_consumption.xAxis[i]);
  672. _over_all_pwr_back_info._total_consumption.ydata[i] = __globalPowerInfo._total_consumption.ydata[i];
  673. }
  674. //返回耗电量统计
  675. ack_str = over_all_total_info_to_json(&_over_all_pwr_back_info,TOTAL_POWER_CONS_TYPE);
  676. }
  677. }
  678. //查询系统总数情况
  679. else if(strcmp(_over_all_sts_monitor.type,"listTotalQuery")==0)
  680. {
  681. #if DBUG_INFO
  682. log_i("over all request: listTotalQuery\n");
  683. #endif
  684. //初始化系统总数结构体
  685. SystemTotalInfo __system_total_info;
  686. memset(&__system_total_info, 0, sizeof(SystemTotalInfo));
  687. struct tm *t;
  688. struct timeval tv;
  689. char start_time[32] = {0};
  690. char stop_time[32] = {0};
  691. gettimeofday(&tv, NULL);
  692. t = localtime(&tv.tv_sec);
  693. sprintf(start_time, "%04d-%02d-%02d %02d:%02d:%02d", t->tm_year + 1900, t->tm_mon+1, t->tm_mday, 0,0,0);
  694. //sprintf(start_time, "%04d-%02d-%02d %02d:%02d:%02d", 1970, 1, 1, 0,0,0);
  695. log_d(start_time);
  696. sprintf(stop_time, "%04d-%02d-%02d %02d:%02d:%02d", t->tm_year + 1900, t->tm_mon+1, t->tm_mday, 23,59, 59);
  697. //sprintf(stop_time, "%04d-%02d-%02d %02d:%02d:%02d", 1970, 1, 1, 23,59, 59);
  698. log_d(stop_time);
  699. //从数据库获取参数信息
  700. if(dev_get_system_total_info(__globalDeviceManage.db,__globalDeviceManage._global_device_info->product_id,0,&__system_total_info,start_time,stop_time)!=0)
  701. {
  702. log_e("serach total System total err.");
  703. }
  704. int nSumChannel=0;
  705. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  706. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  707. {
  708. nSumChannel+=1;
  709. }
  710. __system_total_info.channel_total = nSumChannel ;
  711. //获取通道总数
  712. // __GetSystemTotalInfo.channel_total = _globalDeviceManager->useSlaveCount;
  713. //获取系统总数情况
  714. _over_back_sts_info.system_total.channel_total = __system_total_info.channel_total;
  715. _over_back_sts_info.system_total.log_total = __system_total_info.log_total;
  716. _over_back_sts_info.system_total.sensor_total = __system_total_info.sensor_total;
  717. _over_back_sts_info.system_total.warn_total = __system_total_info.warn_total;
  718. //返回系统总数情况
  719. ack_str = over_system_total_monitor_to_json(&_over_back_sts_info);
  720. }
  721. //功率趋势图接口
  722. else if(strcmp(_over_all_sts_monitor.type,"listGlAllTotalQuery")==0)
  723. {
  724. #if DBUG_INFO
  725. log_i("over all request: listGlAllTotalQuery\n");
  726. #endif
  727. //初始化功率趋势图参数
  728. GlobalPowerInfo __PowerTrendInfo;
  729. //清0
  730. memset(&__PowerTrendInfo,0,sizeof(GlobalPowerInfo));
  731. #if 1
  732. //查询数据库总电源信息 传给所申请的参数结构体
  733. if(dev_search_power_trend_info(__globalDeviceManage.db,__globalDeviceManage._global_device_info->product_id,0,&__PowerTrendInfo,_over_all_sts_monitor.start_time,_over_all_sts_monitor.end_time)!=0)
  734. {
  735. log_e("serach total power consumption err.");
  736. }
  737. //传值给总管理结构体
  738. for(int i=0;i< TOTAL_COUNT;i++)
  739. {
  740. strcpy(_over_all_pwr_back_info._Power_Trend_Info.xAxis[i],__PowerTrendInfo._power_trend_info.xAxis[i]);
  741. _over_all_pwr_back_info._Power_Trend_Info.ydata[POWER_MERITORIOUS_TYPE][i] = __PowerTrendInfo._power_trend_info.ydata[POWER_MERITORIOUS_TYPE][i];
  742. _over_all_pwr_back_info._Power_Trend_Info.ydata[POWER_REACTIVE_TYPE][i] = __PowerTrendInfo._power_trend_info.ydata[POWER_REACTIVE_TYPE][i];
  743. _over_all_pwr_back_info._Power_Trend_Info.ydata[POWER_APPARENT_TYPE][i] = __PowerTrendInfo._power_trend_info.ydata[POWER_APPARENT_TYPE][i];
  744. }
  745. #else
  746. for(int i=0;i< TOTAL_COUNT;i++)
  747. {
  748. strcpy(_over_all_pwr_back_info._Power_Trend_Info.xAxis[i],"00:00 ");
  749. _over_all_pwr_back_info._Power_Trend_Info.ydata[POWER_MERITORIOUS_TYPE][i] = 10+i;
  750. _over_all_pwr_back_info._Power_Trend_Info.ydata[POWER_REACTIVE_TYPE][i] = 20+i;
  751. _over_all_pwr_back_info._Power_Trend_Info.ydata[POWER_APPARENT_TYPE][i] = 30+i;
  752. }
  753. #endif
  754. //返回功率趋势
  755. ack_str = over_power_trend_to_json(&_over_all_pwr_back_info);
  756. }
  757. quit:
  758. cJSON_Delete(cjson);
  759. http_reply(conn, 200, ack_str);
  760. cJSON_free((void*)ack_str);
  761. }
  762. /// @brief 电源通道
  763. /// @param stream
  764. static void channelStatusMonitoring(void* conn)
  765. {
  766. int ret = -1 ;
  767. cJSON *cjson;
  768. cmd_data_t cmd;
  769. _OverChnPwrRequest _over_chn_pwr_request;
  770. _OverAllPwrAckInfo _over_all_pwr_back_info; //设备电源信息
  771. char* rx_body_buf = NULL;
  772. char* ack_str = NULL ;
  773. #ifdef USE_WEBAPP
  774. HttpStream *s=(HttpStream*)conn;
  775. rx_body_buf = (char*)httpGetBodyInput(s);
  776. #else
  777. mg_stream_t *s=(mg_stream_t*)conn;
  778. struct mg_http_message *msg=s->ev_data;
  779. rx_body_buf=(char*)msg->body.buf;
  780. #endif
  781. //转换json参数
  782. memset(&_over_chn_pwr_request,0,sizeof(_OverChnPwrRequest));
  783. cjson = json_to_chn_pwr_status_monitor(rx_body_buf,&_over_chn_pwr_request);
  784. if(cjson==NULL)
  785. {
  786. http_reply(conn, 400, NULL);
  787. return ;
  788. }
  789. #if(1)
  790. //查询
  791. if(strcmp(_over_chn_pwr_request.type,"listQuery")==0||strcmp(_over_chn_pwr_request.type,"resetChannel")==0)
  792. {
  793. //log_i("channel status request:listQuery");
  794. //log_d(rx_body_buf);
  795. if (strcmp(_over_chn_pwr_request.type,"resetChannel")==0)
  796. {
  797. //__globalDeviceManage._ReloadChm_flag=true;
  798. //ResetChmData();
  799. //__globalDeviceManage._ReloadChm_flag=false;
  800. }
  801. GlobalPowerInfo _powerInfo;
  802. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  803. int product_chn_id = 0 ;
  804. _OverChnPwrAckInfo _over_chn_pwr_back_info;
  805. INIT_LIST_HEAD(&_over_chn_pwr_back_info.list);
  806. __globalDeviceManage.view_page = 2 ; //通道信息
  807. product_chn_id = _over_chn_pwr_request.productChId;
  808. cur_dev_addr = _over_chn_pwr_request.product_id;
  809. if(cur_dev_addr>0) {
  810. int r;
  811. cmd.cmd = CASCADE_CMD_GET_INFO;
  812. cmd.obj = OBJ_CHANNEL;
  813. r = cascade_request(&cmd);
  814. if(r) {
  815. goto quit;
  816. }
  817. cmd.cmd = CASCADE_CMD_QUERY_CH;
  818. r = cascade_request(&cmd);
  819. if(r) {
  820. goto quit;
  821. }
  822. cascade_get_ch(&_over_chn_pwr_back_info);
  823. }
  824. else {
  825. if(product_chn_id==0)
  826. {
  827. pthread_mutex_lock(&__globalDeviceManage._power_update);
  828. dev_search_latest_power_All_info(&__globalDeviceManage,&_over_chn_pwr_back_info);
  829. pthread_mutex_unlock(&__globalDeviceManage._power_update);
  830. }
  831. else //指定通道
  832. {
  833. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  834. {
  835. if(product_chn_id==_globalPowerMangerTemp->product_ch_id)
  836. {
  837. break;
  838. }
  839. }
  840. //更新数据
  841. //log_d("serach ch%d pwr ok.",product_chn_id);
  842. _OverChnPwrAckInfo* _overChnPwrBackInfoTemp = (_OverChnPwrAckInfo*)malloc(sizeof(_OverChnPwrAckInfo));
  843. if(_overChnPwrBackInfoTemp==NULL)
  844. {
  845. log_e("_overChnPwrBackInfoTemp malloc err.");
  846. }
  847. //查询数据库总电源信息
  848. if(dev_search_latest_power_info(__globalDeviceManage.db, __globalDeviceManage._global_device_info->product_id,
  849. product_chn_id, &_powerInfo)!=0)
  850. {
  851. log_e("serach total pwr err.");
  852. }
  853. {
  854. //填数据
  855. _overChnPwrBackInfoTemp->product_name = __globalDeviceManage._global_device_info->product_name;
  856. _overChnPwrBackInfoTemp->product_number = __globalDeviceManage._global_device_info->product_number;
  857. _overChnPwrBackInfoTemp->product_id = __globalDeviceManage._global_device_info->product_id;
  858. _overChnPwrBackInfoTemp->productChName = _globalPowerMangerTemp->product_ch_name;
  859. _overChnPwrBackInfoTemp->productChId = _globalPowerMangerTemp->product_ch_id;
  860. _overChnPwrBackInfoTemp->status = _powerInfo._power_info.status;
  861. _overChnPwrBackInfoTemp->voltage = _powerInfo._power_info.voltage;
  862. _overChnPwrBackInfoTemp->current = _powerInfo._power_info.current;
  863. _overChnPwrBackInfoTemp->power = _powerInfo._power_info.power ;
  864. _overChnPwrBackInfoTemp->freq = _powerInfo._power_info.freq ;
  865. _overChnPwrBackInfoTemp->consumption = _powerInfo._power_info.consumption ;
  866. _overChnPwrBackInfoTemp->factor = _powerInfo._power_info.factor ;
  867. list_add_tail(&_overChnPwrBackInfoTemp->list,&_over_chn_pwr_back_info.list);
  868. }
  869. }
  870. ack_str = over_chn_pwr_monitor_to_json(&_over_chn_pwr_back_info);
  871. _OverChnPwrAckInfo *node,*next;
  872. list_for_each_entry_safe(node, next, &_over_chn_pwr_back_info.list, list)
  873. {
  874. list_del(&node->list);
  875. free(node);
  876. }
  877. }
  878. }
  879. else if(strcmp(_over_chn_pwr_request.type,"open")==0)//通道开
  880. {
  881. int ret=0;
  882. int product_chn_id = 0 ;
  883. char buff[256];
  884. log_i("channel status request:open");
  885. /*
  886. * todo:添加控制
  887. */
  888. product_chn_id = _over_chn_pwr_request.productChId;
  889. if(cur_dev_addr>0) {
  890. cmd.cmd = CASCADE_CMD_OPEN;
  891. cmd.obj = OBJ_CHANNEL;
  892. cmd.chId = product_chn_id;
  893. cascade_request(&cmd);
  894. ack_str = ctrl_sts_ack_to_json();
  895. goto quit;
  896. }
  897. log_d("channel id:%d", product_chn_id);
  898. // product_chn_id = strtol(_over_chn_pwr_request.productChId,NULL,10);
  899. // log_d("productChId:%d",product_chn_id);
  900. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  901. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  902. {
  903. //log_d("channel:%d", _globalPowerMangerTemp->product_ch_id);
  904. if(_globalPowerMangerTemp==NULL)
  905. break;
  906. if(product_chn_id==_globalPowerMangerTemp->product_ch_id)
  907. {
  908. log_d("switch ctrl:%d",_globalPowerMangerTemp->product_ch_id);
  909. ret=g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp,
  910. _globalPowerMangerTemp->product_saddr,
  911. _globalPowerMangerTemp->product_ch_addr,
  912. 1,false);
  913. if (ret < 0)
  914. {
  915. ret = g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger, _globalPowerMangerTemp,
  916. _globalPowerMangerTemp->product_saddr,
  917. _globalPowerMangerTemp->product_ch_addr,
  918. 1,false);
  919. }
  920. sprintf(buff,"$开启$|$通道$|%d",_globalPowerMangerTemp->product_ch_id);
  921. dev_insert_alarm_ctrl(__globalDeviceManage.db,_globalPowerMangerTemp->product_id,3,buff);
  922. break;
  923. }
  924. }
  925. ack_str = ctrl_sts_ack_to_json();
  926. }
  927. else if(strcmp(_over_chn_pwr_request.type,"close")==0)//通道关
  928. {
  929. log_i("channel status request:close");
  930. /*
  931. * todo:添加控制
  932. */
  933. char buff[256];
  934. int product_chn_id = 0 ;
  935. product_chn_id = _over_chn_pwr_request.productChId;
  936. if(cur_dev_addr>0) {
  937. cmd.cmd = CASCADE_CMD_CLOSE;
  938. cmd.obj = OBJ_CHANNEL;
  939. cmd.chId = product_chn_id;
  940. cascade_request(&cmd);
  941. ack_str = ctrl_sts_ack_to_json();
  942. goto quit;
  943. }
  944. // product_chn_id = strtol(_over_chn_pwr_request.productChId,NULL,10);
  945. // log_d("productChId:%d",product_chn_id);
  946. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  947. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  948. {
  949. if(_globalPowerMangerTemp==NULL)
  950. break;
  951. if(product_chn_id==_globalPowerMangerTemp->product_ch_id)
  952. {
  953. //log_d("switch ctrl:%d",_globalPowerMangerTemp->product_ch_id);
  954. ret=g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp,
  955. _globalPowerMangerTemp->product_saddr,
  956. _globalPowerMangerTemp->product_ch_addr ,//多版端口余8
  957. 0,false);
  958. if (ret < 0)
  959. {
  960. ret = g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger, _globalPowerMangerTemp,
  961. _globalPowerMangerTemp->product_saddr,
  962. _globalPowerMangerTemp->product_ch_addr, // 多版端口余8
  963. 0,false);
  964. /* code */
  965. }
  966. sprintf(buff,"$关闭$|$通道$|%d",_globalPowerMangerTemp->product_ch_id);
  967. dev_insert_alarm_ctrl(__globalDeviceManage.db,_globalPowerMangerTemp->product_id,3,buff);
  968. break;
  969. }
  970. }
  971. ack_str = ctrl_sts_ack_to_json();
  972. }
  973. else if(strcmp(_over_chn_pwr_request.type,"save")==0)//负载
  974. {
  975. log_i("channel status request:save");
  976. if(cur_dev_addr>0) {
  977. cmd.cmd = CASCADE_CMD_SAVE;
  978. cmd.obj = OBJ_CHANNEL;
  979. cmd.chId = _over_chn_pwr_request.productChId;
  980. cascade_request(&cmd);
  981. ack_str = ctrl_sts_ack_to_json();
  982. goto quit;
  983. }
  984. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  985. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  986. {
  987. if (_over_chn_pwr_request.productChId == _globalPowerMangerTemp->product_ch_id)
  988. {
  989. break;
  990. }
  991. }
  992. if (_globalPowerMangerTemp != NULL)
  993. {
  994. if (strlen(_over_chn_pwr_request.productChName)<32)
  995. {
  996. strcpy(_globalPowerMangerTemp->product_ch_name, _over_chn_pwr_request.productChName);
  997. if (dev_update_power_manage_genera_info(__globalDeviceManage.db, __globalDeviceManage._global_device_info->product_id, _globalPowerMangerTemp->product_ch_id, _globalPowerMangerTemp) != 0)
  998. {
  999. log_e("update pwr general data err.");
  1000. }
  1001. }else{
  1002. log_e("ChName too long.");
  1003. }
  1004. }
  1005. ack_str = ctrl_sts_ack_to_json();
  1006. }
  1007. else if(strcmp(_over_chn_pwr_request.type,"listHisQuery")==0) //历史记录查询
  1008. {
  1009. #if 0
  1010. int ret = 0 ;
  1011. int size = 0 ;
  1012. int h_pwrchn = 0 ;
  1013. int page_num = 0 ;
  1014. int page_size = 0 ;
  1015. GlobalPowerInfo _globalPowerInfo;
  1016. INIT_LIST_HEAD(&_globalPowerInfo.list);
  1017. h_pwrchn = strtol(_over_chn_pwr_request.productChId,NULL,10);
  1018. page_num = atoi(_over_chn_pwr_request.pageNum);
  1019. page_size = atoi(_over_chn_pwr_request.pageSize);
  1020. //查询数据
  1021. ret = dev_search_power_info(__globalDeviceManage.db,
  1022. __globalDeviceManage._global_device_info->product_id,
  1023. h_pwrchn,
  1024. _over_chn_pwr_request.start_time,
  1025. _over_chn_pwr_request.end_time,
  1026. page_num,
  1027. page_size,
  1028. &size,
  1029. &_globalPowerInfo);
  1030. if(ret!=0)
  1031. {
  1032. log_e("dev all status history get error.\n");
  1033. }
  1034. //应答
  1035. ack_str = over_channel_power_history_to_json(&_globalPowerInfo,
  1036. &__globalDeviceManage._global_device_info,
  1037. _over_chn_pwr_request.productChName,
  1038. h_pwrchn);
  1039. //释放资源
  1040. GlobalPowerInfo* node;
  1041. GlobalPowerInfo* next;
  1042. list_for_each_entry_safe(node, next, &_globalPowerInfo.list, list)
  1043. {
  1044. list_del(&node->list);
  1045. free(node);
  1046. }
  1047. #endif
  1048. }
  1049. else if(strcmp(_over_chn_pwr_request.type,"listDyTotalQuery")==0)
  1050. {
  1051. #if DBUG_INFO
  1052. log_i("over all request: listDyTotalQuery\n");
  1053. #endif
  1054. int product_chn_id = 0 ;
  1055. product_chn_id = _over_chn_pwr_request.productChId;
  1056. log_d("productChId:%d",product_chn_id);
  1057. log_i("channel status request:listDyTotalQuery");
  1058. log_d("productChId:%d",_over_chn_pwr_request.productChId);
  1059. log_d("start_time:%s",_over_chn_pwr_request.start_time);
  1060. log_d("end_time:%s",_over_chn_pwr_request.end_time);
  1061. log_d("lType:%s",_over_chn_pwr_request.lType);
  1062. log_d("type:%s",_over_chn_pwr_request.type);
  1063. log_d("user_token:%s",_over_chn_pwr_request.user_token);
  1064. //ack_str = ctrl_sts_ack_to_json();
  1065. #if(1)
  1066. //申请电压统计信息参数
  1067. GlobalPowerInfo __globalPowerInfo;
  1068. //清0
  1069. memset(&__globalPowerInfo,0,sizeof(GlobalPowerInfo));
  1070. //查询数据库总电源信息 传给所申请的参数结构体
  1071. if(dev_search_time_power_info(__globalDeviceManage.db,__globalDeviceManage._global_device_info->product_id,product_chn_id,TOTAL_VOLTAGE_TYPE,&__globalPowerInfo,_over_chn_pwr_request.start_time,_over_chn_pwr_request.end_time)!=0)
  1072. {
  1073. log_e("serach total voltage err.");
  1074. }
  1075. //传值给总管理结构体
  1076. #define TOTAL_COUNT 60
  1077. for(int i=0;i< TOTAL_COUNT;i++)
  1078. {
  1079. strcpy(_over_all_pwr_back_info._total_voltage.xAxis[i],__globalPowerInfo._total_voltage.xAxis[i]);
  1080. _over_all_pwr_back_info._total_voltage.ydata[i] = __globalPowerInfo._total_voltage.ydata[i];
  1081. }
  1082. //返回电压统计
  1083. ack_str = over_all_total_info_to_json(&_over_all_pwr_back_info,TOTAL_VOLTAGE_TYPE);
  1084. #endif
  1085. }
  1086. //电流统计
  1087. else if(strcmp(_over_chn_pwr_request.type,"listDlTotalQuery")==0)
  1088. {
  1089. #if DBUG_INFO
  1090. log_i("over all request: listDlTotalQuery\n");
  1091. #endif
  1092. int product_chn_id = 0 ;
  1093. log_i("channel status request:open");
  1094. product_chn_id = _over_chn_pwr_request.productChId;
  1095. log_d("productChId:%d",product_chn_id);
  1096. //申请电流统计信息参数
  1097. GlobalPowerInfo __globalPowerInfo;
  1098. //清0
  1099. memset(&__globalPowerInfo,0,sizeof(GlobalPowerInfo));
  1100. //查询数据库总电源信息 传给所申请的参数结构体
  1101. if(dev_search_time_power_info(__globalDeviceManage.db,__globalDeviceManage._global_device_info->product_id,product_chn_id,TOTAL_CURRENT_TYPE,&__globalPowerInfo,_over_chn_pwr_request.start_time,_over_chn_pwr_request.end_time)!=0)
  1102. {
  1103. log_e("serach total current err.");
  1104. }
  1105. //传值给总管理结构体
  1106. for(int i=0;i< TOTAL_COUNT;i++)
  1107. {
  1108. strcpy(_over_all_pwr_back_info._total_current.xAxis[i],__globalPowerInfo._total_current.xAxis[i]);
  1109. _over_all_pwr_back_info._total_current.ydata[i] = __globalPowerInfo._total_current.ydata[i];
  1110. }
  1111. //返回电流统计
  1112. ack_str = over_all_total_info_to_json(&_over_all_pwr_back_info,TOTAL_CURRENT_TYPE);
  1113. }
  1114. //功率统计
  1115. else if(strcmp(_over_chn_pwr_request.type,"listGlTotalQuery")==0)
  1116. {
  1117. #if DBUG_INFO
  1118. log_i("over all request: listGlTotalQuery\n");
  1119. #endif
  1120. int product_chn_id = 0 ;
  1121. log_i("channel status request:open");
  1122. product_chn_id = _over_chn_pwr_request.productChId;
  1123. log_d("productChId:%d",product_chn_id);
  1124. //申请功率统计信息参数
  1125. GlobalPowerInfo __globalPowerInfo;
  1126. //清0
  1127. memset(&__globalPowerInfo,0,sizeof(GlobalPowerInfo));
  1128. //查询数据库总电源信息 传给所申请的参数结构体
  1129. if(dev_search_time_power_info(__globalDeviceManage.db,__globalDeviceManage._global_device_info->product_id,product_chn_id,TOTAL_POWER_TYPE,&__globalPowerInfo,_over_chn_pwr_request.start_time,_over_chn_pwr_request.end_time)!=0)
  1130. {
  1131. log_e("serach total power err.");
  1132. }
  1133. //传值给总管理结构体
  1134. for(int i=0;i< TOTAL_COUNT;i++)
  1135. {
  1136. strcpy(_over_all_pwr_back_info._total_power.xAxis[i],__globalPowerInfo._total_power.xAxis[i]);
  1137. _over_all_pwr_back_info._total_power.ydata[i] = __globalPowerInfo._total_power.ydata[i];
  1138. }
  1139. //返回功率统计
  1140. ack_str = over_all_total_info_to_json(&_over_all_pwr_back_info,TOTAL_POWER_TYPE);
  1141. }
  1142. //耗电量统计
  1143. else if(strcmp(_over_chn_pwr_request.type,"listHdlTotalQuery")==0)
  1144. {
  1145. #if DBUG_INFO
  1146. log_i("over all request: listHdlTotalQuery\n");
  1147. #endif
  1148. int product_chn_id = 0 ;
  1149. log_i("channel status request:open");
  1150. product_chn_id = _over_chn_pwr_request.productChId;
  1151. log_d("productChId:%d",product_chn_id);
  1152. //申请耗电量统计信息参数
  1153. GlobalPowerInfo __globalPowerInfo;
  1154. //清0
  1155. memset(&__globalPowerInfo,0,sizeof(GlobalPowerInfo));
  1156. //查询数据库总电源信息 传给所申请的参数结构体
  1157. if(dev_search_time_power_info(__globalDeviceManage.db,__globalDeviceManage._global_device_info->product_id,product_chn_id,TOTAL_POWER_CONS_TYPE,&__globalPowerInfo,_over_chn_pwr_request.start_time,_over_chn_pwr_request.end_time)!=0)
  1158. {
  1159. log_e("serach total power consumption err.");
  1160. }
  1161. //传值给总管理结构体
  1162. for(int i=0;i< TOTAL_COUNT;i++)
  1163. {
  1164. strcpy(_over_all_pwr_back_info._total_consumption.xAxis[i],__globalPowerInfo._total_consumption.xAxis[i]);
  1165. _over_all_pwr_back_info._total_consumption.ydata[i] = __globalPowerInfo._total_consumption.ydata[i];
  1166. }
  1167. //返回耗电量统计
  1168. ack_str = over_all_total_info_to_json(&_over_all_pwr_back_info,TOTAL_POWER_CONS_TYPE);
  1169. }
  1170. else if(strcmp(_over_chn_pwr_request.type,"threeTypeSave")==0)
  1171. {
  1172. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  1173. if(cur_dev_addr>0) {
  1174. cmd.cmd = CASCADE_CMD_SAVE3;
  1175. cmd.obj = OBJ_CHANNEL;
  1176. cmd.chId = _over_chn_pwr_request.productChId;
  1177. cascade_request(&cmd);
  1178. goto quit;
  1179. }
  1180. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  1181. {
  1182. if (_over_chn_pwr_request.productChId == _globalPowerMangerTemp->product_ch_id)
  1183. {
  1184. break;
  1185. }
  1186. }
  1187. if (__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_One
  1188. ||__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_One_B)
  1189. {
  1190. if (_over_chn_pwr_request.outputType == 1)
  1191. {
  1192. http_reply(conn, 201, ack_str);
  1193. cJSON_free((void *)ack_str);
  1194. return;
  1195. }
  1196. }
  1197. if (_globalPowerMangerTemp != NULL)
  1198. {
  1199. GlobalTreeACManager *_globalTACManager = NULL;
  1200. list_for_each_entry(_globalTACManager, &_globalPowerMangerTemp->list_Tree_AC, list_Tree_AC)
  1201. {
  1202. if (_over_chn_pwr_request.outputType == 2)
  1203. {
  1204. if (strcmp(g_product_t_ac_type_str[_globalTACManager->product_ph_type], _over_chn_pwr_request.productPhOrder) == 0)
  1205. {
  1206. _globalTACManager->product_ph_outputStatus = 1;
  1207. }
  1208. else
  1209. {
  1210. _globalTACManager->product_ph_outputStatus = 2;
  1211. }
  1212. }
  1213. else
  1214. {
  1215. _globalTACManager->product_ph_outputStatus = 1;
  1216. }
  1217. _globalTACManager->product_ph_outputType=_over_chn_pwr_request.outputType;
  1218. if (dev_update_t_ac_power_manage_info(__globalDeviceManage.db, _globalTACManager) != 0)
  1219. {
  1220. log_e("update pwr general data err.");
  1221. }
  1222. }
  1223. }
  1224. }
  1225. #endif
  1226. quit:
  1227. cJSON_Delete(cjson);
  1228. http_reply(conn, 200, ack_str);
  1229. cJSON_free((void*)ack_str);
  1230. }
  1231. /// @brief 传感器状态请求应答
  1232. /// @param stream
  1233. static void sensorStatusMonitoring(void* conn)
  1234. {
  1235. __globalDeviceManage.view_page=-1;
  1236. int ret = -1 ;
  1237. cJSON *cjson;
  1238. _OverSensorRequest _over_all_sensor_request;
  1239. _OverSensorBackInfo _over_all_sensor_back_info;
  1240. GlobalSensorManger _globalSensorMangerTemp ;
  1241. GlobalSensorInfo _globalSensorInfo;
  1242. char* rx_body_buf = NULL;
  1243. char* ack_str = NULL ;
  1244. #ifdef USE_WEBAPP
  1245. HttpStream *s=(HttpStream*)conn;
  1246. rx_body_buf = (char*)httpGetBodyInput(s);
  1247. #else
  1248. mg_stream_t *s=(mg_stream_t*)conn;
  1249. struct mg_http_message *msg=s->ev_data;
  1250. rx_body_buf=(char*)msg->body.buf;
  1251. #endif
  1252. //转换json参数
  1253. cjson = json_to_sensor_manage(rx_body_buf,&_over_all_sensor_request);
  1254. if(cjson==NULL)
  1255. {
  1256. http_reply(conn, 400, NULL);
  1257. return ;
  1258. }
  1259. //查询json参数
  1260. if(strcmp(_over_all_sensor_request.type,"listQuery")==0)
  1261. {
  1262. log_d("start listQuery handle.");
  1263. #if(1)
  1264. //链表初始化
  1265. INIT_LIST_HEAD(&_over_all_sensor_back_info.list);
  1266. //获取传感器当前的最新值
  1267. GlobalSensorManger* _globalSensorManagerTemp = NULL;
  1268. list_for_each_entry(_globalSensorManagerTemp, &__globalDeviceManage._globalSensorManger.list, list)
  1269. {
  1270. _OverSensorBackInfo* _overSensorBackInfoTemp = (_OverSensorBackInfo*)malloc(sizeof(_OverSensorBackInfo));
  1271. if(_overSensorBackInfoTemp==NULL)
  1272. log_e("_OverSensorBackInfo malloc error.");
  1273. memset(_overSensorBackInfoTemp,0,sizeof(_OverSensorBackInfo));
  1274. //基本信息
  1275. _overSensorBackInfoTemp->sensorId = _globalSensorManagerTemp->sensor_id;
  1276. memcpy(&_overSensorBackInfoTemp->sensorName,&_globalSensorManagerTemp->sensor_name,sizeof(_overSensorBackInfoTemp->sensorName));
  1277. //strcpy(_overSensorBackInfoTemp->sensorName,_globalSensorManagerTemp->sensor_name);
  1278. _overSensorBackInfoTemp->sensorType = _globalSensorManagerTemp->sensor_type;
  1279. memcpy(&_overSensorBackInfoTemp->comSlogan,&_globalSensorManagerTemp->sensor_port_name,sizeof(_overSensorBackInfoTemp->comSlogan));
  1280. //strcpy(_overSensorBackInfoTemp->comSlogan,_globalSensorManagerTemp->sensor_port_name);
  1281. //485独有
  1282. _overSensorBackInfoTemp->connectionStatus = _globalSensorManagerTemp->sensor_status;
  1283. _overSensorBackInfoTemp->nodeNumber = __globalDeviceManage._globalSensorManger.sensor_node_number;
  1284. if(_globalSensorManagerTemp->sensor_interface_type==1)
  1285. {
  1286. _overSensorBackInfoTemp->sensorAddr = _globalSensorManagerTemp->sensor_addr ;
  1287. _overSensorBackInfoTemp->sensorBaud = _globalSensorManagerTemp->sensor_baud;
  1288. strcpy(_overSensorBackInfoTemp->sensorvaluech,"RS485");
  1289. }
  1290. else
  1291. {
  1292. _overSensorBackInfoTemp->connectionStatus = -1;
  1293. strcpy(_overSensorBackInfoTemp->sensorvaluech, "IN");
  1294. _overSensorBackInfoTemp->nodeNumber =_globalSensorManagerTemp->sensor_addr;
  1295. }
  1296. //拿数据
  1297. memset(&_globalSensorInfo, 0, sizeof(_globalSensorInfo));
  1298. switch(_globalSensorManagerTemp->sensor_type)
  1299. {
  1300. case 0://温湿度传感器 2个值
  1301. {
  1302. _overSensorBackInfoTemp->temperatureValue = _globalSensorManagerTemp->Cur_sensor_info.val1;
  1303. _overSensorBackInfoTemp->humidityValue =_globalSensorManagerTemp->Cur_sensor_info.val2;
  1304. }break;
  1305. case 1://烟雾传感器 1个值
  1306. {
  1307. _overSensorBackInfoTemp->alarmStatus = ! (bool) _globalSensorManagerTemp->Cur_sensor_info.val1; // 1/0 报警未报警
  1308. }break;
  1309. case 2://水浸传感器 1个值 c
  1310. {
  1311. _overSensorBackInfoTemp->waterImmersionState = !(bool)_globalSensorManagerTemp->Cur_sensor_info.val1; // 1/0 报警未报警
  1312. }break;
  1313. case 3://门禁传感器
  1314. {
  1315. _overSensorBackInfoTemp->accessControlStatus = !(bool)_globalSensorManagerTemp->Cur_sensor_info.val1; // 1/0 报警未报警
  1316. }break;
  1317. case 4: //气体传感器 1个值
  1318. {
  1319. _overSensorBackInfoTemp->gasConcentration = _globalSensorManagerTemp->Cur_sensor_info.val1; // 气体浓度
  1320. }break;
  1321. case 5://气压气流传感器 2个值
  1322. {
  1323. _overSensorBackInfoTemp->airPressureValue = _globalSensorManagerTemp->Cur_sensor_info.val1; // 气压
  1324. _overSensorBackInfoTemp->airflowValue = _globalSensorManagerTemp->Cur_sensor_info.val2; // 气流
  1325. };break;
  1326. case 6://空调遥控器 没有值
  1327. {
  1328. }break;
  1329. }
  1330. //入队
  1331. list_add_tail(&_overSensorBackInfoTemp->list,&_over_all_sensor_back_info.list);
  1332. }
  1333. //参数转换json
  1334. ack_str = over_all_sensor_info_to_json(&_over_all_sensor_back_info,0);
  1335. //释放资源
  1336. _OverSensorBackInfo* node;
  1337. _OverSensorBackInfo* next;
  1338. list_for_each_entry_safe(node, next, &_over_all_sensor_back_info.list, list)
  1339. {
  1340. list_del(&node->list);
  1341. free(node);
  1342. }
  1343. #endif
  1344. }
  1345. //删除传感器
  1346. else if(strcmp(_over_all_sensor_request.type,"delete")==0)
  1347. {
  1348. log_d("start delete handle.");
  1349. int sensor_id_temp = _over_all_sensor_request.sensorId;
  1350. if(dev_delete_sensor_manage(__globalDeviceManage.db, 1,sensor_id_temp)!=0)
  1351. {
  1352. log_e("sensor delete failed.");
  1353. }
  1354. //维护列表也需要删除
  1355. GlobalSensorManger* node;
  1356. GlobalSensorManger* next;
  1357. list_for_each_entry_safe(node, next, &__globalDeviceManage._globalSensorManger.list, list)
  1358. {
  1359. if(node->sensor_id == sensor_id_temp)
  1360. {
  1361. list_del(&node->list);
  1362. free(node);
  1363. break;
  1364. }
  1365. }
  1366. ack_str = ctrl_sts_ack_to_json();
  1367. }
  1368. //更新传感器
  1369. else if(strcmp(_over_all_sensor_request.type,"update")==0)
  1370. {
  1371. log_d("start update handle.");
  1372. int sensor_id_temp = _over_all_sensor_request.sensorId;
  1373. GlobalSensorManger *node = NULL;
  1374. GlobalSensorManger *next = NULL;
  1375. list_for_each_entry_safe(node, next, &__globalDeviceManage._globalSensorManger.list, list)
  1376. {
  1377. if (node->sensor_id == sensor_id_temp)
  1378. {
  1379. break;
  1380. }
  1381. }
  1382. if (node)
  1383. {
  1384. #if (1)
  1385. GlobalSensorManger *_globalSensorMangerTemp = node;
  1386. // 填充数据
  1387. _globalSensorMangerTemp->sensor_type = strtol(_over_all_sensor_request.sensorType, NULL, 10);
  1388. if (_over_all_sensor_request.sensorName)
  1389. {
  1390. int nSize=strlen(_over_all_sensor_request.sensorName);
  1391. if (nSize<=64)
  1392. {
  1393. strcpy(_globalSensorMangerTemp->sensor_name, _over_all_sensor_request.sensorName);
  1394. }
  1395. else{
  1396. //响应
  1397. //stream->errorMsg="Edit Name Too Long";
  1398. http_reply(conn, 500, ack_str);
  1399. //释放资源
  1400. cJSON_free((void*)ack_str);
  1401. return ;
  1402. }
  1403. }
  1404. if(_over_all_sensor_request.cgqtd)
  1405. {
  1406. if (strcmp(_over_all_sensor_request.cgqtd, "RS485") == 0)
  1407. {
  1408. _globalSensorMangerTemp->sensor_interface_type = 1;
  1409. if (_over_all_sensor_request.comSlogan)
  1410. {
  1411. strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.comSlogan);
  1412. }
  1413. }
  1414. else if (strcmp(_over_all_sensor_request.cgqtd, "IN3") == 0)
  1415. {
  1416. _globalSensorMangerTemp->sensor_interface_type = 2;
  1417. _globalSensorMangerTemp->sensor_addr = 0;
  1418. strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.cgqtd);
  1419. }
  1420. else if (strcmp(_over_all_sensor_request.cgqtd, "IN4") == 0)
  1421. {
  1422. _globalSensorMangerTemp->sensor_interface_type = 2;
  1423. _globalSensorMangerTemp->sensor_addr = 1;
  1424. strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.cgqtd);
  1425. }
  1426. else if (strcmp(_over_all_sensor_request.cgqtd, "IN2") == 0)
  1427. {
  1428. _globalSensorMangerTemp->sensor_interface_type = 2;
  1429. _globalSensorMangerTemp->sensor_addr = 2;
  1430. strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.cgqtd);
  1431. }
  1432. else if (strcmp(_over_all_sensor_request.cgqtd, "IN1") == 0)
  1433. {
  1434. _globalSensorMangerTemp->sensor_interface_type = 2;
  1435. _globalSensorMangerTemp->sensor_addr = 3;
  1436. strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.cgqtd);
  1437. }
  1438. }
  1439. //_globalSensorMangerTemp->sensor_baud = strtol(_over_all_sensor_request.sensorBaud, NULL, 10);
  1440. //_globalSensorMangerTemp->sensor_addr = strtol(_over_all_sensor_request.sensorAddr, NULL, 10);
  1441. //_globalSensorMangerTemp->sensor_status = 0;
  1442. switch (_globalSensorMangerTemp->sensor_type)
  1443. {
  1444. case 0:
  1445. _globalSensorMangerTemp->sensor_val_count = 2;
  1446. break; // 温湿度传感器 2个值
  1447. case 1:
  1448. _globalSensorMangerTemp->sensor_val_count = 1;
  1449. break; // 烟雾传感器 1个值
  1450. case 2:
  1451. _globalSensorMangerTemp->sensor_val_count = 1;
  1452. break; // 水浸传感器 1个值
  1453. case 3:
  1454. _globalSensorMangerTemp->sensor_val_count = 1;
  1455. break; // 门禁传感器 没有值
  1456. case 4:
  1457. _globalSensorMangerTemp->sensor_val_count = 1;
  1458. break; // 气体传感器 1个值
  1459. case 5:
  1460. _globalSensorMangerTemp->sensor_val_count = 2;
  1461. break; // 气压气流传感器 2个值
  1462. case 6:
  1463. _globalSensorMangerTemp->sensor_val_count = 0;
  1464. break; // 空调遥控器 没有值
  1465. }
  1466. // 插入数据库
  1467. if (dev_update_sensor_genera_manage(__globalDeviceManage.db,
  1468. __globalDeviceManage._global_device_info->product_id,
  1469. _globalSensorMangerTemp->sensor_id,
  1470. _globalSensorMangerTemp) != 0)
  1471. {
  1472. log_e("dev update error.");
  1473. }
  1474. #endif
  1475. }
  1476. ack_str = ctrl_sts_ack_to_json();
  1477. }
  1478. //添加传感器
  1479. else if(strcmp(_over_all_sensor_request.type,"add")==0) //正常跑过
  1480. {
  1481. log_d("start add handle.");
  1482. int wrong_param=0;
  1483. GlobalSensorManger* _globalSensorMangerTemp = (GlobalSensorManger*)malloc(sizeof(GlobalSensorManger));
  1484. //清空数据
  1485. memset(_globalSensorMangerTemp, 0, sizeof(GlobalSensorManger));
  1486. //填充数据
  1487. _globalSensorMangerTemp->product_id = __globalDeviceManage._global_device_info->product_id ;
  1488. _globalSensorMangerTemp->sensor_id = _over_all_sensor_request.sensorId;
  1489. if(_over_all_sensor_request.sensorType && strlen(_over_all_sensor_request.sensorType)) {
  1490. _globalSensorMangerTemp->sensor_type = strtol(_over_all_sensor_request.sensorType,NULL,10);
  1491. }
  1492. else {
  1493. wrong_param = 1;
  1494. }
  1495. if(_over_all_sensor_request.sensorBaud && strlen(_over_all_sensor_request.sensorBaud)) {
  1496. _globalSensorMangerTemp->sensor_baud = strtol(_over_all_sensor_request.sensorBaud,NULL,10);
  1497. }
  1498. else {
  1499. wrong_param = 1;
  1500. }
  1501. if(_over_all_sensor_request.sensorAddr && strlen(_over_all_sensor_request.sensorAddr)) {
  1502. _globalSensorMangerTemp->sensor_addr = strtol(_over_all_sensor_request.sensorAddr,NULL,10);
  1503. }
  1504. else {
  1505. wrong_param = 1;
  1506. }
  1507. if(wrong_param) {
  1508. cJSON_Delete(cjson);
  1509. http_reply(conn, 400, NULL);
  1510. return ;
  1511. }
  1512. strcpy( _globalSensorMangerTemp->sensor_name,_over_all_sensor_request.sensorName);
  1513. strcpy(_globalSensorMangerTemp->sensor_port_name,_over_all_sensor_request.comSlogan);
  1514. _globalSensorMangerTemp->sensor_status = 0;
  1515. switch( _globalSensorMangerTemp->sensor_type)
  1516. {
  1517. case 0:_globalSensorMangerTemp->sensor_val_count = 2 ;break; //温湿度传感器 2个值
  1518. case 1:_globalSensorMangerTemp->sensor_val_count = 1 ;break; //烟雾传感器 1个值
  1519. case 2:_globalSensorMangerTemp->sensor_val_count = 1 ;break; //水浸传感器 1个值
  1520. case 3:_globalSensorMangerTemp->sensor_val_count = 1 ;break; //门禁传感器 没有值
  1521. case 4:_globalSensorMangerTemp->sensor_val_count = 1 ;break; //气体传感器 1个值
  1522. case 5:_globalSensorMangerTemp->sensor_val_count = 2 ;break; //气压气流传感器 2个值
  1523. case 6:_globalSensorMangerTemp->sensor_val_count = 0 ;break; //空调遥控器 没有值
  1524. }
  1525. //插入数据库
  1526. if(dev_insert_sensor_genera_manage(__globalDeviceManage.db,_globalSensorMangerTemp)!=0)
  1527. {
  1528. log_e("dev insert error.");
  1529. }
  1530. //全局接口体中也需要添加相关参数
  1531. list_add_tail(&_globalSensorMangerTemp->list,&__globalDeviceManage._globalSensorManger.list);
  1532. ack_str = ctrl_sts_ack_to_json();
  1533. }
  1534. //烟雾报警复位
  1535. else if(strcmp(_over_all_sensor_request.type,"reset")==0)
  1536. {
  1537. ack_str = ctrl_sts_ack_to_json();
  1538. }
  1539. //门禁释放
  1540. else if(strcmp(_over_all_sensor_request.type,"release")==0)
  1541. {
  1542. ack_str = ctrl_sts_ack_to_json();
  1543. }
  1544. //打开空调开关
  1545. else if(strcmp(_over_all_sensor_request.type,"open")==0)
  1546. {
  1547. ack_str = ctrl_sts_ack_to_json();
  1548. }
  1549. //关闭空调开关
  1550. else if(strcmp(_over_all_sensor_request.type,"close")==0)
  1551. {
  1552. ack_str = ctrl_sts_ack_to_json();
  1553. }
  1554. #if(1)
  1555. //历史信息
  1556. else if(strcmp(_over_all_sensor_request.type,"listHisQuery")==0)
  1557. {
  1558. int rsize = 0 ;
  1559. int g_sensor_id = 0 ;
  1560. int g_sensor_type = 0 ;
  1561. GlobalSensorInfo* _globalSensorInfoTemp;
  1562. GlobalSensorManger* _globalSensorMangerSTemp;
  1563. int page_num = 0;
  1564. int page_size = 0;
  1565. #if 0
  1566. INIT_LIST_HEAD(&_globalSensorInfo.list);
  1567. g_sensor_type = atoi(_over_all_sensor_request.sensorType);
  1568. // log_d("page_num:%d",page_num);
  1569. // log_d("page_size:%d",page_size);
  1570. //查询数据
  1571. ret = dev_search_sensor_info(__globalDeviceManage.db,
  1572. __globalDeviceManage._global_device_info->product_id,
  1573. g_sensor_id,
  1574. _over_all_sensor_request.startTime,
  1575. _over_all_sensor_request.endTime,
  1576. page_num,
  1577. page_size,
  1578. &rsize,
  1579. &_globalSensorInfo);
  1580. if(ret!=0)
  1581. log_e("get sensor history error.");
  1582. //查找管理表找到关联信息
  1583. list_for_each_entry(_globalSensorMangerSTemp, &__globalDeviceManage._globalSensorManger.list, list)
  1584. {
  1585. //ID相等 记录信息
  1586. if(_globalSensorMangerSTemp->sensor_id== g_sensor_id)
  1587. {
  1588. break;
  1589. }
  1590. }
  1591. //组返回数据
  1592. list_for_each_entry(_globalSensorInfoTemp, &_globalSensorInfo.list, list)
  1593. {
  1594. #endif
  1595. /*
  1596. _OverSensorBackInfo* _overSensorBackInfoTemp = (_OverSensorBackInfo*)malloc(sizeof(_OverSensorBackInfo));
  1597. if(_overSensorBackInfoTemp==NULL)
  1598. log_e("_OverSensorBackInfo malloc error.");
  1599. memset(_overSensorBackInfoTemp,0,sizeof(_OverSensorBackInfo));
  1600. //基本信息
  1601. _overSensorBackInfoTemp->sensorId = _over_all_sensor_request.sensorId;
  1602. strcpy(_overSensorBackInfoTemp->sensorName,_globalSensorMangerSTemp->sensor_name);
  1603. _overSensorBackInfoTemp->sensorType = _globalSensorMangerSTemp->sensor_type;
  1604. strcpy(_overSensorBackInfoTemp->comSlogan,_globalSensorMangerSTemp->sensor_port_name);
  1605. //485独有
  1606. if(_globalSensorMangerSTemp->sensor_interface_type==1)
  1607. {
  1608. _overSensorBackInfoTemp->sensorAddr = _globalSensorMangerSTemp->sensor_addr ;
  1609. _overSensorBackInfoTemp->sensorBaud = _globalSensorMangerSTemp->sensor_baud;
  1610. }
  1611. _overSensorBackInfoTemp->connectionStatus = _globalSensorMangerSTemp->sensor_status;
  1612. _overSensorBackInfoTemp->nodeNumber = __globalDeviceManage._globalSensorManger.sensor_node_number;
  1613. //判断sensor type 填充数据
  1614. switch(_globalSensorMangerSTemp->sensor_type)
  1615. {
  1616. case 0://温湿度传感器 2个值
  1617. {
  1618. _overSensorBackInfoTemp->temperatureValue = _globalSensorInfoTemp->val1;
  1619. _overSensorBackInfoTemp->humidityValue = _globalSensorInfoTemp->val2;
  1620. }break;
  1621. case 1://烟雾传感器 1个值
  1622. {
  1623. _overSensorBackInfoTemp->alarmStatus = (bool)_globalSensorInfo.val1; // 1/0 报警未报警
  1624. }break;
  1625. case 2://水浸传感器
  1626. {
  1627. _overSensorBackInfoTemp->waterImmersionState = (bool)_globalSensorInfo.val1; // 1/0 报警未报警
  1628. }break;
  1629. case 3://门禁传感器 没有值
  1630. {
  1631. _overSensorBackInfoTemp->accessControlStatus = (bool)_globalSensorInfo.val1; // 1/0 报警未报警
  1632. }break;
  1633. case 4://气体传感器 1个值
  1634. {
  1635. _overSensorBackInfoTemp->gasConcentration = _globalSensorInfoTemp->val1; // 气体浓度
  1636. }break;
  1637. case 5:
  1638. {
  1639. _overSensorBackInfoTemp->airPressureValue = _globalSensorInfoTemp->val1; // 气压
  1640. _overSensorBackInfoTemp->airflowValue = _globalSensorInfoTemp->val2; // 气流
  1641. }break;
  1642. case 6://空调遥控器 没有值
  1643. {
  1644. }break;
  1645. }
  1646. */
  1647. //入队
  1648. // list_add_tail(_overSensorBackInfoTemp,&_over_all_sensor_back_info.list);
  1649. //}
  1650. // //参数转换json
  1651. // ack_str = over_all_sensor_info_to_json(&_over_all_sensor_back_info);
  1652. // //释放资源
  1653. // _OverSensorBackInfo* node;
  1654. // _OverSensorBackInfo* next;
  1655. // list_for_each_entry_safe(node, next, &_over_all_sensor_back_info.list, list)
  1656. // {
  1657. // list_del(&node->list);
  1658. // free(node);
  1659. // }
  1660. /*
  1661. if(strcmp(_over_all_sensor_request.sensorType,"0")==0)
  1662. {
  1663. ack_str = over_sensor_history_info_to_json(&_over_all_sensor_back_info, SENSOR_TYPE_VALUE);
  1664. }
  1665. else if(strcmp(_over_all_sensor_request.sensorType,"4")==0)
  1666. {
  1667. ack_str = over_sensor_history_info_to_json(&_over_all_sensor_back_info, SENSOR_TYPE_VALUE);
  1668. }
  1669. else if(strcmp(_over_all_sensor_request.sensorType,"5")==0)
  1670. {
  1671. ack_str = over_sensor_history_info_to_json(&_over_all_sensor_back_info, SENSOR_TYPE_VALUE);
  1672. }
  1673. else if(strcmp(_over_all_sensor_request.sensorType,"1")==0)
  1674. {
  1675. ack_str = over_sensor_history_info_to_json(&_over_all_sensor_back_info, SENSOR_TYPE_LIST);
  1676. }
  1677. else if(strcmp(_over_all_sensor_request.sensorType,"2")==0)
  1678. {
  1679. ack_str = over_sensor_history_info_to_json(&_over_all_sensor_back_info, SENSOR_TYPE_LIST);
  1680. }
  1681. else if(strcmp(_over_all_sensor_request.sensorType,"3")==0)
  1682. {
  1683. ack_str = over_sensor_history_info_to_json(&_over_all_sensor_back_info, SENSOR_TYPE_LIST);
  1684. }
  1685. */
  1686. }
  1687. #endif
  1688. cJSON_Delete(cjson);
  1689. http_reply(conn, 200, ack_str);
  1690. cJSON_free((void*)ack_str);
  1691. }
  1692. /// @brief 告警保护
  1693. /// @param stream
  1694. static void alarmProtect(void *conn)
  1695. {
  1696. __globalDeviceManage.view_page=-1;
  1697. int ret = -1 ;
  1698. cJSON *cjson;
  1699. _AlarmRequestInfo _alarm_request_info;
  1700. _AlarmAckInfo _alarm_ack_info; //填充数据
  1701. char* rx_body_buf = NULL;
  1702. char* ack_str = NULL ;
  1703. int nAlarmNumber=0;
  1704. #ifdef USE_WEBAPP
  1705. HttpStream *s=(HttpStream*)conn;
  1706. rx_body_buf = (char*)httpGetBodyInput(s);
  1707. usleep(100000);
  1708. #else
  1709. mg_stream_t *s=(mg_stream_t*)conn;
  1710. struct mg_http_message *msg=s->ev_data;
  1711. rx_body_buf=(char*)msg->body.buf;
  1712. #endif
  1713. memset(&_alarm_request_info, 0, sizeof(_alarm_request_info));
  1714. //转换json参数
  1715. cjson = json_to_alarm_manage(rx_body_buf,&_alarm_request_info);
  1716. if(cjson==NULL)
  1717. {
  1718. http_reply(conn, 400, NULL);
  1719. return ;
  1720. }
  1721. //查询json参数
  1722. if(strcmp(_alarm_request_info.type,"listAllQuery")==0) //电源告警信息查询
  1723. {
  1724. int i = 0 ;
  1725. //初始化表
  1726. INIT_LIST_HEAD(&_alarm_ack_info.list);
  1727. //查询数据库
  1728. ret = dev_serarch_all_alarm(__globalDeviceManage.db,
  1729. __globalDeviceManage._global_device_info->product_id,
  1730. -1,_alarm_request_info.pagenum,_alarm_request_info.pagesize,
  1731. &_alarm_ack_info,&nAlarmNumber);
  1732. if(ret!=0)
  1733. log_e("get power alarm error.");
  1734. //转换参数
  1735. ack_str = alarm_info_to_json(&_alarm_ack_info,nAlarmNumber);
  1736. //释放资源
  1737. _AlarmAckInfo* node;
  1738. _AlarmAckInfo* next;
  1739. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  1740. {
  1741. list_del(&node->list);
  1742. free(node);
  1743. }
  1744. }
  1745. else if(strcmp(_alarm_request_info.type,"powerAlarmList")==0) //电源告警信息查询
  1746. {
  1747. //初始化表
  1748. INIT_LIST_HEAD(&_alarm_ack_info.list);
  1749. //查询数据库
  1750. ret = dev_serarch_all_alarm(__globalDeviceManage.db,
  1751. __globalDeviceManage._global_device_info->product_id,
  1752. 0,_alarm_request_info.pagenum,_alarm_request_info.pagesize,
  1753. &_alarm_ack_info,&nAlarmNumber);
  1754. if(ret!=0)
  1755. log_e("get power alarm error.");
  1756. //转换参数
  1757. ack_str = alarm_info_to_json(&_alarm_ack_info,nAlarmNumber);
  1758. //释放资源
  1759. _AlarmAckInfo* node;
  1760. _AlarmAckInfo* next;
  1761. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  1762. {
  1763. list_del(&node->list);
  1764. free(node);
  1765. }
  1766. }
  1767. else if(strcmp(_alarm_request_info.type,"sensorAlarmList")==0) //传感器告警信息查询
  1768. {
  1769. //初始化表
  1770. INIT_LIST_HEAD(&_alarm_ack_info.list);
  1771. //查询数据库
  1772. ret = dev_serarch_all_alarm(__globalDeviceManage.db,
  1773. __globalDeviceManage._global_device_info->product_id,
  1774. 1,_alarm_request_info.pagenum,_alarm_request_info.pagesize,
  1775. &_alarm_ack_info,&nAlarmNumber);
  1776. if(ret!=0)
  1777. log_e("get sensor alarm error.");
  1778. //转换参数
  1779. ack_str = alarm_info_to_json(&_alarm_ack_info,nAlarmNumber);
  1780. //释放资源
  1781. _AlarmAckInfo* node;
  1782. _AlarmAckInfo* next;
  1783. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  1784. {
  1785. list_del(&node->list);
  1786. free(node);
  1787. }
  1788. }
  1789. else if(strcmp(_alarm_request_info.type,"networAlarmkList")==0) //网络告警信息查询
  1790. {
  1791. //初始化表
  1792. INIT_LIST_HEAD(&_alarm_ack_info.list);
  1793. //查询数据库
  1794. ret = dev_serarch_all_alarm(__globalDeviceManage.db,
  1795. __globalDeviceManage._global_device_info->product_id,
  1796. 2,_alarm_request_info.pagenum,_alarm_request_info.pagesize,
  1797. &_alarm_ack_info,&nAlarmNumber);
  1798. if(ret!=0)
  1799. log_e("get net alarm error.");
  1800. //转换参数
  1801. ack_str = alarm_info_to_json(&_alarm_ack_info,nAlarmNumber);
  1802. //释放资源
  1803. _AlarmAckInfo* node;
  1804. _AlarmAckInfo* next;
  1805. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  1806. {
  1807. list_del(&node->list);
  1808. free(node);
  1809. }
  1810. }
  1811. else if(strcmp(_alarm_request_info.type,"powerThresholdList")==0)//电源阈值查询
  1812. {
  1813. //查询每个通道阈值
  1814. ack_str = alarm_power_threshold_to_json(&__globalDeviceManage._globalPowerManger);
  1815. }
  1816. else if(strcmp(_alarm_request_info.type,"save")==0)//电源阈值保存
  1817. {
  1818. if (!_alarm_request_info.user_token)
  1819. {
  1820. return;
  1821. }
  1822. //拿到参数保存
  1823. GlobalPowerManger* _globalPowerMangerSaveTemp ;
  1824. // int g_pwr_ch_id = atoi(_alarm_request_info._pwr_info.productChId);
  1825. int g_pwr_ch_id = _alarm_request_info._pwr_info.productChId;
  1826. if (g_pwr_ch_id ==0)
  1827. {
  1828. _globalPowerMangerSaveTemp=&__globalDeviceManage._globalPowerManger;
  1829. }
  1830. else
  1831. {
  1832. list_for_each_entry(_globalPowerMangerSaveTemp, &__globalDeviceManage._globalPowerManger.list, list)
  1833. {
  1834. // ID相等 记录信息
  1835. if (_globalPowerMangerSaveTemp->product_ch_id == g_pwr_ch_id)
  1836. {
  1837. break;
  1838. }
  1839. }
  1840. }
  1841. //更新参数
  1842. if (_alarm_request_info._pwr_info.voltageUpperValue)
  1843. {
  1844. _globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_threshold =atof(_alarm_request_info._pwr_info.voltageUpperValue);
  1845. }
  1846. if (_globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_threshold!=0){_globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_enable = 1 ;
  1847. }else{_globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_enable = 0;}
  1848. if (_alarm_request_info._pwr_info.voltageDownValue)
  1849. {
  1850. _globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_threshold =atof(_alarm_request_info._pwr_info.voltageDownValue);
  1851. }
  1852. if (_globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_threshold!=0){_globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_enable = 1 ;
  1853. }else{_globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_enable = 0 ;}
  1854. if (_alarm_request_info._pwr_info.currentUpperValue)
  1855. {
  1856. _globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_threshold = atof(_alarm_request_info._pwr_info.currentUpperValue);
  1857. }
  1858. if (_globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_threshold!=0){_globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_enable = 1 ;
  1859. }else{_globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_enable = 0 ;}
  1860. if (_alarm_request_info._pwr_info.powerUpperValue)
  1861. {
  1862. _globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_threshold = atof(_alarm_request_info._pwr_info.powerUpperValue);
  1863. }
  1864. if (_globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_threshold!=0){_globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_enable = 1 ;
  1865. }else{_globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_enable = 0 ;}
  1866. if (_alarm_request_info._pwr_info.alarmContentUpperValue)
  1867. {
  1868. _globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_threshold = atof(_alarm_request_info._pwr_info.alarmContentUpperValue);
  1869. }
  1870. if (_globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_threshold!=0){_globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_enable = 1 ;
  1871. }else{_globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_enable = 0 ;}
  1872. //_globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_enable = 1 ;
  1873. ret=g_switch_set_all_single_threshold(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerSaveTemp->product_ch_type
  1874. ,_globalPowerMangerSaveTemp->product_saddr
  1875. ,(_globalPowerMangerSaveTemp->product_ch_addr)
  1876. ,_globalPowerMangerSaveTemp->global_over_manager);
  1877. if (ret<0)
  1878. {
  1879. log_e("power threshold update error.ret:%d,%s",ret,modbus_strerror(errno));
  1880. /* code */
  1881. }
  1882. //写入数据库
  1883. ret = dev_update_power_manage_over_info(__globalDeviceManage.db,
  1884. __globalDeviceManage._global_device_info->product_id,
  1885. _globalPowerMangerSaveTemp->product_ch_id,
  1886. _globalPowerMangerSaveTemp);
  1887. if(ret!=0)
  1888. log_e("power threshold update error.");
  1889. //返回数据
  1890. ack_str = ctrl_sts_ack_to_json();
  1891. }
  1892. else if(strcmp(_alarm_request_info.type,"sensorThresholdList")==0)//传感器阈值查询
  1893. {
  1894. ack_str = alarm_sensor_threshold_to_json(&__globalDeviceManage._globalSensorManger);
  1895. }
  1896. else if(strcmp(_alarm_request_info.type,"update")==0)//传感器阈值保存
  1897. {
  1898. GlobalSensorManger* _globalSensorMangerSaveTemp;
  1899. int g_sensor_id = _alarm_request_info._sensor_info.sensorId;
  1900. list_for_each_entry(_globalSensorMangerSaveTemp, &__globalDeviceManage._globalSensorManger.list, list)
  1901. {
  1902. //ID相等 记录信息
  1903. if(_globalSensorMangerSaveTemp->sensor_id== g_sensor_id)
  1904. {
  1905. break;
  1906. }
  1907. }
  1908. switch (_globalSensorMangerSaveTemp->sensor_type)
  1909. {
  1910. case SENSOR_TYPE_TEMPERATURE:
  1911. if (strcmp(_alarm_request_info._sensor_info.thresholdType, language_temperature[__globalDeviceManage._global_device_info->product_language]) == 0)
  1912. {
  1913. _globalSensorMangerSaveTemp->over_manager->sensor_val1_upper_threshold = atof(_alarm_request_info._sensor_info.thresholdUpperValue);
  1914. _globalSensorMangerSaveTemp->over_manager->sensor_val1_lower_threshold = atof(_alarm_request_info._sensor_info.thresholdDownValue);
  1915. _globalSensorMangerSaveTemp->over_manager->sensor_val1_upper_enabled = 1;
  1916. _globalSensorMangerSaveTemp->over_manager->sensor_val1_lower_enabled = 1;
  1917. }
  1918. else if (strcmp(_alarm_request_info._sensor_info.thresholdType, language_humidity[__globalDeviceManage._global_device_info->product_language]) == 0)
  1919. {
  1920. _globalSensorMangerSaveTemp->over_manager->sensor_val2_upper_threshold = atof(_alarm_request_info._sensor_info.thresholdUpperValue);
  1921. _globalSensorMangerSaveTemp->over_manager->sensor_val2_lower_threshold = atof(_alarm_request_info._sensor_info.thresholdDownValue);
  1922. _globalSensorMangerSaveTemp->over_manager->sensor_val2_upper_enabled = 1;
  1923. _globalSensorMangerSaveTemp->over_manager->sensor_val2_lower_enabled = 1;
  1924. }
  1925. break;
  1926. case SENSOR_TYPE_SMOKE:
  1927. case SENSOR_TYPE_WATER:
  1928. case SENSOR_TYPE_DOOR:
  1929. break;
  1930. case SENSOR_TYPE_GAS:
  1931. case SENSOR_TYPE_AIR_PRESS:
  1932. default:
  1933. break;
  1934. }
  1935. //更新参数
  1936. ret = dev_update_sensor_over_manage(__globalDeviceManage.db,
  1937. __globalDeviceManage._global_device_info->product_id,
  1938. g_sensor_id,
  1939. _globalSensorMangerSaveTemp);
  1940. if(ret!=0)
  1941. log_e("power threshold update error.");
  1942. //拿到参数保存
  1943. ack_str = ctrl_sts_ack_to_json();
  1944. }
  1945. cJSON_Delete(cjson);
  1946. http_reply(conn, 200, ack_str);
  1947. cJSON_free((void*)ack_str);
  1948. }
  1949. /// @brief 查询日志
  1950. /// @param stream
  1951. static void logInformation(void *conn)
  1952. {
  1953. int ret = -1 ;
  1954. char* rx_body_buf = NULL;
  1955. char* ack_str = NULL ;
  1956. int nAlarmNum = 0;
  1957. cJSON *cjson;
  1958. _LogInformationRequestInfo __logInformationRequestInfo;
  1959. _AlarmAckInfo _alarm_ack_info; //填充数据
  1960. #ifdef USE_WEBAPP
  1961. HttpStream *s=(HttpStream*)conn;
  1962. rx_body_buf = (char*)httpGetBodyInput(s);
  1963. #else
  1964. mg_stream_t *s=(mg_stream_t*)conn;
  1965. struct mg_http_message *msg=s->ev_data;
  1966. rx_body_buf=(char*)msg->body.buf;
  1967. #endif
  1968. memset(&__logInformationRequestInfo,0,sizeof(_LogInformationRequestInfo));
  1969. cjson = json_to_loginformation_manage(rx_body_buf,&__logInformationRequestInfo);
  1970. if(cjson==NULL)
  1971. {
  1972. http_reply(conn, 400, NULL);
  1973. return ;
  1974. }
  1975. //查询json参数
  1976. if(strcmp(__logInformationRequestInfo.type,"listJgrzQuery")==0) //告警日志
  1977. {
  1978. //初始化表
  1979. INIT_LIST_HEAD(&_alarm_ack_info.list);
  1980. if(__logInformationRequestInfo.beginTime==NULL || __logInformationRequestInfo.endtime==NULL)
  1981. {
  1982. struct tm* t ;
  1983. struct timeval tv;
  1984. char start_time[32] = {0};
  1985. char stop_time[32] = {0};
  1986. gettimeofday(&tv, NULL);
  1987. t = localtime(&tv.tv_sec);
  1988. sprintf(stop_time,"%04d-%02d-%02d %02d:%02d:%02d",t->tm_year+1900,t->tm_mon+1,t->tm_mday,23,59,59);
  1989. log_d(stop_time);
  1990. sprintf(start_time,"%04d-%02d-%02d %02d:%02d:%02d",t->tm_year+1900,t->tm_mon+1,t->tm_mday,0,0,0);
  1991. log_d(start_time);
  1992. dev_search_alarm_info(__globalDeviceManage.db,
  1993. __globalDeviceManage._global_device_info->product_id,
  1994. 0, //注意注意 此处需要查询的参数是0 1 2
  1995. start_time,//启动时间
  1996. stop_time, //结束时间
  1997. __logInformationRequestInfo.pagenum-1, //页
  1998. __logInformationRequestInfo.pagesize, //条
  1999. &_alarm_ack_info,&nAlarmNum);
  2000. ack_str = alarm_type_info_to_json(&_alarm_ack_info,nAlarmNum);
  2001. //释放资源
  2002. _AlarmAckInfo* node;
  2003. _AlarmAckInfo* next;
  2004. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  2005. {
  2006. list_del(&node->list);
  2007. free(node);
  2008. }
  2009. }
  2010. else
  2011. {
  2012. dev_search_alarm_info(__globalDeviceManage.db,
  2013. __globalDeviceManage._global_device_info->product_id,
  2014. 0, //注意注意 此处需要查询的参数是0 1 2
  2015. __logInformationRequestInfo.beginTime,//启动时间
  2016. __logInformationRequestInfo.endtime, //结束时间
  2017. __logInformationRequestInfo.pagenum-1, //页
  2018. __logInformationRequestInfo.pagesize, //条
  2019. &_alarm_ack_info,&nAlarmNum);
  2020. ack_str = alarm_type_info_to_json(&_alarm_ack_info,nAlarmNum);
  2021. //释放资源
  2022. _AlarmAckInfo* node;
  2023. _AlarmAckInfo* next;
  2024. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  2025. {
  2026. list_del(&node->list);
  2027. free(node);
  2028. }
  2029. }
  2030. //转换参数
  2031. //ack_str = alarm_type_info_to_json(&_alarm_ack_info);
  2032. }
  2033. else if(strcmp(__logInformationRequestInfo.type,"exportJgrz")==0) //导出告警日志
  2034. {
  2035. }
  2036. else if(strcmp(__logInformationRequestInfo.type,"listCzrzQuery")==0) //操作日志
  2037. {
  2038. //初始化表
  2039. INIT_LIST_HEAD(&_alarm_ack_info.list);
  2040. //默认查当天日志
  2041. if(__logInformationRequestInfo.beginTime==NULL || __logInformationRequestInfo.endtime==NULL)
  2042. {
  2043. struct tm* t ;
  2044. struct timeval tv;
  2045. char start_time[32] = {0};
  2046. char stop_time[32] = {0};
  2047. gettimeofday(&tv, NULL);
  2048. t = localtime(&tv.tv_sec);
  2049. sprintf(stop_time,"%04d-%02d-%02d %02d:%02d:%02d",t->tm_year+1900,t->tm_mon+1,t->tm_mday,23,59,59);
  2050. log_d(stop_time);
  2051. sprintf(start_time,"%04d-%02d-%02d %02d:%02d:%02d",t->tm_year+1900,t->tm_mon+1,t->tm_mday,0,0,0);
  2052. log_d(start_time);
  2053. dev_search_alarm_info(__globalDeviceManage.db,
  2054. __globalDeviceManage._global_device_info->product_id,
  2055. 3, // alarm_type, 操作日志
  2056. start_time,
  2057. stop_time,
  2058. __logInformationRequestInfo.pagenum - 1,
  2059. __logInformationRequestInfo.pagesize,
  2060. &_alarm_ack_info, &nAlarmNum);
  2061. }
  2062. else
  2063. {
  2064. dev_search_alarm_info(__globalDeviceManage.db,
  2065. __globalDeviceManage._global_device_info->product_id,
  2066. 3,// alarm_type, 操作日志
  2067. __logInformationRequestInfo.beginTime,
  2068. __logInformationRequestInfo.endtime,
  2069. __logInformationRequestInfo.pagenum-1,
  2070. __logInformationRequestInfo.pagesize,
  2071. &_alarm_ack_info,&nAlarmNum);
  2072. }
  2073. //转换参数
  2074. ack_str = alarm_ctrl_type_info_to_json(&_alarm_ack_info,nAlarmNum);
  2075. //释放资源
  2076. _AlarmAckInfo* node;
  2077. _AlarmAckInfo* next;
  2078. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  2079. {
  2080. list_del(&node->list);
  2081. free(node);
  2082. }
  2083. }
  2084. else if(strcmp(__logInformationRequestInfo.type,"exportCzrz")==0) //导出操作日志
  2085. {
  2086. }
  2087. else if(strcmp(__logInformationRequestInfo.type,"listYxrzQuery")==0) //运行日志
  2088. {
  2089. //初始化表
  2090. INIT_LIST_HEAD(&_alarm_ack_info.list);
  2091. dev_search_alarm_info(__globalDeviceManage.db,
  2092. __globalDeviceManage._global_device_info->product_id,
  2093. 4,// alarm_type, 运行日志
  2094. __logInformationRequestInfo.beginTime,
  2095. __logInformationRequestInfo.endtime,
  2096. __logInformationRequestInfo.pagenum-1,
  2097. __logInformationRequestInfo.pagesize,
  2098. &_alarm_ack_info,&nAlarmNum);
  2099. //转换参数
  2100. ack_str = alarm_type_info_to_json(&_alarm_ack_info,nAlarmNum);
  2101. //释放资源
  2102. _AlarmAckInfo* node;
  2103. _AlarmAckInfo* next;
  2104. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  2105. {
  2106. list_del(&node->list);
  2107. free(node);
  2108. }
  2109. }
  2110. else if(strcmp(__logInformationRequestInfo.type,"exportYxrz")==0) //导出运行日志 导出方式->
  2111. {
  2112. }
  2113. cJSON_Delete(cjson);
  2114. http_reply(conn, 200, ack_str);
  2115. cJSON_free((void*)ack_str);
  2116. }
  2117. /// @brief 通信网口设置
  2118. /// @param stream
  2119. static void communicationManagement(void *conn)
  2120. {
  2121. int r = -1 ;
  2122. char* rx_body_buf = NULL;
  2123. char* ack_str = NULL ;
  2124. cJSON *cjson;
  2125. _CommunicationManageRequestInfo _communicationManageRequestInfo;
  2126. _CommunicationManageRequestInfo reqInfo;
  2127. GlobalDeviceInfo *devInfo=__globalDeviceManage._global_device_info;
  2128. #ifdef USE_WEBAPP
  2129. usleep(100000);
  2130. HttpStream *s=(HttpStream*)conn;
  2131. rx_body_buf = (char*)httpGetBodyInput(s);
  2132. #else
  2133. mg_stream_t *s=(mg_stream_t*)conn;
  2134. struct mg_http_message *msg=s->ev_data;
  2135. rx_body_buf=(char*)msg->body.buf;
  2136. #endif
  2137. //转换json参数
  2138. cjson = json_to_communication_manage(rx_body_buf,&reqInfo);
  2139. if(cjson==NULL)
  2140. {
  2141. http_reply(conn, 400, NULL);
  2142. return ;
  2143. }
  2144. //查询网络参数
  2145. if(strcmp(reqInfo.type,"listWkIPV4Query")==0 || strcmp(reqInfo.type,"listWkIPV6Query")==0)//缃戠粶鍙傛暟鏌ヨ
  2146. {
  2147. NetworkInfo_t* info = &devInfo->_network_info;
  2148. int ipv=strstr(reqInfo.type, "listWkIPV4Query")?IP_V4:IP_V6;
  2149. sys_get_net(info, ipv);
  2150. //print_net("get", info);
  2151. ack_str = communication_net_ack_to_json(info);
  2152. }
  2153. else if(strcmp(reqInfo.type,"WkIPV4Save")==0 || strcmp(reqInfo.type,"WkIPV6Save")==0 ) //淇濆瓨鏁版嵁
  2154. {
  2155. NetworkInfo_t* info = &devInfo->_network_info;
  2156. _NET_CommunicationRequestInfo *info2=&reqInfo._net_info;
  2157. int ipv=strstr(reqInfo.type, "WkIPV4Save")?IP_V4:IP_V6;
  2158. int mode = atoi(info2->mode);
  2159. if(ipv==IP_V4) {
  2160. info->mode = mode;
  2161. if(info2->ipaddr) strcpy(info->ip_address, info2->ipaddr);
  2162. if(info2->maskaddr) strcpy(info->mask, info2->maskaddr);
  2163. if(info2->gateway) strcpy(info->gateway, info2->gateway);
  2164. if(info2->dns1) strcpy(info->dns1, info2->dns1);
  2165. if(info2->dns2) strcpy(info->dns2, info2->dns2);
  2166. r = sys_set_net(info, ipv);
  2167. //print_net("set", info);
  2168. }
  2169. ack_str = ctrl_sts_ack_to_json();
  2170. }
  2171. //查询设置RS485参数
  2172. else if(strcmp(reqInfo.type,"listRsQuery")==0)//modbus鍙傛暟鏌ヨ
  2173. {
  2174. ModbusInfo_t* _modbusInfo_temp = &devInfo->_gmodbus_info;
  2175. ack_str = communication_rs_ack_to_json(_modbusInfo_temp);
  2176. }
  2177. else if(strcmp(reqInfo.type,"RsSave")==0)//淇濆瓨modbus鏁版嵁
  2178. {
  2179. ModbusInfo_t* info = &devInfo->_gmodbus_info;
  2180. info->product_modbus_type = atoi(reqInfo._rs_info.mode);
  2181. info->product_modbus_baud = atoi(reqInfo._rs_info.baud);
  2182. info->product_modbus_addr = atoi(reqInfo._rs_info.addr);
  2183. ///////////////////////////////////////////////////////////////////////////////
  2184. r = cascade_set_modbus(info);
  2185. if(r==0) {
  2186. dev_update_device_modus_info(__globalDeviceManage.db,devInfo);
  2187. }
  2188. ack_str = ctrl_sts_ack_to_json();
  2189. }
  2190. cJSON_Delete(cjson);
  2191. http_reply(conn, 200, ack_str);
  2192. cJSON_free((void*)ack_str);
  2193. }
  2194. /// @brief 服务管理
  2195. /// @param stream
  2196. static void serviceManagement(void *conn)
  2197. {
  2198. __globalDeviceManage.view_page=-1;
  2199. int ret = -1 ;
  2200. char* rx_body_buf = NULL;
  2201. cJSON *cjson;
  2202. _ServiceManageRequestInfo _serviceManageRequestInfo;
  2203. char* ack_str = NULL ;
  2204. #ifdef USE_WEBAPP
  2205. HttpStream *s=(HttpStream*)conn;
  2206. rx_body_buf = (char*)httpGetBodyInput(s);
  2207. #else
  2208. mg_stream_t *s=(mg_stream_t*)conn;
  2209. struct mg_http_message *msg=s->ev_data;
  2210. rx_body_buf = (char*)msg->body.buf;
  2211. #endif
  2212. //转换json参数
  2213. memset(&_serviceManageRequestInfo, 0, sizeof(_serviceManageRequestInfo));
  2214. cjson = json_to_service_manage(rx_body_buf,&_serviceManageRequestInfo);
  2215. if(cjson==NULL)
  2216. {
  2217. http_reply(conn, 400, NULL);
  2218. return ;
  2219. }
  2220. //查询smtp信息
  2221. else if(strcmp(_serviceManageRequestInfo.type,"listSmtpQuery")==0)
  2222. {
  2223. // SmtpSever* _smtp_sever_info = &__globalDeviceManage.user_server.smtp_set;
  2224. // ack_str = communication_net_ack_to_json(_smtp_sever_info);
  2225. }
  2226. else if(strcmp(_serviceManageRequestInfo.type,"SmtpSave")==0)
  2227. {
  2228. }
  2229. //查询snmp信息
  2230. else if(strcmp(_serviceManageRequestInfo.type,"listSnmpQuery")==0)
  2231. {
  2232. // 查询SNMP信息
  2233. if (0 == dev_get_snmp_info(__globalDeviceManage.db, &_globalSNMPManager))
  2234. {
  2235. ack_str = service_snmp_ack_to_json(&_globalSNMPManager);
  2236. }
  2237. }
  2238. else if(strcmp(_serviceManageRequestInfo.type,"SnmpSave")==0)
  2239. {
  2240. _globalSNMPManager.mode = atoi(_serviceManageRequestInfo._snmp_info.mode);
  2241. if (strcmp(_serviceManageRequestInfo._snmp_info.version,"SNMP V1")==0)
  2242. {
  2243. _globalSNMPManager.version=0;
  2244. }
  2245. else if (strcmp(_serviceManageRequestInfo._snmp_info.version,"SNMP V2c")==0)
  2246. {
  2247. _globalSNMPManager.version=1;
  2248. }
  2249. else if (strcmp(_serviceManageRequestInfo._snmp_info.version,"SNMP V3")==0)
  2250. {
  2251. _globalSNMPManager.version=2;
  2252. }
  2253. else
  2254. {
  2255. _globalSNMPManager.version=-1;
  2256. }
  2257. _globalSNMPManager.public= malloc(32);
  2258. strcpy(_globalSNMPManager.public, _serviceManageRequestInfo._snmp_info.public);
  2259. _globalSNMPManager.trapmode = atoi(_serviceManageRequestInfo._snmp_info.trapmode);
  2260. _globalSNMPManager.product_id = __globalDeviceManage._global_device_info->product_id;
  2261. if (dev_update_snmp_info(__globalDeviceManage.db,_globalSNMPManager.product_id,&_globalSNMPManager) != 0)
  2262. {
  2263. log_e("update snmp info err.");
  2264. }
  2265. }
  2266. //查询snmp_trap信息
  2267. else if(strcmp(_serviceManageRequestInfo.type,"listStQuery")==0)
  2268. {
  2269. }
  2270. else if(strcmp(_serviceManageRequestInfo.type,"StSave")==0)
  2271. {
  2272. }
  2273. //查询ntp信息
  2274. else if(strcmp(_serviceManageRequestInfo.type,"listNtpQuery")==0)
  2275. {
  2276. // 查询NTP信息
  2277. if (0 == dev_get_ntp_info(__globalDeviceManage.db,&_globalNTPManager))
  2278. {
  2279. ack_str = service_ntp_ack_to_json(&_globalNTPManager);
  2280. }
  2281. }
  2282. else if(strcmp(_serviceManageRequestInfo.type,"NtpSave")==0)
  2283. {
  2284. _globalNTPManager.mode = atoi(_serviceManageRequestInfo._ntp_info.mode);
  2285. _globalNTPManager.ntpaddress= malloc(64);
  2286. strcpy(_globalNTPManager.ntpaddress, _serviceManageRequestInfo._ntp_info.ntpaddress);
  2287. _globalNTPManager.ntpName= malloc(64);
  2288. strcpy(_globalNTPManager.ntpName, _serviceManageRequestInfo._ntp_info.ntpName);
  2289. _globalNTPManager.port = atoi(_serviceManageRequestInfo._ntp_info.port);
  2290. _globalNTPManager.product_id = __globalDeviceManage._global_device_info->product_id;
  2291. _globalNTPManager.time= malloc(64);
  2292. strcpy(_globalNTPManager.time, _serviceManageRequestInfo._ntp_info.time);
  2293. const char* key = "GMT/UTC";
  2294. char* p = strstr(_serviceManageRequestInfo._ntp_info.tzone, key);
  2295. if (p == NULL)
  2296. {
  2297. log_e("time zone not contain GMT/UTC");
  2298. return;
  2299. }
  2300. char tempstr[10];
  2301. memcpy(tempstr, &p[strlen(key)], strlen(p) - strlen(key));
  2302. int value = atoi(tempstr);
  2303. if (value > 12 || value < -11)
  2304. {
  2305. char buf[128];
  2306. memset(buf, 0, sizeof(buf));
  2307. sprintf(buf, "product id = %d timezone err.", _globalNTPManager.product_id);
  2308. log_e(buf);
  2309. return;
  2310. }
  2311. _globalNTPManager.tzone = value;
  2312. value = atoi(_serviceManageRequestInfo._ntp_info.weekday);
  2313. if (value > 12 || value < -11)
  2314. {
  2315. char buf[128];
  2316. memset(buf, 0, sizeof(buf));
  2317. sprintf(buf, "product id = %d weekday err.", _globalNTPManager.product_id);
  2318. log_e(buf);
  2319. return;
  2320. }
  2321. _globalNTPManager.weekday = value;
  2322. if (dev_update_ntp_info(__globalDeviceManage.db,_globalNTPManager.product_id,&_globalNTPManager) != 0)
  2323. {
  2324. log_e("update ntp info err.");
  2325. }
  2326. if (_globalNTPManager.mode == 0)
  2327. {
  2328. time_t t;
  2329. memset(tempstr, 0, sizeof(tempstr));
  2330. p = strstr(_globalNTPManager.time, "-");
  2331. if (p == NULL)
  2332. {
  2333. log_e("find year of local time failed");
  2334. return;
  2335. }
  2336. memset(tempstr, 0, sizeof(tempstr));
  2337. memcpy(tempstr, _globalNTPManager.time, p - _globalNTPManager.time);
  2338. struct tm tm_new;
  2339. tm_new.tm_year = atoi(tempstr) - 1900;
  2340. char* p1 = strstr(&p[1], "-");
  2341. if (p1 == NULL)
  2342. {
  2343. log_e("find month of local time failed");
  2344. return;
  2345. }
  2346. int nSize= p1 - p - 1;
  2347. memset(tempstr, 0, sizeof(tempstr));
  2348. memcpy(tempstr, &p[1],nSize);
  2349. tm_new.tm_mon = atoi(tempstr) - 1;
  2350. p = p1;
  2351. p1 = strstr(&p[2], " ");//个位数第一位有可能是空格所以需要找空格后一个
  2352. if (p1 == NULL)
  2353. {
  2354. log_e("find mday of local time failed");
  2355. return;
  2356. }
  2357. memset(tempstr, 0, sizeof(tempstr));
  2358. memcpy(tempstr, &p[1], p1 - p - 1);
  2359. tm_new.tm_mday = atoi(tempstr);
  2360. p = p1;
  2361. p1 = strstr(&p[0], " ");
  2362. if (p1 == NULL)
  2363. {
  2364. log_e("find split of date and time failed");
  2365. return;
  2366. }
  2367. p = &p1[0];
  2368. p1 = strstr(p, ":");
  2369. if (p1 == NULL)
  2370. {
  2371. log_e("find hour of local time failed");
  2372. return;
  2373. }
  2374. memset(tempstr, 0, sizeof(tempstr));
  2375. memcpy(tempstr, &p[1], p1 - p);
  2376. tm_new.tm_hour = atoi(tempstr);
  2377. p = &p1[1];
  2378. p1 = strstr(p, ":");
  2379. if (p1 == NULL)
  2380. {
  2381. log_e("find minute of local time failed");
  2382. return;
  2383. }
  2384. memset(tempstr, 0, sizeof(tempstr));
  2385. memcpy(tempstr, &p[0], p1 - p);
  2386. tm_new.tm_min = atoi(tempstr);
  2387. p = &p1[1];
  2388. if (p == NULL)
  2389. {
  2390. log_e("find second of local time failed");
  2391. return;
  2392. }
  2393. memset(tempstr, 0, sizeof(tempstr));
  2394. memcpy(tempstr, &p[0], 2);
  2395. tm_new.tm_sec = atoi(tempstr);
  2396. t = mktime(&tm_new);
  2397. set_local_timeandzone(&tm_new, _globalNTPManager.tzone);
  2398. }
  2399. ack_str = ctrl_sts_ack_to_json();
  2400. if (_serviceManageRequestInfo._ntp_info.mode) free(_serviceManageRequestInfo._ntp_info.mode);
  2401. if (_serviceManageRequestInfo._ntp_info.port) free(_serviceManageRequestInfo._ntp_info.port);
  2402. if (_serviceManageRequestInfo._ntp_info.tzone) free(_serviceManageRequestInfo._ntp_info.tzone);
  2403. if (_serviceManageRequestInfo._ntp_info.weekday) free(_serviceManageRequestInfo._ntp_info.weekday);
  2404. }
  2405. // 定时设置
  2406. else if (strcmp(_serviceManageRequestInfo.type, "listDsQuery") == 0)//||strcmp(_serviceManageRequestInfo.type, "listRlQuery") == 0)
  2407. {
  2408. // 查询通道信息
  2409. /*
  2410. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  2411. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  2412. {
  2413. if (_globalPowerMangerTemp->product_ch_id == chn_id)
  2414. break;
  2415. }
  2416. */
  2417. // 返回定时信息
  2418. pthread_mutex_lock(&__globalDeviceManage._power_ds);
  2419. ack_str = service_ds_all_ack_to_json(_serviceManageRequestInfo._ds_info.channelDate,
  2420. _serviceManageRequestInfo._ds_info.productChName,
  2421. _serviceManageRequestInfo._ds_info.productChId,
  2422. &__globalDeviceManage._globalPowerManger);
  2423. pthread_mutex_unlock(&__globalDeviceManage._power_ds);
  2424. }
  2425. else if (strcmp(_serviceManageRequestInfo.type, "dsSave") == 0)
  2426. {
  2427. pthread_mutex_lock(&__globalDeviceManage._power_ds);
  2428. int chn_id = -1;
  2429. for (int i = 0; i < 64; i++)
  2430. {
  2431. chn_id = _serviceManageRequestInfo._ds_info.productChIds[i];
  2432. if (chn_id <= 0)
  2433. {
  2434. break;
  2435. }
  2436. // 查询通道信息
  2437. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  2438. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  2439. {
  2440. if (_globalPowerMangerTemp->product_ch_id == chn_id)
  2441. break;
  2442. }
  2443. int start_year, start_month, start_day;
  2444. int end_year, end_month, end_day;
  2445. char current_date[11]; // 足够存储 "YYYY-MM-DD\0"
  2446. // 解析起始和结束日期
  2447. sscanf(_serviceManageRequestInfo._ds_info.StartDate, "%d-%d-%d", &start_year, &start_month, &start_day);
  2448. sscanf(_serviceManageRequestInfo._ds_info.Enddate, "%d-%d-%d", &end_year, &end_month, &end_day);
  2449. // 复制起始日期到current_date
  2450. strcpy(current_date, _serviceManageRequestInfo._ds_info.StartDate);
  2451. // 循环直到或超过结束日期
  2452. int done = 0;
  2453. while (!done)
  2454. {
  2455. // 当前日期
  2456. _PowerDSManage_t *new_data = (_PowerDSManage_t *)calloc(1, sizeof(_PowerDSManage_t));
  2457. if(!new_data) {
  2458. log_e("___ new_data calloc failed!\n");
  2459. break;
  2460. }
  2461. memset(new_data, 0, sizeof(_PowerDSManage_t));
  2462. strcpy(new_data->ds_date, current_date);
  2463. strcpy(new_data->ds_time, _serviceManageRequestInfo._ds_info.channelTime);
  2464. new_data->set_stats = atoi(_serviceManageRequestInfo._ds_info.setStatus);
  2465. new_data->ds_is_triggered = 0;
  2466. list_add_tail(&new_data->list, &_globalPowerMangerTemp->list_DS);
  2467. dev_insert_power_ds(__globalDeviceManage.db, 1, chn_id, new_data);
  2468. // 解析当前日期为年、月、日
  2469. sscanf(current_date, "%d-%d-%d", &start_year, &start_month, &start_day);
  2470. // 增加一天
  2471. add_day_to_date(current_date, &start_year, &start_month, &start_day);
  2472. // 检查是否超过结束日期
  2473. if (start_year > end_year ||
  2474. (start_year == end_year && start_month > end_month) ||
  2475. (start_year == end_year && start_month == end_month && start_day > end_day))
  2476. {
  2477. done = 1; // 超过结束日期,退出循环
  2478. }
  2479. }
  2480. }
  2481. pthread_mutex_unlock(&__globalDeviceManage._power_ds);
  2482. ack_str = ctrl_sts_ack_to_json();
  2483. }
  2484. //批量删除
  2485. else if (strcmp(_serviceManageRequestInfo.type, "deleteDs")==0)
  2486. {
  2487. pthread_mutex_lock(&__globalDeviceManage._power_ds);
  2488. int nChID = 0;
  2489. char pcDate[16];
  2490. char pcTime[16];
  2491. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  2492. _PowerDSManage_t* _powerDsManageTemp=NULL;;
  2493. char *pCharData;
  2494. for (int i = 0; i < 64; i++)
  2495. {
  2496. pCharData = _serviceManageRequestInfo._ds_info.idx[i];
  2497. if (pCharData == NULL || *pCharData == '\0')
  2498. {
  2499. break;
  2500. }
  2501. sscanf(pCharData, "%d %s %s", &nChID, pcDate, pcTime);
  2502. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  2503. {
  2504. if (_globalPowerMangerTemp->product_ch_id == nChID)
  2505. break;
  2506. }
  2507. list_for_each_entry(_powerDsManageTemp, &_globalPowerMangerTemp->list_DS, list)
  2508. {
  2509. if (strcmp(_powerDsManageTemp->ds_date, pcDate) == 0&&strcmp(_powerDsManageTemp->ds_time, pcTime) == 0)
  2510. {
  2511. dev_delete_power_ds(__globalDeviceManage.db, 1, _globalPowerMangerTemp->product_ch_id, _powerDsManageTemp);
  2512. list_del(&_powerDsManageTemp->list);
  2513. free(_powerDsManageTemp);
  2514. _powerDsManageTemp=NULL;
  2515. break;
  2516. }
  2517. }
  2518. }
  2519. pthread_mutex_unlock(&__globalDeviceManage._power_ds);
  2520. ack_str = ctrl_sts_ack_to_json();
  2521. }
  2522. // 时序设置
  2523. else if (strcmp(_serviceManageRequestInfo.type, "listSxQuery") == 0) // 查询
  2524. {
  2525. bool bflag = false;
  2526. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  2527. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  2528. {
  2529. if (_globalPowerMangerTemp->product_id == atoi(_serviceManageRequestInfo._posix_info.productId))
  2530. {
  2531. bflag = true;
  2532. break;
  2533. }
  2534. }
  2535. if (bflag == false) return;
  2536. ack_str = service_sx_ack_to_json(_globalPowerMangerTemp->product_id, &__globalDeviceManage._globalPowerManger);
  2537. if (_serviceManageRequestInfo._posix_info.productId) free(_serviceManageRequestInfo._posix_info.productId);
  2538. }
  2539. else if(strcmp(_serviceManageRequestInfo.type,"sXTimeSave")==0)//保存时间间隔
  2540. {
  2541. int chn_id = atoi(_serviceManageRequestInfo._posix_info.productChId);
  2542. int id = atoi(_serviceManageRequestInfo._posix_info.productId);
  2543. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  2544. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  2545. {
  2546. if (_globalPowerMangerTemp->product_id == id && _globalPowerMangerTemp->product_ch_id == chn_id)
  2547. {
  2548. int value = atoi(_serviceManageRequestInfo._posix_info.firingInterval);
  2549. if (value > 65535)
  2550. {
  2551. char buf[128];
  2552. memset(buf, 0, sizeof(buf));
  2553. sprintf(buf, "product id = %d, ch id = %d start delay err.", _globalPowerMangerTemp->product_id, _globalPowerMangerTemp->product_ch_id);
  2554. log_e(buf);
  2555. continue;
  2556. }
  2557. _globalPowerMangerTemp->product_ch_start_delay = value;
  2558. value = atoi(_serviceManageRequestInfo._posix_info.closeInterval);
  2559. if (value > 65535)
  2560. {
  2561. char buf[128];
  2562. memset(buf, 0, sizeof(buf));
  2563. sprintf(buf, "product id = %d, ch id = %d stop delay err.", _globalPowerMangerTemp->product_id, _globalPowerMangerTemp->product_ch_id);
  2564. log_e(buf);
  2565. continue;
  2566. }
  2567. _globalPowerMangerTemp->product_ch_stop_delay = value;
  2568. ret=g_switch_set_all_start_time_delay(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_ch_type,_globalPowerMangerTemp->product_saddr,_globalPowerMangerTemp->product_ch_addr,_globalPowerMangerTemp->product_ch_start_delay);
  2569. if (ret<0)
  2570. {
  2571. usleep(50000);
  2572. g_switch_set_all_start_time_delay(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_ch_type,_globalPowerMangerTemp->product_saddr,_globalPowerMangerTemp->product_ch_addr,_globalPowerMangerTemp->product_ch_start_delay);
  2573. /* code */
  2574. }
  2575. ret = g_switch_set_all_stop_time_delay(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_ch_type,_globalPowerMangerTemp->product_saddr,_globalPowerMangerTemp->product_ch_addr,_globalPowerMangerTemp->product_ch_stop_delay);
  2576. if (ret<0)
  2577. {
  2578. usleep(50000);
  2579. g_switch_set_all_stop_time_delay(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_ch_type,_globalPowerMangerTemp->product_saddr,_globalPowerMangerTemp->product_ch_addr,_globalPowerMangerTemp->product_ch_stop_delay);
  2580. /* code */
  2581. }
  2582. if (dev_update_power_manage_genera_info(__globalDeviceManage.db,_globalPowerMangerTemp->product_id,_globalPowerMangerTemp->product_ch_id,_globalPowerMangerTemp) != 0)
  2583. {
  2584. log_e("update pwr general data err.");
  2585. }
  2586. break;
  2587. }
  2588. }
  2589. ack_str = ctrl_sts_ack_to_json();
  2590. if (_serviceManageRequestInfo._posix_info.productId) free(_serviceManageRequestInfo._posix_info.productId);
  2591. if (_serviceManageRequestInfo._posix_info.closeInterval) free(_serviceManageRequestInfo._posix_info.closeInterval);
  2592. if (_serviceManageRequestInfo._posix_info.firingInterval) free(_serviceManageRequestInfo._posix_info.firingInterval);
  2593. if (_serviceManageRequestInfo._posix_info.productChId) free(_serviceManageRequestInfo._posix_info.productChId);
  2594. }
  2595. // 分组设置
  2596. else if (strcmp(_serviceManageRequestInfo.type, "fzSave") == 0) // 分组设置
  2597. {
  2598. int nMode = atoi(_serviceManageRequestInfo._group_info.mode);
  2599. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  2600. int chNum= 0;
  2601. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  2602. {
  2603. chNum++;
  2604. }
  2605. //初始化分组-(未析构)
  2606. GroupInfo group_list;
  2607. INIT_LIST_HEAD(&group_list.list);
  2608. if (0 == nMode)//相邻分组方式
  2609. {
  2610. int xlnum = atoi(_serviceManageRequestInfo._group_info.xlnumber);
  2611. if (xlnum > 0)
  2612. {
  2613. int pGroupNum = chNum/xlnum;
  2614. if (chNum % xlnum>0)
  2615. {
  2616. pGroupNum++;
  2617. }
  2618. dev_delete__group_info(__globalDeviceManage.db,__globalDeviceManage._global_device_info->product_id);
  2619. for (size_t i = 0; i < pGroupNum; i++)
  2620. {
  2621. GroupInfo *new_group = (GroupInfo *)malloc(sizeof(GroupInfo));
  2622. // 清空数据
  2623. memset(new_group, 0, sizeof(GroupInfo));
  2624. if (!new_group)
  2625. {
  2626. break;
  2627. }
  2628. new_group->product_id = __globalDeviceManage._global_device_info->product_id;
  2629. new_group->GroupID = i + 1;
  2630. sprintf(new_group->GroupName, "Group%d", i + 1);
  2631. int j = 0;
  2632. GlobalPowerManger *_globalPowerMangerTemp1 = NULL;
  2633. list_for_each_entry(_globalPowerMangerTemp1, &__globalDeviceManage._globalPowerManger.list, list)
  2634. {
  2635. if (j >= i * xlnum && j < (i + 1) * xlnum)
  2636. {
  2637. char chTemp[64];
  2638. sprintf(chTemp, "%d,", _globalPowerMangerTemp1->product_ch_id);
  2639. strcat(new_group->GroupChList, chTemp);
  2640. }
  2641. j++;
  2642. }
  2643. list_add_tail(&new_group->list, &group_list.list);
  2644. dev_insert_group_info(__globalDeviceManage.db, new_group);
  2645. }
  2646. }
  2647. }
  2648. else if (1 == nMode)//间隔分组方式
  2649. {
  2650. int jgnum = atoi(_serviceManageRequestInfo._group_info.jgnumber);
  2651. int pGroupNum = jgnum+1;
  2652. if (pGroupNum>chNum)
  2653. {
  2654. pGroupNum=chNum;
  2655. }
  2656. if (jgnum >= 0 && pGroupNum> 0 )
  2657. {
  2658. dev_delete__group_info(__globalDeviceManage.db,__globalDeviceManage._global_device_info->product_id);
  2659. for (size_t i = 0; i < pGroupNum; i++)
  2660. {
  2661. GroupInfo *new_group = (GroupInfo *)malloc(sizeof(GroupInfo));
  2662. // 清空数据
  2663. memset(new_group, 0, sizeof(GroupInfo));
  2664. if (!new_group)
  2665. {
  2666. break;
  2667. }
  2668. new_group->product_id = __globalDeviceManage._global_device_info->product_id;
  2669. new_group->GroupID = i + 1;
  2670. sprintf(new_group->GroupName, "Group%d", i + 1);
  2671. int j = i;
  2672. int m = 0;
  2673. GlobalPowerManger *_globalPowerMangerTemp1 = NULL;
  2674. list_for_each_entry(_globalPowerMangerTemp1, &__globalDeviceManage._globalPowerManger.list, list)
  2675. {
  2676. if (m==j)
  2677. {
  2678. char chTemp[64];
  2679. sprintf(chTemp, "%d,", _globalPowerMangerTemp1->product_ch_id);
  2680. strcat(new_group->GroupChList, chTemp);
  2681. j=j+jgnum+1;
  2682. }
  2683. m++;
  2684. }
  2685. list_add_tail(&new_group->list, &group_list.list);
  2686. dev_insert_group_info(__globalDeviceManage.db, new_group);
  2687. }
  2688. }
  2689. }
  2690. ack_str = ctrl_sts_ack_to_json();
  2691. }
  2692. else if (strcmp(_serviceManageRequestInfo.type, "listFzQuery") == 0) // 分组查询
  2693. {
  2694. // 查询分组信息
  2695. GroupInfo group_list;
  2696. INIT_LIST_HEAD(&group_list.list);
  2697. if (0 == dev_get_group_info(__globalDeviceManage.db, &group_list))
  2698. {
  2699. // 返回分组信息
  2700. ack_str = service_group_ack_to_json(&group_list);
  2701. }
  2702. }
  2703. else if (strcmp(_serviceManageRequestInfo.type, "fzOpen") == 0) // 分组开
  2704. {
  2705. unsigned short pAddrCtrl[50];
  2706. memset(pAddrCtrl,0,sizeof(pAddrCtrl));
  2707. int ngroup= atoi(_serviceManageRequestInfo._group_info.opergroupid);
  2708. // 查询分组信息
  2709. GroupInfo group_list;
  2710. INIT_LIST_HEAD(&group_list.list);
  2711. if (0 == dev_get_group_info(__globalDeviceManage.db, &group_list))
  2712. {
  2713. GroupInfo *_GroupInfoTemp = NULL;
  2714. list_for_each_entry(_GroupInfoTemp, &group_list.list, list)
  2715. {
  2716. if (_GroupInfoTemp->GroupID == ngroup)
  2717. {
  2718. if (__globalDeviceManage._global_device_info->product_pwr_type == 1)
  2719. { // 直流版本功能
  2720. char *pCHlist;
  2721. char *pCHListSave;
  2722. pCHlist=strtok_r(_GroupInfoTemp->GroupChList, ",",&pCHListSave);
  2723. while(pCHlist!=NULL)
  2724. {
  2725. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  2726. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  2727. {
  2728. if (_globalPowerMangerTemp == NULL)
  2729. break;
  2730. if (atoi(pCHlist) == _globalPowerMangerTemp->product_ch_id)
  2731. {
  2732. log_d("switch ctrl:%d,%d", _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr);
  2733. pAddrCtrl[(int)_globalPowerMangerTemp->product_saddr] |= 1 << (_globalPowerMangerTemp->product_ch_addr - 1);
  2734. break;
  2735. }
  2736. }
  2737. pCHlist=strtok_r(NULL, ",",&pCHListSave);
  2738. }
  2739. for (size_t i = 0; i < 50; i++)
  2740. {
  2741. if (pAddrCtrl[i] != 0)
  2742. {
  2743. ret = g_switch_set_dcpdu_chns_ctrl(&__globalDeviceManage._globalRelaySampManger,
  2744. i,
  2745. pAddrCtrl[i],
  2746. 1);
  2747. if (ret < 0)
  2748. {
  2749. ret = g_switch_set_dcpdu_chns_ctrl(&__globalDeviceManage._globalRelaySampManger,
  2750. i,
  2751. pAddrCtrl[i], 1);
  2752. }
  2753. }
  2754. }
  2755. }
  2756. else
  2757. {
  2758. char *pCHlist;
  2759. char *pCHListSave;
  2760. pCHlist = strtok_r(_GroupInfoTemp->GroupChList, ",",&pCHListSave);
  2761. //其他版本功能
  2762. while (pCHlist!=NULL)
  2763. {
  2764. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  2765. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  2766. {
  2767. if (_globalPowerMangerTemp == NULL)
  2768. break;
  2769. if (atoi(pCHlist) == _globalPowerMangerTemp->product_ch_id)
  2770. {
  2771. log_d("switch ctrl:%d,%d", _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr);
  2772. ret= g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger,
  2773. _globalPowerMangerTemp,
  2774. _globalPowerMangerTemp->product_saddr,
  2775. _globalPowerMangerTemp->product_ch_addr, // 多版端口余8
  2776. 1,true);
  2777. if (ret < 0)
  2778. {
  2779. ret = g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger,
  2780. _globalPowerMangerTemp,
  2781. _globalPowerMangerTemp->product_saddr,
  2782. _globalPowerMangerTemp->product_ch_addr, // 多版端口余8
  2783. 1,true);
  2784. }
  2785. break;
  2786. }
  2787. }
  2788. pCHlist = strtok_r(NULL, ",",&pCHListSave);
  2789. }
  2790. }
  2791. }
  2792. }
  2793. }
  2794. ack_str = ctrl_sts_ack_to_json();
  2795. }
  2796. else if (strcmp(_serviceManageRequestInfo.type, "fzClose") == 0) // 分组关
  2797. {
  2798. unsigned short pAddrCtrl[50];
  2799. memset(pAddrCtrl, 0, sizeof(pAddrCtrl));
  2800. int ngroup = atoi(_serviceManageRequestInfo._group_info.opergroupid);
  2801. // 查询分组信息
  2802. GroupInfo group_list;
  2803. INIT_LIST_HEAD(&group_list.list);
  2804. if (0 == dev_get_group_info(__globalDeviceManage.db, &group_list))
  2805. {
  2806. GroupInfo *_GroupInfoTemp = NULL;
  2807. list_for_each_entry(_GroupInfoTemp, &group_list.list, list)
  2808. {
  2809. if (_GroupInfoTemp->GroupID == ngroup)
  2810. {
  2811. /* code */
  2812. if (__globalDeviceManage._global_device_info->product_pwr_type == 1)
  2813. {
  2814. char *pCHlist;
  2815. char *pCHListSave;
  2816. pCHlist = strtok_r(_GroupInfoTemp->GroupChList, ",",&pCHListSave);
  2817. // 直流版本功能
  2818. while (pCHlist!=NULL)
  2819. {
  2820. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  2821. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  2822. {
  2823. if (_globalPowerMangerTemp == NULL)
  2824. break;
  2825. if (atoi(pCHlist) == _globalPowerMangerTemp->product_ch_id)
  2826. {
  2827. log_d("switch ctrl:%d,%d", _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr);
  2828. pAddrCtrl[(int)_globalPowerMangerTemp->product_saddr] |= 1 << (_globalPowerMangerTemp->product_ch_addr-1);
  2829. break;
  2830. }
  2831. }
  2832. pCHlist = strtok_r(NULL, ",",&pCHListSave);
  2833. }
  2834. for (size_t i = 0; i < 50; i++)
  2835. {
  2836. if (pAddrCtrl[i] != 0)
  2837. {
  2838. ret = g_switch_set_dcpdu_chns_ctrl(&__globalDeviceManage._globalRelaySampManger,
  2839. i,
  2840. pAddrCtrl[i],
  2841. 0);
  2842. if (ret < 0)
  2843. {
  2844. ret = g_switch_set_dcpdu_chns_ctrl(&__globalDeviceManage._globalRelaySampManger,
  2845. i,
  2846. pAddrCtrl[i],
  2847. 0);
  2848. /* code */
  2849. }
  2850. }
  2851. }
  2852. }
  2853. else
  2854. {
  2855. char *pCHlist;
  2856. char *pCHListSave;
  2857. pCHlist=strtok_r(_GroupInfoTemp->GroupChList, ",",&pCHListSave);
  2858. while (pCHlist!=NULL)
  2859. {
  2860. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  2861. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  2862. {
  2863. if (_globalPowerMangerTemp == NULL)
  2864. break;
  2865. if (atoi(pCHlist) == _globalPowerMangerTemp->product_ch_id)
  2866. {
  2867. log_d("switch ctrl:%d,%d", _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr);
  2868. ret = g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger,
  2869. _globalPowerMangerTemp,
  2870. _globalPowerMangerTemp->product_saddr,
  2871. _globalPowerMangerTemp->product_ch_addr, // 多版端口余8
  2872. 0,true);
  2873. if (ret < 0)
  2874. {
  2875. ret = g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger,
  2876. _globalPowerMangerTemp,
  2877. _globalPowerMangerTemp->product_saddr,
  2878. _globalPowerMangerTemp->product_ch_addr, // 多版端口余8
  2879. 0,true);
  2880. }
  2881. break;
  2882. }
  2883. }
  2884. pCHlist = strtok_r(NULL, ",",&pCHListSave);
  2885. }
  2886. }
  2887. }
  2888. }
  2889. }
  2890. ack_str = ctrl_sts_ack_to_json();
  2891. }
  2892. //cJSON_Delete(cjson);
  2893. http_reply(conn, 200, ack_str);
  2894. cJSON_free((void*)ack_str);
  2895. }
  2896. /// @brief 系统管理
  2897. /// @param stream
  2898. static void systemManagent(void *conn)
  2899. {
  2900. __globalDeviceManage.view_page=-1;
  2901. int ret = -1 ;
  2902. char* rx_body_buf = NULL;
  2903. cJSON *cjson;
  2904. _UserRoleManageInfo _UserRoleManageRequestInfo;
  2905. char* ack_str = NULL ;
  2906. #ifdef USE_WEBAPP
  2907. HttpStream *s=(HttpStream*)conn;
  2908. rx_body_buf = (char*)httpGetBodyInput(s);
  2909. #else
  2910. mg_stream_t *s=(mg_stream_t*)conn;
  2911. struct mg_http_message *msg=s->ev_data;
  2912. rx_body_buf = (char*)msg->body.buf;
  2913. #endif
  2914. //转换json参数
  2915. cjson = json_to_user_manage(rx_body_buf,&_UserRoleManageRequestInfo);
  2916. if(cjson==NULL)
  2917. {
  2918. http_reply(conn, 400, NULL);
  2919. return ;
  2920. }
  2921. //获取角色信息
  2922. else if(strcmp(_UserRoleManageRequestInfo.type,"getUser")==0)
  2923. {
  2924. // 查询用户信息
  2925. UserInfo User_list;
  2926. INIT_LIST_HEAD(&User_list.list);
  2927. // 查询角色信息
  2928. RoleInfo Role_list;
  2929. INIT_LIST_HEAD(&Role_list.list);
  2930. ack_str = ctrl_sts_ack_to_json();
  2931. if (0 == dev_get_user_info(__globalDeviceManage.db, &User_list) && 0 == dev_get_role_info(__globalDeviceManage.db, &Role_list)
  2932. /*&& strcmp(_UserRoleManageRequestInfo.userName,"")!=0*/)
  2933. {
  2934. char *nName=getUserNamebyToken(_UserRoleManageRequestInfo.user_token);
  2935. if (nName!=NULL)
  2936. {
  2937. ack_str = service_userRole_ack_to_json(nName,&User_list, &Role_list);
  2938. }
  2939. }
  2940. }
  2941. //查询用户列表
  2942. else if(strcmp(_UserRoleManageRequestInfo.type,"listUserQuery")==0)
  2943. {
  2944. // 查询用户信息
  2945. UserInfo User_list;
  2946. INIT_LIST_HEAD(&User_list.list);
  2947. // 查询角色信息
  2948. RoleInfo Role_list;
  2949. INIT_LIST_HEAD(&Role_list.list);
  2950. ack_str = ctrl_sts_ack_to_json();
  2951. if (0 == dev_get_user_info(__globalDeviceManage.db, &User_list) && 0 == dev_get_role_info(__globalDeviceManage.db, &Role_list)
  2952. /*&& strcmp(_UserRoleManageRequestInfo.userName,"")!=0*/)
  2953. {
  2954. char *nName = getUserNamebyToken(_UserRoleManageRequestInfo.user_token);
  2955. if (nName != NULL)
  2956. {
  2957. ack_str = service_userQuery_ack_to_json(nName, &User_list, &Role_list);
  2958. }
  2959. }
  2960. }
  2961. //删除用户
  2962. else if(strcmp(_UserRoleManageRequestInfo.type,"deleteUser")==0)
  2963. {
  2964. //char *pUserlist;
  2965. //char *pUserListSave;
  2966. // pUserlist = strtok_r(_UserRoleManageRequestInfo.userIds, ",", &pUserListSave);
  2967. //while (pUserlist != NULL)
  2968. //{
  2969. dev_delete_user_info(__globalDeviceManage.db,_UserRoleManageRequestInfo.userIds);
  2970. // pUserlist = strtok_r(NULL, ",", &pUserListSave);
  2971. // }
  2972. }
  2973. //添加用户
  2974. else if(strcmp(_UserRoleManageRequestInfo.type,"addUser")==0)
  2975. {
  2976. //未析构
  2977. UserInfo *new_user = (UserInfo *)malloc(sizeof(UserInfo));
  2978. memset(new_user,0,sizeof(UserInfo));
  2979. new_user->product_id = __globalDeviceManage._global_device_info->product_id;
  2980. int nMaxUserNum=1;
  2981. UserInfo User_list;
  2982. INIT_LIST_HEAD(&User_list.list);
  2983. // 查询角色信息
  2984. RoleInfo Role_list;
  2985. INIT_LIST_HEAD(&Role_list.list);
  2986. if (0 == dev_get_user_info(__globalDeviceManage.db, &User_list) && 0 == dev_get_role_info(__globalDeviceManage.db, &Role_list))
  2987. {
  2988. UserInfo *_UserInfoTemp = NULL;
  2989. list_for_each_entry(_UserInfoTemp, &User_list.list, list)
  2990. {
  2991. if (_UserInfoTemp == NULL)
  2992. break;
  2993. if (_UserInfoTemp->userID >= nMaxUserNum)
  2994. {
  2995. nMaxUserNum=_UserInfoTemp->userID;
  2996. }
  2997. }
  2998. new_user->userID = nMaxUserNum+1;
  2999. new_user->userName = malloc(256);
  3000. strcpy(new_user->userName, _UserRoleManageRequestInfo.userName);
  3001. new_user->userPW = malloc(256);
  3002. strcpy(new_user->userPW, _UserRoleManageRequestInfo.password);
  3003. new_user->nickName = malloc(256);
  3004. strcpy(new_user->nickName, _UserRoleManageRequestInfo.nickName);
  3005. new_user->roleID = _UserRoleManageRequestInfo.roleId;//GetRoleIDByName(_UserRoleManageRequestInfo.roleName,&Role_list);
  3006. new_user->createTime = malloc(64);
  3007. struct tm *t;
  3008. struct timeval tv;
  3009. gettimeofday(&tv, NULL);
  3010. t = localtime(&tv.tv_sec);
  3011. sprintf(new_user->createTime, "%04d-%02d-%02d %02d:%02d:%02d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
  3012. dev_insert_user_info(__globalDeviceManage.db, new_user);
  3013. }
  3014. ack_str=ctrl_sts_ack_to_json();
  3015. }
  3016. //更新用户信息
  3017. else if(strcmp(_UserRoleManageRequestInfo.type,"updateUser")==0)
  3018. {
  3019. //未析构
  3020. UserInfo *new_user = (UserInfo *)malloc(sizeof(UserInfo));
  3021. memset(new_user,0,sizeof(UserInfo));
  3022. new_user->product_id = __globalDeviceManage._global_device_info->product_id;
  3023. new_user->userID = _UserRoleManageRequestInfo.userId;
  3024. new_user->userName = malloc(256);
  3025. strcpy(new_user->userName , _UserRoleManageRequestInfo.userName);
  3026. new_user->userPW = malloc(256);
  3027. strcpy(new_user->userPW , _UserRoleManageRequestInfo.password);
  3028. new_user->nickName = malloc(256);
  3029. strcpy(new_user->nickName , _UserRoleManageRequestInfo.nickName);
  3030. new_user->roleID = _UserRoleManageRequestInfo.roleId;
  3031. new_user->createTime = malloc(64);
  3032. strcpy(new_user->createTime , _UserRoleManageRequestInfo.createTime);
  3033. dev_update_user_info(__globalDeviceManage.db, new_user);
  3034. ack_str=ctrl_sts_ack_to_json();
  3035. }
  3036. cJSON_Delete(cjson);
  3037. http_reply(conn, 200, ack_str);
  3038. cJSON_free((void*)ack_str);
  3039. }
  3040. /// @brief 设备重启
  3041. /// @param stream
  3042. static void equipmentMintenance(void *conn)
  3043. {
  3044. int ret = -1 ;
  3045. char* rx_body_buf = NULL;
  3046. char* ack_str = NULL ;
  3047. cJSON *cjson;
  3048. _OverBackStsInfo _over_back_sts_info; //设备总体状态信息
  3049. _Equipment_Mintenance _Over_equipment_mintenance;
  3050. #ifdef USE_WEBAPP
  3051. HttpStream *s=(HttpStream*)conn;
  3052. rx_body_buf = (char*)httpGetBodyInput(s);
  3053. usleep(500000);
  3054. #else
  3055. mg_stream_t *s=(mg_stream_t*)conn;
  3056. struct mg_http_message *msg=s->ev_data;
  3057. rx_body_buf = (char*)msg->body.buf;
  3058. #endif
  3059. //转换json参数
  3060. cjson = json_to_over_equipment_mintenance(rx_body_buf,&_Over_equipment_mintenance);
  3061. if(cjson==NULL)
  3062. {
  3063. http_reply(conn, 400, NULL);
  3064. return ;
  3065. }
  3066. //查询设备列表
  3067. if(strcmp(_Over_equipment_mintenance.type,"listSbRestartQuery")==0 || strcmp(_Over_equipment_mintenance.type,"listSbWhQuery")==0)
  3068. {
  3069. // 查询设备总体参数
  3070. if (dev_get_device_info(__globalDeviceManage.db,__globalDeviceManage._global_device_info) != 0)
  3071. {
  3072. log_e("get device info error.\n");
  3073. http_reply(conn, 400, NULL);
  3074. return;
  3075. }
  3076. _over_back_sts_info.product_name = __globalDeviceManage._global_device_info->product_name;
  3077. _over_back_sts_info.product_number = __globalDeviceManage._global_device_info->product_number;
  3078. _over_back_sts_info.product_id = __globalDeviceManage._global_device_info->product_id;
  3079. _over_back_sts_info.product_Code = malloc(8);
  3080. strcpy(_over_back_sts_info.product_Code, "-");
  3081. // _over_back_sts_info.product_type = malloc(32);
  3082. //strcpy(_over_back_sts_info.product_type, "GC Series");
  3083. _over_back_sts_info.product_type=g_product_type_str[__globalDeviceManage._global_device_info->product_type];
  3084. _over_back_sts_info.productVersion = __globalDeviceManage._global_device_info->product_version;
  3085. _over_back_sts_info.product_sysTime = malloc(32);
  3086. struct tm *t;
  3087. struct timeval tv;
  3088. gettimeofday(&tv, NULL);
  3089. t = localtime(&tv.tv_sec);
  3090. sprintf(_over_back_sts_info.product_sysTime, "%04d-%02d-%02d %02d:%02d:%02d", t->tm_year + 1900, t->tm_mon + 1,
  3091. t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
  3092. long diff =0;
  3093. struct timespec ts;
  3094. if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0)
  3095. {
  3096. diff = ts.tv_sec;
  3097. }
  3098. _over_back_sts_info.product_runTime = malloc(32);
  3099. sprintf(_over_back_sts_info.product_runTime, "%02ld:%02ld:%02ld", diff / 3600, (diff % 3600) / 60, diff % 60);
  3100. _over_back_sts_info.productAddr = getLocalIpAddress("eth0");
  3101. _over_back_sts_info.product_mac = get_mac_address("eth0");
  3102. _over_back_sts_info.product_RS485Addr = __globalDeviceManage._global_device_info->_gmodbus_info.product_modbus_addr;
  3103. //_over_back_sts_info.product_status = __globalDeviceManage._global_device_info ->product_status;
  3104. _over_back_sts_info.product_status = malloc(16);
  3105. strcpy(_over_back_sts_info.product_status, "online");
  3106. _over_back_sts_info.product_type_id = __globalDeviceManage._global_device_info->product_pwr_type;
  3107. if (strcmp(_Over_equipment_mintenance.type, "listSbWhQuery") == 0)
  3108. {
  3109. ack_str = over_product_list_info_to_json(&__globalDeviceManage, &_over_back_sts_info, true);
  3110. }
  3111. else
  3112. ack_str = over_product_list_info_to_json(&__globalDeviceManage, &_over_back_sts_info, false);
  3113. }
  3114. else if(strcmp(_Over_equipment_mintenance.type,"listShfwQuery")==0)
  3115. {
  3116. ack_str = vendor_info_to_json();
  3117. }
  3118. else if(strcmp(_Over_equipment_mintenance.type,"sBRestart")==0) { //restart
  3119. if(strcmp(_Over_equipment_mintenance.product_name,__globalDeviceManage._global_device_info->product_name)) {
  3120. sys_reboot();
  3121. }
  3122. else {
  3123. //send to other device
  3124. }
  3125. }
  3126. else if(strcmp(_Over_equipment_mintenance.type,"restoreFactorySettings")==0) { //restore to factory
  3127. if(strcmp(_Over_equipment_mintenance.product_name,__globalDeviceManage._global_device_info->product_name)) {
  3128. sys_set_factory();
  3129. }
  3130. else {
  3131. //send to other device
  3132. }
  3133. }
  3134. else {
  3135. //char *save_logo="productNumber=Vq1&productVersion=undefined&uploadType=shfw&type=importData&token=b6cdd10e-e1a7-4bd9-8283-c6d6ecbae28c";
  3136. }
  3137. cJSON_Delete(cjson);
  3138. http_reply(conn, 200, ack_str);
  3139. cJSON_free((void*)ack_str);
  3140. }
  3141. static int upload_handle(void *conn, char *upload_path)
  3142. {
  3143. int r=-1;
  3144. struct mg_http_part part;
  3145. mg_stream_t *s=(mg_stream_t*)conn;
  3146. struct mg_http_message *hm = (struct mg_http_message *)s->ev_data;
  3147. MG_INFO(("New request to: [%.*s], body size: %lu", (int) hm->uri.len,
  3148. hm->uri.buf, (unsigned long) hm->body.len));
  3149. size_t pos = 0, total_bytes = 0, num_files = 0;
  3150. while ((pos = mg_http_next_multipart(hm->body, pos, &part)) > 0) {
  3151. MG_INFO(("Chunk name: [%.*s] filename: [%.*s] length: %lu bytes",
  3152. (int) part.name.len, part.name.buf, (int) part.filename.len,
  3153. part.filename.buf, (unsigned long) part.body.len));
  3154. if (mg_path_is_sane(mg_str(upload_path))) {
  3155. mg_file_write(&mg_fs_posix, upload_path, part.body.buf, part.body.len);
  3156. total_bytes += part.body.len;
  3157. num_files++;
  3158. r = 0;
  3159. }
  3160. }
  3161. return r;
  3162. }
  3163. static void equipmentMintenanceUpload(void *conn)
  3164. {
  3165. int r = -1 ;
  3166. #ifdef USE_WEBAPP
  3167. HttpStream *s=(HttpStream*)conn;
  3168. http_reply(conn, 200, NULL);
  3169. #else
  3170. char path[200];
  3171. sprintf(path, "%s/%s", DOWN_FOLDER, UPG_PKG_NAME);
  3172. r = upload_handle(conn, path);
  3173. if(r==0) {
  3174. upg_start();
  3175. }
  3176. http_reply(conn, 200, "");
  3177. #endif
  3178. }
  3179. static int webSetCallback(void)
  3180. {
  3181. httpAddCallback("/login", loginFunc);//登录
  3182. httpAddCallback("/logout", loginOutFunc);//登出
  3183. httpAddCallback("/getInfo", getUserInfo);//获取用户信息
  3184. httpAddCallback("/pdu/changeLanguages", changeLanguages);//切换语言
  3185. httpAddCallback("/pdu/systemConfiguration", systemConfiguration);//登录
  3186. httpAddCallback("/getRouters", getUserRouters);//获取菜单接口
  3187. httpAddCallback("/pdu/overallStatusMonitoring", overallStatusMonitoring);//设备电源监控信息
  3188. httpAddCallback("/pdu/channelStatusMonitoring", channelStatusMonitoring);//设备通道电源监控信息
  3189. httpAddCallback("/pdu/sensorStatusMonitoring", sensorStatusMonitoring);//传感器总体请求信息
  3190. httpAddCallback("/pdu/alarmProtect", alarmProtect);//告警历史信息
  3191. httpAddCallback("/pdu/logInformation", logInformation);//日志
  3192. httpAddCallback("/pdu/communicationManagement", communicationManagement);//通信设置
  3193. httpAddCallback("/pdu/serviceManagement", serviceManagement);//服务管理
  3194. httpAddCallback("/pdu/system", systemManagent);//用户管理
  3195. httpAddCallback("/pdu/equipmentMintenance", equipmentMintenance);//设备重启
  3196. httpAddCallback("/pdu/equipmentMintenanceUpload", equipmentMintenanceUpload); //固件升级
  3197. return 0;
  3198. }
  3199. int appweb_init(void)
  3200. {
  3201. thread_start(THREAD_ID_WEB, web_thread, &__globalDeviceManage, 16*MB, 0);
  3202. return 0;
  3203. }