appweb_handle.c 228 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707
  1. #include "cJSON.h"
  2. #include "common.h"
  3. #include "json_handle.h"
  4. #include "sqlite_handle.h"
  5. #include "cJSON.h"
  6. #include "switch_ctrl.h"
  7. #include "sys.h"
  8. #include "thread.h"
  9. #include "cfg.h"
  10. #include "cascade.h"
  11. #include "upg.h"
  12. #include "file.h"
  13. #include "mongoose.h"
  14. #include "language_common.h"
  15. #include "websocket_handle.h"
  16. enum {
  17. FILE_IMPORT=0,
  18. FILE_EXPORT,
  19. };
  20. enum {
  21. FILE_SYS_CFG=0,
  22. FILE_SERV_CFG,
  23. FILE_ALARM_CFG,
  24. FILE_SENSOR_CFG,
  25. FILE_POWER_ALL,
  26. FILE_POWER_CHN,
  27. FILE_LOG_RUN,
  28. FILE_LOG_OPERA,
  29. FILE_LOG_ALARM,
  30. FILE_LOGO,
  31. FILE_HOST_FW,
  32. };
  33. ////////////////////////////////////////////////
  34. static void get_time(char *ts)
  35. {
  36. struct timeval tv;
  37. struct tm *tm;
  38. gettimeofday(&tv, NULL);
  39. tm = localtime(&tv.tv_sec);
  40. sprintf(ts, "%04d-%02d-%02d %02d:%02d:%02d.%03ld", tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, tv.tv_usec/1000);
  41. }
  42. #define TOTAL_COUNT 60
  43. #define FN_MAX 30
  44. typedef void (*http_fn_t)(void *arg);
  45. typedef struct {
  46. struct mg_connection *c;
  47. int ev;
  48. void *ev_data;
  49. }mg_stream_t;
  50. typedef struct {
  51. http_fn_t f;
  52. char *uri;
  53. }mg_fn_t;
  54. typedef struct {
  55. int cnt;
  56. mg_fn_t fn[FN_MAX];
  57. char rootDir[MG_PATH_MAX];
  58. pthread_t tid;
  59. }mg_handle_t;
  60. typedef struct {
  61. _OverAllPwrAckInfo all;
  62. _OverAllPwrAckInfo chn;
  63. }status_data_t;
  64. typedef struct {
  65. mg_handle_t mg;
  66. pthread_t tid;
  67. status_data_t stt;
  68. }web_handle_t;
  69. static char* g_product_board_cpu[] = {
  70. "xxx",
  71. "T113"
  72. };
  73. static char* g_product_type_str[] = {
  74. "SmartPdu(DC)",
  75. "SmartPdu(AC)",
  76. "SmartPdu(Tree_AC_Tree)",
  77. "SmartPdu(Tree_AC_One)",
  78. };
  79. static char* g_product_pwr_type_str[] = {
  80. "xxx",
  81. "直流",
  82. "交流单相",
  83. "交流三相三出",
  84. "交流三相单出",
  85. };
  86. static web_handle_t webHandle;
  87. static int webSetCallback(void);
  88. ///////////////////////////////////////////////////
  89. static int download_file(void *conn, char *fpath)
  90. {
  91. mg_stream_t *s=(mg_stream_t*)conn;
  92. struct mg_http_message *hm = (struct mg_http_message *)s->ev_data;
  93. struct mg_http_serve_opts opts={.root_dir=NULL};
  94. mg_http_serve_file2(s->c, hm, fpath, &opts);
  95. return 0;
  96. }
  97. static int http_reply(void *conn, int status, char *ack)
  98. {
  99. int r=0;
  100. mg_stream_t *s=(mg_stream_t*)conn;
  101. r = mg_http_reply2(s->c, status, "", ack);
  102. return r;
  103. }
  104. static void httpAddCallback(char *uri, http_fn_t f)
  105. {
  106. mg_handle_t *h=&webHandle.mg;
  107. if(h->cnt<FN_MAX-1) {
  108. h->fn[h->cnt].uri = uri;
  109. h->fn[h->cnt].f = f;
  110. h->cnt++;
  111. }
  112. }
  113. static int save_to_csv(char *path, status_data_t *data, int flag)
  114. {
  115. int i=0;
  116. FILE *fp=NULL;
  117. _OverAllPwrAckInfo *info=(flag==0)?&data->all:&data->chn;
  118. fp = fopen(path, "wt");
  119. if(!fp) {
  120. return -1;
  121. }
  122. for(i=0; i<TOTAL_COUNT; i++) {
  123. if(i==0) fprintf(fp, "total voltage time,");
  124. fprintf(fp, "%s,", info->_total_voltage.xAxis[i]);
  125. } fprintf(fp, "\n");
  126. for(i=0; i<TOTAL_COUNT; i++) {
  127. if(i==0) fprintf(fp, "total voltage value,");
  128. fprintf(fp, "%.8f,", info->_total_voltage.ydata[i]);
  129. } fprintf(fp, "\n\n");
  130. for(i=0; i<TOTAL_COUNT; i++) {
  131. if(i==0) fprintf(fp, "total current time,");
  132. fprintf(fp, "%s,", info->_total_current.xAxis[i]);
  133. } fprintf(fp, "\n");
  134. for(i=0; i<TOTAL_COUNT; i++) {
  135. if(i==0) fprintf(fp, "total current value,");
  136. fprintf(fp, "%.8f,", info->_total_current.ydata[i]);
  137. } fprintf(fp, "\n\n");
  138. for(i=0; i<TOTAL_COUNT; i++) {
  139. if(i==0) fprintf(fp, "total power time,");
  140. fprintf(fp, "%s,", info->_total_power.xAxis[i]);
  141. } fprintf(fp, "\n");
  142. for(i=0; i<TOTAL_COUNT; i++) {
  143. if(i==0) fprintf(fp, "total power value,");
  144. fprintf(fp, "%.8f,", info->_total_power.ydata[i]);
  145. } fprintf(fp, "\n\n");
  146. for(i=0; i<TOTAL_COUNT; i++) {
  147. if(i==0) fprintf(fp, "total consum time,");
  148. fprintf(fp, "%s,", info->_total_consumption.xAxis[i]);
  149. } fprintf(fp, "\n");
  150. for(i=0; i<TOTAL_COUNT; i++) {
  151. if(i==0) fprintf(fp, "total consum value,");
  152. fprintf(fp, "%.8f,", info->_total_consumption.ydata[i]);
  153. } fprintf(fp, "\n\n");
  154. fclose(fp);
  155. return 0;
  156. }
  157. ///////////////////////////////////////////////////////////////////////
  158. static time_t gettime(char *timestr)
  159. {
  160. int r;
  161. struct tm tm={0};
  162. //2024-10-29 05:19:09
  163. r = sscanf(timestr, "%d-%d-%d %d:%d:%d", &tm.tm_year,&tm.tm_mon,&tm.tm_mday,&tm.tm_hour,&tm.tm_min,&tm.tm_sec);
  164. if(r<6) {
  165. return -1;
  166. }
  167. tm.tm_year -= 1900;
  168. tm.tm_mon -= 1;
  169. return mktime(&tm);
  170. }
  171. static int gettime2(char *buf, char *tok, char *timestr)
  172. {
  173. char *p=strstr(buf, tok);
  174. if(!p) {
  175. return -1;
  176. }
  177. p += strlen(tok);
  178. memcpy(timestr, p, 10); timestr[10] = ' ';
  179. memcpy(timestr+11, p+13, 8); timestr[19] = 0;
  180. return 0;
  181. }
  182. static int get_range(time_t *from, time_t *to, char *start, char *end, int max_days)
  183. {
  184. time_t cur=gettime(start);
  185. time_t pre=gettime(end);
  186. time_t sss=mktime0(),secs=3600*24*max_days;
  187. if(cur<=sss) {
  188. cur = sss;
  189. }
  190. if(pre<=sss) {
  191. pre = sss;
  192. }
  193. if(abs(cur-pre)>=secs) {
  194. if(cur>pre) {
  195. *from = cur-secs;
  196. *to = cur;
  197. }
  198. else {
  199. *from = pre-secs;
  200. *to = pre;
  201. }
  202. }
  203. else {
  204. if(cur>pre) {
  205. *from = pre;
  206. *to = cur;
  207. }
  208. else {
  209. *from = cur;
  210. *to = pre;
  211. }
  212. }
  213. return 0;
  214. }
  215. static int power_export(char *path, char *start, char *end)
  216. {
  217. int r;
  218. time_t from,to;
  219. char tmp1[100],tmp2[100];
  220. GlobalDeviceManager *dm=&__globalDeviceManage;
  221. get_range(&from, &to, start, end, 7);
  222. get_time_str2(tmp1,sizeof(tmp1),from);
  223. get_time_str2(tmp2,sizeof(tmp2),to);
  224. sprintf(path, "/tmp/power_%s_%s.csv", tmp1, tmp2);
  225. return dev_power_xport(from, to, path);
  226. }
  227. static int file_io(void *conn, int ftype, int io, char *buf)
  228. {
  229. int r,flag=0;
  230. char tmp[200],path[200];
  231. web_handle_t *wh=&webHandle;
  232. mg_stream_t *s=(mg_stream_t*)conn;
  233. struct mg_http_message *hm = (struct mg_http_message *)s->ev_data;
  234. switch(ftype) {
  235. #if 0
  236. case FILE_SYS_CFG:
  237. {
  238. sprintf(tmp, "/tmp/config.ini");
  239. sys_get_path(path, INI_FILE_NAME);
  240. if(io==FILE_IMPORT) {
  241. r = upload_file(conn, tmp);
  242. if(r==0) {
  243. r = paras_check(tmp);
  244. if(r==0) {
  245. paras_copy(path, tmp);
  246. file_remove(tmp);
  247. //clear some database table
  248. sys_exit(); //restart smartPDU
  249. }
  250. file_remove(tmp);
  251. }
  252. }
  253. else {
  254. file_copy(tmp, path);
  255. download_file(conn, tmp);
  256. file_remove(tmp);
  257. }
  258. }
  259. break;
  260. case FILE_SERV_CFG:
  261. {
  262. sprintf(path, "/tmp/service.ini");
  263. if(io==FILE_IMPORT) {
  264. r = upload_file(conn, path);
  265. if(r==0) {
  266. //thread_stop(THREAD_ID_POWER);
  267. r = paras_serv_xport(path, PARAS_IMPORT);
  268. file_remove(path);
  269. if(r==0) sys_exit();
  270. //thread_start2(THREAD_ID_POWER);
  271. }
  272. }
  273. else {
  274. r = paras_serv_xport(path, PARAS_EXPORT);
  275. if(r==0) {
  276. r = download_file(conn, path);
  277. }
  278. file_remove(path);
  279. }
  280. }
  281. break;
  282. case FILE_ALARM_CFG:
  283. {
  284. sprintf(path, "/tmp/alarm.ini");
  285. if(io==FILE_IMPORT) {
  286. r = upload_file(conn, path);
  287. if(r==0) {
  288. r = paras_alarm_xport(path, PARAS_IMPORT);
  289. file_remove(path);
  290. if(r==0) sys_exit();
  291. }
  292. }
  293. else {
  294. r = paras_alarm_xport(path, PARAS_EXPORT);
  295. if(r==0) {
  296. r = download_file(conn, path);
  297. file_remove(path);
  298. }
  299. }
  300. }
  301. break;
  302. case FILE_SENSOR_CFG:
  303. {
  304. sprintf(path, "/tmp/sensor.ini");
  305. if(io==FILE_IMPORT) {
  306. r = upload_file(conn, path);
  307. if(r==0) {
  308. r = paras_sensor_xport(path, PARAS_IMPORT);
  309. file_remove(path);
  310. if(r==0) sys_exit();
  311. }
  312. }
  313. else {
  314. r = paras_sensor_xport(path, PARAS_EXPORT);
  315. if(r==0) {
  316. r = download_file(conn, path);
  317. file_remove(path);
  318. }
  319. }
  320. }
  321. break;
  322. #endif
  323. case FILE_POWER_ALL:
  324. case FILE_POWER_CHN:
  325. {
  326. if(io==FILE_EXPORT) {
  327. char start[100],end[100];
  328. gettime2(buf, "startTime=", start);
  329. gettime2(buf, "endTime=", end);
  330. r = power_export(path, start, end);
  331. if(r==0) {
  332. download_file(conn, path);
  333. file_remove(path);
  334. }
  335. }
  336. }
  337. break;
  338. #if 0
  339. case FILE_LOG_RUN:
  340. {
  341. if(io==FILE_EXPORT) {
  342. //download_file(path);
  343. }
  344. }
  345. break;
  346. case FILE_LOG_OPERA:
  347. {
  348. if(io==FILE_EXPORT) {
  349. //download_file(path);
  350. }
  351. }
  352. break;
  353. case FILE_LOG_ALARM:
  354. {
  355. if(io==FILE_EXPORT) {
  356. //download_file(path);
  357. }
  358. }
  359. break;
  360. case FILE_LOGO:
  361. {
  362. if(io==FILE_IMPORT) {
  363. char tmp[100];
  364. sprintf(tmp, "%s/%s", IMAGE_FOLDER, LOGO_FILE);
  365. sys_get_path(path, tmp);
  366. upload_file(conn, path);
  367. }
  368. }
  369. break;
  370. case FILE_HOST_FW:
  371. {
  372. if(io==FILE_IMPORT) {
  373. sprintf(path, "%s/%s", DOWN_FOLDER, UPG_PKG_NAME);
  374. r = upload_file(conn, path);
  375. if(r==0) {
  376. printf("_____ upg_start\n");
  377. upg_host_send(UPGRADE_EVT_UPLOAD_FINISH);
  378. }
  379. }
  380. }
  381. break;
  382. #endif
  383. default:
  384. return -1;
  385. }
  386. return 0;
  387. }
  388. static int export_handle(void *conn, int flag)
  389. {
  390. int r;
  391. char path[100];
  392. web_handle_t *wh=&webHandle;
  393. mg_stream_t *s=(mg_stream_t*)conn;
  394. struct mg_http_message *hm = (struct mg_http_message *)s->ev_data;
  395. sprintf(path, "%s.csv", (flag==0)?"overall":"channel");
  396. r = save_to_csv(path, &wh->stt, flag);
  397. //dev_power_xport();
  398. if(r==0) {
  399. struct mg_http_serve_opts opts = {.root_dir = NULL};
  400. mg_http_serve_file(s->c, hm, path, &opts);
  401. file_remove(path);
  402. }
  403. return r;
  404. }
  405. static int upload_handle(void *conn, char *path)
  406. {
  407. int r=-1;
  408. char name[200];
  409. struct mg_http_part part;
  410. mg_stream_t *s=(mg_stream_t*)conn;
  411. size_t pos = 0, total_bytes = 0;
  412. struct mg_http_message *hm = (struct mg_http_message *)s->ev_data;
  413. memset(name, 0, sizeof(name));
  414. while ((pos = mg_http_next_multipart(hm->body, pos, &part)) > 0) {
  415. memcpy(name, part.filename.buf, part.filename.len);
  416. printf("filename: %s length: %lu bytes\n", name, (unsigned long) part.body.len);
  417. if (mg_path_is_sane(mg_str(path))) {
  418. bool wr = mg_file_write(&mg_fs_posix, path, part.body.buf, part.body.len);
  419. printf("____ mg_file_write %d\n", wr);
  420. if(wr) {
  421. total_bytes += part.body.len;
  422. r = 0;
  423. }
  424. }
  425. }
  426. printf("___ upload file to %s %d\n", path, total_bytes);
  427. return r;
  428. }
  429. static void http_mg_cb(struct mg_connection *c, int ev, void *ev_data)
  430. {
  431. int i,j,flag=0;
  432. mg_handle_t *h=&webHandle.mg;
  433. mg_stream_t s={c,ev,ev_data};
  434. if (ev == MG_EV_HTTP_MSG) {
  435. struct mg_http_message *hm = ev_data;
  436. // log_i("uri ask!!!!!!!!!!!!!!!!:%s",hm->uri.buf);
  437. for(i=0; i<FN_MAX; i++) {
  438. // log_i("uri..................:%s",h->fn[i].uri);
  439. if (h->fn[i].f && h->fn[i].uri && mg_match(hm->uri, mg_str(h->fn[i].uri), NULL)) {
  440. h->fn[i].f(&s);
  441. flag = 1;
  442. }
  443. }
  444. if (flag==0) {
  445. struct mg_http_serve_opts opts = {.root_dir = h->rootDir};
  446. mg_http_serve_dir(c, ev_data, &opts);
  447. }
  448. }
  449. }
  450. static void *web_thread(void *arg)
  451. {
  452. struct mg_mgr mgr;
  453. struct mg_connection *c;
  454. mg_handle_t *mh=&webHandle.mg;
  455. thread_handle_t *h=(thread_handle_t*)arg;
  456. const char *listen_addr="http://[::]:80";
  457. //mg_log_set(MG_LL_DEBUG);
  458. mg_mgr_init(&mgr);
  459. //sys_get_path(h->rootDir, WEB_ROOT);
  460. strcpy(mh->rootDir, "/mnt/UDISK/web");
  461. if ((c = mg_http_listen(&mgr, listen_addr, http_mg_cb, NULL)) == NULL) {
  462. MG_ERROR(("cannot listen on %s. use http://address:port or :port\n", listen_addr));
  463. return NULL;
  464. }
  465. webSetCallback();
  466. printf("_____mgHandle.cnt: %d, rootdir: %s\n", mh->cnt, mh->rootDir);
  467. while(h->quit==0) {
  468. mg_mgr_poll(&mgr, 200);
  469. }
  470. mg_mgr_free(&mgr);
  471. pthread_exit(NULL);
  472. }
  473. /// @brief 系统信息
  474. /// @param stream
  475. static void systemConfiguration(void* conn)
  476. {
  477. char *ack_str = NULL;
  478. char *g_token = NULL;
  479. mg_stream_t *s=(mg_stream_t *)conn;
  480. struct mg_http_message *hm=s->ev_data;
  481. char* rx_Head_buf=(char *)hm->head.buf;
  482. g_token = json_to_Token_info(rx_Head_buf);
  483. // 检查token是否有效
  484. if (g_token != NULL && !CheckLoginStatus(g_token))
  485. {
  486. ack_str = log_AthFailedinfo_to_json();
  487. }
  488. else
  489. {
  490. ack_str = json_to_system_config_info();
  491. }
  492. http_reply(conn, 200, ack_str);
  493. if (g_token != NULL)
  494. {
  495. free(g_token);
  496. }
  497. cJSON_free((void *)ack_str);
  498. }
  499. /// @brief 多语言切换
  500. /// @param stream
  501. static void changeLanguages(void* conn)
  502. {
  503. char* ack_str = NULL;
  504. mg_stream_t *s=(mg_stream_t*)conn;
  505. struct mg_http_message *hm=s->ev_data;
  506. char* rx_body_buf=(char*)hm->body.buf;
  507. json_to_switch_language(rx_body_buf);
  508. dev_update_device_genera_info(__globalDeviceManage.db,&__globalDeviceManage._globalDevInfo);
  509. ack_str = ctrl_sts_ack_to_json();
  510. http_reply(conn, 200, ack_str);
  511. cJSON_free((void*)ack_str);
  512. }
  513. /// @brief 登录信息
  514. /// @param stream
  515. static void loginFunc(void* conn)
  516. {
  517. char* ack_str = NULL ;
  518. char g_token[64] = {0};
  519. mg_stream_t *s=(mg_stream_t*)conn;
  520. struct mg_http_message *hm=s->ev_data;
  521. char *rx_body_buf=hm->body.buf;
  522. //用户信息创建-未析构
  523. _User_Log *_newUserLogin = (_User_Log *)malloc(sizeof(_User_Log));
  524. memset(_newUserLogin, 0, sizeof(_User_Log));
  525. //转换json参数
  526. if(json_to_User_login_info(rx_body_buf,_newUserLogin)!=0)
  527. {
  528. http_reply(conn, 400, NULL);
  529. return;
  530. }
  531. bool LoginFlag = false;
  532. // 查询用户信息
  533. UserInfo User_list;
  534. INIT_LIST_HEAD(&User_list.list);
  535. if (0 == dev_get_user_info(__globalDeviceManage.db, &User_list))
  536. {
  537. UserInfo *_UserInfoTemp = NULL;
  538. list_for_each_entry(_UserInfoTemp, &User_list.list, list)
  539. {
  540. if (_UserInfoTemp == NULL)
  541. break;
  542. if (strcmp(_UserInfoTemp->userName,_newUserLogin->user_name)==0 && strcmp(_UserInfoTemp->userPW,_newUserLogin->user_password)==0)
  543. {
  544. LoginFlag=true;
  545. _GlobalUserInfoNew = *_UserInfoTemp;
  546. break;
  547. }
  548. }
  549. }
  550. //if (strcmp(_newUserLogin.user_name, "gowone") == 0 && strcmp(_newUserLogin.user_password,"gowone520") == 0)
  551. //{
  552. // LoginFlag = true;
  553. //}
  554. //获取随机token
  555. get_rand_str(g_token,32);
  556. //记录token
  557. strcpy(_newUserLogin->user_token,g_token);
  558. int ack_code=0;
  559. if (!LoginFlag)
  560. {
  561. ack_str = log_LoginFailedinfo_to_json();
  562. ack_code = 201;
  563. }
  564. else
  565. {
  566. strcpy(_GlobalUserToken,g_token);
  567. list_add_tail(&_newUserLogin->list, &_GlobalUserLoginInfo.list);
  568. ack_str = log_info_to_json(g_token);
  569. ack_code = 200;
  570. }
  571. http_reply(conn, ack_code, ack_str);
  572. cJSON_free((void*)ack_str);
  573. }
  574. /// @brief 注销信息
  575. /// @param stream
  576. static void loginOutFunc(void* conn)
  577. {
  578. char* ack_str = NULL ;
  579. char* g_token;
  580. mg_stream_t *s=(mg_stream_t*)conn;
  581. struct mg_http_message *hm=s->ev_data;
  582. char *rx_body_buf = (char*)hm->body.buf;
  583. //转换json参数
  584. if(json_to_User_loginOut_info(rx_body_buf,&g_token)!=0)
  585. {
  586. http_reply(conn, 400, NULL);
  587. return ;
  588. }
  589. ack_str = log_info_to_json(g_token);
  590. http_reply(conn, 200, ack_str);
  591. free(g_token);
  592. cJSON_free((void*)ack_str);
  593. }
  594. /// @brief 获取用户信息
  595. /// @param stream
  596. static void getUserInfo(void* conn)
  597. {
  598. char* ack_str = NULL ;
  599. ack_str = user_info_to_json();
  600. http_reply(conn, 200, ack_str);
  601. cJSON_free((void*)ack_str);
  602. }
  603. /// @brief 获取菜单数据
  604. /// @param stream
  605. static void getUserRouters(void* conn)
  606. {
  607. char* ack_str = NULL ;
  608. char* g_token=NULL;
  609. mg_stream_t *s=(mg_stream_t*)conn;
  610. struct mg_http_message *hm=s->ev_data;
  611. char *rx_Head_buf = (char*)hm->head.buf;
  612. // 查询用户信息
  613. UserInfo User_list;
  614. INIT_LIST_HEAD(&User_list.list);
  615. // 查询角色信息
  616. RoleInfo Role_list;
  617. INIT_LIST_HEAD(&Role_list.list);
  618. g_token = json_to_Token_info(rx_Head_buf);
  619. // 根据token获取用户及用户权限
  620. int nRoleID=3;
  621. if (0 == dev_get_user_info(__globalDeviceManage.db, &User_list) )
  622. {
  623. char *nName = getUserNamebyToken(g_token);
  624. if (nName != NULL)
  625. {
  626. nRoleID = GetRoleIDByUserName(nName,&User_list);
  627. }
  628. }
  629. SetMenuAuthority(nRoleID);
  630. ack_str = user_routers_info_to_json();
  631. http_reply(conn, 200, ack_str);
  632. if (g_token != NULL)
  633. {
  634. free(g_token);
  635. }
  636. cJSON_free((void*)ack_str);
  637. }
  638. /// @brief 设备总体信息
  639. /// @param stream
  640. static void overallStatusMonitoring(void* conn)
  641. {
  642. int ret = -1 ;
  643. cJSON *cjson=NULL;
  644. cmd_data_t cmd;
  645. _Over_All_Sts_Monitor _over_all_sts_monitor={0};
  646. _OverBackStsInfo _over_back_sts_info; //设备总体状态信息
  647. _OverAllPwrAckInfo _over_all_pwr_back_info; //设备电源信息
  648. _OverAllPwrAckInfo *pall=&webHandle.stt.all;
  649. char* ack_str=NULL;
  650. mg_stream_t *s=(mg_stream_t*)conn;
  651. struct mg_http_message *hm=s->ev_data;
  652. char *rx_body_buf = (char*)hm->body.buf;
  653. //转换json参数
  654. cjson = json_to_overall_status_monitor(rx_body_buf,&_over_all_sts_monitor);
  655. if(cjson==NULL)
  656. {
  657. if (strstr(hm->uri.buf,"type=export")) {
  658. //export_handle (conn, 0);
  659. file_io(conn, FILE_POWER_ALL, FILE_EXPORT, hm->uri.buf);
  660. }
  661. else {
  662. http_reply(conn, 400, NULL);
  663. }
  664. return;
  665. }
  666. //总电压电流信息
  667. if(strcmp(_over_all_sts_monitor.type,"listQuery")==0)
  668. {
  669. cur_dev_addr = _over_all_sts_monitor.product_id;
  670. if(cur_dev_addr>0) {
  671. int r=0;
  672. cmd.cmd = CASCADE_CMD_GET_INFO;
  673. cmd.obj = OBJ_OVERALL;
  674. r = cascade_request(&cmd);
  675. if(r) {
  676. goto quit;
  677. }
  678. cmd.cmd = CASCADE_CMD_QUERY_CH;
  679. cascade_request(&cmd);
  680. goto quit;
  681. }
  682. else
  683. {
  684. GlobalPowerInfo __globalPowerInfo;
  685. memset(&__globalPowerInfo,0,sizeof(GlobalPowerInfo));
  686. _over_all_pwr_back_info.product_name = __globalDeviceManage._globalDevInfo.product_name;
  687. _over_all_pwr_back_info.product_id = __globalDeviceManage._globalDevInfo.product_id;
  688. _over_all_pwr_back_info.product_number = __globalDeviceManage._globalDevInfo.product_number;
  689. //查询数据库总电源信息
  690. if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree
  691. ||__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One
  692. ||__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B
  693. )
  694. {
  695. if (strcmp(_over_all_sts_monitor.product_phOrder, "L1") == 0) // a相
  696. {
  697. __globalDeviceManage.nTreeACLshow = 0;
  698. dev_search_latest_t_ac_power_statistic_info(0, 0, &_over_all_pwr_back_info,&__globalDeviceManage);
  699. ack_str = over_all_pwr_monitor_to_json(0,&_over_all_pwr_back_info);
  700. }
  701. else if (strcmp(_over_all_sts_monitor.product_phOrder, "L2") == 0) // b相
  702. {
  703. __globalDeviceManage.nTreeACLshow = 1;
  704. dev_search_latest_t_ac_power_statistic_info(0, 1, &_over_all_pwr_back_info,&__globalDeviceManage);
  705. ack_str = over_all_pwr_monitor_to_json(1,&_over_all_pwr_back_info);
  706. }
  707. else if (strcmp(_over_all_sts_monitor.product_phOrder, "L3") == 0) // c相
  708. {
  709. __globalDeviceManage.nTreeACLshow = 2;
  710. dev_search_latest_t_ac_power_statistic_info(0, 2, &_over_all_pwr_back_info,&__globalDeviceManage);
  711. ack_str = over_all_pwr_monitor_to_json(2,&_over_all_pwr_back_info);
  712. }
  713. }
  714. else {
  715. if (dev_search_latest_power_info(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, 0, &__globalPowerInfo) != 0)
  716. {
  717. log_e("serach total pwr err.");
  718. }
  719. _over_all_pwr_back_info.voltage = __globalPowerInfo._power_info.voltage ;
  720. _over_all_pwr_back_info.current = __globalPowerInfo._power_info.current ;
  721. _over_all_pwr_back_info.power = __globalPowerInfo._power_info.power ;
  722. _over_all_pwr_back_info.freq = __globalPowerInfo._power_info.freq ;
  723. _over_all_pwr_back_info.consumption = __globalPowerInfo._power_info.consumption ;
  724. _over_all_pwr_back_info.factor = __globalPowerInfo._power_info.factor ;
  725. }
  726. ack_str = over_all_pwr_monitor_to_json(0,&_over_all_pwr_back_info);
  727. }
  728. }
  729. //打开所有开关
  730. else if(strcmp(_over_all_sts_monitor.type,"open")==0)
  731. {
  732. log_i("over all request:open");
  733. //总开
  734. int nSendAddr=0;
  735. char buff[256];
  736. if(cur_dev_addr>0) {
  737. cmd.cmd = CASCADE_CMD_OPEN;
  738. cmd.obj = OBJ_OVERALL;
  739. cmd.chId = 0xff;
  740. cascade_request(&cmd);
  741. ack_str = ctrl_sts_ack_to_json();
  742. goto quit;
  743. }
  744. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  745. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  746. {
  747. if(_globalPowerMangerTemp==NULL)
  748. break;
  749. if(_globalPowerMangerTemp->product_saddr==nSendAddr)continue;
  750. nSendAddr=_globalPowerMangerTemp->product_saddr;
  751. log_i("Open All address Start");
  752. int rec=g_switch_set_all_ctrl(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_ch_type,_globalPowerMangerTemp->product_saddr,1);
  753. if(rec<0)log_i("Open All address:%d rec:%d:%s",nSendAddr,rec,modbus_strerror(errno));
  754. }
  755. sprintf(buff,"$开启$|$所有$|$通道$");
  756. dev_insert_alarm_ctrl(__globalDeviceManage.db,_globalPowerMangerTemp->product_id,3,buff);
  757. ack_str = ctrl_sts_ack_to_json();
  758. }
  759. //关闭所有开关
  760. else if(strcmp(_over_all_sts_monitor.type,"close")==0)
  761. {
  762. log_i("over all request:close");
  763. if(cur_dev_addr>0) {
  764. cmd.cmd = CASCADE_CMD_CLOSE;
  765. cmd.obj = OBJ_OVERALL;
  766. cmd.chId = 0xff;
  767. cascade_request(&cmd);
  768. ack_str = ctrl_sts_ack_to_json();
  769. goto quit;
  770. }
  771. //总关
  772. int nSendAddr=0;
  773. char buff[256];
  774. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  775. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  776. {
  777. if(_globalPowerMangerTemp==NULL)
  778. break;
  779. if(_globalPowerMangerTemp->product_saddr==nSendAddr)continue;
  780. nSendAddr=_globalPowerMangerTemp->product_saddr;
  781. log_i("Close All address Start");
  782. int rec=g_switch_set_all_ctrl(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_ch_type,_globalPowerMangerTemp->product_saddr,0);
  783. if(rec<0)log_i("Close All address:%d rec:%d:%s",nSendAddr,rec,modbus_strerror(errno));
  784. }
  785. sprintf(buff,"$关闭$|$所有$|$通道$");
  786. dev_insert_alarm_ctrl(__globalDeviceManage.db,_globalPowerMangerTemp->product_id,3,buff);
  787. ack_str = ctrl_sts_ack_to_json();
  788. }
  789. //查询历史记录
  790. //ok
  791. else if(strcmp(_over_all_sts_monitor.type,"listHisQuery")==0)
  792. {
  793. #if 0
  794. log_i("over all request:listHisQuery");
  795. int ret = 0 ;
  796. int size = 0 ;
  797. int page_num = 0 ;
  798. int page_size = 0 ;
  799. page_num = atoi(_over_all_sts_monitor.page_num);
  800. page_size = atoi(_over_all_sts_monitor.page_size);
  801. GlobalPowerInfo _globalPowerInfo;
  802. INIT_LIST_HEAD(&_globalPowerInfo.list);
  803. ret = dev_search_power_info(__globalDeviceManage.db,
  804. __globalDeviceManage._globalDevInfo.product_id,
  805. 0,
  806. _over_all_sts_monitor.start_time,
  807. _over_all_sts_monitor.end_time,
  808. page_num,
  809. page_size,
  810. &size,
  811. &_globalPowerInfo);
  812. if(ret!=0)
  813. {
  814. log_e("dev all status history get error.\n");
  815. }
  816. //返回应答
  817. ack_str = overall_power_history_to_json(&_globalPowerInfo,&__globalDeviceManage);
  818. //释放资源
  819. GlobalPowerInfo* node;
  820. GlobalPowerInfo* next;
  821. list_for_each_entry_safe(node, next, &_globalPowerInfo.list, list)
  822. {
  823. list_del(&node->list);
  824. free(node);
  825. }
  826. #endif
  827. }
  828. //电压统计
  829. //1分钟1个点 6个小时 共360个点
  830. else if(strcmp(_over_all_sts_monitor.type,"listDyTotalQuery")==0)
  831. {
  832. //申请电压统计信息参数
  833. GlobalPowerInfo __globalPowerInfo;
  834. //清0
  835. memset(&__globalPowerInfo,0,sizeof(GlobalPowerInfo));
  836. if (_over_all_sts_monitor.product_pwr_type==SmartPDU_Tree_AC_Tree
  837. ||_over_all_sts_monitor.product_pwr_type==SmartPDU_Tree_AC_One
  838. ||_over_all_sts_monitor.product_pwr_type==SmartPDU_Tree_AC_One_B)
  839. {
  840. ack_str = over_all_data_t_ac_to_json(pall,&_over_all_sts_monitor, TOTAL_VOLTAGE_TYPE);
  841. }
  842. else if (_over_all_sts_monitor.lType && (strcmp(_over_all_sts_monitor.lType,"L1")==0 || strcmp(_over_all_sts_monitor.lType,"L2")==0 || strcmp(_over_all_sts_monitor.lType,"L3")==0))
  843. {
  844. int ph_id=-1;
  845. if (strcmp(_over_all_sts_monitor.lType,"L1")==0)
  846. {
  847. ph_id=0;
  848. }
  849. else if (strcmp(_over_all_sts_monitor.lType,"L2")==0 )
  850. {
  851. ph_id=1;
  852. }
  853. else if(strcmp(_over_all_sts_monitor.lType,"L3")==0 )
  854. {
  855. ph_id=2;
  856. }
  857. // 查询数据库总电源信息 传给所申请的参数结构体
  858. if (dev_search_time_t_ac_power_info(__globalDeviceManage.db, _over_all_sts_monitor.product_id, 0, ph_id, TOTAL_VOLTAGE_TYPE, &__globalPowerInfo, _over_all_sts_monitor.start_time, _over_all_sts_monitor.end_time) != 0)
  859. {
  860. log_e("serach total voltage err.");
  861. }
  862. //else
  863. {
  864. // 传值给总管理结构体
  865. for (int i = 0; i < TOTAL_COUNT; i++)
  866. {
  867. strcpy(pall->_total_voltage.xAxis[i], __globalPowerInfo._total_voltage.xAxis[i]);
  868. pall->_total_voltage.ydata[i] = __globalPowerInfo._total_voltage.ydata[i];
  869. }
  870. // 返回电压统计
  871. ack_str = over_all_total_info_to_json(pall, TOTAL_VOLTAGE_TYPE);
  872. }
  873. }
  874. else
  875. {
  876. // 查询数据库总电源信息 传给所申请的参数结构体
  877. if (dev_search_time_power_info(__globalDeviceManage.db, _over_all_sts_monitor.product_id, 0, TOTAL_VOLTAGE_TYPE, &__globalPowerInfo, _over_all_sts_monitor.start_time, _over_all_sts_monitor.end_time) != 0)
  878. {
  879. log_e("serach total voltage err.");
  880. }
  881. //else
  882. {
  883. // 传值给总管理结构体
  884. for (int i = 0; i < TOTAL_COUNT; i++)
  885. {
  886. strcpy(pall->_total_voltage.xAxis[i], __globalPowerInfo._total_voltage.xAxis[i]);
  887. pall->_total_voltage.ydata[i] = __globalPowerInfo._total_voltage.ydata[i];
  888. }
  889. // 返回电压统计
  890. ack_str = over_all_total_info_to_json(pall, TOTAL_VOLTAGE_TYPE);
  891. }
  892. }
  893. }
  894. //电流统计
  895. else if(strcmp(_over_all_sts_monitor.type,"listDlTotalQuery")==0)
  896. {
  897. #if DBUG_INFO
  898. log_i("over all request: listDlTotalQuery\n");
  899. #endif
  900. //申请电流统计信息参数
  901. GlobalPowerInfo __globalPowerInfo;
  902. //清0
  903. memset(&__globalPowerInfo,0,sizeof(GlobalPowerInfo));
  904. if (_over_all_sts_monitor.product_pwr_type==SmartPDU_Tree_AC_Tree
  905. ||_over_all_sts_monitor.product_pwr_type==SmartPDU_Tree_AC_One
  906. ||_over_all_sts_monitor.product_pwr_type==SmartPDU_Tree_AC_One_B)
  907. {
  908. ack_str = over_all_data_t_ac_to_json(pall, &_over_all_sts_monitor, TOTAL_CURRENT_TYPE);
  909. }
  910. else if (_over_all_sts_monitor.lType && (strcmp(_over_all_sts_monitor.lType,"L1")==0 || strcmp(_over_all_sts_monitor.lType,"L2")==0 || strcmp(_over_all_sts_monitor.lType,"L3")==0))
  911. {
  912. int ph_id=-1;
  913. if (strcmp(_over_all_sts_monitor.lType,"L1")==0)
  914. {
  915. ph_id=0;
  916. }
  917. else if (strcmp(_over_all_sts_monitor.lType,"L2")==0 )
  918. {
  919. ph_id=1;
  920. }
  921. else if(strcmp(_over_all_sts_monitor.lType,"L3")==0 )
  922. {
  923. ph_id=2;
  924. }
  925. // 查询数据库总电源信息 传给所申请的参数结构体
  926. if (dev_search_time_t_ac_power_info(__globalDeviceManage.db, _over_all_sts_monitor.product_id, 0, ph_id, TOTAL_CURRENT_TYPE, &__globalPowerInfo, _over_all_sts_monitor.start_time, _over_all_sts_monitor.end_time) != 0)
  927. {
  928. log_e("serach total current err.");
  929. }
  930. // 传值给总管理结构体
  931. for (int i = 0; i < TOTAL_COUNT; i++)
  932. {
  933. strcpy(pall->_total_current.xAxis[i], __globalPowerInfo._total_current.xAxis[i]);
  934. pall->_total_current.ydata[i] = __globalPowerInfo._total_current.ydata[i];
  935. }
  936. // 返回电流统计
  937. ack_str = over_all_total_info_to_json(pall, TOTAL_CURRENT_TYPE);
  938. }
  939. else
  940. {
  941. // 查询数据库总电源信息 传给所申请的参数结构体
  942. if (dev_search_time_power_info(__globalDeviceManage.db, _over_all_sts_monitor.product_id, 0, TOTAL_CURRENT_TYPE, &__globalPowerInfo, _over_all_sts_monitor.start_time, _over_all_sts_monitor.end_time) != 0)
  943. {
  944. log_e("serach total current err.");
  945. }
  946. // 传值给总管理结构体
  947. for (int i = 0; i < TOTAL_COUNT; i++)
  948. {
  949. strcpy(pall->_total_current.xAxis[i], __globalPowerInfo._total_current.xAxis[i]);
  950. pall->_total_current.ydata[i] = __globalPowerInfo._total_current.ydata[i];
  951. }
  952. // 返回电流统计
  953. ack_str = over_all_total_info_to_json(pall, TOTAL_CURRENT_TYPE);
  954. }
  955. }
  956. //功率统计
  957. else if(strcmp(_over_all_sts_monitor.type,"listGlTotalQuery")==0)
  958. {
  959. #if DBUG_INFO
  960. log_i("over all request: listGlTotalQuery\n");
  961. #endif
  962. //申请功率统计信息参数
  963. GlobalPowerInfo __globalPowerInfo;
  964. //清0
  965. memset(&__globalPowerInfo,0,sizeof(GlobalPowerInfo));
  966. if (_over_all_sts_monitor.product_pwr_type==SmartPDU_Tree_AC_Tree
  967. ||_over_all_sts_monitor.product_pwr_type==SmartPDU_Tree_AC_One
  968. ||_over_all_sts_monitor.product_pwr_type==SmartPDU_Tree_AC_One_B)
  969. {
  970. ack_str = over_all_data_t_ac_to_json(pall, &_over_all_sts_monitor, TOTAL_POWER_TYPE);
  971. }
  972. // else if (_over_all_sts_monitor.lType && (strcmp(_over_all_sts_monitor.lType,"L1")==0 || strcmp(_over_all_sts_monitor.lType,"L2")==0 || strcmp(_over_all_sts_monitor.lType,"L3")==0))
  973. // {
  974. // int ph_id=-1;
  975. // if (strcmp(_over_all_sts_monitor.lType,"L1")==0)
  976. // {
  977. // ph_id=0;
  978. // }
  979. // else if (strcmp(_over_all_sts_monitor.lType,"L2")==0 )
  980. // {
  981. // ph_id=1;
  982. // }
  983. // else if(strcmp(_over_all_sts_monitor.lType,"L3")==0 )
  984. // {
  985. // ph_id=2;
  986. // }
  987. // // 查询数据库总电源信息 传给所申请的参数结构体
  988. // if (dev_search_time_t_ac_power_info(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, 0, ph_id, TOTAL_POWER_TYPE, &__globalPowerInfo, _over_all_sts_monitor.start_time, _over_all_sts_monitor.end_time) != 0)
  989. // {
  990. // log_e("serach total power err.");
  991. // }
  992. // // 传值给总管理结构体
  993. // for (int i = 0; i < TOTAL_COUNT; i++)
  994. // {
  995. // strcpy(pall->_total_power.xAxis[i], __globalPowerInfo._total_power.xAxis[i]);
  996. // pall->_total_power.ydata[i] = __globalPowerInfo._total_power.ydata[i];
  997. // }
  998. // // 返回功率统计
  999. // ack_str = over_all_total_info_to_json(pall, TOTAL_POWER_TYPE);
  1000. // }
  1001. else
  1002. {
  1003. // 查询数据库总电源信息 传给所申请的参数结构体
  1004. if (dev_search_time_power_info(__globalDeviceManage.db, _over_all_sts_monitor.product_id, 0, TOTAL_POWER_TYPE, &__globalPowerInfo, _over_all_sts_monitor.start_time, _over_all_sts_monitor.end_time) != 0)
  1005. {
  1006. log_e("serach total power err.");
  1007. }
  1008. // 传值给总管理结构体
  1009. for (int i = 0; i < TOTAL_COUNT; i++)
  1010. {
  1011. strcpy(pall->_total_power.xAxis[i], __globalPowerInfo._total_power.xAxis[i]);
  1012. pall->_total_power.ydata[i] = __globalPowerInfo._total_power.ydata[i];
  1013. }
  1014. // 返回功率统计
  1015. ack_str = over_all_total_info_to_json(pall, TOTAL_POWER_TYPE);
  1016. }
  1017. }
  1018. //耗电量统计
  1019. else if(strcmp(_over_all_sts_monitor.type,"listHdlTotalQuery")==0)
  1020. {
  1021. #if DBUG_INFO
  1022. log_i("over all request: listHdlTotalQuery\n");
  1023. #endif
  1024. //申请耗电量统计信息参数
  1025. GlobalPowerInfo __globalPowerInfo;
  1026. //清0
  1027. memset(&__globalPowerInfo,0,sizeof(GlobalPowerInfo));
  1028. if (_over_all_sts_monitor.product_pwr_type==SmartPDU_Tree_AC_Tree
  1029. ||_over_all_sts_monitor.product_pwr_type==SmartPDU_Tree_AC_One
  1030. ||_over_all_sts_monitor.product_pwr_type==SmartPDU_Tree_AC_One_B)
  1031. {
  1032. ack_str = over_all_data_t_ac_to_json(pall, &_over_all_sts_monitor, TOTAL_POWER_CONS_TYPE);
  1033. }
  1034. // else if (_over_all_sts_monitor.lType && (strcmp(_over_all_sts_monitor.lType,"L1")==0 || strcmp(_over_all_sts_monitor.lType,"L2")==0 || strcmp(_over_all_sts_monitor.lType,"L3")==0))
  1035. // {
  1036. // int ph_id=-1;
  1037. // if (strcmp(_over_all_sts_monitor.lType,"L1")==0)
  1038. // {
  1039. // ph_id=0;
  1040. // }
  1041. // else if (strcmp(_over_all_sts_monitor.lType,"L2")==0 )
  1042. // {
  1043. // ph_id=1;
  1044. // }
  1045. // else if(strcmp(_over_all_sts_monitor.lType,"L3")==0 )
  1046. // {
  1047. // ph_id=2;
  1048. // }
  1049. // // 查询数据库总电源信息 传给所申请的参数结构体
  1050. // if (dev_search_time_t_ac_power_info(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, 0, ph_id, TOTAL_POWER_CONS_TYPE, &__globalPowerInfo, _over_all_sts_monitor.start_time, _over_all_sts_monitor.end_time) != 0)
  1051. // {
  1052. // log_e("serach total power consumption err.");
  1053. // }
  1054. // // 传值给总管理结构体
  1055. // for (int i = 0; i < TOTAL_COUNT; i++)
  1056. // {
  1057. // strcpy(pall->_total_consumption.xAxis[i], __globalPowerInfo._total_consumption.xAxis[i]);
  1058. // pall->_total_consumption.ydata[i] = __globalPowerInfo._total_consumption.ydata[i];
  1059. // }
  1060. // // 返回耗电量统计
  1061. // ack_str = over_all_total_info_to_json(pall, TOTAL_POWER_CONS_TYPE);
  1062. // }
  1063. else
  1064. {
  1065. // 查询数据库总电源信息 传给所申请的参数结构体
  1066. if (dev_search_time_power_info(__globalDeviceManage.db, _over_all_sts_monitor.product_id, 0, TOTAL_POWER_CONS_TYPE, &__globalPowerInfo, _over_all_sts_monitor.start_time, _over_all_sts_monitor.end_time) != 0)
  1067. {
  1068. log_e("serach total power consumption err.");
  1069. }
  1070. // 传值给总管理结构体
  1071. for (int i = 0; i < TOTAL_COUNT; i++)
  1072. {
  1073. strcpy(pall->_total_consumption.xAxis[i], __globalPowerInfo._total_consumption.xAxis[i]);
  1074. pall->_total_consumption.ydata[i] = __globalPowerInfo._total_consumption.ydata[i];
  1075. }
  1076. // 返回耗电量统计
  1077. ack_str = over_all_total_info_to_json(pall, TOTAL_POWER_CONS_TYPE);
  1078. }
  1079. }
  1080. //查询系统总数情况
  1081. else if(strcmp(_over_all_sts_monitor.type,"listTotalQuery")==0)
  1082. {
  1083. #if DBUG_INFO
  1084. log_i("over all request: listTotalQuery\n");
  1085. #endif
  1086. //初始化系统总数结构体
  1087. SystemTotalInfo __system_total_info;
  1088. memset(&__system_total_info, 0, sizeof(SystemTotalInfo));
  1089. struct tm *t;
  1090. struct timeval tv;
  1091. char start_time[32] = {0};
  1092. char stop_time[32] = {0};
  1093. gettimeofday(&tv, NULL);
  1094. t = localtime(&tv.tv_sec);
  1095. sprintf(start_time, "%04d-%02d-%02d %02d:%02d:%02d", t->tm_year + 1900, t->tm_mon+1, t->tm_mday, 0,0,0);
  1096. //sprintf(start_time, "%04d-%02d-%02d %02d:%02d:%02d", 1970, 1, 1, 0,0,0);
  1097. log_d(start_time);
  1098. sprintf(stop_time, "%04d-%02d-%02d %02d:%02d:%02d", t->tm_year + 1900, t->tm_mon+1, t->tm_mday, 23,59, 59);
  1099. //sprintf(stop_time, "%04d-%02d-%02d %02d:%02d:%02d", 1970, 1, 1, 23,59, 59);
  1100. log_d(stop_time);
  1101. //从数据库获取参数信息
  1102. if(dev_get_system_total_info(__globalDeviceManage.db,_over_all_sts_monitor.product_id,0,&__system_total_info,start_time,stop_time)!=0)
  1103. {
  1104. log_e("serach total System total err.");
  1105. }
  1106. int nSumChannel=0;
  1107. int nSumSensor = 0;
  1108. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  1109. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  1110. {
  1111. nSumChannel+=1;
  1112. }
  1113. __system_total_info.channel_total = nSumChannel ;
  1114. GlobalSensorManger * _g_manerger = NULL;
  1115. list_for_each_entry(_g_manerger, &__globalDeviceManage._globalSensorManger.list, list)
  1116. {
  1117. nSumSensor+=1;
  1118. }
  1119. //获取通道总数
  1120. // __GetSystemTotalInfo.channel_total = _globalDeviceManager->useSlaveCount;
  1121. //获取系统总数情况
  1122. _over_back_sts_info.system_total.channel_total = __system_total_info.channel_total;
  1123. _over_back_sts_info.system_total.log_total = __system_total_info.log_total;
  1124. _over_back_sts_info.system_total.sensor_total = nSumSensor;
  1125. _over_back_sts_info.system_total.warn_total = __system_total_info.warn_total;
  1126. //返回系统总数情况
  1127. ack_str = over_system_total_monitor_to_json(&_over_back_sts_info);
  1128. }
  1129. //功率趋势图接口
  1130. else if(strcmp(_over_all_sts_monitor.type,"listGlAllTotalQuery")==0)
  1131. {
  1132. #if DBUG_INFO
  1133. log_i("over all request: listGlAllTotalQuery\n");
  1134. #endif
  1135. //初始化功率趋势图参数
  1136. GlobalPowerInfo __PowerTrendInfo;
  1137. //清0
  1138. memset(&__PowerTrendInfo,0,sizeof(GlobalPowerInfo));
  1139. #if 1
  1140. // if (_over_all_sts_monitor.lType && (strcmp(_over_all_sts_monitor.lType,"L1")==0 || strcmp(_over_all_sts_monitor.lType,"L2")==0 || strcmp(_over_all_sts_monitor.lType,"L3")==0))
  1141. // {
  1142. // int ph_id=-1;
  1143. // if (strcmp(_over_all_sts_monitor.lType,"L1")==0)
  1144. // {
  1145. // ph_id=0;
  1146. // }
  1147. // else if (strcmp(_over_all_sts_monitor.lType,"L2")==0 )
  1148. // {
  1149. // ph_id=1;
  1150. // }
  1151. // else if(strcmp(_over_all_sts_monitor.lType,"L3")==0 )
  1152. // {
  1153. // ph_id=2;
  1154. // }
  1155. // // 查询数据库总电源信息 传给所申请的参数结构体
  1156. // if (dev_search_power_AC_trend_info(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, 0, ph_id, &__PowerTrendInfo, _over_all_sts_monitor.start_time, _over_all_sts_monitor.end_time) != 0)
  1157. // {
  1158. // log_e("serach total power consumption err.");
  1159. // }
  1160. // }
  1161. // else
  1162. {
  1163. // 查询数据库总电源信息 传给所申请的参数结构体
  1164. if (dev_search_power_trend_info(__globalDeviceManage.db, _over_all_sts_monitor.product_id, 0, &__PowerTrendInfo, _over_all_sts_monitor.start_time, _over_all_sts_monitor.end_time) != 0)
  1165. {
  1166. log_e("serach total power consumption err.");
  1167. }
  1168. }
  1169. //传值给总管理结构体
  1170. for(int i=0;i< TOTAL_COUNT;i++)
  1171. {
  1172. strcpy(_over_all_pwr_back_info._Power_Trend_Info.xAxis[i],__PowerTrendInfo._power_trend_info.xAxis[i]);
  1173. _over_all_pwr_back_info._Power_Trend_Info.ydata[POWER_MERITORIOUS_TYPE][i] = __PowerTrendInfo._power_trend_info.ydata[POWER_MERITORIOUS_TYPE][i];
  1174. _over_all_pwr_back_info._Power_Trend_Info.ydata[POWER_REACTIVE_TYPE][i] = __PowerTrendInfo._power_trend_info.ydata[POWER_REACTIVE_TYPE][i];
  1175. _over_all_pwr_back_info._Power_Trend_Info.ydata[POWER_APPARENT_TYPE][i] = __PowerTrendInfo._power_trend_info.ydata[POWER_APPARENT_TYPE][i];
  1176. }
  1177. #else
  1178. for(int i=0;i< TOTAL_COUNT;i++)
  1179. {
  1180. strcpy(_over_all_pwr_back_info._Power_Trend_Info.xAxis[i],"00:00 ");
  1181. _over_all_pwr_back_info._Power_Trend_Info.ydata[POWER_MERITORIOUS_TYPE][i] = 10+i;
  1182. _over_all_pwr_back_info._Power_Trend_Info.ydata[POWER_REACTIVE_TYPE][i] = 20+i;
  1183. _over_all_pwr_back_info._Power_Trend_Info.ydata[POWER_APPARENT_TYPE][i] = 30+i;
  1184. }
  1185. #endif
  1186. //返回功率趋势
  1187. ack_str = over_power_trend_to_json(&_over_all_pwr_back_info);
  1188. }
  1189. quit:
  1190. cJSON_Delete(cjson);
  1191. http_reply(conn, 200, ack_str);
  1192. cJSON_free((void*)ack_str);
  1193. }
  1194. /// @brief 电源通道
  1195. /// @param stream
  1196. static void channelStatusMonitoring(void* conn)
  1197. {
  1198. int ret = -1 ;
  1199. cJSON *cjson;
  1200. cmd_data_t cmd;
  1201. _OverChnPwrRequest _over_chn_pwr_request;
  1202. _OverAllPwrAckInfo _over_all_pwr_back_info;
  1203. _OverAllPwrAckInfo *pch=&webHandle.stt.chn;
  1204. char* ack_str = NULL ;
  1205. mg_stream_t *s=(mg_stream_t*)conn;
  1206. struct mg_http_message *hm=s->ev_data;
  1207. char *rx_body_buf=(char*)hm->body.buf;
  1208. //转换json参数
  1209. memset(&_over_chn_pwr_request,0,sizeof(_OverChnPwrRequest));
  1210. cjson = json_to_chn_pwr_status_monitor(rx_body_buf,&_over_chn_pwr_request);
  1211. if(cjson==NULL)
  1212. {
  1213. if (strstr(hm->uri.buf,"type=export")) {
  1214. //export_handle(conn, 1);
  1215. file_io(conn, FILE_POWER_CHN, FILE_EXPORT, hm->uri.buf);
  1216. }
  1217. return;
  1218. }
  1219. if (_over_chn_pwr_request.productChId > 0)
  1220. {
  1221. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  1222. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  1223. {
  1224. if (_over_chn_pwr_request.productChId == _globalPowerMangerTemp->product_ch_id)
  1225. {
  1226. _over_chn_pwr_request.product_id = _globalPowerMangerTemp->product_id;
  1227. break;
  1228. }
  1229. }
  1230. }
  1231. if (_over_chn_pwr_request.Zerotype!=NULL)
  1232. {
  1233. if (strcmp(_over_chn_pwr_request.Zerotype, "open") == 0) // 零线开
  1234. {
  1235. int ret = 0;
  1236. int product_chn_id = 0;
  1237. char buff[256];
  1238. log_i("channel NF status request:open");
  1239. product_chn_id = _over_chn_pwr_request.productChId;
  1240. if (cur_dev_addr > 0)
  1241. {
  1242. cmd.cmd = CASCADE_CMD_OPEN_NF;
  1243. cmd.obj = OBJ_CHANNEL;
  1244. cmd.chId = product_chn_id;
  1245. cascade_request(&cmd);
  1246. ack_str = ctrl_sts_ack_to_json();
  1247. goto quit;
  1248. }
  1249. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  1250. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  1251. {
  1252. // log_d("channel:%d", _globalPowerMangerTemp->product_ch_id);
  1253. if (_globalPowerMangerTemp == NULL)
  1254. break;
  1255. if (product_chn_id == _globalPowerMangerTemp->product_ch_id)
  1256. {
  1257. log_d("switch ctrl:%d", _globalPowerMangerTemp->product_ch_id);
  1258. ret = g_switch_set_t_ac_chn_NF_ctrl(&__globalDeviceManage._globalRelaySampManger,
  1259. _globalPowerMangerTemp->product_saddr,
  1260. _globalPowerMangerTemp->product_ch_addr,
  1261. 1);
  1262. if (ret < 0)
  1263. {
  1264. ret = g_switch_set_t_ac_chn_NF_ctrl(&__globalDeviceManage._globalRelaySampManger,
  1265. _globalPowerMangerTemp->product_saddr,
  1266. _globalPowerMangerTemp->product_ch_addr,
  1267. 1);
  1268. }
  1269. sprintf(buff, "$开启$|$通道$|%d Naught wire!", _globalPowerMangerTemp->product_ch_id);
  1270. dev_insert_alarm_ctrl(__globalDeviceManage.db, _globalPowerMangerTemp->product_id, 3, buff);
  1271. break;
  1272. }
  1273. }
  1274. ack_str = ctrl_sts_ack_to_json();
  1275. }
  1276. else if (strcmp(_over_chn_pwr_request.Zerotype, "close") == 0) // 零线关
  1277. {
  1278. int ret = 0;
  1279. int product_chn_id = 0;
  1280. char buff[256];
  1281. log_i("channel NF status request:open");
  1282. product_chn_id = _over_chn_pwr_request.productChId;
  1283. if (cur_dev_addr > 0)
  1284. {
  1285. cmd.cmd = CASCADE_CMD_CLOSE_NF;
  1286. cmd.obj = OBJ_CHANNEL;
  1287. cmd.chId = product_chn_id;
  1288. cascade_request(&cmd);
  1289. ack_str = ctrl_sts_ack_to_json();
  1290. goto quit;
  1291. }
  1292. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  1293. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  1294. {
  1295. // log_d("channel:%d", _globalPowerMangerTemp->product_ch_id);
  1296. if (_globalPowerMangerTemp == NULL)
  1297. break;
  1298. if (product_chn_id == _globalPowerMangerTemp->product_ch_id)
  1299. {
  1300. log_d("switch ctrl:%d", _globalPowerMangerTemp->product_ch_id);
  1301. ret = g_switch_set_t_ac_chn_NF_ctrl(&__globalDeviceManage._globalRelaySampManger,
  1302. _globalPowerMangerTemp->product_saddr,
  1303. _globalPowerMangerTemp->product_ch_addr,
  1304. 0);
  1305. if (ret < 0)
  1306. {
  1307. ret = g_switch_set_t_ac_chn_NF_ctrl(&__globalDeviceManage._globalRelaySampManger,
  1308. _globalPowerMangerTemp->product_saddr,
  1309. _globalPowerMangerTemp->product_ch_addr,
  1310. 0);
  1311. }
  1312. sprintf(buff, "$关闭$|$通道$|%d Naught wire!", _globalPowerMangerTemp->product_ch_id);
  1313. dev_insert_alarm_ctrl(__globalDeviceManage.db, _globalPowerMangerTemp->product_id, 3, buff);
  1314. break;
  1315. }
  1316. }
  1317. ack_str = ctrl_sts_ack_to_json();
  1318. }
  1319. }
  1320. if (_over_chn_pwr_request.type==NULL)
  1321. {
  1322. goto quit;
  1323. }
  1324. if(strcmp(_over_chn_pwr_request.type,"listQuery")==0||strcmp(_over_chn_pwr_request.type,"resetChannel")==0)
  1325. {
  1326. //log_i("channel status request:listQuery");
  1327. //log_d(rx_body_buf);
  1328. if (strcmp(_over_chn_pwr_request.type,"resetChannel")==0)
  1329. {
  1330. //__globalDeviceManage._ReloadChm_flag=true;
  1331. //ResetChmData();
  1332. //__globalDeviceManage._ReloadChm_flag=false;
  1333. }
  1334. GlobalPowerInfo _powerInfo;
  1335. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  1336. int product_chn_id = 0 ;
  1337. _OverChnPwrAckInfo _over_chn_pwr_back_info;
  1338. INIT_LIST_HEAD(&_over_chn_pwr_back_info.list);
  1339. product_chn_id = _over_chn_pwr_request.productChId;
  1340. cur_dev_addr = _over_chn_pwr_request.product_id;
  1341. if(cur_dev_addr>0) {
  1342. int r;
  1343. cmd.cmd = CASCADE_CMD_GET_INFO;
  1344. cmd.obj = OBJ_CHANNEL;
  1345. r = cascade_request(&cmd);
  1346. if(r) {
  1347. goto quit;
  1348. }
  1349. cmd.cmd = CASCADE_CMD_QUERY_CH;
  1350. r = cascade_request(&cmd);
  1351. if(r) {
  1352. goto quit;
  1353. }
  1354. cascade_get_ch(&_over_chn_pwr_back_info);
  1355. }
  1356. else {
  1357. if(product_chn_id==0)
  1358. {
  1359. pthread_mutex_lock(&__globalDeviceManage._power_update);
  1360. dev_search_latest_power_All_info(&__globalDeviceManage,&_over_chn_pwr_back_info, cur_dev_addr);
  1361. pthread_mutex_unlock(&__globalDeviceManage._power_update);
  1362. }
  1363. else //指定通道
  1364. {
  1365. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  1366. {
  1367. if(product_chn_id==_globalPowerMangerTemp->product_ch_id)
  1368. {
  1369. break;
  1370. }
  1371. }
  1372. //更新数据
  1373. //log_d("serach ch%d pwr ok.",product_chn_id);
  1374. _OverChnPwrAckInfo* _overChnPwrBackInfoTemp = (_OverChnPwrAckInfo*)malloc(sizeof(_OverChnPwrAckInfo));
  1375. if(_overChnPwrBackInfoTemp==NULL)
  1376. {
  1377. log_e("_overChnPwrBackInfoTemp malloc err.");
  1378. }
  1379. //查询数据库总电源信息
  1380. if(dev_search_latest_power_info(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id,
  1381. product_chn_id, &_powerInfo)!=0)
  1382. {
  1383. log_e("serach total pwr err.");
  1384. }
  1385. {
  1386. //填数据
  1387. _overChnPwrBackInfoTemp->product_name = __globalDeviceManage._globalDevInfo.product_name;
  1388. _overChnPwrBackInfoTemp->product_number = __globalDeviceManage._globalDevInfo.product_number;
  1389. _overChnPwrBackInfoTemp->product_id = __globalDeviceManage._globalDevInfo.product_id;
  1390. _overChnPwrBackInfoTemp->productChName = _globalPowerMangerTemp->product_ch_name;
  1391. _overChnPwrBackInfoTemp->productChId = _globalPowerMangerTemp->product_ch_id;
  1392. _overChnPwrBackInfoTemp->status = _powerInfo._power_info.status;
  1393. _overChnPwrBackInfoTemp->NF_status = _powerInfo._power_info.NF_status;
  1394. _overChnPwrBackInfoTemp->voltage = _powerInfo._power_info.voltage;
  1395. _overChnPwrBackInfoTemp->current = _powerInfo._power_info.current;
  1396. _overChnPwrBackInfoTemp->power = _powerInfo._power_info.power ;
  1397. _overChnPwrBackInfoTemp->freq = _powerInfo._power_info.freq ;
  1398. _overChnPwrBackInfoTemp->consumption = _powerInfo._power_info.consumption ;
  1399. _overChnPwrBackInfoTemp->factor = _powerInfo._power_info.factor ;
  1400. list_add_tail(&_overChnPwrBackInfoTemp->list,&_over_chn_pwr_back_info.list);
  1401. }
  1402. }
  1403. ack_str = over_chn_pwr_monitor_to_json(&_over_chn_pwr_back_info);
  1404. _OverChnPwrAckInfo *node,*next;
  1405. list_for_each_entry_safe(node, next, &_over_chn_pwr_back_info.list, list)
  1406. {
  1407. list_del(&node->list);
  1408. free(node);
  1409. }
  1410. }
  1411. }
  1412. else if(strcmp(_over_chn_pwr_request.type,"open")==0)//通道开
  1413. {
  1414. int ret=0;
  1415. int product_chn_id = 0 ;
  1416. char buff[256];
  1417. log_i("channel status request:open");
  1418. /*
  1419. * todo:添加控制
  1420. */
  1421. product_chn_id = _over_chn_pwr_request.productChId;
  1422. if(cur_dev_addr>0) {
  1423. cmd.cmd = CASCADE_CMD_OPEN;
  1424. cmd.obj = OBJ_CHANNEL;
  1425. cmd.chId = product_chn_id;
  1426. cascade_request(&cmd);
  1427. ack_str = ctrl_sts_ack_to_json();
  1428. goto quit;
  1429. }
  1430. log_d("channel id:%d", product_chn_id);
  1431. // product_chn_id = strtol(_over_chn_pwr_request.productChId,NULL,10);
  1432. // log_d("productChId:%d",product_chn_id);
  1433. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  1434. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  1435. {
  1436. //log_d("channel:%d", _globalPowerMangerTemp->product_ch_id);
  1437. if(_globalPowerMangerTemp==NULL)
  1438. break;
  1439. if(product_chn_id==_globalPowerMangerTemp->product_ch_id)
  1440. {
  1441. log_d("switch ctrl:%d",_globalPowerMangerTemp->product_ch_id);
  1442. ret=g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp,
  1443. _globalPowerMangerTemp->product_saddr,
  1444. _globalPowerMangerTemp->product_ch_addr,
  1445. 1,false);
  1446. if (ret < 0)
  1447. {
  1448. ret = g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger, _globalPowerMangerTemp,
  1449. _globalPowerMangerTemp->product_saddr,
  1450. _globalPowerMangerTemp->product_ch_addr,
  1451. 1,false);
  1452. }
  1453. char buff[256];
  1454. sprintf(buff,"$开启$|$通道$|%d",_globalPowerMangerTemp->product_ch_id);
  1455. dev_insert_alarm_ctrl(__globalDeviceManage.db,_globalPowerMangerTemp->product_id,3,buff);
  1456. break;
  1457. }
  1458. }
  1459. ack_str = ctrl_sts_ack_to_json();
  1460. }
  1461. else if(strcmp(_over_chn_pwr_request.type,"close")==0)//通道关
  1462. {
  1463. log_i("channel status request:close");
  1464. /*
  1465. * todo:添加控制
  1466. */
  1467. char buff[256];
  1468. int product_chn_id = 0 ;
  1469. product_chn_id = _over_chn_pwr_request.productChId;
  1470. if(cur_dev_addr>0) {
  1471. cmd.cmd = CASCADE_CMD_CLOSE;
  1472. cmd.obj = OBJ_CHANNEL;
  1473. cmd.chId = product_chn_id;
  1474. cascade_request(&cmd);
  1475. ack_str = ctrl_sts_ack_to_json();
  1476. goto quit;
  1477. }
  1478. // product_chn_id = strtol(_over_chn_pwr_request.productChId,NULL,10);
  1479. // log_d("productChId:%d",product_chn_id);
  1480. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  1481. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  1482. {
  1483. if(_globalPowerMangerTemp==NULL)
  1484. break;
  1485. if(product_chn_id==_globalPowerMangerTemp->product_ch_id)
  1486. {
  1487. //log_d("switch ctrl:%d",_globalPowerMangerTemp->product_ch_id);
  1488. ret=g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp,
  1489. _globalPowerMangerTemp->product_saddr,
  1490. _globalPowerMangerTemp->product_ch_addr ,//多版端口余8
  1491. 0,false);
  1492. if (ret < 0)
  1493. {
  1494. ret = g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger, _globalPowerMangerTemp,
  1495. _globalPowerMangerTemp->product_saddr,
  1496. _globalPowerMangerTemp->product_ch_addr, // 多版端口余8
  1497. 0,false);
  1498. /* code */
  1499. }
  1500. sprintf(buff,"$关闭$|$通道$|%d",_globalPowerMangerTemp->product_ch_id);
  1501. dev_insert_alarm_ctrl(__globalDeviceManage.db,_globalPowerMangerTemp->product_id,3,buff);
  1502. break;
  1503. }
  1504. }
  1505. ack_str = ctrl_sts_ack_to_json();
  1506. }
  1507. else if(strcmp(_over_chn_pwr_request.type,"save")==0)//负载
  1508. {
  1509. log_i("channel status request:save");
  1510. if(cur_dev_addr>0) {
  1511. cmd.cmd = CASCADE_CMD_SAVE;
  1512. cmd.obj = OBJ_CHANNEL;
  1513. cmd.chId = _over_chn_pwr_request.productChId;
  1514. cascade_request(&cmd);
  1515. ack_str = ctrl_sts_ack_to_json();
  1516. goto quit;
  1517. }
  1518. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  1519. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  1520. {
  1521. if (_over_chn_pwr_request.productChId == _globalPowerMangerTemp->product_ch_id)
  1522. {
  1523. break;
  1524. }
  1525. }
  1526. if (_globalPowerMangerTemp != NULL)
  1527. {
  1528. if (strlen(_over_chn_pwr_request.productChName)<32)
  1529. {
  1530. strcpy(_globalPowerMangerTemp->product_ch_name, _over_chn_pwr_request.productChName);
  1531. if (dev_update_power_manage_genera_info(__globalDeviceManage.db, _globalPowerMangerTemp->product_id, _globalPowerMangerTemp->product_ch_id, _globalPowerMangerTemp) != 0)
  1532. {
  1533. log_e("update pwr general data err.");
  1534. }
  1535. }else{
  1536. log_e("ChName too long.");
  1537. }
  1538. }
  1539. ack_str = ctrl_sts_ack_to_json();
  1540. }
  1541. else if(strcmp(_over_chn_pwr_request.type,"listHisQuery")==0) //历史记录查询
  1542. {
  1543. #if 0
  1544. int ret = 0 ;
  1545. int size = 0 ;
  1546. int h_pwrchn = 0 ;
  1547. int page_num = 0 ;
  1548. int page_size = 0 ;
  1549. GlobalPowerInfo _globalPowerInfo;
  1550. INIT_LIST_HEAD(&_globalPowerInfo.list);
  1551. h_pwrchn = strtol(_over_chn_pwr_request.productChId,NULL,10);
  1552. page_num = atoi(_over_chn_pwr_request.pageNum);
  1553. page_size = atoi(_over_chn_pwr_request.pageSize);
  1554. //查询数据
  1555. ret = dev_search_power_info(__globalDeviceManage.db,
  1556. __globalDeviceManage._globalDevInfo.product_id,
  1557. h_pwrchn,
  1558. _over_chn_pwr_request.start_time,
  1559. _over_chn_pwr_request.end_time,
  1560. page_num,
  1561. page_size,
  1562. &size,
  1563. &_globalPowerInfo);
  1564. if(ret!=0)
  1565. {
  1566. log_e("dev all status history get error.\n");
  1567. }
  1568. //应答
  1569. ack_str = over_channel_power_history_to_json(&_globalPowerInfo,
  1570. &__globalDeviceManage._globalDevInfo,
  1571. _over_chn_pwr_request.productChName,
  1572. h_pwrchn);
  1573. //释放资源
  1574. GlobalPowerInfo* node;
  1575. GlobalPowerInfo* next;
  1576. list_for_each_entry_safe(node, next, &_globalPowerInfo.list, list)
  1577. {
  1578. list_del(&node->list);
  1579. free(node);
  1580. }
  1581. #endif
  1582. }
  1583. else if(strcmp(_over_chn_pwr_request.type,"listDyTotalQuery")==0)
  1584. {
  1585. #if DBUG_INFO
  1586. log_i("over all request: listDyTotalQuery\n");
  1587. #endif
  1588. int product_chn_id = 0 ;
  1589. product_chn_id = _over_chn_pwr_request.productChId;
  1590. /*
  1591. log_d("productChId:%d",product_chn_id);
  1592. log_i("channel status request:listDyTotalQuery");
  1593. log_d("productChId:%d",_over_chn_pwr_request.productChId);
  1594. log_d("start_time:%s",_over_chn_pwr_request.start_time);
  1595. log_d("end_time:%s",_over_chn_pwr_request.end_time);
  1596. log_d("lType:%s",_over_chn_pwr_request.lType);
  1597. log_d("type:%s",_over_chn_pwr_request.type);
  1598. log_d("user_token:%s",_over_chn_pwr_request.user_token);
  1599. */
  1600. //ack_str = ctrl_sts_ack_to_json();
  1601. //申请电压统计信息参数
  1602. GlobalPowerInfo __globalPowerInfo;
  1603. //清0
  1604. memset(&__globalPowerInfo,0,sizeof(GlobalPowerInfo));
  1605. //查询数据库通道电源信息 传给所申请的参数结构体
  1606. if (_over_chn_pwr_request.lType && (strcmp(_over_chn_pwr_request.lType,"L1")==0 || strcmp(_over_chn_pwr_request.lType,"L2")==0 || strcmp(_over_chn_pwr_request.lType,"L3")==0))
  1607. {
  1608. int ph_id=-1;
  1609. if (strcmp(_over_chn_pwr_request.lType,"L1")==0)
  1610. {
  1611. ph_id=0;
  1612. }
  1613. else if (strcmp(_over_chn_pwr_request.lType,"L2")==0 )
  1614. {
  1615. ph_id=1;
  1616. }
  1617. else if(strcmp(_over_chn_pwr_request.lType,"L3")==0 )
  1618. {
  1619. ph_id=2;
  1620. }
  1621. // 查询数据库总电源信息 传给所申请的参数结构体
  1622. if (dev_search_time_t_ac_power_info(__globalDeviceManage.db, _over_chn_pwr_request.product_id, product_chn_id, ph_id, TOTAL_VOLTAGE_TYPE, &__globalPowerInfo, _over_chn_pwr_request.start_time, _over_chn_pwr_request.end_time) != 0)
  1623. {
  1624. log_e("serach total power voltage err.");
  1625. }
  1626. //else
  1627. {
  1628. // 传值给总管理结构体
  1629. for (int i = 0; i < TOTAL_COUNT; i++)
  1630. {
  1631. strcpy(pch->_total_voltage.xAxis[i], __globalPowerInfo._total_voltage.xAxis[i]);
  1632. pch->_total_voltage.ydata[i] = __globalPowerInfo._total_voltage.ydata[i];
  1633. }
  1634. // 返回电压统计
  1635. ack_str = over_all_total_info_to_json(pch, TOTAL_VOLTAGE_TYPE);
  1636. }
  1637. }
  1638. else
  1639. {
  1640. if (dev_search_time_power_info(__globalDeviceManage.db, _over_chn_pwr_request.product_id, product_chn_id, TOTAL_VOLTAGE_TYPE, &__globalPowerInfo, _over_chn_pwr_request.start_time, _over_chn_pwr_request.end_time) != 0)
  1641. {
  1642. log_e("serach total voltage err.");
  1643. }
  1644. //else
  1645. {
  1646. // 传值给总管理结构体
  1647. for (int i = 0; i < TOTAL_COUNT; i++)
  1648. {
  1649. strcpy(pch->_total_voltage.xAxis[i], __globalPowerInfo._total_voltage.xAxis[i]);
  1650. pch->_total_voltage.ydata[i] = __globalPowerInfo._total_voltage.ydata[i];
  1651. }
  1652. // 返回电压统计
  1653. ack_str = over_all_total_info_to_json(pch, TOTAL_VOLTAGE_TYPE);
  1654. }
  1655. }
  1656. }
  1657. //电流统计
  1658. else if(strcmp(_over_chn_pwr_request.type,"listDlTotalQuery")==0)
  1659. {
  1660. #if DBUG_INFO
  1661. log_i("over all request: listDlTotalQuery\n");
  1662. #endif
  1663. int product_chn_id = 0 ;
  1664. log_i("channel status request:listDlTotalQuery");
  1665. product_chn_id = _over_chn_pwr_request.productChId;
  1666. log_d("productChId:%d",product_chn_id);
  1667. //申请电流统计信息参数
  1668. GlobalPowerInfo __globalPowerInfo;
  1669. //清0
  1670. memset(&__globalPowerInfo,0,sizeof(GlobalPowerInfo));
  1671. //查询数据库通道电源信息 传给所申请的参数结构体
  1672. if (_over_chn_pwr_request.lType && (strcmp(_over_chn_pwr_request.lType,"L1")==0 || strcmp(_over_chn_pwr_request.lType,"L2")==0 || strcmp(_over_chn_pwr_request.lType,"L3")==0))
  1673. {
  1674. int ph_id=-1;
  1675. if (strcmp(_over_chn_pwr_request.lType,"L1")==0)
  1676. {
  1677. ph_id=0;
  1678. }
  1679. else if (strcmp(_over_chn_pwr_request.lType,"L2")==0 )
  1680. {
  1681. ph_id=1;
  1682. }
  1683. else if(strcmp(_over_chn_pwr_request.lType,"L3")==0 )
  1684. {
  1685. ph_id=2;
  1686. }
  1687. // 查询数据库总电源信息 传给所申请的参数结构体
  1688. if (dev_search_time_t_ac_power_info(__globalDeviceManage.db, _over_chn_pwr_request.product_id, product_chn_id, ph_id, TOTAL_CURRENT_TYPE, &__globalPowerInfo, _over_chn_pwr_request.start_time, _over_chn_pwr_request.end_time) != 0)
  1689. {
  1690. log_e("serach total power current err.");
  1691. }
  1692. //else
  1693. {
  1694. // 传值给总管理结构体
  1695. for (int i = 0; i < TOTAL_COUNT; i++)
  1696. {
  1697. strcpy(pch->_total_current.xAxis[i], __globalPowerInfo._total_current.xAxis[i]);
  1698. pch->_total_current.ydata[i] = __globalPowerInfo._total_current.ydata[i];
  1699. }
  1700. // 返回电流统计
  1701. ack_str = over_all_total_info_to_json(pch, TOTAL_CURRENT_TYPE);
  1702. }
  1703. }
  1704. else
  1705. {
  1706. // 查询数据库总电源信息 传给所申请的参数结构体
  1707. if (dev_search_time_power_info(__globalDeviceManage.db, _over_chn_pwr_request.product_id, product_chn_id, TOTAL_CURRENT_TYPE, &__globalPowerInfo, _over_chn_pwr_request.start_time, _over_chn_pwr_request.end_time) != 0)
  1708. {
  1709. log_e("serach total current err.");
  1710. }
  1711. //else
  1712. {
  1713. // 传值给总管理结构体
  1714. for (int i = 0; i < TOTAL_COUNT; i++)
  1715. {
  1716. strcpy(pch->_total_current.xAxis[i], __globalPowerInfo._total_current.xAxis[i]);
  1717. pch->_total_current.ydata[i] = __globalPowerInfo._total_current.ydata[i];
  1718. }
  1719. // 返回电流统计
  1720. ack_str = over_all_total_info_to_json(pch, TOTAL_CURRENT_TYPE);
  1721. }
  1722. }
  1723. }
  1724. //功率统计
  1725. else if(strcmp(_over_chn_pwr_request.type,"listGlTotalQuery")==0)
  1726. {
  1727. #if DBUG_INFO
  1728. log_i("over all request: listGlTotalQuery\n");
  1729. #endif
  1730. int product_chn_id = 0 ;
  1731. log_i("channel status request:listGlTotalQuery");
  1732. product_chn_id = _over_chn_pwr_request.productChId;
  1733. log_d("productChId:%d",product_chn_id);
  1734. //申请功率统计信息参数
  1735. GlobalPowerInfo __globalPowerInfo;
  1736. //清0
  1737. memset(&__globalPowerInfo,0,sizeof(GlobalPowerInfo));
  1738. //查询数据库通道电源信息 传给所申请的参数结构体
  1739. if (_over_chn_pwr_request.lType && (strcmp(_over_chn_pwr_request.lType,"L1")==0 || strcmp(_over_chn_pwr_request.lType,"L2")==0 || strcmp(_over_chn_pwr_request.lType,"L3")==0))
  1740. {
  1741. int ph_id=-1;
  1742. if (strcmp(_over_chn_pwr_request.lType,"L1")==0)
  1743. {
  1744. ph_id=0;
  1745. }
  1746. else if (strcmp(_over_chn_pwr_request.lType,"L2")==0 )
  1747. {
  1748. ph_id=1;
  1749. }
  1750. else if(strcmp(_over_chn_pwr_request.lType,"L3")==0 )
  1751. {
  1752. ph_id=2;
  1753. }
  1754. // 查询数据库总电源信息 传给所申请的参数结构体
  1755. if (dev_search_time_t_ac_power_info(__globalDeviceManage.db, _over_chn_pwr_request.product_id, product_chn_id, ph_id, TOTAL_POWER_TYPE, &__globalPowerInfo, _over_chn_pwr_request.start_time, _over_chn_pwr_request.end_time) != 0)
  1756. {
  1757. log_e("serach total power err.");
  1758. }
  1759. //else
  1760. {
  1761. // 传值给总管理结构体
  1762. for (int i = 0; i < TOTAL_COUNT; i++)
  1763. {
  1764. strcpy(pch->_total_power.xAxis[i], __globalPowerInfo._total_power.xAxis[i]);
  1765. pch->_total_power.ydata[i] = __globalPowerInfo._total_power.ydata[i];
  1766. }
  1767. // 返回功率统计
  1768. ack_str = over_all_total_info_to_json(pch, TOTAL_POWER_TYPE);
  1769. }
  1770. }
  1771. else
  1772. {
  1773. // 查询数据库总电源信息 传给所申请的参数结构体
  1774. if (dev_search_time_power_info(__globalDeviceManage.db, _over_chn_pwr_request.product_id, product_chn_id, TOTAL_POWER_TYPE, &__globalPowerInfo, _over_chn_pwr_request.start_time, _over_chn_pwr_request.end_time) != 0)
  1775. {
  1776. log_e("serach total power err.");
  1777. }
  1778. //else
  1779. {
  1780. // 传值给总管理结构体
  1781. for (int i = 0; i < TOTAL_COUNT; i++)
  1782. {
  1783. strcpy(pch->_total_power.xAxis[i], __globalPowerInfo._total_power.xAxis[i]);
  1784. pch->_total_power.ydata[i] = __globalPowerInfo._total_power.ydata[i];
  1785. }
  1786. // 返回功率统计
  1787. ack_str = over_all_total_info_to_json(pch, TOTAL_POWER_TYPE);
  1788. }
  1789. }
  1790. }
  1791. //耗电量统计
  1792. else if(strcmp(_over_chn_pwr_request.type,"listHdlTotalQuery")==0)
  1793. {
  1794. #if DBUG_INFO
  1795. log_i("over all request: listHdlTotalQuery\n");
  1796. #endif
  1797. int product_chn_id = 0 ;
  1798. log_i("channel status request:listHdlTotalQuery");
  1799. product_chn_id = _over_chn_pwr_request.productChId;
  1800. log_d("productChId:%d",product_chn_id);
  1801. //申请耗电量统计信息参数
  1802. GlobalPowerInfo __globalPowerInfo;
  1803. //清0
  1804. memset(&__globalPowerInfo,0,sizeof(GlobalPowerInfo));
  1805. //查询数据库通道电源信息 传给所申请的参数结构体
  1806. if (_over_chn_pwr_request.lType && (strcmp(_over_chn_pwr_request.lType,"L1")==0 || strcmp(_over_chn_pwr_request.lType,"L2")==0 || strcmp(_over_chn_pwr_request.lType,"L3")==0))
  1807. {
  1808. int ph_id=-1;
  1809. if (strcmp(_over_chn_pwr_request.lType,"L1")==0)
  1810. {
  1811. ph_id=0;
  1812. }
  1813. else if (strcmp(_over_chn_pwr_request.lType,"L2")==0 )
  1814. {
  1815. ph_id=1;
  1816. }
  1817. else if(strcmp(_over_chn_pwr_request.lType,"L3")==0 )
  1818. {
  1819. ph_id=2;
  1820. }
  1821. // 查询数据库总电源信息 传给所申请的参数结构体
  1822. if (dev_search_time_t_ac_power_info(__globalDeviceManage.db, _over_chn_pwr_request.product_id, product_chn_id, ph_id, TOTAL_POWER_CONS_TYPE, &__globalPowerInfo, _over_chn_pwr_request.start_time, _over_chn_pwr_request.end_time) != 0)
  1823. {
  1824. log_e("serach total power err.");
  1825. }
  1826. //else
  1827. {
  1828. for (int i = 0; i < TOTAL_COUNT; i++)
  1829. {
  1830. strcpy(pch->_total_consumption.xAxis[i], __globalPowerInfo._total_consumption.xAxis[i]);
  1831. pch->_total_consumption.ydata[i] = __globalPowerInfo._total_consumption.ydata[i];
  1832. }
  1833. // 返回耗电量统计
  1834. ack_str = over_all_total_info_to_json(pch, TOTAL_POWER_CONS_TYPE);
  1835. }
  1836. }
  1837. else
  1838. {
  1839. // 查询数据库总电源信息 传给所申请的参数结构体
  1840. if (dev_search_time_power_info(__globalDeviceManage.db, _over_chn_pwr_request.product_id, product_chn_id, TOTAL_POWER_CONS_TYPE, &__globalPowerInfo, _over_chn_pwr_request.start_time, _over_chn_pwr_request.end_time) != 0)
  1841. {
  1842. log_e("serach total power consumption err.");
  1843. }
  1844. //else
  1845. {
  1846. // 传值给总管理结构体
  1847. for (int i = 0; i < TOTAL_COUNT; i++)
  1848. {
  1849. strcpy(pch->_total_consumption.xAxis[i], __globalPowerInfo._total_consumption.xAxis[i]);
  1850. pch->_total_consumption.ydata[i] = __globalPowerInfo._total_consumption.ydata[i];
  1851. }
  1852. // 返回耗电量统计
  1853. ack_str = over_all_total_info_to_json(pch, TOTAL_POWER_CONS_TYPE);
  1854. }
  1855. }
  1856. }
  1857. else if(strcmp(_over_chn_pwr_request.type,"threeTypeSave")==0)
  1858. {
  1859. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  1860. if(cur_dev_addr>0) {
  1861. cmd.cmd = CASCADE_CMD_SAVE3;
  1862. cmd.obj = OBJ_CHANNEL;
  1863. cmd.chId = _over_chn_pwr_request.productChId;
  1864. cascade_request(&cmd);
  1865. goto quit;
  1866. }
  1867. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  1868. {
  1869. if (_over_chn_pwr_request.productChId == _globalPowerMangerTemp->product_ch_id)
  1870. {
  1871. break;
  1872. }
  1873. }
  1874. if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One
  1875. ||__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B)
  1876. {
  1877. if (_over_chn_pwr_request.outputType == 1)
  1878. {
  1879. http_reply(conn, 201, ack_str);
  1880. cJSON_free((void *)ack_str);
  1881. return;
  1882. }
  1883. }
  1884. if (_globalPowerMangerTemp != NULL)
  1885. {
  1886. GlobalTreeACManager *_globalTACManager = NULL;
  1887. list_for_each_entry(_globalTACManager, &_globalPowerMangerTemp->list_Tree_AC, list_Tree_AC)
  1888. {
  1889. if (_over_chn_pwr_request.outputType == 2)
  1890. {
  1891. if (strcmp(g_product_t_ac_type_str[_globalTACManager->product_ph_type], _over_chn_pwr_request.productPhOrder) == 0)
  1892. {
  1893. _globalTACManager->product_ph_outputStatus = 1;
  1894. }
  1895. else
  1896. {
  1897. _globalTACManager->product_ph_outputStatus = 2;
  1898. }
  1899. }
  1900. else
  1901. {
  1902. _globalTACManager->product_ph_outputStatus = 1;
  1903. }
  1904. _globalTACManager->product_ph_outputType=_over_chn_pwr_request.outputType;
  1905. if (dev_update_t_ac_power_manage_info(__globalDeviceManage.db, _globalTACManager) != 0)
  1906. {
  1907. log_e("update pwr general data err.");
  1908. }
  1909. }
  1910. }
  1911. }
  1912. else if (strcmp(_over_chn_pwr_request.type, "batteryReset") == 0) // 耗电量复位
  1913. {
  1914. //GlobalPowerManger *_globalPowerMangerTemp = NULL;
  1915. //char *pCHlist;
  1916. //char *pCHListSave;
  1917. //pCHlist = strtok_r(_over_chn_pwr_request.strProductChIds, ",", &pCHListSave);
  1918. char temp[200];
  1919. int product_ch_id = atoi(_over_chn_pwr_request.strProductChIds);
  1920. int saddr = 0;
  1921. if(product_ch_id == 1){
  1922. //__globalDeviceManage._RS485LowConfData = hlw8110_Reset(__globalDeviceManage._RS485LowConfData);
  1923. __globalDeviceManage._globalDevInfo.consumer = 0.0;
  1924. sprintf(temp,"batterry Reset!!");
  1925. dev_insert_alarm_ctrl(__globalDeviceManage.db,__globalDeviceManage._globalDevInfo.product_id, 3, temp);
  1926. }
  1927. else
  1928. {
  1929. GlobalPowerManger *_temp;
  1930. list_for_each_entry(_temp, &__globalDeviceManage._globalPowerManger.list, list)
  1931. {
  1932. if(_temp->product_ch_id == product_ch_id)
  1933. {
  1934. saddr = _temp->product_id;
  1935. }
  1936. }
  1937. if(saddr){
  1938. sprintf(temp,"batterry Reset cascade address %d!!",saddr);
  1939. cmd_data_t cmd = {0};
  1940. dev_insert_alarm_ctrl(__globalDeviceManage.db,_over_chn_pwr_request.productChId, 3, temp);
  1941. cmd.cmd = CASCADE_CMD_CLEAR_CONSUMER;
  1942. cmd.obj = OBJ_CHANNEL;
  1943. cmd.chId = 0;
  1944. cascade_request_saddr(&cmd,saddr,0);
  1945. }
  1946. }
  1947. // 其他版本功能
  1948. // while (pCHlist != NULL)
  1949. // {
  1950. // int g_pwr_ch_id = atoi(pCHlist);
  1951. // _globalPowerMangerTemp=NULL;
  1952. // list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  1953. // {
  1954. // if (_over_chn_pwr_request.productChId == g_pwr_ch_id)
  1955. // {
  1956. // break;
  1957. // }
  1958. // }
  1959. // if (_globalPowerMangerTemp != NULL)
  1960. // {
  1961. // if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One
  1962. // ||__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B|| __globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree)
  1963. // {
  1964. // GlobalTreeACManager *_globalTACManager = NULL;
  1965. // list_for_each_entry(_globalTACManager, &_globalPowerMangerTemp->list_Tree_AC, list_Tree_AC)
  1966. // {
  1967. // if (g_switch_set_t_ac_phchn_reset(&__globalDeviceManage._globalRelaySampManger, _globalTACManager->product_saddr, _globalTACManager->product_ch_addr) < 0)
  1968. // {
  1969. // log_e("Error: phchn_reset");
  1970. // }
  1971. // }
  1972. // }
  1973. // }
  1974. // pCHlist = strtok_r(NULL, ",", &pCHListSave);
  1975. // }
  1976. }
  1977. quit:
  1978. cJSON_Delete(cjson);
  1979. http_reply(conn, 200, ack_str);
  1980. cJSON_free((void*)ack_str);
  1981. }
  1982. /// @brief 传感器状态请求应答
  1983. /// @param stream
  1984. static void sensorStatusMonitoring(void* conn)
  1985. {
  1986. int ret = -1 ;
  1987. cJSON *cjson;
  1988. _OverSensorRequest _over_all_sensor_request;
  1989. _OverSensorBackInfo _over_all_sensor_back_info;
  1990. GlobalSensorManger _globalSensorMangerTemp ;
  1991. GlobalSensorInfo _globalSensorInfo;
  1992. char* ack_str = NULL ;
  1993. mg_stream_t *s=(mg_stream_t*)conn;
  1994. struct mg_http_message *hm=s->ev_data;
  1995. char *rx_body_buf=(char*)hm->body.buf;
  1996. //转换json参数
  1997. cjson = json_to_sensor_manage(rx_body_buf,&_over_all_sensor_request);
  1998. if(cjson==NULL)
  1999. {
  2000. http_reply(conn, 400, NULL);
  2001. return ;
  2002. }
  2003. //查询json参数
  2004. if(strcmp(_over_all_sensor_request.type,"listQuery")==0)
  2005. {
  2006. log_d("start listQuery handle.");
  2007. #if(1)
  2008. //链表初始化
  2009. pthread_mutex_lock(&__globalDeviceManage._sensor_update);
  2010. INIT_LIST_HEAD(&_over_all_sensor_back_info.list);
  2011. //获取传感器当前的最新值
  2012. GlobalSensorManger* _globalSensorManagerTemp = NULL;
  2013. list_for_each_entry(_globalSensorManagerTemp, &__globalDeviceManage._globalSensorManger.list, list)
  2014. {
  2015. _OverSensorBackInfo* _overSensorBackInfoTemp = (_OverSensorBackInfo*)malloc(sizeof(_OverSensorBackInfo));
  2016. if(_overSensorBackInfoTemp==NULL)
  2017. log_e("_OverSensorBackInfo malloc error.");
  2018. memset(_overSensorBackInfoTemp,0,sizeof(_OverSensorBackInfo));
  2019. //基本信息
  2020. _overSensorBackInfoTemp->sensorId = _globalSensorManagerTemp->sensor_id;
  2021. memcpy(&_overSensorBackInfoTemp->sensorName,&_globalSensorManagerTemp->sensor_name,sizeof(_overSensorBackInfoTemp->sensorName));
  2022. //strcpy(_overSensorBackInfoTemp->sensorName,_globalSensorManagerTemp->sensor_name);
  2023. _overSensorBackInfoTemp->sensorType = _globalSensorManagerTemp->sensor_type;
  2024. memcpy(&_overSensorBackInfoTemp->comSlogan,&_globalSensorManagerTemp->sensor_port_name,sizeof(_overSensorBackInfoTemp->comSlogan));
  2025. //strcpy(_overSensorBackInfoTemp->comSlogan,_globalSensorManagerTemp->sensor_port_name);
  2026. //485独有
  2027. _overSensorBackInfoTemp->connectionStatus = _globalSensorManagerTemp->sensor_status;
  2028. _overSensorBackInfoTemp->nodeNumber = __globalDeviceManage._globalSensorManger.sensor_node_number;
  2029. if(_globalSensorManagerTemp->sensor_interface_type==1)
  2030. {
  2031. _overSensorBackInfoTemp->sensorAddr = _globalSensorManagerTemp->sensor_addr ;
  2032. _overSensorBackInfoTemp->sensorBaud = _globalSensorManagerTemp->sensor_baud;
  2033. strcpy(_overSensorBackInfoTemp->sensorvaluech,"RS485");
  2034. }
  2035. else
  2036. {
  2037. //_overSensorBackInfoTemp->connectionStatus = -1;
  2038. strcpy(_overSensorBackInfoTemp->sensorvaluech,_overSensorBackInfoTemp->comSlogan);
  2039. _overSensorBackInfoTemp->nodeNumber =_globalSensorManagerTemp->sensor_addr;
  2040. }
  2041. //拿数据
  2042. memset(&_globalSensorInfo, 0, sizeof(_globalSensorInfo));
  2043. switch(_globalSensorManagerTemp->sensor_type)
  2044. {
  2045. case 0://温湿度传感器 2个值
  2046. {
  2047. _overSensorBackInfoTemp->temperatureValue = _globalSensorManagerTemp->Cur_sensor_info.val1;
  2048. _overSensorBackInfoTemp->humidityValue =_globalSensorManagerTemp->Cur_sensor_info.val2;
  2049. }break;
  2050. case 1://烟雾传感器 1个值
  2051. {
  2052. _overSensorBackInfoTemp->alarmStatus = ! (bool) _globalSensorManagerTemp->Cur_sensor_info.val1; // 1/0 报警未报警
  2053. }break;
  2054. case 2://水浸传感器 1个值 c
  2055. {
  2056. _overSensorBackInfoTemp->waterImmersionState = !(bool)_globalSensorManagerTemp->Cur_sensor_info.val1; // 1/0 报警未报警
  2057. }break;
  2058. case 3://门禁传感器
  2059. {
  2060. _overSensorBackInfoTemp->accessControlStatus = !(bool)_globalSensorManagerTemp->Cur_sensor_info.val1; // 1/0 报警未报警
  2061. }break;
  2062. case 4: //气体传感器 1个值
  2063. {
  2064. _overSensorBackInfoTemp->gasConcentration = _globalSensorManagerTemp->Cur_sensor_info.val1; // 气体浓度
  2065. }break;
  2066. case 5://气压气流传感器 2个值
  2067. {
  2068. _overSensorBackInfoTemp->airPressureValue = _globalSensorManagerTemp->Cur_sensor_info.val1; // 气压
  2069. _overSensorBackInfoTemp->airflowValue = _globalSensorManagerTemp->Cur_sensor_info.val2; // 气流
  2070. };break;
  2071. case 6://空调遥控器 没有值
  2072. {
  2073. }break;
  2074. }
  2075. //入队
  2076. list_add_tail(&_overSensorBackInfoTemp->list,&_over_all_sensor_back_info.list);
  2077. }
  2078. pthread_mutex_unlock(&__globalDeviceManage._sensor_update);
  2079. //参数转换json
  2080. ack_str = over_all_sensor_info_to_json(&_over_all_sensor_back_info,0);
  2081. //释放资源
  2082. _OverSensorBackInfo* node;
  2083. _OverSensorBackInfo* next;
  2084. list_for_each_entry_safe(node, next, &_over_all_sensor_back_info.list, list)
  2085. {
  2086. list_del(&node->list);
  2087. free(node);
  2088. }
  2089. #endif
  2090. }
  2091. //删除传感器
  2092. else if(strcmp(_over_all_sensor_request.type,"delete")==0)
  2093. {
  2094. log_d("start delete handle.");
  2095. int sensor_id_temp = _over_all_sensor_request.sensorId;
  2096. if(dev_delete_sensor_manage(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id,sensor_id_temp)!=0)
  2097. {
  2098. log_e("sensor delete failed.");
  2099. }
  2100. else
  2101. {
  2102. // 维护列表也需要删除
  2103. pthread_mutex_lock(&__globalDeviceManage._sensor_update);
  2104. GlobalSensorManger *node;
  2105. GlobalSensorManger *next;
  2106. list_for_each_entry_safe(node, next, &__globalDeviceManage._globalSensorManger.list, list)
  2107. {
  2108. if (node->sensor_id == sensor_id_temp)
  2109. {
  2110. list_del(&node->list);
  2111. free(node);
  2112. break;
  2113. }
  2114. }
  2115. pthread_mutex_unlock(&__globalDeviceManage._sensor_update);
  2116. }
  2117. char temp[100];
  2118. //sprintf(temp,"$删除$|$传感器$|%d",sensor_id_temp);
  2119. sprintf(temp,"Delete sensor %d",sensor_id_temp);
  2120. dev_insert_alarm_ctrl(__globalDeviceManage.db,__globalDeviceManage._globalDevInfo.product_id, 3, temp);
  2121. ack_str = ctrl_sts_ack_to_json();
  2122. }
  2123. //更新传感器
  2124. else if(strcmp(_over_all_sensor_request.type,"update")==0)
  2125. {
  2126. log_d("start update handle.");
  2127. int sensor_id_temp = _over_all_sensor_request.sensorId;
  2128. GlobalSensorManger *node = NULL;
  2129. GlobalSensorManger *next = NULL;
  2130. list_for_each_entry_safe(node, next, &__globalDeviceManage._globalSensorManger.list, list)
  2131. {
  2132. if (node->sensor_id == sensor_id_temp)
  2133. {
  2134. break;
  2135. }
  2136. }
  2137. if (node)
  2138. {
  2139. #if (1)
  2140. GlobalSensorManger *_globalSensorMangerTemp = node;
  2141. // 填充数据
  2142. _globalSensorMangerTemp->sensor_type = strtol(_over_all_sensor_request.sensorType, NULL, 10);
  2143. if (_over_all_sensor_request.sensorName)
  2144. {
  2145. int nSize=strlen(_over_all_sensor_request.sensorName);
  2146. if (nSize<=64)
  2147. {
  2148. strcpy(_globalSensorMangerTemp->sensor_name, _over_all_sensor_request.sensorName);
  2149. }
  2150. else{
  2151. //响应
  2152. //stream->errorMsg="Edit Name Too Long";
  2153. http_reply(conn, 500, ack_str);
  2154. //释放资源
  2155. cJSON_free((void*)ack_str);
  2156. return ;
  2157. }
  2158. }
  2159. if(_over_all_sensor_request.cgqtd)
  2160. {
  2161. if (strcmp(_over_all_sensor_request.cgqtd, "RS485") == 0)
  2162. {
  2163. _globalSensorMangerTemp->sensor_interface_type = 1;
  2164. if (_over_all_sensor_request.sensorAddr)
  2165. {
  2166. _globalSensorMangerTemp->sensor_addr = strtol(_over_all_sensor_request.sensorAddr,NULL,10);
  2167. }
  2168. //前端未传com口信息,暂且不改
  2169. //if (_over_all_sensor_request.comSlogan)
  2170. // {
  2171. // strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.comSlogan);
  2172. // }
  2173. }
  2174. else if (strcmp(_over_all_sensor_request.cgqtd, "IN3") == 0)
  2175. {
  2176. _globalSensorMangerTemp->sensor_interface_type = 2;
  2177. _globalSensorMangerTemp->sensor_addr = 3;
  2178. strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.cgqtd);
  2179. }
  2180. else if (strcmp(_over_all_sensor_request.cgqtd, "IN4") == 0)
  2181. {
  2182. _globalSensorMangerTemp->sensor_interface_type = 2;
  2183. _globalSensorMangerTemp->sensor_addr = 2;
  2184. strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.cgqtd);
  2185. }
  2186. else if (strcmp(_over_all_sensor_request.cgqtd, "IN2") == 0)
  2187. {
  2188. _globalSensorMangerTemp->sensor_interface_type = 2;
  2189. _globalSensorMangerTemp->sensor_addr = 1;
  2190. strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.cgqtd);
  2191. }
  2192. else if (strcmp(_over_all_sensor_request.cgqtd, "IN1") == 0)
  2193. {
  2194. _globalSensorMangerTemp->sensor_interface_type = 2;
  2195. _globalSensorMangerTemp->sensor_addr = 0;
  2196. strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.cgqtd);
  2197. }
  2198. }
  2199. //_globalSensorMangerTemp->sensor_baud = strtol(_over_all_sensor_request.sensorBaud, NULL, 10);
  2200. //_globalSensorMangerTemp->sensor_addr = strtol(_over_all_sensor_request.sensorAddr, NULL, 10);
  2201. //_globalSensorMangerTemp->sensor_status = 0;
  2202. switch (_globalSensorMangerTemp->sensor_type)
  2203. {
  2204. case 0:
  2205. _globalSensorMangerTemp->sensor_val_count = 2;
  2206. break; // 温湿度传感器 2个值
  2207. case 1:
  2208. _globalSensorMangerTemp->sensor_val_count = 1;
  2209. break; // 烟雾传感器 1个值
  2210. case 2:
  2211. _globalSensorMangerTemp->sensor_val_count = 1;
  2212. break; // 水浸传感器 1个值
  2213. case 3:
  2214. _globalSensorMangerTemp->sensor_val_count = 1;
  2215. break; // 门禁传感器 没有值
  2216. case 4:
  2217. _globalSensorMangerTemp->sensor_val_count = 1;
  2218. break; // 气体传感器 1个值
  2219. case 5:
  2220. _globalSensorMangerTemp->sensor_val_count = 2;
  2221. break; // 气压气流传感器 2个值
  2222. case 6:
  2223. _globalSensorMangerTemp->sensor_val_count = 0;
  2224. break; // 空调遥控器 没有值
  2225. }
  2226. // 插入数据库
  2227. if (dev_update_sensor_genera_manage(__globalDeviceManage.db,
  2228. __globalDeviceManage._globalDevInfo.product_id,
  2229. _globalSensorMangerTemp->sensor_id,
  2230. _globalSensorMangerTemp) != 0)
  2231. {
  2232. log_e("dev update error.");
  2233. }
  2234. #endif
  2235. }
  2236. char temp[100];
  2237. // sprintf(temp,"$修改$|$传感器$|%d",sensor_id_temp);
  2238. sprintf(temp,"Update sensor %d",sensor_id_temp);
  2239. dev_insert_alarm_ctrl(__globalDeviceManage.db,__globalDeviceManage._globalDevInfo.product_id, 3, temp);
  2240. ack_str = ctrl_sts_ack_to_json();
  2241. }
  2242. //添加传感器
  2243. else if(strcmp(_over_all_sensor_request.type,"add")==0) //正常跑过
  2244. {
  2245. log_d("start add handle.");
  2246. int wrong_param=0;
  2247. GlobalSensorManger* _globalSensorMangerTemp = (GlobalSensorManger*)malloc(sizeof(GlobalSensorManger));
  2248. //清空数据
  2249. memset(_globalSensorMangerTemp, 0, sizeof(GlobalSensorManger));
  2250. //填充数据
  2251. _globalSensorMangerTemp->product_id = __globalDeviceManage._globalDevInfo.product_id ;
  2252. _globalSensorMangerTemp->sensor_id = _over_all_sensor_request.sensorId;
  2253. strcpy( _globalSensorMangerTemp->sensor_name,_over_all_sensor_request.sensorName);
  2254. if(_over_all_sensor_request.sensorType && strlen(_over_all_sensor_request.sensorType)) {
  2255. _globalSensorMangerTemp->sensor_type = strtol(_over_all_sensor_request.sensorType,NULL,10);
  2256. }
  2257. else {
  2258. wrong_param = 1;
  2259. }
  2260. if (_over_all_sensor_request.cgqtd)
  2261. {
  2262. if (strcmp(_over_all_sensor_request.cgqtd, "RS485") == 0)
  2263. {
  2264. _globalSensorMangerTemp->sensor_interface_type = 1;
  2265. if (_over_all_sensor_request.sensorAddr)
  2266. {
  2267. _globalSensorMangerTemp->sensor_addr = strtol(_over_all_sensor_request.sensorAddr, NULL, 10);
  2268. }
  2269. // if (_over_all_sensor_request.sensorBaud && strlen(_over_all_sensor_request.sensorBaud))
  2270. // {
  2271. _globalSensorMangerTemp->sensor_baud = 9600; // strtol(_over_all_sensor_request.sensorBaud,NULL,10);//默认9600
  2272. // }
  2273. // 前端未传com口信息,暂且不改
  2274. // if (_over_all_sensor_request.comSlogan)
  2275. // {
  2276. strcpy(_globalSensorMangerTemp->sensor_port_name, "COM");
  2277. // }
  2278. }
  2279. else if (strcmp(_over_all_sensor_request.cgqtd, "IN3") == 0)
  2280. {
  2281. _globalSensorMangerTemp->sensor_interface_type = 2;
  2282. _globalSensorMangerTemp->sensor_addr = 3;
  2283. strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.cgqtd);
  2284. _globalSensorMangerTemp->sensor_baud = 0;
  2285. }
  2286. else if (strcmp(_over_all_sensor_request.cgqtd, "IN4") == 0)
  2287. {
  2288. _globalSensorMangerTemp->sensor_interface_type = 2;
  2289. _globalSensorMangerTemp->sensor_addr = 2;
  2290. strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.cgqtd);
  2291. _globalSensorMangerTemp->sensor_baud = 0;
  2292. }
  2293. else if (strcmp(_over_all_sensor_request.cgqtd, "IN2") == 0)
  2294. {
  2295. _globalSensorMangerTemp->sensor_interface_type = 2;
  2296. _globalSensorMangerTemp->sensor_addr = 1;
  2297. strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.cgqtd);
  2298. _globalSensorMangerTemp->sensor_baud = 0;
  2299. }
  2300. else if (strcmp(_over_all_sensor_request.cgqtd, "IN1") == 0)
  2301. {
  2302. _globalSensorMangerTemp->sensor_interface_type = 2;
  2303. _globalSensorMangerTemp->sensor_addr = 0;
  2304. strcpy(_globalSensorMangerTemp->sensor_port_name, _over_all_sensor_request.cgqtd);
  2305. _globalSensorMangerTemp->sensor_baud = 0;
  2306. }
  2307. }
  2308. else
  2309. {
  2310. wrong_param = 1;
  2311. }
  2312. _globalSensorMangerTemp->over_manager = (GlobalSensorOverManage*)malloc(sizeof(GlobalSensorOverManage));
  2313. if (! _globalSensorMangerTemp->over_manager)
  2314. {
  2315. wrong_param = 1;
  2316. }
  2317. if(wrong_param) {
  2318. cJSON_Delete(cjson);
  2319. http_reply(conn, 400, NULL);
  2320. return ;
  2321. }
  2322. memset(_globalSensorMangerTemp->over_manager, 0, sizeof(GlobalSensorOverManage));
  2323. _globalSensorMangerTemp->sensor_status = 0;
  2324. switch( _globalSensorMangerTemp->sensor_type)
  2325. {
  2326. case 0:_globalSensorMangerTemp->sensor_val_count = 2 ;break; //温湿度传感器 2个值
  2327. case 1:_globalSensorMangerTemp->sensor_val_count = 1 ;break; //烟雾传感器 1个值
  2328. case 2:_globalSensorMangerTemp->sensor_val_count = 1 ;break; //水浸传感器 1个值
  2329. case 3:_globalSensorMangerTemp->sensor_val_count = 1 ;break; //门禁传感器 没有值
  2330. case 4:_globalSensorMangerTemp->sensor_val_count = 1 ;break; //气体传感器 1个值
  2331. case 5:_globalSensorMangerTemp->sensor_val_count = 2 ;break; //气压气流传感器 2个值
  2332. case 6:_globalSensorMangerTemp->sensor_val_count = 0 ;break; //空调遥控器 没有值
  2333. }
  2334. //插入数据库
  2335. if(dev_insert_sensor_genera_manage(__globalDeviceManage.db,_globalSensorMangerTemp)!=0)
  2336. {
  2337. log_e("dev insert error.");
  2338. }
  2339. //全局接口体中也需要添加相关参数
  2340. pthread_mutex_lock(&__globalDeviceManage._sensor_update);
  2341. list_add_tail(&_globalSensorMangerTemp->list,&__globalDeviceManage._globalSensorManger.list);
  2342. pthread_mutex_unlock(&__globalDeviceManage._sensor_update);
  2343. char temp[100];
  2344. // sprintf(temp,"$新增$|$传感器$|%d",_over_all_sensor_request.sensorId);
  2345. sprintf(temp,"Add sensor %d",_over_all_sensor_request.sensorId);
  2346. dev_insert_alarm_ctrl(__globalDeviceManage.db,__globalDeviceManage._globalDevInfo.product_id, 3, temp);
  2347. ack_str = ctrl_sts_ack_to_json();
  2348. }
  2349. //烟雾报警复位
  2350. else if(strcmp(_over_all_sensor_request.type,"reset")==0)
  2351. {
  2352. ack_str = ctrl_sts_ack_to_json();
  2353. }
  2354. //门禁释放
  2355. else if(strcmp(_over_all_sensor_request.type,"release")==0)
  2356. {
  2357. ack_str = ctrl_sts_ack_to_json();
  2358. }
  2359. //打开空调开关
  2360. else if(strcmp(_over_all_sensor_request.type,"open")==0)
  2361. {
  2362. ack_str = ctrl_sts_ack_to_json();
  2363. }
  2364. //关闭空调开关
  2365. else if(strcmp(_over_all_sensor_request.type,"close")==0)
  2366. {
  2367. ack_str = ctrl_sts_ack_to_json();
  2368. }
  2369. #if(1)
  2370. //历史信息
  2371. else if(strcmp(_over_all_sensor_request.type,"listHisQuery")==0)
  2372. {
  2373. int rsize = 0 ;
  2374. int g_sensor_id = 0 ;
  2375. int g_sensor_type = 0 ;
  2376. GlobalSensorInfo* _globalSensorInfoTemp;
  2377. GlobalSensorManger* _globalSensorMangerSTemp;
  2378. int page_num = 0;
  2379. int page_size = 0;
  2380. #if 0
  2381. INIT_LIST_HEAD(&_globalSensorInfo.list);
  2382. g_sensor_type = atoi(_over_all_sensor_request.sensorType);
  2383. // log_d("page_num:%d",page_num);
  2384. // log_d("page_size:%d",page_size);
  2385. //查询数据
  2386. ret = dev_search_sensor_info(__globalDeviceManage.db,
  2387. __globalDeviceManage._globalDevInfo.product_id,
  2388. g_sensor_id,
  2389. _over_all_sensor_request.startTime,
  2390. _over_all_sensor_request.endTime,
  2391. page_num,
  2392. page_size,
  2393. &rsize,
  2394. &_globalSensorInfo);
  2395. if(ret!=0)
  2396. log_e("get sensor history error.");
  2397. //查找管理表找到关联信息
  2398. list_for_each_entry(_globalSensorMangerSTemp, &__globalDeviceManage._globalSensorManger.list, list)
  2399. {
  2400. //ID相等 记录信息
  2401. if(_globalSensorMangerSTemp->sensor_id== g_sensor_id)
  2402. {
  2403. break;
  2404. }
  2405. }
  2406. //组返回数据
  2407. list_for_each_entry(_globalSensorInfoTemp, &_globalSensorInfo.list, list)
  2408. {
  2409. #endif
  2410. /*
  2411. _OverSensorBackInfo* _overSensorBackInfoTemp = (_OverSensorBackInfo*)malloc(sizeof(_OverSensorBackInfo));
  2412. if(_overSensorBackInfoTemp==NULL)
  2413. log_e("_OverSensorBackInfo malloc error.");
  2414. memset(_overSensorBackInfoTemp,0,sizeof(_OverSensorBackInfo));
  2415. //基本信息
  2416. _overSensorBackInfoTemp->sensorId = _over_all_sensor_request.sensorId;
  2417. strcpy(_overSensorBackInfoTemp->sensorName,_globalSensorMangerSTemp->sensor_name);
  2418. _overSensorBackInfoTemp->sensorType = _globalSensorMangerSTemp->sensor_type;
  2419. strcpy(_overSensorBackInfoTemp->comSlogan,_globalSensorMangerSTemp->sensor_port_name);
  2420. //485独有
  2421. if(_globalSensorMangerSTemp->sensor_interface_type==1)
  2422. {
  2423. _overSensorBackInfoTemp->sensorAddr = _globalSensorMangerSTemp->sensor_addr ;
  2424. _overSensorBackInfoTemp->sensorBaud = _globalSensorMangerSTemp->sensor_baud;
  2425. }
  2426. _overSensorBackInfoTemp->connectionStatus = _globalSensorMangerSTemp->sensor_status;
  2427. _overSensorBackInfoTemp->nodeNumber = __globalDeviceManage._globalSensorManger.sensor_node_number;
  2428. //判断sensor type 填充数据
  2429. switch(_globalSensorMangerSTemp->sensor_type)
  2430. {
  2431. case 0://温湿度传感器 2个值
  2432. {
  2433. _overSensorBackInfoTemp->temperatureValue = _globalSensorInfoTemp->val1;
  2434. _overSensorBackInfoTemp->humidityValue = _globalSensorInfoTemp->val2;
  2435. }break;
  2436. case 1://烟雾传感器 1个值
  2437. {
  2438. _overSensorBackInfoTemp->alarmStatus = (bool)_globalSensorInfo.val1; // 1/0 报警未报警
  2439. }break;
  2440. case 2://水浸传感器
  2441. {
  2442. _overSensorBackInfoTemp->waterImmersionState = (bool)_globalSensorInfo.val1; // 1/0 报警未报警
  2443. }break;
  2444. case 3://门禁传感器 没有值
  2445. {
  2446. _overSensorBackInfoTemp->accessControlStatus = (bool)_globalSensorInfo.val1; // 1/0 报警未报警
  2447. }break;
  2448. case 4://气体传感器 1个值
  2449. {
  2450. _overSensorBackInfoTemp->gasConcentration = _globalSensorInfoTemp->val1; // 气体浓度
  2451. }break;
  2452. case 5:
  2453. {
  2454. _overSensorBackInfoTemp->airPressureValue = _globalSensorInfoTemp->val1; // 气压
  2455. _overSensorBackInfoTemp->airflowValue = _globalSensorInfoTemp->val2; // 气流
  2456. }break;
  2457. case 6://空调遥控器 没有值
  2458. {
  2459. }break;
  2460. }
  2461. */
  2462. //入队
  2463. // list_add_tail(_overSensorBackInfoTemp,&_over_all_sensor_back_info.list);
  2464. //}
  2465. // //参数转换json
  2466. // ack_str = over_all_sensor_info_to_json(&_over_all_sensor_back_info);
  2467. // //释放资源
  2468. // _OverSensorBackInfo* node;
  2469. // _OverSensorBackInfo* next;
  2470. // list_for_each_entry_safe(node, next, &_over_all_sensor_back_info.list, list)
  2471. // {
  2472. // list_del(&node->list);
  2473. // free(node);
  2474. // }
  2475. /*
  2476. if(strcmp(_over_all_sensor_request.sensorType,"0")==0)
  2477. {
  2478. ack_str = over_sensor_history_info_to_json(&_over_all_sensor_back_info, SENSOR_TYPE_VALUE);
  2479. }
  2480. else if(strcmp(_over_all_sensor_request.sensorType,"4")==0)
  2481. {
  2482. ack_str = over_sensor_history_info_to_json(&_over_all_sensor_back_info, SENSOR_TYPE_VALUE);
  2483. }
  2484. else if(strcmp(_over_all_sensor_request.sensorType,"5")==0)
  2485. {
  2486. ack_str = over_sensor_history_info_to_json(&_over_all_sensor_back_info, SENSOR_TYPE_VALUE);
  2487. }
  2488. else if(strcmp(_over_all_sensor_request.sensorType,"1")==0)
  2489. {
  2490. ack_str = over_sensor_history_info_to_json(&_over_all_sensor_back_info, SENSOR_TYPE_LIST);
  2491. }
  2492. else if(strcmp(_over_all_sensor_request.sensorType,"2")==0)
  2493. {
  2494. ack_str = over_sensor_history_info_to_json(&_over_all_sensor_back_info, SENSOR_TYPE_LIST);
  2495. }
  2496. else if(strcmp(_over_all_sensor_request.sensorType,"3")==0)
  2497. {
  2498. ack_str = over_sensor_history_info_to_json(&_over_all_sensor_back_info, SENSOR_TYPE_LIST);
  2499. }
  2500. */
  2501. }
  2502. #endif
  2503. cJSON_Delete(cjson);
  2504. http_reply(conn, 200, ack_str);
  2505. cJSON_free((void*)ack_str);
  2506. }
  2507. /**
  2508. * @brief 设置通道报警阈值
  2509. *
  2510. * 根据给定的通道ID,设置报警请求的通道阈值。
  2511. *
  2512. * @param _alarm_request_info 报警请求信息指针
  2513. * @param nChID 通道ID
  2514. *
  2515. * @return 指向设置后的通道阈值字符串的指针
  2516. */
  2517. char* setThresholdToCh(_AlarmRequestInfo* _alarm_request_info,int nChID)
  2518. {
  2519. int ret = -1 ;
  2520. char *ack_str = NULL;
  2521. GlobalPowerManger *_globalPowerMangerSaveTemp;
  2522. // int g_pwr_ch_id = atoi(_alarm_request_info->_pwr_info.productChId);
  2523. int g_pwr_ch_id = nChID;
  2524. int product_id = 0;
  2525. if (g_pwr_ch_id == 0)
  2526. {
  2527. _globalPowerMangerSaveTemp = &__globalDeviceManage._globalPowerManger;
  2528. }
  2529. else
  2530. {
  2531. list_for_each_entry(_globalPowerMangerSaveTemp, &__globalDeviceManage._globalPowerManger.list, list)
  2532. {
  2533. // ID相等 记录信息
  2534. if (_globalPowerMangerSaveTemp->product_ch_id == nChID)
  2535. {
  2536. #if IS_IP
  2537. product_id = _globalPowerMangerSaveTemp->product_id;
  2538. #endif
  2539. break;
  2540. }
  2541. }
  2542. }
  2543. // 更新参数
  2544. if (_alarm_request_info->_pwr_info.voltageUpperValue)
  2545. {
  2546. _globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_threshold = atof(_alarm_request_info->_pwr_info.voltageUpperValue);
  2547. }
  2548. if (_globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_threshold != 0)
  2549. {
  2550. _globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_enable = 1;
  2551. }
  2552. else
  2553. {
  2554. _globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_enable = 0;
  2555. }
  2556. if (_alarm_request_info->_pwr_info.voltageDownValue)
  2557. {
  2558. _globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_threshold = atof(_alarm_request_info->_pwr_info.voltageDownValue);
  2559. }
  2560. if (_globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_threshold != 0)
  2561. {
  2562. _globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_enable = 1;
  2563. }
  2564. else
  2565. {
  2566. _globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_enable = 0;
  2567. }
  2568. if (_alarm_request_info->_pwr_info.currentUpperValue)
  2569. {
  2570. _globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_threshold = atof(_alarm_request_info->_pwr_info.currentUpperValue);
  2571. }
  2572. if (_globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_threshold != 0)
  2573. {
  2574. _globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_enable = 1;
  2575. }
  2576. else
  2577. {
  2578. _globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_enable = 0;
  2579. }
  2580. if (_alarm_request_info->_pwr_info.powerUpperValue)
  2581. {
  2582. _globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_threshold = atof(_alarm_request_info->_pwr_info.powerUpperValue);
  2583. }
  2584. if (_globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_threshold != 0)
  2585. {
  2586. _globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_enable = 1;
  2587. }
  2588. else
  2589. {
  2590. _globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_enable = 0;
  2591. }
  2592. if (_alarm_request_info->_pwr_info.alarmContentUpperValue)
  2593. {
  2594. _globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_threshold = atof(_alarm_request_info->_pwr_info.alarmContentUpperValue);
  2595. }
  2596. if (_globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_threshold != 0)
  2597. {
  2598. _globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_enable = 1;
  2599. }
  2600. else
  2601. {
  2602. _globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_enable = 0;
  2603. }
  2604. //_globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_enable = 1 ;
  2605. char Alarm_Ctrl_type[16];
  2606. memset(Alarm_Ctrl_type, 0, sizeof(Alarm_Ctrl_type));
  2607. sprintf(Alarm_Ctrl_type, "%d", ALARM_CTRL_CLOSE_CH);
  2608. if (_alarm_request_info->_pwr_info.currentUpperAction && strcmp(_alarm_request_info->_pwr_info.currentUpperAction, Alarm_Ctrl_type) == 0)
  2609. {
  2610. _globalPowerMangerSaveTemp->global_over_manager->product_cur_over_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
  2611. }
  2612. else
  2613. _globalPowerMangerSaveTemp->global_over_manager->product_cur_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
  2614. if (_alarm_request_info->_pwr_info.voltageUpperAction && strcmp(_alarm_request_info->_pwr_info.voltageUpperAction, Alarm_Ctrl_type) == 0)
  2615. {
  2616. _globalPowerMangerSaveTemp->global_over_manager->product_vol_over_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
  2617. }
  2618. else
  2619. _globalPowerMangerSaveTemp->global_over_manager->product_vol_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
  2620. if (_alarm_request_info->_pwr_info.voltageDownAction && strcmp(_alarm_request_info->_pwr_info.voltageDownAction, Alarm_Ctrl_type) == 0)
  2621. {
  2622. _globalPowerMangerSaveTemp->global_over_manager->product_vol_over_lower_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
  2623. }
  2624. else
  2625. _globalPowerMangerSaveTemp->global_over_manager->product_vol_over_lower_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
  2626. if (_alarm_request_info->_pwr_info.powerUpperAction && strcmp(_alarm_request_info->_pwr_info.powerUpperAction, Alarm_Ctrl_type) == 0)
  2627. {
  2628. _globalPowerMangerSaveTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
  2629. }
  2630. else
  2631. _globalPowerMangerSaveTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
  2632. if (_alarm_request_info->_pwr_info.alarmContentUpperAction && strcmp(_alarm_request_info->_pwr_info.alarmContentUpperAction, Alarm_Ctrl_type) == 0)
  2633. {
  2634. _globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
  2635. }
  2636. else
  2637. _globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
  2638. if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree || __globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One)
  2639. {
  2640. GlobalTreeACManager *_pTreeACPowerMangerTemp = NULL;
  2641. list_for_each_entry(_pTreeACPowerMangerTemp, &_globalPowerMangerSaveTemp->list_Tree_AC, list_Tree_AC)
  2642. {
  2643. memcpy(_pTreeACPowerMangerTemp->global_over_manager, _globalPowerMangerSaveTemp->global_over_manager, sizeof(GlobalOverManager));
  2644. ret = g_switch_set_all_single_threshold(&__globalDeviceManage._globalRelaySampManger,
  2645. _globalPowerMangerSaveTemp->product_ch_type,
  2646. _pTreeACPowerMangerTemp->product_saddr,
  2647. _pTreeACPowerMangerTemp->product_ch_addr,
  2648. _globalPowerMangerSaveTemp);
  2649. }
  2650. }
  2651. else
  2652. {
  2653. #if ((IS_IP) == (0))
  2654. ret = g_switch_set_all_single_threshold(&__globalDeviceManage._globalRelaySampManger,
  2655. _globalPowerMangerSaveTemp->product_ch_type,
  2656. _globalPowerMangerSaveTemp->product_saddr,
  2657. _globalPowerMangerSaveTemp->product_ch_addr,
  2658. _globalPowerMangerSaveTemp);
  2659. #else
  2660. ret = 0;
  2661. #endif
  2662. }
  2663. if (ret < 0)
  2664. {
  2665. log_e("power threshold update error.ret:%d,%s", ret, modbus_strerror(errno));
  2666. /* code */
  2667. }
  2668. if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree || __globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One)
  2669. {
  2670. // 写入数据库
  2671. ret = dev_update_power_manage_over_info(__globalDeviceManage.db,
  2672. __globalDeviceManage._globalDevInfo.product_id,
  2673. _globalPowerMangerSaveTemp->product_ch_id,
  2674. _globalPowerMangerSaveTemp);
  2675. if (ret != 0)
  2676. log_e("power threshold update error.");
  2677. GlobalTreeACManager *_pTreeACPowerMangerTemp = NULL;
  2678. list_for_each_entry(_pTreeACPowerMangerTemp, &_globalPowerMangerSaveTemp->list_Tree_AC, list_Tree_AC)
  2679. {
  2680. memcpy(_pTreeACPowerMangerTemp->global_over_manager, _globalPowerMangerSaveTemp->global_over_manager, sizeof(GlobalOverManager));
  2681. ret = dev_update_t_ac_power_manage_over_info(__globalDeviceManage.db, _pTreeACPowerMangerTemp);
  2682. }
  2683. }
  2684. else
  2685. {
  2686. // 写入数据库
  2687. #if ((IS_IP) == (0))
  2688. ret = dev_update_power_manage_over_info(__globalDeviceManage.db,
  2689. __globalDeviceManage._globalDevInfo.product_id,
  2690. _globalPowerMangerSaveTemp->product_ch_id,
  2691. _globalPowerMangerSaveTemp);
  2692. #else
  2693. ret = dev_update_power_manage_over_info(__globalDeviceManage.db,
  2694. product_id,
  2695. _globalPowerMangerSaveTemp->product_ch_id,
  2696. _globalPowerMangerSaveTemp);
  2697. #endif
  2698. if (ret != 0)
  2699. log_e("power threshold update error.");
  2700. }
  2701. char buff[100] ={0};
  2702. get_time(buff);
  2703. #if IS_IP
  2704. ret = dev_insert_alarm_info(__globalDeviceManage.db,product_id, ALARM_TYPE_OPRATION,buff,"power threshold update !!");
  2705. #else
  2706. ret = dev_insert_alarm_info(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id,
  2707. ALARM_TYPE_OPRATION,buff,"power threshold update!!");
  2708. #endif
  2709. // 返回数据
  2710. ack_str = ctrl_sts_ack_to_json();
  2711. return ack_str;
  2712. }
  2713. /// @brief 告警保护
  2714. /// @param stream
  2715. static void alarmProtect(void *conn)
  2716. {
  2717. int ret = -1 ;
  2718. cJSON *cjson;
  2719. _AlarmRequestInfo _alarm_request_info;
  2720. _AlarmAckInfo _alarm_ack_info; //填充数据
  2721. char* ack_str = NULL ;
  2722. int nAlarmNumber=0;
  2723. mg_stream_t *s=(mg_stream_t*)conn;
  2724. struct mg_http_message *hm=s->ev_data;
  2725. char *rx_body_buf=(char*)hm->body.buf;
  2726. memset(&_alarm_request_info, 0, sizeof(_alarm_request_info));
  2727. //转换json参数
  2728. cjson = json_to_alarm_manage(rx_body_buf,&_alarm_request_info);
  2729. if(cjson==NULL)
  2730. {
  2731. http_reply(conn, 400, NULL);
  2732. return ;
  2733. }
  2734. //查询json参数
  2735. if(strcmp(_alarm_request_info.type,"listAllQuery")==0) //告警信息查询
  2736. {
  2737. #if 0
  2738. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  2739. //int ret = -1;
  2740. int number = 0;
  2741. INIT_LIST_HEAD(&_alarm_ack_info.list);
  2742. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  2743. {
  2744. ret = dev_serarch_all_alarm(__globalDeviceManage.db,
  2745. _globalPowerMangerTemp->product_id,
  2746. ALARM_TYPE_POWER ,1,10,
  2747. &_alarm_ack_info,&nAlarmNumber);
  2748. number += nAlarmNumber;
  2749. }
  2750. if(number==0) {
  2751. log_e("get power alarm error.");
  2752. }
  2753. else {
  2754. ack_str = alarm_info_to_json(&_alarm_ack_info,number);
  2755. //释放资源
  2756. _AlarmAckInfo* node;
  2757. _AlarmAckInfo* next;
  2758. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  2759. {
  2760. list_del(&node->list);
  2761. free(node);
  2762. }
  2763. }
  2764. #else
  2765. int i = 0 ;
  2766. //初始化表
  2767. INIT_LIST_HEAD(&_alarm_ack_info.list);
  2768. // //查询数据库,最近的10个报警信息
  2769. ret = dev_serarch_all_alarm(__globalDeviceManage.db,
  2770. __globalDeviceManage._globalDevInfo.product_id,
  2771. ALARM_TYPE_POWER ,1,10,
  2772. &_alarm_ack_info,&nAlarmNumber);
  2773. //alarm_num = nAlarmNumber;
  2774. if(ret!=0) {
  2775. log_e("get power alarm error.");
  2776. if(nAlarmNumber > 0)
  2777. {
  2778. ack_str = mem_info_to_json();
  2779. }
  2780. }
  2781. else {
  2782. ack_str = alarm_info_to_json(&_alarm_ack_info,nAlarmNumber);
  2783. //释放资源
  2784. }
  2785. _AlarmAckInfo* node;
  2786. _AlarmAckInfo* next;
  2787. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  2788. {
  2789. list_del(&node->list);
  2790. free(node);
  2791. }
  2792. // char start_time[32] = {0};
  2793. // char stop_time[32] = {0};
  2794. // if (_alarm_request_info.startTime == NULL || _alarm_request_info.endTime == NULL)
  2795. // {
  2796. // struct tm *t;
  2797. // struct timeval tv;
  2798. // gettimeofday(&tv, NULL);
  2799. // t = localtime(&tv.tv_sec);
  2800. // sprintf(stop_time, "%04d-%02d-%02d %02d:%02d:%02d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, 23, 59, 59);
  2801. // log_d(stop_time);
  2802. // sprintf(start_time, "%04d-%02d-%02d %02d:%02d:%02d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, 0, 0, 0);
  2803. // log_d(start_time);
  2804. // _alarm_request_info.startTime = start_time;
  2805. // _alarm_request_info.endTime = stop_time;
  2806. // }
  2807. // ret = dev_search_alarm_info(__globalDeviceManage.db,
  2808. // __globalDeviceManage._globalDevInfo.product.id,
  2809. // -1,_alarm_request_info.startTime,_alarm_request_info.endTime,
  2810. // 1,10,
  2811. // &_alarm_ack_info,&nAlarmNumber);
  2812. // if(ret != 0)
  2813. // {
  2814. // log_e("get power alarm error.");
  2815. // }else
  2816. // {
  2817. // ack_str = alarm_info_to_json(&_alarm_ack_info,nAlarmNumber);
  2818. // }
  2819. // //释放资源
  2820. // _AlarmAckInfo* node;
  2821. // _AlarmAckInfo* next;
  2822. // list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  2823. // {
  2824. // if(node)
  2825. // {
  2826. // list_del(&node->list);
  2827. // free(node);
  2828. // }
  2829. // }
  2830. #endif
  2831. }
  2832. else if(strcmp(_alarm_request_info.type,"powerAlarmList")==0) //电源告警信息查询
  2833. {
  2834. //初始化表
  2835. #if 0
  2836. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  2837. INIT_LIST_HEAD(&_alarm_ack_info.list);
  2838. int number = 0;
  2839. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  2840. {
  2841. nAlarmNumber = 0;
  2842. ret = dev_serarch_all_alarm(__globalDeviceManage.db,
  2843. _globalPowerMangerTemp->product_id,
  2844. ALARM_TYPE_POWER,_alarm_request_info.pagenum,_alarm_request_info.pagesize,
  2845. &_alarm_ack_info,&nAlarmNumber);
  2846. number +=nAlarmNumber;
  2847. }
  2848. if(number == 0) {
  2849. log_e("get power alarm error.");
  2850. } else {
  2851. ack_str = alarm_info_to_json(&_alarm_ack_info,number);
  2852. //释放资源
  2853. _AlarmAckInfo* node;
  2854. _AlarmAckInfo* next;
  2855. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  2856. {
  2857. list_del(&node->list);
  2858. free(node);
  2859. }
  2860. }
  2861. #else
  2862. INIT_LIST_HEAD(&_alarm_ack_info.list);
  2863. //查询数据库
  2864. ret = dev_serarch_all_alarm(__globalDeviceManage.db,
  2865. __globalDeviceManage._globalDevInfo.product_id,
  2866. ALARM_TYPE_POWER,_alarm_request_info.pagenum,_alarm_request_info.pagesize,
  2867. &_alarm_ack_info,&nAlarmNumber);
  2868. if(ret!=0) {
  2869. log_e("get power alarm error.");
  2870. if(nAlarmNumber > 0)
  2871. {
  2872. ack_str = mem_info_to_json();
  2873. }
  2874. }
  2875. else {
  2876. ack_str = alarm_info_to_json(&_alarm_ack_info,nAlarmNumber);
  2877. //释放资源
  2878. }
  2879. _AlarmAckInfo* node;
  2880. _AlarmAckInfo* next;
  2881. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  2882. {
  2883. list_del(&node->list);
  2884. free(node);
  2885. }
  2886. #endif
  2887. }
  2888. else if(strcmp(_alarm_request_info.type,"sensorAlarmList")==0) //传感器告警信息查询
  2889. {
  2890. //初始化表
  2891. INIT_LIST_HEAD(&_alarm_ack_info.list);
  2892. //查询数据库
  2893. #if 0
  2894. GlobalSensorManger *temp = NULL;
  2895. int number = 0;
  2896. list_for_each_entry(temp, &__globalDeviceManage._globalSensorManger.list, list)
  2897. {
  2898. ret = dev_serarch_all_alarm(__globalDeviceManage.db,
  2899. temp->product_id,
  2900. ALARM_TYPE_SENSOR,_alarm_request_info.pagenum,_alarm_request_info.pagesize,
  2901. &_alarm_ack_info,&nAlarmNumber);
  2902. number+= nAlarmNumber;
  2903. }
  2904. if(number == 0)
  2905. {
  2906. log_e("get sensor alarm error.");
  2907. }else
  2908. {
  2909. ack_str = alarm_info_to_json(&_alarm_ack_info,number);
  2910. //释放资源
  2911. _AlarmAckInfo* node;
  2912. _AlarmAckInfo* next;
  2913. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  2914. {
  2915. list_del(&node->list);
  2916. free(node);
  2917. }
  2918. }
  2919. #else
  2920. ret = dev_serarch_all_alarm(__globalDeviceManage.db,
  2921. __globalDeviceManage._globalDevInfo.product_id,
  2922. ALARM_TYPE_SENSOR,_alarm_request_info.pagenum,_alarm_request_info.pagesize,
  2923. &_alarm_ack_info,&nAlarmNumber);
  2924. if(ret!=0) {
  2925. log_e("get sensor alarm error.");
  2926. }
  2927. else {
  2928. ack_str = alarm_info_to_json(&_alarm_ack_info,nAlarmNumber);
  2929. //释放资源
  2930. }
  2931. _AlarmAckInfo* node;
  2932. _AlarmAckInfo* next;
  2933. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  2934. {
  2935. list_del(&node->list);
  2936. free(node);
  2937. }
  2938. #endif
  2939. }
  2940. else if(strcmp(_alarm_request_info.type,"networAlarmkList")==0) //网络告警信息查询
  2941. {
  2942. //初始化表
  2943. INIT_LIST_HEAD(&_alarm_ack_info.list);
  2944. ret = dev_serarch_all_alarm(__globalDeviceManage.db,
  2945. __globalDeviceManage._globalDevInfo.product_id,
  2946. ALARM_TYPE_NETWORK,_alarm_request_info.pagenum,_alarm_request_info.pagesize,
  2947. &_alarm_ack_info,&nAlarmNumber);
  2948. if(ret!=0) {
  2949. log_e("get net alarm error.");
  2950. if(nAlarmNumber > 0)
  2951. {
  2952. ack_str = mem_info_to_json();
  2953. }
  2954. }
  2955. else {
  2956. //转换参数
  2957. ack_str = alarm_info_to_json(&_alarm_ack_info,nAlarmNumber);
  2958. //释放资源
  2959. _AlarmAckInfo* node;
  2960. _AlarmAckInfo* next;
  2961. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  2962. {
  2963. list_del(&node->list);
  2964. free(node);
  2965. }
  2966. }
  2967. }
  2968. else if(strcmp(_alarm_request_info.type,"powerThresholdList")==0)//电源阈值查询
  2969. {
  2970. //查询每个通道阈值
  2971. ack_str = alarm_power_threshold_to_json(&__globalDeviceManage._globalPowerManger);
  2972. }
  2973. else if(strcmp(_alarm_request_info.type,"save")==0)//电源阈值保存
  2974. {
  2975. if (!_alarm_request_info.user_token)
  2976. {
  2977. return;
  2978. }
  2979. //拿到参数保存
  2980. //GlobalPowerManger* _globalPowerMangerSaveTemp ;
  2981. //int g_pwr_ch_id = atoi(_alarm_request_info._pwr_info.productChId);
  2982. int g_pwr_ch_id = _alarm_request_info._pwr_info.productChId;
  2983. ack_str=setThresholdToCh(&_alarm_request_info,g_pwr_ch_id);
  2984. char log_buff[256];
  2985. sprintf(log_buff, "Update power threshold CH%d!",g_pwr_ch_id);
  2986. dev_insert_alarm_ctrl(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, ALARM_TYPE_OPRATION, log_buff);
  2987. /*
  2988. if (g_pwr_ch_id ==0)
  2989. {
  2990. _globalPowerMangerSaveTemp=&__globalDeviceManage._globalPowerManger;
  2991. }
  2992. else
  2993. {
  2994. list_for_each_entry(_globalPowerMangerSaveTemp, &__globalDeviceManage._globalPowerManger.list, list)
  2995. {
  2996. // ID相等 记录信息
  2997. if (_globalPowerMangerSaveTemp->product_ch_id == g_pwr_ch_id)
  2998. {
  2999. break;
  3000. }
  3001. }
  3002. }
  3003. //更新参数
  3004. if (_alarm_request_info._pwr_info.voltageUpperValue)
  3005. {
  3006. _globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_threshold =atof(_alarm_request_info._pwr_info.voltageUpperValue);
  3007. }
  3008. if (_globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_threshold!=0){_globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_enable = 1 ;
  3009. }else{_globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_enable = 0;}
  3010. if (_alarm_request_info._pwr_info.voltageDownValue)
  3011. {
  3012. _globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_threshold =atof(_alarm_request_info._pwr_info.voltageDownValue);
  3013. }
  3014. if (_globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_threshold!=0){_globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_enable = 1 ;
  3015. }else{_globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_enable = 0 ;}
  3016. if (_alarm_request_info._pwr_info.currentUpperValue)
  3017. {
  3018. _globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_threshold = atof(_alarm_request_info._pwr_info.currentUpperValue);
  3019. }
  3020. if (_globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_threshold!=0){_globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_enable = 1 ;
  3021. }else{_globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_enable = 0 ;}
  3022. if (_alarm_request_info._pwr_info.powerUpperValue)
  3023. {
  3024. _globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_threshold = atof(_alarm_request_info._pwr_info.powerUpperValue);
  3025. }
  3026. if (_globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_threshold!=0){_globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_enable = 1 ;
  3027. }else{_globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_enable = 0 ;}
  3028. if (_alarm_request_info._pwr_info.alarmContentUpperValue)
  3029. {
  3030. _globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_threshold = atof(_alarm_request_info._pwr_info.alarmContentUpperValue);
  3031. }
  3032. if (_globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_threshold!=0){_globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_enable = 1 ;
  3033. }else{_globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_enable = 0 ;}
  3034. //_globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_enable = 1 ;
  3035. char Alarm_Ctrl_type[16];
  3036. memset(Alarm_Ctrl_type, 0, sizeof(Alarm_Ctrl_type));
  3037. sprintf(Alarm_Ctrl_type, "%d", ALARM_CTRL_CLOSE_CH);
  3038. if (_alarm_request_info._pwr_info.currentUpperAction && strcmp(_alarm_request_info._pwr_info.currentUpperAction,Alarm_Ctrl_type) == 0)
  3039. {
  3040. _globalPowerMangerSaveTemp->global_over_manager->product_cur_over_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
  3041. }
  3042. else
  3043. _globalPowerMangerSaveTemp->global_over_manager->product_cur_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
  3044. if (_alarm_request_info._pwr_info.voltageUpperAction && strcmp(_alarm_request_info._pwr_info.voltageUpperAction, Alarm_Ctrl_type) == 0)
  3045. {
  3046. _globalPowerMangerSaveTemp->global_over_manager->product_vol_over_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
  3047. }
  3048. else
  3049. _globalPowerMangerSaveTemp->global_over_manager->product_vol_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
  3050. if (_alarm_request_info._pwr_info.voltageDownAction && strcmp(_alarm_request_info._pwr_info.voltageDownAction, Alarm_Ctrl_type) == 0)
  3051. {
  3052. _globalPowerMangerSaveTemp->global_over_manager->product_vol_over_lower_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
  3053. }
  3054. else
  3055. _globalPowerMangerSaveTemp->global_over_manager->product_vol_over_lower_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
  3056. if (_alarm_request_info._pwr_info.powerUpperAction && strcmp(_alarm_request_info._pwr_info.powerUpperAction, Alarm_Ctrl_type) == 0)
  3057. {
  3058. _globalPowerMangerSaveTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
  3059. }
  3060. else
  3061. _globalPowerMangerSaveTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
  3062. if (_alarm_request_info._pwr_info.alarmContentUpperAction && strcmp(_alarm_request_info._pwr_info.alarmContentUpperAction, Alarm_Ctrl_type) == 0)
  3063. {
  3064. _globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
  3065. }
  3066. else
  3067. _globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
  3068. if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree || __globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One)
  3069. {
  3070. GlobalTreeACManager* _pTreeACPowerMangerTemp = NULL ;
  3071. list_for_each_entry(_pTreeACPowerMangerTemp, &_globalPowerMangerSaveTemp->list_Tree_AC, list_Tree_AC)
  3072. {
  3073. memcpy(_pTreeACPowerMangerTemp->global_over_manager,_globalPowerMangerSaveTemp->global_over_manager,sizeof(GlobalOverManager));
  3074. ret = g_switch_set_all_single_threshold(&__globalDeviceManage._globalRelaySampManger,
  3075. _globalPowerMangerSaveTemp->product_ch_type,
  3076. _pTreeACPowerMangerTemp->product_saddr,
  3077. _pTreeACPowerMangerTemp->product_ch_addr,
  3078. _globalPowerMangerSaveTemp);
  3079. }
  3080. }
  3081. else
  3082. {
  3083. ret = g_switch_set_all_single_threshold(&__globalDeviceManage._globalRelaySampManger,
  3084. _globalPowerMangerSaveTemp->product_ch_type,
  3085. _globalPowerMangerSaveTemp->product_saddr,
  3086. _globalPowerMangerSaveTemp->product_ch_addr,
  3087. _globalPowerMangerSaveTemp);
  3088. }
  3089. if (ret<0)
  3090. {
  3091. log_e("power threshold update error.ret:%d,%s",ret,modbus_strerror(errno));
  3092. }
  3093. if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree || __globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One)
  3094. {
  3095. // 写入数据库
  3096. ret = dev_update_power_manage_over_info(__globalDeviceManage.db,
  3097. __globalDeviceManage._globalDevInfo.product_id,
  3098. _globalPowerMangerSaveTemp->product_ch_id,
  3099. _globalPowerMangerSaveTemp);
  3100. if (ret != 0)
  3101. log_e("power threshold update error.");
  3102. GlobalTreeACManager *_pTreeACPowerMangerTemp = NULL;
  3103. list_for_each_entry(_pTreeACPowerMangerTemp, &_globalPowerMangerSaveTemp->list_Tree_AC, list_Tree_AC)
  3104. {
  3105. memcpy(_pTreeACPowerMangerTemp->global_over_manager, _globalPowerMangerSaveTemp->global_over_manager, sizeof(GlobalOverManager));
  3106. ret = dev_update_t_ac_power_manage_over_info(__globalDeviceManage.db,_pTreeACPowerMangerTemp);
  3107. }
  3108. }
  3109. else
  3110. {
  3111. // 写入数据库
  3112. ret = dev_update_power_manage_over_info(__globalDeviceManage.db,
  3113. __globalDeviceManage._globalDevInfo.product_id,
  3114. _globalPowerMangerSaveTemp->product_ch_id,
  3115. _globalPowerMangerSaveTemp);
  3116. if (ret != 0)
  3117. log_e("power threshold update error.");
  3118. }
  3119. //返回数据
  3120. ack_str = ctrl_sts_ack_to_json();*/
  3121. }
  3122. else if (strcmp(_alarm_request_info.type, "batchSave") == 0) // 批量设置
  3123. {
  3124. if (!_alarm_request_info.user_token)
  3125. {
  3126. return;
  3127. }
  3128. char *pCHlist;
  3129. char *pCHListSave;
  3130. pCHlist = strtok_r(_alarm_request_info.strProductChIds, ",", &pCHListSave);
  3131. // 其他版本功能
  3132. while (pCHlist != NULL)
  3133. {
  3134. int g_pwr_ch_id = atoi(pCHlist);
  3135. ack_str = setThresholdToCh(&_alarm_request_info, g_pwr_ch_id);
  3136. pCHlist = strtok_r(NULL, ",", &pCHListSave);
  3137. }
  3138. }
  3139. else if(strcmp(_alarm_request_info.type,"sensorThresholdList")==0)//传感器阈值查询
  3140. {
  3141. ack_str = alarm_sensor_threshold_to_json(&__globalDeviceManage._globalSensorManger);
  3142. }
  3143. else if(strcmp(_alarm_request_info.type,"update")==0)//传感器阈值保存
  3144. {
  3145. GlobalSensorManger* _globalSensorMangerSaveTemp;
  3146. int g_sensor_id = _alarm_request_info._sensor_info.sensorId;
  3147. list_for_each_entry(_globalSensorMangerSaveTemp, &__globalDeviceManage._globalSensorManger.list, list)
  3148. {
  3149. //ID相等 记录信息
  3150. if(_globalSensorMangerSaveTemp->sensor_id== g_sensor_id)
  3151. {
  3152. break;
  3153. }
  3154. }
  3155. char Alarm_Ctrl_type[16];
  3156. memset(Alarm_Ctrl_type, 0, sizeof(Alarm_Ctrl_type));
  3157. sprintf(Alarm_Ctrl_type, "%d", ALARM_CTRL_CLOSE_CH);
  3158. switch (_globalSensorMangerSaveTemp->sensor_type)
  3159. {
  3160. case SENSOR_TYPE_TEMPERATURE:
  3161. case SENSOR_TYPE_DoubleT:
  3162. {
  3163. char strName1[100]={0};
  3164. char strName2[100]={0};
  3165. sprintf(strName1, "%s%d", language_temperature[__globalDeviceManage._globalDevInfo.product_language], 1);
  3166. sprintf(strName2, "%s%d", language_temperature[__globalDeviceManage._globalDevInfo.product_language], 2);
  3167. if (strcmp(_alarm_request_info._sensor_info.thresholdType, language_temperature[__globalDeviceManage._globalDevInfo.product_language]) == 0||strcmp(_alarm_request_info._sensor_info.thresholdType, strName1) == 0)
  3168. {
  3169. _globalSensorMangerSaveTemp->over_manager->sensor_val1_upper_threshold = atof(_alarm_request_info._sensor_info.thresholdUpperValue);
  3170. _globalSensorMangerSaveTemp->over_manager->sensor_val1_lower_threshold = atof(_alarm_request_info._sensor_info.thresholdDownValue);
  3171. _globalSensorMangerSaveTemp->over_manager->sensor_val1_upper_enabled = 1;
  3172. _globalSensorMangerSaveTemp->over_manager->sensor_val1_lower_enabled = 1;
  3173. if (_alarm_request_info._sensor_info.thresholdUpperAction && strcmp(_alarm_request_info._sensor_info.thresholdUpperAction,Alarm_Ctrl_type) == 0)
  3174. {
  3175. _globalSensorMangerSaveTemp->over_manager->sensor_val1_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
  3176. if(_alarm_request_info._sensor_info.thresholdUpperChanel)strcpy(_globalSensorMangerSaveTemp->over_manager->sensor_val1_upper_threshold_ctrl_para,_alarm_request_info._sensor_info.thresholdUpperChanel);
  3177. }
  3178. else
  3179. _globalSensorMangerSaveTemp->over_manager->sensor_val1_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
  3180. if (_alarm_request_info._sensor_info.thresholdDownAction && strcmp(_alarm_request_info._sensor_info.thresholdDownAction, Alarm_Ctrl_type) == 0)
  3181. {
  3182. _globalSensorMangerSaveTemp->over_manager->sensor_val1_lower_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
  3183. if(_alarm_request_info._sensor_info.thresholdDownChanel)strcpy(_globalSensorMangerSaveTemp->over_manager->sensor_val1_lower_threshold_ctrl_para,_alarm_request_info._sensor_info.thresholdDownChanel);
  3184. }
  3185. else
  3186. _globalSensorMangerSaveTemp->over_manager->sensor_val1_lower_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
  3187. }
  3188. else if (strcmp(_alarm_request_info._sensor_info.thresholdType, language_humidity[__globalDeviceManage._globalDevInfo.product_language]) == 0||strcmp(_alarm_request_info._sensor_info.thresholdType, strName2) == 0)
  3189. {
  3190. _globalSensorMangerSaveTemp->over_manager->sensor_val2_upper_threshold = atof(_alarm_request_info._sensor_info.thresholdUpperValue);
  3191. _globalSensorMangerSaveTemp->over_manager->sensor_val2_lower_threshold = atof(_alarm_request_info._sensor_info.thresholdDownValue);
  3192. if (_globalSensorMangerSaveTemp->over_manager->sensor_val2_upper_threshold<=0.05 &&_globalSensorMangerSaveTemp->over_manager->sensor_val2_upper_threshold>=-0.05 )
  3193. {
  3194. _globalSensorMangerSaveTemp->over_manager->sensor_val2_upper_enabled = 0;
  3195. }
  3196. else _globalSensorMangerSaveTemp->over_manager->sensor_val2_upper_enabled = 1;
  3197. if (_globalSensorMangerSaveTemp->over_manager->sensor_val2_lower_threshold<=0.05 &&_globalSensorMangerSaveTemp->over_manager->sensor_val2_lower_threshold>=-0.05 )
  3198. {
  3199. _globalSensorMangerSaveTemp->over_manager->sensor_val2_lower_enabled = 0;
  3200. }
  3201. else _globalSensorMangerSaveTemp->over_manager->sensor_val2_lower_enabled = 1;
  3202. if (_alarm_request_info._sensor_info.thresholdUpperAction && strcmp(_alarm_request_info._sensor_info.thresholdUpperAction, Alarm_Ctrl_type) == 0)
  3203. {
  3204. _globalSensorMangerSaveTemp->over_manager->sensor_val2_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
  3205. if(_alarm_request_info._sensor_info.thresholdUpperChanel)strcpy(_globalSensorMangerSaveTemp->over_manager->sensor_val2_upper_threshold_ctrl_para,_alarm_request_info._sensor_info.thresholdUpperChanel);
  3206. }
  3207. else
  3208. _globalSensorMangerSaveTemp->over_manager->sensor_val2_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
  3209. if (_alarm_request_info._sensor_info.thresholdDownAction && strcmp(_alarm_request_info._sensor_info.thresholdDownAction, Alarm_Ctrl_type) == 0)
  3210. {
  3211. _globalSensorMangerSaveTemp->over_manager->sensor_val2_lower_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
  3212. if(_alarm_request_info._sensor_info.thresholdDownChanel)strcpy(_globalSensorMangerSaveTemp->over_manager->sensor_val2_lower_threshold_ctrl_para,_alarm_request_info._sensor_info.thresholdDownChanel);
  3213. }
  3214. else
  3215. _globalSensorMangerSaveTemp->over_manager->sensor_val2_lower_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
  3216. }
  3217. }
  3218. break;
  3219. case SENSOR_TYPE_SMOKE:
  3220. case SENSOR_TYPE_WATER:
  3221. case SENSOR_TYPE_DOOR:
  3222. break;
  3223. case SENSOR_TYPE_GAS:
  3224. case SENSOR_TYPE_AIR_PRESS:
  3225. default:
  3226. break;
  3227. }
  3228. //更新参数
  3229. ret = dev_update_sensor_over_manage(__globalDeviceManage.db,
  3230. __globalDeviceManage._globalDevInfo.product_id,
  3231. g_sensor_id,
  3232. _globalSensorMangerSaveTemp);
  3233. if(ret!=0)
  3234. log_e("power threshold update error.");
  3235. char buff[100] ={0};
  3236. get_time(buff);
  3237. ret = dev_insert_alarm_info(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, ALARM_TYPE_OPRATION,buff,"sensor threshold update!!");
  3238. //拿到参数保存
  3239. ack_str = ctrl_sts_ack_to_json();
  3240. }
  3241. cJSON_Delete(cjson);
  3242. http_reply(conn, 200, ack_str);
  3243. cJSON_free((void*)ack_str);
  3244. }
  3245. /// @brief 查询日志
  3246. /// @param stream
  3247. static void logInformation(void *conn)
  3248. {
  3249. int ret = -1 ;
  3250. char* ack_str = NULL ;
  3251. int nAlarmNum = 0;
  3252. cJSON *cjson;
  3253. _LogInformationRequestInfo __logInformationRequestInfo;
  3254. _AlarmAckInfo _alarm_ack_info; //填充数据
  3255. mg_stream_t *s=(mg_stream_t*)conn;
  3256. struct mg_http_message *hm=s->ev_data;
  3257. char *rx_body_buf=(char*)hm->body.buf;
  3258. memset(&__logInformationRequestInfo,0,sizeof(_LogInformationRequestInfo));
  3259. cjson = json_to_loginformation_manage(rx_body_buf,&__logInformationRequestInfo);
  3260. if(cjson==NULL)
  3261. {
  3262. http_reply(conn, 400, NULL);
  3263. return ;
  3264. }
  3265. //查询json参数
  3266. if(strcmp(__logInformationRequestInfo.type,"listJgrzQuery")==0) //告警日志
  3267. {
  3268. //初始化表
  3269. INIT_LIST_HEAD(&_alarm_ack_info.list);
  3270. if(__logInformationRequestInfo.beginTime==NULL || __logInformationRequestInfo.endtime==NULL)
  3271. {
  3272. struct tm* t ;
  3273. struct timeval tv;
  3274. char start_time[32] = {0};
  3275. char stop_time[32] = {0};
  3276. gettimeofday(&tv, NULL);
  3277. t = localtime(&tv.tv_sec);
  3278. sprintf(stop_time,"%04d-%02d-%02d %02d:%02d:%02d",t->tm_year+1900,t->tm_mon+1,t->tm_mday,23,59,59);
  3279. log_d(stop_time);
  3280. sprintf(start_time,"%04d-%02d-%02d %02d:%02d:%02d",t->tm_year+1900,t->tm_mon+1,t->tm_mday,0,0,0);
  3281. log_d(start_time);
  3282. dev_search_alarm_info(__globalDeviceManage.db,
  3283. __globalDeviceManage._globalDevInfo.product_id,
  3284. 0, //注意注意 此处需要查询的参数是0 1 2
  3285. start_time,//启动时间
  3286. stop_time, //结束时间
  3287. __logInformationRequestInfo.pagenum-1, //页
  3288. __logInformationRequestInfo.pagesize, //条
  3289. &_alarm_ack_info,&nAlarmNum);
  3290. ack_str = alarm_type_info_to_json(&_alarm_ack_info,nAlarmNum);
  3291. //释放资源
  3292. _AlarmAckInfo* node;
  3293. _AlarmAckInfo* next;
  3294. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  3295. {
  3296. list_del(&node->list);
  3297. free(node);
  3298. }
  3299. }
  3300. else
  3301. {
  3302. dev_search_alarm_info(__globalDeviceManage.db,
  3303. __globalDeviceManage._globalDevInfo.product_id,
  3304. 0, //注意注意 此处需要查询的参数是0 1 2
  3305. __logInformationRequestInfo.beginTime,//启动时间
  3306. __logInformationRequestInfo.endtime, //结束时间
  3307. __logInformationRequestInfo.pagenum-1, //页
  3308. __logInformationRequestInfo.pagesize, //条
  3309. &_alarm_ack_info,&nAlarmNum);
  3310. ack_str = alarm_type_info_to_json(&_alarm_ack_info,nAlarmNum);
  3311. //释放资源
  3312. _AlarmAckInfo* node;
  3313. _AlarmAckInfo* next;
  3314. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  3315. {
  3316. list_del(&node->list);
  3317. free(node);
  3318. }
  3319. }
  3320. //转换参数
  3321. //ack_str = alarm_type_info_to_json(&_alarm_ack_info);
  3322. }
  3323. else if(strcmp(__logInformationRequestInfo.type,"exportJgrz")==0) //导出告警日志
  3324. {
  3325. }
  3326. else if(strcmp(__logInformationRequestInfo.type,"listCzrzQuery")==0) //操作日志
  3327. {
  3328. //初始化表
  3329. INIT_LIST_HEAD(&_alarm_ack_info.list);
  3330. //默认查当天日志
  3331. if(__logInformationRequestInfo.beginTime==NULL || __logInformationRequestInfo.endtime==NULL)
  3332. {
  3333. struct tm* t ;
  3334. struct timeval tv;
  3335. char start_time[32] = {0};
  3336. char stop_time[32] = {0};
  3337. gettimeofday(&tv, NULL);
  3338. t = localtime(&tv.tv_sec);
  3339. sprintf(stop_time,"%04d-%02d-%02d %02d:%02d:%02d",t->tm_year+1900,t->tm_mon+1,t->tm_mday,23,59,59);
  3340. log_d(stop_time);
  3341. sprintf(start_time,"%04d-%02d-%02d %02d:%02d:%02d",t->tm_year+1900,t->tm_mon+1,t->tm_mday,0,0,0);
  3342. log_d(start_time);
  3343. dev_search_alarm_info(__globalDeviceManage.db,
  3344. __globalDeviceManage._globalDevInfo.product_id,
  3345. ALARM_TYPE_OPRATION, // alarm_type, 操作日志
  3346. start_time,
  3347. stop_time,
  3348. __logInformationRequestInfo.pagenum - 1,
  3349. __logInformationRequestInfo.pagesize,
  3350. &_alarm_ack_info, &nAlarmNum);
  3351. }
  3352. else
  3353. {
  3354. dev_search_alarm_info(__globalDeviceManage.db,
  3355. __globalDeviceManage._globalDevInfo.product_id,
  3356. ALARM_TYPE_OPRATION,// alarm_type, 操作日志
  3357. __logInformationRequestInfo.beginTime,
  3358. __logInformationRequestInfo.endtime,
  3359. __logInformationRequestInfo.pagenum-1,
  3360. __logInformationRequestInfo.pagesize,
  3361. &_alarm_ack_info,&nAlarmNum);
  3362. }
  3363. //转换参数
  3364. ack_str = alarm_ctrl_type_info_to_json(&_alarm_ack_info,nAlarmNum);
  3365. //释放资源
  3366. _AlarmAckInfo* node;
  3367. _AlarmAckInfo* next;
  3368. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  3369. {
  3370. list_del(&node->list);
  3371. free(node);
  3372. }
  3373. }
  3374. else if(strcmp(__logInformationRequestInfo.type,"exportCzrz")==0) //导出操作日志
  3375. {
  3376. }
  3377. else if(strcmp(__logInformationRequestInfo.type,"listYxrzQuery")==0) //运行日志
  3378. {
  3379. struct tm* t ;
  3380. struct timeval tv;
  3381. char start_time[32] = {0};
  3382. char stop_time[32] = {0};
  3383. gettimeofday(&tv, NULL);
  3384. t = localtime(&tv.tv_sec);
  3385. sprintf(stop_time,"%04d-%02d-%02d %02d:%02d:%02d",t->tm_year+1900,t->tm_mon+1,t->tm_mday,23,59,59);
  3386. log_d(stop_time);
  3387. sprintf(start_time,"%04d-%02d-%02d %02d:%02d:%02d",t->tm_year+1900,t->tm_mon+1,t->tm_mday,0,0,0);
  3388. log_d(start_time);
  3389. //初始化表
  3390. INIT_LIST_HEAD(&_alarm_ack_info.list);
  3391. dev_search_alarm_info(__globalDeviceManage.db,
  3392. __globalDeviceManage._globalDevInfo.product_id,
  3393. ALARM_TYPE_RUNNING,// alarm_type, 运行日志
  3394. start_time,
  3395. stop_time,
  3396. __logInformationRequestInfo.pagenum-1,
  3397. __logInformationRequestInfo.pagesize,
  3398. &_alarm_ack_info,&nAlarmNum);
  3399. //转换参数
  3400. ack_str = alarm_type_info_to_json(&_alarm_ack_info,nAlarmNum);
  3401. //释放资源
  3402. _AlarmAckInfo* node;
  3403. _AlarmAckInfo* next;
  3404. list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
  3405. {
  3406. list_del(&node->list);
  3407. free(node);
  3408. }
  3409. }
  3410. else if(strcmp(__logInformationRequestInfo.type,"exportYxrz")==0) //导出运行日志 导出方式->
  3411. {
  3412. }
  3413. cJSON_Delete(cjson);
  3414. http_reply(conn, 200, ack_str);
  3415. cJSON_free((void*)ack_str);
  3416. }
  3417. /// @brief 通信网口设置
  3418. /// @param stream
  3419. static void communicationManagement(void *conn)
  3420. {
  3421. int r = -1 ;
  3422. char* ack_str = NULL ;
  3423. cJSON *cjson;
  3424. _CommunicationManageRequestInfo _communicationManageRequestInfo;
  3425. _CommunicationManageRequestInfo reqInfo;
  3426. GlobalDeviceInfo *devInfo=&__globalDeviceManage._globalDevInfo;
  3427. mg_stream_t *s=(mg_stream_t*)conn;
  3428. struct mg_http_message *hm=s->ev_data;
  3429. char *rx_body_buf=(char*)hm->body.buf;
  3430. //转换json参数
  3431. cjson = json_to_communication_manage(rx_body_buf,&reqInfo);
  3432. if(cjson==NULL)
  3433. {
  3434. http_reply(conn, 400, NULL);
  3435. return ;
  3436. }
  3437. //查询网络参数
  3438. if(strcmp(reqInfo.type,"listWkIPV4Query")==0 || strcmp(reqInfo.type,"listWkIPV6Query")==0)//缃戠粶鍙傛暟鏌ヨ
  3439. {
  3440. NetworkInfo_t info={0};
  3441. int r,ipv=(strstr(reqInfo.type, "listWkIPV4Query")?IP_V4:IP_V6);
  3442. r = sys_get_net(&info, ipv);
  3443. if(r==0) {
  3444. ack_str = communication_net_ack_to_json(&info);
  3445. }
  3446. }
  3447. else if(strcmp(reqInfo.type,"WkIPV4Save")==0 || strcmp(reqInfo.type,"WkIPV6Save")==0 ) //淇濆瓨鏁版嵁
  3448. {
  3449. NetworkInfo_t* info = &devInfo->_network_info;
  3450. _NET_CommunicationRequestInfo *info2=&reqInfo._net_info;
  3451. int ipv=(strstr(reqInfo.type, "WkIPV4Save")?IP_V4:IP_V6);
  3452. int mode = atoi(info2->mode);
  3453. if(mode==IP_STATIC || mode == IP_DHCP) {
  3454. info->mode = mode;
  3455. if(info2->ipaddr) strcpy(info->ip_address, info2->ipaddr);
  3456. if(info2->maskaddr) strcpy(info->mask, info2->maskaddr);
  3457. if(info2->gateway) strcpy(info->gateway, info2->gateway);
  3458. if(info2->dns1) strcpy(info->dns1, info2->dns1);
  3459. if(info2->dns2) strcpy(info->dns2, info2->dns2);
  3460. r = sys_set_net(info, ipv);
  3461. //print_net("set", info);
  3462. }
  3463. ack_str = ctrl_sts_ack_to_json();
  3464. }
  3465. //查询设置RS485参数
  3466. else if(strcmp(reqInfo.type,"listRsQuery")==0)//modbus鍙傛暟鏌ヨ
  3467. {
  3468. ModbusInfo_t* _modbusInfo_temp = &devInfo->_gmodbus_info;
  3469. ack_str = communication_rs_ack_to_json(_modbusInfo_temp);
  3470. }
  3471. else if(strcmp(reqInfo.type,"RsSave")==0)//淇濆瓨modbus鏁版嵁
  3472. {
  3473. ModbusInfo_t* info = &devInfo->_gmodbus_info;
  3474. bool isStrMaster=strcmp(reqInfo._rs_info.mode,"0")==0;
  3475. bool isStrSlave=strcmp(reqInfo._rs_info.mode,"1")==0;
  3476. if (isStrMaster||isStrMaster)
  3477. {
  3478. if (isStrMaster)
  3479. {
  3480. info->product_modbus_type = 0;
  3481. }
  3482. else
  3483. {
  3484. info->product_modbus_type = 1;
  3485. }
  3486. }
  3487. else
  3488. {
  3489. info->product_modbus_type = atoi(reqInfo._rs_info.mode);
  3490. }
  3491. info->product_modbus_baud = atoi(reqInfo._rs_info.baud);
  3492. info->product_modbus_addr = atoi(reqInfo._rs_info.addr);
  3493. ///////////////////////////////////////////////////////////////////////////////
  3494. // r = cascade_set_modbus(info);
  3495. r = cascade_set_ip_modbus(info);
  3496. if(r==0) {
  3497. __globalDeviceManage._globalDevInfo._gmodbus_info.product_modbus_addr = info->product_modbus_addr;
  3498. dev_update_device_modus_info(__globalDeviceManage.db,devInfo);
  3499. }
  3500. char buff[256];
  3501. if (!info->product_modbus_type)
  3502. {
  3503. sprintf(buff, "$%s$|$%s$|BD:%d", language_RS485_install[0],language_alarm_RS485_master[0],info->product_modbus_baud);
  3504. }
  3505. else
  3506. {
  3507. sprintf(buff, "$%s$|$%s$|addr:%d BD:%d",language_RS485_install[0],language_alarm_RS485_slave[0],info->product_modbus_addr,info->product_modbus_baud);
  3508. }
  3509. dev_insert_alarm_ctrl(__globalDeviceManage.db,__globalDeviceManage._globalPowerManger.product_id,3,buff);
  3510. ack_str = ctrl_sts_ack_to_json();
  3511. }
  3512. cJSON_Delete(cjson);
  3513. http_reply(conn, 200, ack_str);
  3514. cJSON_free((void*)ack_str);
  3515. }
  3516. /// @brief 服务管理
  3517. /// @param stream
  3518. static void serviceManagement(void *conn)
  3519. {
  3520. int ret = -1 ;
  3521. cJSON *cjson;
  3522. _ServiceManageRequestInfo _serviceManageRequestInfo;
  3523. char* ack_str = NULL ;
  3524. mg_stream_t *s=(mg_stream_t*)conn;
  3525. struct mg_http_message *hm=s->ev_data;
  3526. char *rx_body_buf = (char*)hm->body.buf;
  3527. GlobalDeviceManager *gdm=&__globalDeviceManage;
  3528. //转换json参数
  3529. memset(&_serviceManageRequestInfo, 0, sizeof(_serviceManageRequestInfo));
  3530. cjson = json_to_service_manage(rx_body_buf,&_serviceManageRequestInfo);
  3531. if(cjson==NULL)
  3532. {
  3533. http_reply(conn, 400, NULL);
  3534. return ;
  3535. }
  3536. if(strcmp(_serviceManageRequestInfo.type,"listSmtpQuery")==0)
  3537. {
  3538. ack_str = service_smtp_ack_to_json(&gdm->smtpInfo);
  3539. }
  3540. else if(strcmp(_serviceManageRequestInfo.type,"SmtpSave")==0)
  3541. {
  3542. //_SMTP_ServerRequestInfo
  3543. smtp_info_t mailInfo=gdm->smtpInfo;
  3544. smtp_send_t *send=&gdm->smtpInfo.send;
  3545. smtp_recv_t *recv=gdm->smtpInfo.recv;
  3546. _SMTP_ServerRequestInfo *info=&_serviceManageRequestInfo._smtp_info;
  3547. if(info->mode) {
  3548. int save_flag=0;
  3549. int mode = atoi(info->mode);
  3550. send->mode = mode;
  3551. if(send->mode) {
  3552. if(info->account && info->password && info->server && info->port && info->auth) {
  3553. if(strcmp(send->account, info->account)) {
  3554. strcpy(send->account, info->account); save_flag = 1;
  3555. }
  3556. if(strcmp(send->password, info->password)) {
  3557. strcpy(send->password, info->password); save_flag = 1;
  3558. }
  3559. if(strcmp(send->server, info->server)) {
  3560. strcpy(send->server, info->server); save_flag = 1;
  3561. }
  3562. if(strcmp(send->port, info->port)) {
  3563. strcpy(send->port, info->port); save_flag = 1;
  3564. }
  3565. if(strcmp(send->auth, info->auth)) {
  3566. strcpy(send->auth, info->auth); save_flag = 1;
  3567. }
  3568. }
  3569. }
  3570. else {
  3571. //memset(send, 0, sizeof(smtp_send_t)); save_flag = 1;
  3572. }
  3573. if(memcmp(&mailInfo.send,&gdm->smtpInfo.send,sizeof(smtp_send_t)))
  3574. {
  3575. dev_smtp_update_send(gdm->db, send);
  3576. // gdm->smtpInfo.send = mailInfo.send;
  3577. }
  3578. for (int i = 0; i < MAIL_RECV_MAX; i++)
  3579. {
  3580. recv[i].idx = i;
  3581. if (info->recvAccount[i])
  3582. {
  3583. recv[i].use = 1;
  3584. strcpy(recv[i].account, info->recvAccount[i]);
  3585. }
  3586. else
  3587. {
  3588. recv[i].use = 0;
  3589. if (mode)
  3590. {
  3591. strcpy(recv[i].account, "");
  3592. }
  3593. }
  3594. }
  3595. }
  3596. if (memcmp(mailInfo.recv, gdm->smtpInfo.recv, sizeof(smtp_recv_t) * MAIL_RECV_MAX))
  3597. {
  3598. dev_mail_update_recv(gdm->db, recv);
  3599. //memcpy(gdm->smtpInfo.recv, mailInfo.recv, sizeof(smtp_recv_t) * MAIL_RECV_MAX);
  3600. }
  3601. // if(memcmp(mailInfo.recv, gdm->smtpInfo.recv, sizeof(smtp_recv_t) * MAIL_RECV_MAX))
  3602. // {
  3603. // for(int i=0; i<SMTP_RECV_MAX; i++) {
  3604. // if(info->recvAccount[i]) {
  3605. // recv[i].idx = i;
  3606. // recv[i].use = 1;
  3607. // strcpy(recv[i].account, info->recvAccount[i]);
  3608. // dev_smtp_update_recv(gdm->db, &recv[i]);
  3609. // }
  3610. // }
  3611. // //dev_smtp_update_recv(gdm->db, recv);
  3612. // //memcpy(gdm->mailInfo.recv, mailInfo.recv, sizeof(smtp_recv_t) * MAIL_RECV_MAX);
  3613. // }
  3614. // for(int i=0; i<SMTP_RECV_MAX; i++) {
  3615. // if(info->recvAccount[i]) {
  3616. // recv[i].idx = i;
  3617. // recv[i].use = 1;
  3618. // strcpy(recv[i].account, info->recvAccount[i]);
  3619. // dev_smtp_update_recv(gdm->db, &recv[i]);
  3620. // }
  3621. // }
  3622. }
  3623. //查询snmp信息
  3624. else if(strcmp(_serviceManageRequestInfo.type,"listSnmpQuery")==0)
  3625. {
  3626. // 查询SNMP信息
  3627. if (0 == dev_get_snmp_info(__globalDeviceManage.db, &_globalSNMPManager))
  3628. {
  3629. ack_str = service_snmp_ack_to_json(&_globalSNMPManager);
  3630. }
  3631. }
  3632. else if(strcmp(_serviceManageRequestInfo.type,"SnmpSave")==0)
  3633. {
  3634. int len = 0;
  3635. _globalSNMPManager.mode = atoi(_serviceManageRequestInfo._snmp_info.mode);
  3636. if (strcmp(_serviceManageRequestInfo._snmp_info.version,"SNMP V1")==0)
  3637. {
  3638. _globalSNMPManager.version=0;
  3639. }
  3640. else if (strcmp(_serviceManageRequestInfo._snmp_info.version,"SNMP V2c")==0)
  3641. {
  3642. _globalSNMPManager.version=1;
  3643. }
  3644. else if (strcmp(_serviceManageRequestInfo._snmp_info.version,"SNMP V3")==0)
  3645. {
  3646. _globalSNMPManager.version=2;
  3647. }
  3648. else
  3649. {
  3650. _globalSNMPManager.version=-1;
  3651. }
  3652. strcpy(_globalSNMPManager.public, _serviceManageRequestInfo._snmp_info.public);
  3653. _globalSNMPManager.trapmode = atoi(_serviceManageRequestInfo._snmp_info.trapmode);
  3654. if (_serviceManageRequestInfo._snmp_info.nms_IP)
  3655. strcpy(_globalSNMPManager.nmsIP, _serviceManageRequestInfo._snmp_info.nms_IP);
  3656. crypt_t *pc = &_globalSNMPManager.crypt;
  3657. _SNMP_ServerRequestInfo *info = &_serviceManageRequestInfo._snmp_info;
  3658. if (_globalSNMPManager.version == 2)
  3659. {
  3660. if (info->user)
  3661. {
  3662. len = strlen(info->user);
  3663. if (len < 8 || len > 32)
  3664. {
  3665. log_e("snmp user length %d is wrong! correct is [8~32]", len);
  3666. return;
  3667. }
  3668. strcpy(pc->user, info->user);
  3669. if (info->auth_alg)
  3670. {
  3671. strcpy(pc->auth.alg, info->auth_alg);
  3672. if (strlen(info->auth_alg) > 1 && info->auth_passwd)
  3673. {
  3674. len = strlen(info->auth_passwd);
  3675. if (len < 8 || len > 32)
  3676. {
  3677. log_e("snmp auth passwd length %d is wrong! correct is [8~32]", len);
  3678. return;
  3679. }
  3680. strcpy(pc->auth.passwd, info->auth_passwd);
  3681. }
  3682. }
  3683. if (info->priv_alg)
  3684. {
  3685. strcpy(pc->priv.alg, info->priv_alg);
  3686. if (strlen(info->priv_alg) > 1 && info->priv_passwd)
  3687. {
  3688. len = strlen(info->priv_passwd);
  3689. if (len < 8 || len > 32)
  3690. {
  3691. log_e("snmp priv passwd length %d is wrong! correct is [8~32]", len);
  3692. return;
  3693. }
  3694. strcpy(pc->priv.passwd, info->priv_passwd);
  3695. }
  3696. }
  3697. }
  3698. }
  3699. _globalSNMPManager.product_id = __globalDeviceManage._globalDevInfo.product_id;
  3700. if (dev_update_snmp_info(__globalDeviceManage.db,_globalSNMPManager.product_id,&_globalSNMPManager) != 0)
  3701. {
  3702. log_e("update snmp info err.");
  3703. }
  3704. else
  3705. {
  3706. extern int snmp_config(SNMPManager * m);
  3707. snmp_config(&_globalSNMPManager);
  3708. }
  3709. }
  3710. //查询snmp_trap信息
  3711. else if(strcmp(_serviceManageRequestInfo.type,"listStQuery")==0)
  3712. {
  3713. }
  3714. else if(strcmp(_serviceManageRequestInfo.type,"StSave")==0)
  3715. {
  3716. }
  3717. //查询ntp信息
  3718. else if(strcmp(_serviceManageRequestInfo.type,"listNtpQuery")==0)
  3719. {
  3720. // 查询NTP信息
  3721. if (0 == dev_get_ntp_info(__globalDeviceManage.db,&_globalNTPManager))
  3722. {
  3723. ack_str = service_ntp_ack_to_json(&_globalNTPManager);
  3724. }
  3725. }
  3726. else if(strcmp(_serviceManageRequestInfo.type,"NtpSave")==0)
  3727. {
  3728. _globalNTPManager.mode = atoi(_serviceManageRequestInfo._ntp_info.mode);
  3729. strcpy(_globalNTPManager.ntpaddress, _serviceManageRequestInfo._ntp_info.ntpaddress);
  3730. strcpy(_globalNTPManager.ntpName, _serviceManageRequestInfo._ntp_info.ntpName);
  3731. _globalNTPManager.port = atoi(_serviceManageRequestInfo._ntp_info.port);
  3732. _globalNTPManager.product_id = __globalDeviceManage._globalDevInfo.product_id;
  3733. strcpy(_globalNTPManager.time, _serviceManageRequestInfo._ntp_info.time);
  3734. const char* key = "GMT/UTC";
  3735. char* p = strstr(_serviceManageRequestInfo._ntp_info.tzone, key);
  3736. if (p == NULL)
  3737. {
  3738. log_e("time zone not contain GMT/UTC");
  3739. return;
  3740. }
  3741. p += strlen(key);
  3742. int value = atoi(p);
  3743. char tempstr[10] ={0};
  3744. // memcpy(tempstr, &p[strlen(key)], strlen(p) - strlen(key));
  3745. // int value = atoi(tempstr);
  3746. if (value > 12 || value < -12)
  3747. {
  3748. char buf[128];
  3749. memset(buf, 0, sizeof(buf));
  3750. sprintf(buf, "product id = %d timezone: %d, timezone err.", _globalNTPManager.product_id, value);
  3751. log_e(buf);
  3752. return;
  3753. }
  3754. _globalNTPManager.tzone = value;
  3755. value = atoi(_serviceManageRequestInfo._ntp_info.weekday);
  3756. if (value > 12 || value < -11)
  3757. {
  3758. char buf[128];
  3759. memset(buf, 0, sizeof(buf));
  3760. sprintf(buf, "product id = %d weekday err.", _globalNTPManager.product_id);
  3761. log_e(buf);
  3762. return;
  3763. }
  3764. _globalNTPManager.weekday = value;
  3765. if (dev_update_ntp_info(__globalDeviceManage.db,_globalNTPManager.product_id,&_globalNTPManager) != 0)
  3766. {
  3767. log_e("update ntp info err.");
  3768. }
  3769. if (_globalNTPManager.mode == 0)
  3770. {
  3771. memset(tempstr, 0, sizeof(tempstr));
  3772. p = strstr(_globalNTPManager.time, "-");
  3773. if (p == NULL)
  3774. {
  3775. log_e("find year of local time failed");
  3776. return;
  3777. }
  3778. memset(tempstr, 0, sizeof(tempstr));
  3779. memcpy(tempstr, _globalNTPManager.time, p - _globalNTPManager.time);
  3780. struct tm tm_new;
  3781. tm_new.tm_year = atoi(tempstr);
  3782. char* p1 = strstr(&p[1], "-");
  3783. if (p1 == NULL)
  3784. {
  3785. log_e("find month of local time failed");
  3786. return;
  3787. }
  3788. int nSize= p1 - p - 1;
  3789. memset(tempstr, 0, sizeof(tempstr));
  3790. memcpy(tempstr, &p[1],nSize);
  3791. tm_new.tm_mon = atoi(tempstr);
  3792. p = p1;
  3793. p1 = strstr(&p[2], " ");//个位数第一位有可能是空格所以需要找空格后一个
  3794. if (p1 == NULL)
  3795. {
  3796. log_e("find mday of local time failed");
  3797. return;
  3798. }
  3799. memset(tempstr, 0, sizeof(tempstr));
  3800. memcpy(tempstr, &p[1], p1 - p - 1);
  3801. tm_new.tm_mday = atoi(tempstr);
  3802. p = p1;
  3803. p1 = strstr(&p[0], " ");
  3804. if (p1 == NULL)
  3805. {
  3806. log_e("find split of date and time failed");
  3807. return;
  3808. }
  3809. p = &p1[0];
  3810. p1 = strstr(p, ":");
  3811. if (p1 == NULL)
  3812. {
  3813. log_e("find hour of local time failed");
  3814. return;
  3815. }
  3816. memset(tempstr, 0, sizeof(tempstr));
  3817. memcpy(tempstr, &p[1], p1 - p);
  3818. tm_new.tm_hour = atoi(tempstr);
  3819. p = &p1[1];
  3820. p1 = strstr(p, ":");
  3821. if (p1 == NULL)
  3822. {
  3823. log_e("find minute of local time failed");
  3824. return;
  3825. }
  3826. memset(tempstr, 0, sizeof(tempstr));
  3827. memcpy(tempstr, &p[0], p1 - p);
  3828. tm_new.tm_min = atoi(tempstr);
  3829. p = &p1[1];
  3830. if (p == NULL)
  3831. {
  3832. log_e("find second of local time failed");
  3833. return;
  3834. }
  3835. memset(tempstr, 0, sizeof(tempstr));
  3836. memcpy(tempstr, &p[0], 2);
  3837. tm_new.tm_sec = atoi(tempstr);
  3838. set_time_zone(&tm_new, _globalNTPManager.tzone);
  3839. }
  3840. else if (_globalNTPManager.mode == 1)
  3841. {
  3842. set_zone(_globalNTPManager.tzone);
  3843. sleep(1);
  3844. extern int ntp_config(NTPManager *nm);
  3845. ntp_config(&_globalNTPManager);
  3846. }
  3847. char temp[100];
  3848. if (0==_globalNTPManager.mode)
  3849. {
  3850. //sprintf(temp,"$设置$|$时间$|%s", _globalNTPManager.time);
  3851. sprintf(temp,"Set Date & Time %s", _globalNTPManager.time);
  3852. }
  3853. else{
  3854. // sprintf(temp,"$设置$|$时间$|NTP %s", _globalNTPManager.ntpaddress);
  3855. sprintf(temp,"Set Date & Time sync from NTP %s", _globalNTPManager.ntpaddress);
  3856. }
  3857. dev_insert_alarm_ctrl(__globalDeviceManage.db,__globalDeviceManage._globalDevInfo.product_id, 3, temp);
  3858. ack_str = ctrl_sts_ack_to_json();
  3859. if (_serviceManageRequestInfo._ntp_info.mode) free(_serviceManageRequestInfo._ntp_info.mode);
  3860. if (_serviceManageRequestInfo._ntp_info.port) free(_serviceManageRequestInfo._ntp_info.port);
  3861. if (_serviceManageRequestInfo._ntp_info.tzone) free(_serviceManageRequestInfo._ntp_info.tzone);
  3862. if (_serviceManageRequestInfo._ntp_info.weekday) free(_serviceManageRequestInfo._ntp_info.weekday);
  3863. }
  3864. // 定时设置
  3865. else if (strcmp(_serviceManageRequestInfo.type, "listDsQuery") == 0)//||strcmp(_serviceManageRequestInfo.type, "listRlQuery") == 0)
  3866. {
  3867. // 查询通道信息
  3868. /*
  3869. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  3870. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  3871. {
  3872. if (_globalPowerMangerTemp->product_ch_id == chn_id)
  3873. break;
  3874. }
  3875. */
  3876. // 返回定时信息
  3877. pthread_mutex_lock(&__globalDeviceManage._power_ds);
  3878. ack_str = service_ds_all_ack_to_json(_serviceManageRequestInfo._ds_info.channelDate,
  3879. _serviceManageRequestInfo._ds_info.productChName,
  3880. _serviceManageRequestInfo._ds_info.productChId,
  3881. &__globalDeviceManage._globalPowerManger);
  3882. pthread_mutex_unlock(&__globalDeviceManage._power_ds);
  3883. }
  3884. else if (strcmp(_serviceManageRequestInfo.type, "dsSave") == 0)
  3885. {
  3886. pthread_mutex_lock(&__globalDeviceManage._power_ds);
  3887. int chn_id = -1;
  3888. for (int i = 0; i < 64; i++)
  3889. {
  3890. chn_id = _serviceManageRequestInfo._ds_info.productChIds[i];
  3891. if (chn_id <= 0)
  3892. {
  3893. break;
  3894. }
  3895. // 查询通道信息
  3896. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  3897. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  3898. {
  3899. if (_globalPowerMangerTemp->product_ch_id == chn_id)
  3900. break;
  3901. }
  3902. int start_year, start_month, start_day;
  3903. int end_year, end_month, end_day;
  3904. char current_date[11]; // 足够存储 "YYYY-MM-DD\0"
  3905. // 解析起始和结束日期
  3906. sscanf(_serviceManageRequestInfo._ds_info.StartDate, "%d-%d-%d", &start_year, &start_month, &start_day);
  3907. sscanf(_serviceManageRequestInfo._ds_info.Enddate, "%d-%d-%d", &end_year, &end_month, &end_day);
  3908. // 复制起始日期到current_date
  3909. strcpy(current_date, _serviceManageRequestInfo._ds_info.StartDate);
  3910. // 循环直到或超过结束日期
  3911. int done = 0;
  3912. while (!done)
  3913. {
  3914. // 当前日期
  3915. _PowerDSManage_t *new_data = (_PowerDSManage_t *)calloc(1, sizeof(_PowerDSManage_t));
  3916. if(!new_data) {
  3917. log_e("___ new_data calloc failed!\n");
  3918. break;
  3919. }
  3920. memset(new_data, 0, sizeof(_PowerDSManage_t));
  3921. strcpy(new_data->ds_date, current_date);
  3922. strcpy(new_data->ds_time, _serviceManageRequestInfo._ds_info.channelTime);
  3923. new_data->set_stats = atoi(_serviceManageRequestInfo._ds_info.setStatus);
  3924. new_data->ds_is_triggered = 0;
  3925. list_add_tail(&new_data->list, &_globalPowerMangerTemp->list_DS);
  3926. dev_insert_power_ds(__globalDeviceManage.db, 1, chn_id, new_data);
  3927. // 解析当前日期为年、月、日
  3928. sscanf(current_date, "%d-%d-%d", &start_year, &start_month, &start_day);
  3929. // 增加一天
  3930. add_day_to_date(current_date, &start_year, &start_month, &start_day);
  3931. // 检查是否超过结束日期
  3932. if (start_year > end_year ||
  3933. (start_year == end_year && start_month > end_month) ||
  3934. (start_year == end_year && start_month == end_month && start_day > end_day))
  3935. {
  3936. done = 1; // 超过结束日期,退出循环
  3937. }
  3938. }
  3939. }
  3940. pthread_mutex_unlock(&__globalDeviceManage._power_ds);
  3941. char temp[100];
  3942. //sprintf(temp, "$设置$|定时$");
  3943. sprintf(temp, "Add scheduled tasks");
  3944. dev_insert_alarm_ctrl(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, 3, temp);
  3945. ack_str = ctrl_sts_ack_to_json();
  3946. }
  3947. //批量删除
  3948. else if (strcmp(_serviceManageRequestInfo.type, "deleteDs")==0)
  3949. {
  3950. pthread_mutex_lock(&__globalDeviceManage._power_ds);
  3951. int nChID = 0;
  3952. char pcDate[16];
  3953. char pcTime[16];
  3954. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  3955. _PowerDSManage_t* _powerDsManageTemp=NULL;;
  3956. char *pCharData;
  3957. for (int i = 0; i < 64; i++)
  3958. {
  3959. pCharData = _serviceManageRequestInfo._ds_info.idx[i];
  3960. if (pCharData == NULL || *pCharData == '\0')
  3961. {
  3962. break;
  3963. }
  3964. sscanf(pCharData, "%d %s %s", &nChID, pcDate, pcTime);
  3965. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  3966. {
  3967. if (_globalPowerMangerTemp->product_ch_id == nChID)
  3968. break;
  3969. }
  3970. list_for_each_entry(_powerDsManageTemp, &_globalPowerMangerTemp->list_DS, list)
  3971. {
  3972. if (strcmp(_powerDsManageTemp->ds_date, pcDate) == 0&&strcmp(_powerDsManageTemp->ds_time, pcTime) == 0)
  3973. {
  3974. dev_delete_power_ds(__globalDeviceManage.db, 1, _globalPowerMangerTemp->product_ch_id, _powerDsManageTemp);
  3975. list_del(&_powerDsManageTemp->list);
  3976. free(_powerDsManageTemp);
  3977. _powerDsManageTemp=NULL;
  3978. break;
  3979. }
  3980. }
  3981. }
  3982. pthread_mutex_unlock(&__globalDeviceManage._power_ds);
  3983. char temp[100];
  3984. // sprintf(temp, "$删除$|定时$");
  3985. sprintf(temp, "Delete scheduled tasks");
  3986. dev_insert_alarm_ctrl(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, 3, temp);
  3987. ack_str = ctrl_sts_ack_to_json();
  3988. }
  3989. // 时序设置
  3990. else if (strcmp(_serviceManageRequestInfo.type, "listSxQuery") == 0) // 查询
  3991. {
  3992. bool bflag = false;
  3993. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  3994. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  3995. {
  3996. if (_globalPowerMangerTemp->product_id == atoi(_serviceManageRequestInfo._posix_info.productId))
  3997. {
  3998. bflag = true;
  3999. break;
  4000. }
  4001. }
  4002. if (bflag == false) return;
  4003. ack_str = service_sx_ack_to_json(_globalPowerMangerTemp->product_id, &__globalDeviceManage._globalPowerManger);
  4004. if (_serviceManageRequestInfo._posix_info.productId) free(_serviceManageRequestInfo._posix_info.productId);
  4005. }
  4006. else if(strcmp(_serviceManageRequestInfo.type,"sXTimeSave")==0)//保存时间间隔
  4007. {
  4008. int chn_id = atoi(_serviceManageRequestInfo._posix_info.productChId);
  4009. int id = atoi(_serviceManageRequestInfo._posix_info.productId);
  4010. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  4011. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  4012. {
  4013. if (_globalPowerMangerTemp->product_id == id && _globalPowerMangerTemp->product_ch_id == chn_id)
  4014. {
  4015. int value = atoi(_serviceManageRequestInfo._posix_info.firingInterval);
  4016. if (value > 65535)
  4017. {
  4018. char buf[128];
  4019. memset(buf, 0, sizeof(buf));
  4020. sprintf(buf, "product id = %d, ch id = %d start delay err.", _globalPowerMangerTemp->product_id, _globalPowerMangerTemp->product_ch_id);
  4021. log_e(buf);
  4022. continue;
  4023. }
  4024. _globalPowerMangerTemp->product_ch_start_delay = value;
  4025. value = atoi(_serviceManageRequestInfo._posix_info.closeInterval);
  4026. if (value > 65535)
  4027. {
  4028. char buf[128];
  4029. memset(buf, 0, sizeof(buf));
  4030. sprintf(buf, "product id = %d, ch id = %d stop delay err.", _globalPowerMangerTemp->product_id, _globalPowerMangerTemp->product_ch_id);
  4031. log_e(buf);
  4032. continue;
  4033. }
  4034. _globalPowerMangerTemp->product_ch_stop_delay = value;
  4035. 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);
  4036. if (ret<0)
  4037. {
  4038. usleep(50000);
  4039. 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);
  4040. /* code */
  4041. }
  4042. 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);
  4043. if (ret<0)
  4044. {
  4045. usleep(50000);
  4046. 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);
  4047. /* code */
  4048. }
  4049. if (dev_update_power_manage_genera_info(__globalDeviceManage.db,_globalPowerMangerTemp->product_id,_globalPowerMangerTemp->product_ch_id,_globalPowerMangerTemp) != 0)
  4050. {
  4051. log_e("update pwr general data err.");
  4052. }
  4053. break;
  4054. }
  4055. }
  4056. ack_str = ctrl_sts_ack_to_json();
  4057. if (_serviceManageRequestInfo._posix_info.productId) free(_serviceManageRequestInfo._posix_info.productId);
  4058. if (_serviceManageRequestInfo._posix_info.closeInterval) free(_serviceManageRequestInfo._posix_info.closeInterval);
  4059. if (_serviceManageRequestInfo._posix_info.firingInterval) free(_serviceManageRequestInfo._posix_info.firingInterval);
  4060. if (_serviceManageRequestInfo._posix_info.productChId) free(_serviceManageRequestInfo._posix_info.productChId);
  4061. }
  4062. // 分组设置
  4063. else if (strcmp(_serviceManageRequestInfo.type, "fzSave") == 0) // 分组设置
  4064. {
  4065. int nMode = atoi(_serviceManageRequestInfo._group_info.mode);
  4066. GlobalPowerManger* _globalPowerMangerTemp = NULL ;
  4067. int chNum= 0;
  4068. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  4069. {
  4070. chNum++;
  4071. }
  4072. //初始化分组-(未析构)
  4073. GroupInfo group_list;
  4074. INIT_LIST_HEAD(&group_list.list);
  4075. if (0 == nMode)//相邻分组方式
  4076. {
  4077. int xlnum = atoi(_serviceManageRequestInfo._group_info.xlnumber);
  4078. if (xlnum > 0)
  4079. {
  4080. int pGroupNum = chNum/xlnum;
  4081. if (chNum % xlnum>0)
  4082. {
  4083. pGroupNum++;
  4084. }
  4085. dev_delete__group_info(__globalDeviceManage.db,__globalDeviceManage._globalDevInfo.product_id);
  4086. for (size_t i = 0; i < pGroupNum; i++)
  4087. {
  4088. GroupInfo *new_group = (GroupInfo *)malloc(sizeof(GroupInfo));
  4089. // 清空数据
  4090. memset(new_group, 0, sizeof(GroupInfo));
  4091. if (!new_group)
  4092. {
  4093. break;
  4094. }
  4095. new_group->product_id = __globalDeviceManage._globalDevInfo.product_id;
  4096. new_group->GroupID = i + 1;
  4097. sprintf(new_group->GroupName, "Group%d", i + 1);
  4098. int j = 0;
  4099. GlobalPowerManger *_globalPowerMangerTemp1 = NULL;
  4100. list_for_each_entry(_globalPowerMangerTemp1, &__globalDeviceManage._globalPowerManger.list, list)
  4101. {
  4102. if (j >= i * xlnum && j < (i + 1) * xlnum)
  4103. {
  4104. char chTemp[64];
  4105. sprintf(chTemp, "%d,", _globalPowerMangerTemp1->product_ch_id);
  4106. strcat(new_group->GroupChList, chTemp);
  4107. }
  4108. j++;
  4109. }
  4110. list_add_tail(&new_group->list, &group_list.list);
  4111. dev_insert_group_info(__globalDeviceManage.db, new_group);
  4112. }
  4113. }
  4114. }
  4115. else if (1 == nMode)//间隔分组方式
  4116. {
  4117. int jgnum = atoi(_serviceManageRequestInfo._group_info.jgnumber);
  4118. int pGroupNum = jgnum+1;
  4119. if (pGroupNum>chNum)
  4120. {
  4121. pGroupNum=chNum;
  4122. }
  4123. if (jgnum >= 0 && pGroupNum> 0 )
  4124. {
  4125. dev_delete__group_info(__globalDeviceManage.db,__globalDeviceManage._globalDevInfo.product_id);
  4126. for (size_t i = 0; i < pGroupNum; i++)
  4127. {
  4128. GroupInfo *new_group = (GroupInfo *)malloc(sizeof(GroupInfo));
  4129. // 清空数据
  4130. memset(new_group, 0, sizeof(GroupInfo));
  4131. if (!new_group)
  4132. {
  4133. break;
  4134. }
  4135. new_group->product_id = __globalDeviceManage._globalDevInfo.product_id;
  4136. new_group->GroupID = i + 1;
  4137. sprintf(new_group->GroupName, "Group%d", i + 1);
  4138. int j = i;
  4139. int m = 0;
  4140. GlobalPowerManger *_globalPowerMangerTemp1 = NULL;
  4141. list_for_each_entry(_globalPowerMangerTemp1, &__globalDeviceManage._globalPowerManger.list, list)
  4142. {
  4143. if (m==j)
  4144. {
  4145. char chTemp[64];
  4146. sprintf(chTemp, "%d,", _globalPowerMangerTemp1->product_ch_id);
  4147. strcat(new_group->GroupChList, chTemp);
  4148. j=j+jgnum+1;
  4149. }
  4150. m++;
  4151. }
  4152. list_add_tail(&new_group->list, &group_list.list);
  4153. dev_insert_group_info(__globalDeviceManage.db, new_group);
  4154. }
  4155. }
  4156. }
  4157. ack_str = ctrl_sts_ack_to_json();
  4158. }
  4159. else if (strcmp(_serviceManageRequestInfo.type, "listFzQuery") == 0) // 分组查询
  4160. {
  4161. // 查询分组信息
  4162. GroupInfo group_list;
  4163. INIT_LIST_HEAD(&group_list.list);
  4164. if (0 == dev_get_group_info(__globalDeviceManage.db, &group_list))
  4165. {
  4166. // 返回分组信息
  4167. ack_str = service_group_ack_to_json(&group_list);
  4168. }
  4169. }
  4170. else if (strcmp(_serviceManageRequestInfo.type, "fzOpen") == 0) // 分组开
  4171. {
  4172. unsigned short pAddrCtrl[50];
  4173. memset(pAddrCtrl,0,sizeof(pAddrCtrl));
  4174. int ngroup= atoi(_serviceManageRequestInfo._group_info.opergroupid);
  4175. // 查询分组信息
  4176. GroupInfo group_list;
  4177. INIT_LIST_HEAD(&group_list.list);
  4178. if (0 == dev_get_group_info(__globalDeviceManage.db, &group_list))
  4179. {
  4180. GroupInfo *_GroupInfoTemp = NULL;
  4181. list_for_each_entry(_GroupInfoTemp, &group_list.list, list)
  4182. {
  4183. if (_GroupInfoTemp->GroupID == ngroup)
  4184. {
  4185. if (__globalDeviceManage._globalDevInfo.product_pwr_type == 1)
  4186. { // 直流版本功能
  4187. char *pCHlist;
  4188. char *pCHListSave;
  4189. pCHlist=strtok_r(_GroupInfoTemp->GroupChList, ",",&pCHListSave);
  4190. while(pCHlist!=NULL)
  4191. {
  4192. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  4193. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  4194. {
  4195. if (_globalPowerMangerTemp == NULL)
  4196. break;
  4197. if (atoi(pCHlist) == _globalPowerMangerTemp->product_ch_id)
  4198. {
  4199. log_d("switch ctrl:%d,%d", _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr);
  4200. pAddrCtrl[(int)_globalPowerMangerTemp->product_saddr] |= 1 << (_globalPowerMangerTemp->product_ch_addr - 1);
  4201. break;
  4202. }
  4203. }
  4204. pCHlist=strtok_r(NULL, ",",&pCHListSave);
  4205. }
  4206. for (size_t i = 0; i < 50; i++)
  4207. {
  4208. if (pAddrCtrl[i] != 0)
  4209. {
  4210. ret = g_switch_set_dcpdu_chns_ctrl(&__globalDeviceManage._globalRelaySampManger,
  4211. i,
  4212. pAddrCtrl[i],
  4213. 1);
  4214. if (ret < 0)
  4215. {
  4216. ret = g_switch_set_dcpdu_chns_ctrl(&__globalDeviceManage._globalRelaySampManger,
  4217. i,
  4218. pAddrCtrl[i], 1);
  4219. }
  4220. }
  4221. }
  4222. }
  4223. else
  4224. {
  4225. char *pCHlist;
  4226. char *pCHListSave;
  4227. pCHlist = strtok_r(_GroupInfoTemp->GroupChList, ",",&pCHListSave);
  4228. //其他版本功能
  4229. while (pCHlist!=NULL)
  4230. {
  4231. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  4232. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  4233. {
  4234. if (_globalPowerMangerTemp == NULL)
  4235. break;
  4236. if (atoi(pCHlist) == _globalPowerMangerTemp->product_ch_id)
  4237. {
  4238. log_d("switch ctrl:%d,%d", _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr);
  4239. ret= g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger,
  4240. _globalPowerMangerTemp,
  4241. _globalPowerMangerTemp->product_saddr,
  4242. _globalPowerMangerTemp->product_ch_addr, // 多版端口余8
  4243. 1,true);
  4244. if (ret < 0)
  4245. {
  4246. ret = g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger,
  4247. _globalPowerMangerTemp,
  4248. _globalPowerMangerTemp->product_saddr,
  4249. _globalPowerMangerTemp->product_ch_addr, // 多版端口余8
  4250. 1,true);
  4251. }
  4252. break;
  4253. }
  4254. }
  4255. pCHlist = strtok_r(NULL, ",",&pCHListSave);
  4256. }
  4257. }
  4258. }
  4259. }
  4260. }
  4261. char temp[100];
  4262. //sprintf(temp, "$打开$|$分组$|%d", ngroup);
  4263. sprintf(temp, "Open group %d", ngroup);
  4264. dev_insert_alarm_ctrl(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, 3, temp);
  4265. ack_str = ctrl_sts_ack_to_json();
  4266. }
  4267. else if (strcmp(_serviceManageRequestInfo.type, "fzClose") == 0) // 分组关
  4268. {
  4269. unsigned short pAddrCtrl[50];
  4270. memset(pAddrCtrl, 0, sizeof(pAddrCtrl));
  4271. int ngroup = atoi(_serviceManageRequestInfo._group_info.opergroupid);
  4272. // 查询分组信息
  4273. GroupInfo group_list;
  4274. INIT_LIST_HEAD(&group_list.list);
  4275. if (0 == dev_get_group_info(__globalDeviceManage.db, &group_list))
  4276. {
  4277. GroupInfo *_GroupInfoTemp = NULL;
  4278. list_for_each_entry(_GroupInfoTemp, &group_list.list, list)
  4279. {
  4280. if (_GroupInfoTemp->GroupID == ngroup)
  4281. {
  4282. /* code */
  4283. if (__globalDeviceManage._globalDevInfo.product_pwr_type == 1)
  4284. {
  4285. char *pCHlist;
  4286. char *pCHListSave;
  4287. pCHlist = strtok_r(_GroupInfoTemp->GroupChList, ",",&pCHListSave);
  4288. // 直流版本功能
  4289. while (pCHlist!=NULL)
  4290. {
  4291. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  4292. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  4293. {
  4294. if (_globalPowerMangerTemp == NULL)
  4295. break;
  4296. if (atoi(pCHlist) == _globalPowerMangerTemp->product_ch_id)
  4297. {
  4298. log_d("switch ctrl:%d,%d", _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr);
  4299. pAddrCtrl[(int)_globalPowerMangerTemp->product_saddr] |= 1 << (_globalPowerMangerTemp->product_ch_addr-1);
  4300. break;
  4301. }
  4302. }
  4303. pCHlist = strtok_r(NULL, ",",&pCHListSave);
  4304. }
  4305. for (size_t i = 0; i < 50; i++)
  4306. {
  4307. if (pAddrCtrl[i] != 0)
  4308. {
  4309. ret = g_switch_set_dcpdu_chns_ctrl(&__globalDeviceManage._globalRelaySampManger,
  4310. i,
  4311. pAddrCtrl[i],
  4312. 0);
  4313. if (ret < 0)
  4314. {
  4315. ret = g_switch_set_dcpdu_chns_ctrl(&__globalDeviceManage._globalRelaySampManger,
  4316. i,
  4317. pAddrCtrl[i],
  4318. 0);
  4319. /* code */
  4320. }
  4321. }
  4322. }
  4323. }
  4324. else
  4325. {
  4326. char *pCHlist;
  4327. char *pCHListSave;
  4328. pCHlist=strtok_r(_GroupInfoTemp->GroupChList, ",",&pCHListSave);
  4329. while (pCHlist!=NULL)
  4330. {
  4331. GlobalPowerManger *_globalPowerMangerTemp = NULL;
  4332. list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  4333. {
  4334. if (_globalPowerMangerTemp == NULL)
  4335. break;
  4336. if (atoi(pCHlist) == _globalPowerMangerTemp->product_ch_id)
  4337. {
  4338. log_d("switch ctrl:%d,%d", _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr);
  4339. ret = g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger,
  4340. _globalPowerMangerTemp,
  4341. _globalPowerMangerTemp->product_saddr,
  4342. _globalPowerMangerTemp->product_ch_addr, // 多版端口余8
  4343. 0,true);
  4344. if (ret < 0)
  4345. {
  4346. ret = g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger,
  4347. _globalPowerMangerTemp,
  4348. _globalPowerMangerTemp->product_saddr,
  4349. _globalPowerMangerTemp->product_ch_addr, // 多版端口余8
  4350. 0,true);
  4351. }
  4352. break;
  4353. }
  4354. }
  4355. pCHlist = strtok_r(NULL, ",",&pCHListSave);
  4356. }
  4357. }
  4358. }
  4359. }
  4360. }
  4361. char temp[100];
  4362. // sprintf(temp, "$关闭$|$分组$|%d", ngroup);
  4363. sprintf(temp, "Close group %d", ngroup);
  4364. dev_insert_alarm_ctrl(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, 3, temp);
  4365. ack_str = ctrl_sts_ack_to_json();
  4366. }
  4367. //cJSON_Delete(cjson);
  4368. http_reply(conn, 200, ack_str);
  4369. cJSON_free((void*)ack_str);
  4370. }
  4371. /// @brief 系统管理
  4372. /// @param stream
  4373. static void systemManagent(void *conn)
  4374. {
  4375. int ret = -1 ;
  4376. cJSON *cjson;
  4377. _UserRoleManageInfo _UserRoleManageRequestInfo;
  4378. char* ack_str = NULL ;
  4379. mg_stream_t *s=(mg_stream_t*)conn;
  4380. struct mg_http_message *hm=s->ev_data;
  4381. char *rx_body_buf = (char*)hm->body.buf;
  4382. //转换json参数
  4383. cjson = json_to_user_manage(rx_body_buf,&_UserRoleManageRequestInfo);
  4384. if(cjson==NULL)
  4385. {
  4386. http_reply(conn, 400, NULL);
  4387. return ;
  4388. }
  4389. //获取角色信息
  4390. else if(strcmp(_UserRoleManageRequestInfo.type,"getUser")==0)
  4391. {
  4392. // 查询用户信息
  4393. UserInfo User_list;
  4394. INIT_LIST_HEAD(&User_list.list);
  4395. // 查询角色信息
  4396. RoleInfo Role_list;
  4397. INIT_LIST_HEAD(&Role_list.list);
  4398. ack_str = ctrl_sts_ack_to_json();
  4399. if (0 == dev_get_user_info(__globalDeviceManage.db, &User_list) && 0 == dev_get_role_info(__globalDeviceManage.db, &Role_list)
  4400. /*&& strcmp(_UserRoleManageRequestInfo.userName,"")!=0*/)
  4401. {
  4402. char *nName=getUserNamebyToken(_UserRoleManageRequestInfo.user_token);
  4403. if (nName!=NULL)
  4404. {
  4405. ack_str = service_userRole_ack_to_json(nName,&User_list, &Role_list);
  4406. }
  4407. }
  4408. UserInfo *node;
  4409. UserInfo *next;
  4410. list_for_each_entry_safe(node, next, &User_list.list, list)
  4411. {
  4412. list_del(&node->list);
  4413. free(node);
  4414. }
  4415. RoleInfo *node1;
  4416. RoleInfo *next1;
  4417. list_for_each_entry_safe(node1, next1, &Role_list.list, list)
  4418. {
  4419. list_del(&node1->list);
  4420. free(node1);
  4421. }
  4422. }
  4423. //查询用户列表
  4424. else if(strcmp(_UserRoleManageRequestInfo.type,"listUserQuery")==0)
  4425. {
  4426. // 查询用户信息
  4427. UserInfo User_list;
  4428. INIT_LIST_HEAD(&User_list.list);
  4429. // 查询角色信息
  4430. RoleInfo Role_list;
  4431. INIT_LIST_HEAD(&Role_list.list);
  4432. ack_str = ctrl_sts_ack_to_json();
  4433. if (0 == dev_get_user_info(__globalDeviceManage.db, &User_list) && 0 == dev_get_role_info(__globalDeviceManage.db, &Role_list)
  4434. /*&& strcmp(_UserRoleManageRequestInfo.userName,"")!=0*/)
  4435. {
  4436. char *nName = getUserNamebyToken(_UserRoleManageRequestInfo.user_token);
  4437. if (nName != NULL)
  4438. {
  4439. ack_str = service_userQuery_ack_to_json(nName, &User_list, &Role_list,_UserRoleManageRequestInfo.userName,_UserRoleManageRequestInfo.pagenum,_UserRoleManageRequestInfo.pagesize);
  4440. }
  4441. }
  4442. UserInfo *node;
  4443. UserInfo *next;
  4444. list_for_each_entry_safe(node, next, &User_list.list, list)
  4445. {
  4446. list_del(&node->list);
  4447. free(node);
  4448. }
  4449. RoleInfo *node1;
  4450. RoleInfo *next1;
  4451. list_for_each_entry_safe(node1, next1, &Role_list.list, list)
  4452. {
  4453. list_del(&node1->list);
  4454. free(node1);
  4455. }
  4456. }
  4457. //删除用户
  4458. else if(strcmp(_UserRoleManageRequestInfo.type,"deleteUser")==0)
  4459. {
  4460. bool CurUserFlag=false;
  4461. char *nName = getUserNamebyToken(_UserRoleManageRequestInfo.user_token);
  4462. if (nName != NULL)
  4463. {
  4464. UserInfo User_list;
  4465. INIT_LIST_HEAD(&User_list.list);
  4466. if (0 == dev_get_user_info(__globalDeviceManage.db, &User_list))
  4467. {
  4468. UserInfo *_UserInfoTemp = NULL;
  4469. list_for_each_entry(_UserInfoTemp, &User_list.list, list)
  4470. {
  4471. if (strcmp(_UserInfoTemp->userName, nName) == 0)
  4472. {
  4473. if (_UserRoleManageRequestInfo.userIds == _UserInfoTemp->userID)
  4474. {
  4475. CurUserFlag = true;
  4476. break;
  4477. }
  4478. break;
  4479. }
  4480. }
  4481. }
  4482. UserInfo *node;
  4483. UserInfo *next;
  4484. list_for_each_entry_safe(node, next, &User_list.list, list)
  4485. {
  4486. list_del(&node->list);
  4487. free(node);
  4488. }
  4489. }
  4490. if (!CurUserFlag)
  4491. {
  4492. // char *pUserlist;
  4493. // char *pUserListSave;
  4494. // pUserlist = strtok_r(_UserRoleManageRequestInfo.userIds, ",", &pUserListSave);
  4495. // while (pUserlist != NULL)
  4496. //{
  4497. dev_delete_user_info(__globalDeviceManage.db, _UserRoleManageRequestInfo.userIds);
  4498. // pUserlist = strtok_r(NULL, ",", &pUserListSave);
  4499. // }
  4500. char temp[100];
  4501. // sprintf(temp, "$删除$|$用户$|%d", _UserRoleManageRequestInfo.userIds);
  4502. sprintf(temp, "Delete user %d", _UserRoleManageRequestInfo.userIds);
  4503. dev_insert_alarm_ctrl(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, ALARM_TYPE_OPRATION, temp);
  4504. ack_str = ctrl_sts_ack_to_json();
  4505. }
  4506. else
  4507. {
  4508. ack_str = ctrl_breaker_err_ack_to_json("Can't delete logged in users!!!!");
  4509. }
  4510. }
  4511. //添加用户
  4512. else if(strcmp(_UserRoleManageRequestInfo.type,"addUser")==0)
  4513. {
  4514. //未析构
  4515. UserInfo *new_user = (UserInfo *)malloc(sizeof(UserInfo));
  4516. memset(new_user,0,sizeof(UserInfo));
  4517. new_user->product_id = __globalDeviceManage._globalDevInfo.product_id;
  4518. int nMaxUserNum=1;
  4519. bool existFlag=false;
  4520. UserInfo User_list;
  4521. INIT_LIST_HEAD(&User_list.list);
  4522. // 查询角色信息
  4523. RoleInfo Role_list;
  4524. INIT_LIST_HEAD(&Role_list.list);
  4525. if (0 == dev_get_user_info(__globalDeviceManage.db, &User_list) && 0 == dev_get_role_info(__globalDeviceManage.db, &Role_list))
  4526. {
  4527. UserInfo *_UserInfoTemp = NULL;
  4528. list_for_each_entry(_UserInfoTemp, &User_list.list, list)
  4529. {
  4530. if (_UserInfoTemp == NULL)
  4531. break;
  4532. if (_UserInfoTemp->userID >= nMaxUserNum)
  4533. {
  4534. nMaxUserNum=_UserInfoTemp->userID;
  4535. }
  4536. if (strcmp(_UserInfoTemp->userName, _UserRoleManageRequestInfo.userName) == 0)
  4537. {
  4538. existFlag = true;
  4539. break;
  4540. }
  4541. }
  4542. if (existFlag)
  4543. {
  4544. ack_str = ctrl_breaker_err_ack_to_json("User already exists!");
  4545. }
  4546. else
  4547. {
  4548. new_user->userID = nMaxUserNum + 1;
  4549. new_user->userName = malloc(256);
  4550. strcpy(new_user->userName, _UserRoleManageRequestInfo.userName);
  4551. new_user->userPW = malloc(256);
  4552. strcpy(new_user->userPW, _UserRoleManageRequestInfo.password);
  4553. new_user->nickName = malloc(256);
  4554. strcpy(new_user->nickName, _UserRoleManageRequestInfo.nickName);
  4555. new_user->roleID = _UserRoleManageRequestInfo.roleId; // GetRoleIDByName(_UserRoleManageRequestInfo.roleName,&Role_list);
  4556. new_user->createTime = malloc(64);
  4557. struct tm *t;
  4558. struct timeval tv;
  4559. gettimeofday(&tv, NULL);
  4560. t = localtime(&tv.tv_sec);
  4561. 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);
  4562. dev_insert_user_info(__globalDeviceManage.db, new_user);
  4563. free(new_user->userName);
  4564. free(new_user->userPW);
  4565. free(new_user->nickName);
  4566. free(new_user->createTime);
  4567. char temp[100];
  4568. // sprintf(temp, "$添加$|$用户$|%s", _UserRoleManageRequestInfo.userName);
  4569. sprintf(temp, "Add user %s", _UserRoleManageRequestInfo.userName);
  4570. dev_insert_alarm_ctrl(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, ALARM_TYPE_OPRATION, temp);
  4571. ack_str=ctrl_sts_ack_to_json();
  4572. }
  4573. }
  4574. free(new_user);
  4575. UserInfo *node;
  4576. UserInfo *next;
  4577. list_for_each_entry_safe(node, next, &User_list.list, list)
  4578. {
  4579. list_del(&node->list);
  4580. free(node);
  4581. }
  4582. RoleInfo *node1;
  4583. RoleInfo *next1;
  4584. list_for_each_entry_safe(node1, next1, &Role_list.list, list)
  4585. {
  4586. list_del(&node1->list);
  4587. free(node1);
  4588. }
  4589. }
  4590. //更新用户信息
  4591. else if(strcmp(_UserRoleManageRequestInfo.type,"updateUser")==0)
  4592. {
  4593. //未析构
  4594. UserInfo *new_user = (UserInfo *)malloc(sizeof(UserInfo));
  4595. memset(new_user,0,sizeof(UserInfo));
  4596. new_user->product_id = __globalDeviceManage._globalDevInfo.product_id;
  4597. new_user->userID = _UserRoleManageRequestInfo.userId;
  4598. new_user->userName = malloc(256);
  4599. strcpy(new_user->userName , _UserRoleManageRequestInfo.userName);
  4600. new_user->userPW = malloc(256);
  4601. strcpy(new_user->userPW , _UserRoleManageRequestInfo.password);
  4602. new_user->nickName = malloc(256);
  4603. strcpy(new_user->nickName , _UserRoleManageRequestInfo.nickName);
  4604. new_user->roleID = _UserRoleManageRequestInfo.roleId;
  4605. new_user->createTime = malloc(64);
  4606. strcpy(new_user->createTime , _UserRoleManageRequestInfo.createTime);
  4607. dev_update_user_info(__globalDeviceManage.db, new_user);
  4608. free(new_user->userName);
  4609. free(new_user->userPW);
  4610. free(new_user->nickName);
  4611. free(new_user->createTime);
  4612. free(new_user);
  4613. char temp[100];
  4614. //sprintf(temp, "$修改$|$用户$|%s", _UserRoleManageRequestInfo.userName);
  4615. sprintf(temp, "Update user %s", _UserRoleManageRequestInfo.userName);
  4616. dev_insert_alarm_ctrl(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, 3, temp);
  4617. ack_str=ctrl_sts_ack_to_json();
  4618. }
  4619. cJSON_Delete(cjson);
  4620. http_reply(conn, 200, ack_str);
  4621. cJSON_free((void*)ack_str);
  4622. }
  4623. /// @brief 设备重启
  4624. /// @param stream
  4625. static void equipmentMintenance(void *conn)
  4626. {
  4627. int ret = -1 ;
  4628. char* ack_str = NULL ;
  4629. cJSON *cjson;
  4630. _OverBackStsInfo _over_back_sts_info; //设备总体状态信息
  4631. _Equipment_Mintenance _Over_equipment_mintenance;
  4632. mg_stream_t *s=(mg_stream_t*)conn;
  4633. struct mg_http_message *hm=s->ev_data;
  4634. char *rx_body_buf = (char*)hm->body.buf;
  4635. //转换json参数
  4636. cjson = json_to_over_equipment_mintenance(rx_body_buf,&_Over_equipment_mintenance);
  4637. if(cjson==NULL)
  4638. {
  4639. http_reply(conn, 400, NULL);
  4640. return ;
  4641. }
  4642. //查询设备列表
  4643. if(strcmp(_Over_equipment_mintenance.type,"listSbRestartQuery")==0 || strcmp(_Over_equipment_mintenance.type,"listSbWhQuery")==0)
  4644. {
  4645. // 查询设备总体参数
  4646. if (dev_get_device_info(__globalDeviceManage.db,&__globalDeviceManage._globalDevInfo) != 0)
  4647. {
  4648. log_e("get device info error.\n");
  4649. http_reply(conn, 400, NULL);
  4650. return;
  4651. }
  4652. _over_back_sts_info.product_name = __globalDeviceManage._globalDevInfo.product_name;
  4653. _over_back_sts_info.product_number = __globalDeviceManage._globalDevInfo.product_number;
  4654. _over_back_sts_info.product_id = __globalDeviceManage._globalDevInfo.product_id;
  4655. _over_back_sts_info.product_Code = malloc(8);
  4656. strcpy(_over_back_sts_info.product_Code, "-");
  4657. // _over_back_sts_info.product_type = malloc(32);
  4658. //strcpy(_over_back_sts_info.product_type, "GC Series");
  4659. _over_back_sts_info.product_type=g_product_type_str[__globalDeviceManage._globalDevInfo.product_type];
  4660. _over_back_sts_info.productVersion = __globalDeviceManage._globalDevInfo.product_version;
  4661. _over_back_sts_info.product_sysTime = malloc(32);
  4662. struct tm *t;
  4663. struct timeval tv;
  4664. gettimeofday(&tv, NULL);
  4665. t = localtime(&tv.tv_sec);
  4666. sprintf(_over_back_sts_info.product_sysTime, "%04d-%02d-%02d %02d:%02d:%02d", t->tm_year + 1900, t->tm_mon + 1,
  4667. t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
  4668. long diff =0;
  4669. struct timespec ts;
  4670. if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0)
  4671. {
  4672. diff = ts.tv_sec;
  4673. }
  4674. _over_back_sts_info.product_runTime = malloc(32);
  4675. sprintf(_over_back_sts_info.product_runTime, "%02ld:%02ld:%02ld", diff / 3600, (diff % 3600) / 60, diff % 60);
  4676. _over_back_sts_info.productAddr = getLocalIpAddress("eth0");
  4677. _over_back_sts_info.product_mac = get_mac_address("eth0");
  4678. _over_back_sts_info.product_RS485Addr = __globalDeviceManage._globalDevInfo._gmodbus_info.product_modbus_addr;
  4679. //_over_back_sts_info.product_status = __globalDeviceManage._globalDevInfo.product_status;
  4680. _over_back_sts_info.product_status = malloc(16);
  4681. strcpy(_over_back_sts_info.product_status, "online");
  4682. _over_back_sts_info.product_type_id = __globalDeviceManage._globalDevInfo.product_pwr_type;
  4683. // if (strcmp(_Over_equipment_mintenance.type, "listSbWhQuery") == 0)
  4684. // {
  4685. // ack_str = over_product_list_info_to_json(&__globalDeviceManage, &_over_back_sts_info, true);
  4686. // }
  4687. // else
  4688. ack_str = over_product_list_info_to_json(&__globalDeviceManage, &_over_back_sts_info, false);
  4689. }
  4690. else if(strcmp(_Over_equipment_mintenance.type,"listShfwQuery")==0)
  4691. {
  4692. GlobalDeviceInfo *dev=&__globalDeviceManage._globalDevInfo;
  4693. ack_str = vendor_info_to_json(dev);
  4694. }
  4695. else if(strcmp(_Over_equipment_mintenance.type,"sBRestart")==0) { //restart
  4696. char temp[100];
  4697. //sprintf(temp, "$系统$|$重启$");
  4698. int saddr = atoi(_Over_equipment_mintenance.product_id);
  4699. if(saddr == __globalDeviceManage._globalDevInfo.product_id)
  4700. {
  4701. sprintf(temp, "System Reboot!");
  4702. dev_insert_alarm_ctrl(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, 3, temp);
  4703. sys_reboot();
  4704. }else
  4705. {
  4706. sprintf(temp, "System reboot cascade address %d!",saddr);
  4707. cmd_data_t cmd = {0};
  4708. dev_insert_alarm_ctrl(__globalDeviceManage.db,__globalDeviceManage._globalDevInfo.product_id, 3, temp);
  4709. cmd.cmd = CASCADE_CMD_REBOOT;
  4710. cmd.obj = OBJ_CHANNEL;
  4711. cmd.chId = 0;
  4712. cascade_request_saddr(&cmd,saddr,0);
  4713. }
  4714. }else if(strcmp(_Over_equipment_mintenance.type,"listKgSbQuery")==0) // part of device infomation
  4715. {
  4716. #if 0
  4717. _OverBackBreakerInfo breaker_info;
  4718. if (dev_get_device_info(__globalDeviceManage.db,&__globalDeviceManage._globalDevInfo) != 0)
  4719. {
  4720. log_e("get device info error.\n");
  4721. http_reply(conn, 400, NULL);
  4722. return;
  4723. }
  4724. printf("get listKgSbQuery infomation!!!\n");
  4725. breaker_info.product_id = __globalDeviceManage._globalDevInfo.product_id;
  4726. breaker_info.product_name = __globalDeviceManage._globalDevInfo.product_name;
  4727. breaker_info.product_number = __globalDeviceManage._globalDevInfo.product_number;
  4728. breaker_info.product_type = __globalDeviceManage._globalDevInfo.product_type;
  4729. ack_str = over_breaker_product_list_info_to_json(&__globalDeviceManage,&breaker_info,false);
  4730. #endif
  4731. }else if(strcmp(_Over_equipment_mintenance.type,"listKgTdQuery")==0)
  4732. {
  4733. #if 0
  4734. _OverBreakerChnInfo _over_breaker_chn_info;
  4735. INIT_LIST_HEAD(&_over_breaker_chn_info.list);
  4736. //_OverBraekerChnInfo *temp = NULL;
  4737. GlobalPowerManger * _globalPowerTemp = NULL;
  4738. int cur_dev_addr = 0;
  4739. if(_Over_equipment_mintenance.product_id)
  4740. cur_dev_addr = atoi(_Over_equipment_mintenance.product_id);
  4741. if(cur_dev_addr) //slave
  4742. {
  4743. //
  4744. }else{ //zhuji
  4745. printf("get listKgTdQuery infomation!!!\n");
  4746. list_for_each_entry(_globalPowerTemp, &__globalDeviceManage._globalPowerManger.list, list)
  4747. {
  4748. _OverBreakerChnInfo *temp = (_OverBreakerChnInfo *) malloc(sizeof(_OverBreakerChnInfo));
  4749. temp->product_id = __globalDeviceManage._globalDevInfo.product_id;
  4750. strcpy(temp->product_name,__globalDeviceManage._globalDevInfo.product_name);
  4751. strcpy(temp->product_number,__globalDeviceManage._globalDevInfo.product_number);
  4752. strcpy(temp->product_ch_name,_globalPowerTemp->product_ch_name);
  4753. temp->product_ch_id = _globalPowerTemp->product_ch_id;
  4754. printf("%s %s %s %d\n",temp->product_name,temp->product_number,temp->product_ch_name,temp->product_ch_id);
  4755. list_add_tail(&temp->list,&_over_breaker_chn_info.list);
  4756. }
  4757. }
  4758. //参数转换json
  4759. ack_str = over_all_breaker_chn_info_to_json(&_over_breaker_chn_info,0);
  4760. //释放资源
  4761. _OverBreakerChnInfo* node;
  4762. _OverBreakerChnInfo* next;
  4763. list_for_each_entry_safe(node, next, &_over_breaker_chn_info.list, list)
  4764. {
  4765. list_del(&node->list);
  4766. free(node);
  4767. }
  4768. #endif
  4769. }else if(strcmp(_Over_equipment_mintenance.type,"listSwitchtatusQuery") == 0)
  4770. {
  4771. #if 0
  4772. _OverBreakerSwitchInfo _over_breaker_switch_info;
  4773. INIT_LIST_HEAD(&_over_breaker_switch_info.list);
  4774. if(_Over_equipment_mintenance.product_id)
  4775. cur_dev_addr = atoi(_Over_equipment_mintenance.product_id);
  4776. if(cur_dev_addr) //slave
  4777. {
  4778. cmd_data_t cmd = {0};
  4779. int r=0;
  4780. cmd.cmd = CASCADE_CMD_GET_BREAKER_INFO;
  4781. cmd.obj = OBJ_OVERALL;
  4782. cascade_request(&cmd);
  4783. // cmd.cmd = CASCADE_CMD_BREAKER_QUERY;
  4784. // cmd.obj = OBJ_OVERALL;
  4785. // cascade_request(&cmd);
  4786. ack_str=ctrl_sts_ack_to_json();
  4787. // GlobalBreakerManager *temp = NULL;
  4788. // GlobalDeviceManager *dm = &__globalDeviceManage2;
  4789. // pthread_mutex_lock(&dm->_breaker_mutex);
  4790. // list_for_each_entry(temp, &dm->g_new_global_breaker.list, list)
  4791. // {
  4792. // char buff[120];
  4793. // printf("get listSwitchtatusQuery infomation!!!\n");
  4794. // _OverBreakerSwitchInfo *info = (_OverBreakerSwitchInfo *)
  4795. // malloc(sizeof(_OverBreakerSwitchInfo));
  4796. // memset(info,0,sizeof(_OverBreakerSwitchInfo));
  4797. // info->product_id = temp->product_id;
  4798. // sprintf(buff,"Breaker %d",temp->breaker_id);
  4799. // strcpy(info->product_ch_name,buff);
  4800. // sprintf(buff,"%s %d",__globalDeviceManage._globalDevInfo.product_name,temp->breaker_id);
  4801. // strcpy(info->productName,buff);
  4802. // strcpy(info->product_number,__globalDeviceManage._globalDevInfo.product_number);
  4803. // strcpy(info->productChids,temp->breaker_chns_name);
  4804. // info->switch_id = temp->breaker_id;
  4805. // info->status = temp->breaker_status;
  4806. // strcpy(info->cjfs,temp->breaker_gather_type);
  4807. // strcpy(info->switch_name,temp->breaker_switch_name);
  4808. // strcpy(info->comkh,temp->breaker_com);
  4809. // sprintf(buff,"%d",temp->breaker_gather_addr);
  4810. // strcpy(info->cjdz,buff);
  4811. // sprintf(buff,"%d",temp->breaker_chn);
  4812. // strcpy(info->jdh,buff);
  4813. // printf("%s %s %s %s %d %d %s %s %s %s\n",
  4814. // info->product_ch_name,info->productName,info->product_number,info->productChids,info->switch_id,
  4815. // info->status,info->cjfs,info->comkh,info->cjdz,info->jdh);
  4816. // list_add_tail(&info->list,&_over_breaker_switch_info.list);
  4817. // }
  4818. // pthread_mutex_unlock(&dm->_breaker_mutex);
  4819. // ack_str = over_all_breaker_switch_info_to_json(&_over_breaker_switch_info,0);
  4820. // _OverBreakerSwitchInfo* node;
  4821. // _OverBreakerSwitchInfo* next;
  4822. // list_for_each_entry_safe(node, next, &_over_breaker_switch_info.list, list)
  4823. // {
  4824. // list_del(&node->list);
  4825. // free(node);
  4826. //}
  4827. }else //current
  4828. {
  4829. GlobalBreakerManager *temp = NULL;
  4830. pthread_mutex_lock(&__globalDeviceManage._breaker_mutex);
  4831. list_for_each_entry(temp, &__globalDeviceManage.g_new_global_breaker.list, list)
  4832. {
  4833. char buff[20];
  4834. //printf("get listSwitchtatusQuery infomation!!!\n");
  4835. _OverBreakerSwitchInfo *info = (_OverBreakerSwitchInfo *)
  4836. malloc(sizeof(_OverBreakerSwitchInfo));
  4837. memset(info,0,sizeof(_OverBreakerSwitchInfo));
  4838. info->product_id = temp->product_id;
  4839. sprintf(buff,"Breaker %d",temp->breaker_id);
  4840. strcpy(info->product_ch_name,buff);
  4841. strcpy(info->productName,__globalDeviceManage._globalDevInfo.product_name);
  4842. strcpy(info->product_number,__globalDeviceManage._globalDevInfo.product_number);
  4843. strcpy(info->productChids,temp->breaker_chns_name);
  4844. info->switch_id = temp->breaker_id;
  4845. info->status = temp->breaker_status;
  4846. strcpy(info->cjfs,temp->breaker_gather_type);
  4847. strcpy(info->switch_name,temp->breaker_switch_name);
  4848. strcpy(info->comkh,temp->breaker_com);
  4849. sprintf(buff,"%d",temp->breaker_gather_addr);
  4850. strcpy(info->cjdz,buff);
  4851. sprintf(buff,"%d",temp->breaker_chn);
  4852. strcpy(info->jdh,buff);
  4853. // printf("%s %s %s %s %d %d %s %s %s %s\n",
  4854. // info->product_ch_name,info->productName,info->product_number,info->productChids,info->switch_id,
  4855. // info->status,info->cjfs,info->comkh,info->cjdz,info->jdh);
  4856. list_add_tail(&info->list,&_over_breaker_switch_info.list);
  4857. }
  4858. pthread_mutex_unlock(&__globalDeviceManage._breaker_mutex);
  4859. printf("_glos_asdsd addr=0x%x\n",(uint32_t)(&__globalDeviceManage));
  4860. ack_str = over_all_breaker_switch_info_to_json(&_over_breaker_switch_info,0);
  4861. //释放资源
  4862. _OverBreakerSwitchInfo* node;
  4863. _OverBreakerSwitchInfo* next;
  4864. list_for_each_entry_safe(node, next, &_over_breaker_switch_info.list, list)
  4865. {
  4866. list_del(&node->list);
  4867. free(node);
  4868. }
  4869. }
  4870. #endif
  4871. }else if(strcmp(_Over_equipment_mintenance.type,"switchSave") == 0)
  4872. {
  4873. #if 0
  4874. if(_Over_equipment_mintenance.product_id)
  4875. cur_dev_addr = atoi(_Over_equipment_mintenance.product_id);
  4876. if(cur_dev_addr) //slave
  4877. {
  4878. cmd_data_t cmd;
  4879. cmd.datas.data.cjdz = atoi(_Over_equipment_mintenance.cjdz);
  4880. cmd.datas.data.jdh = atoi(_Over_equipment_mintenance.jdh);
  4881. strcpy(cmd.datas.data.breaker_chns,_Over_equipment_mintenance.productChids);
  4882. strcpy(cmd.datas.data.cjfs,_Over_equipment_mintenance.cjfs);
  4883. strcpy(cmd.datas.data.com,_Over_equipment_mintenance.comkh);
  4884. cmd.cmd = CASCADE_CMD_BREAKER_SAVE_ADD;
  4885. cmd.obj = OBJ_OVERALL;
  4886. cascade_request(&cmd);
  4887. ack_str=ctrl_sts_ack_to_json();
  4888. }else
  4889. {
  4890. char buff[124] = {0};
  4891. char id[MAX_BREAKER_ID] = {0};
  4892. //bianli shujujiegou
  4893. GlobalBreakerManager *temp = NULL;
  4894. int i = 1;
  4895. pthread_mutex_lock(&__globalDeviceManage._breaker_mutex);
  4896. list_for_each_entry(temp, &__globalDeviceManage.g_new_global_breaker.list, list)
  4897. {
  4898. id[temp->breaker_id] = 1;
  4899. }
  4900. pthread_mutex_unlock(&__globalDeviceManage._breaker_mutex);
  4901. for(;i < MAX_BREAKER_ID;i++)
  4902. {
  4903. if(id[i] == 0)
  4904. break;
  4905. }
  4906. if(i != MAX_BREAKER_ID)
  4907. {
  4908. GlobalBreakerManager *breakerManager = (GlobalBreakerManager*) malloc(sizeof(GlobalBreakerManager));
  4909. memset(breakerManager,0,sizeof(GlobalBreakerManager));
  4910. breakerManager->product_id = __globalDeviceManage._globalDevInfo.product_id;
  4911. breakerManager->breaker_gather_addr = atoi(_Over_equipment_mintenance.cjdz);
  4912. strcpy(breakerManager->breaker_com,_Over_equipment_mintenance.comkh);
  4913. strcpy(breakerManager->breaker_gather_type,_Over_equipment_mintenance.cjfs);
  4914. strcpy(breakerManager->breaker_chns_name,_Over_equipment_mintenance.productChids);
  4915. sprintf(buff,"Breadker_%d",breakerManager->breaker_id);
  4916. strcpy(breakerManager->breaker_switch_name,buff);
  4917. breakerManager->breaker_id = i;
  4918. uint32_t jdh = atoi(_Over_equipment_mintenance.jdh);
  4919. if(jdh <= MAX_BREAKER_CHN)
  4920. {
  4921. char jdh_flag = 0;
  4922. char chn[MAX_BREAKER_CHN] = {0};
  4923. pthread_mutex_lock(&__globalDeviceManage._breaker_mutex);
  4924. list_for_each_entry(temp, &__globalDeviceManage.g_new_global_breaker.list, list)
  4925. {
  4926. if(temp->breaker_gather_addr == breakerManager->breaker_gather_addr)
  4927. {
  4928. chn[temp->breaker_chn-1] = 1;
  4929. }
  4930. }
  4931. pthread_mutex_unlock(&__globalDeviceManage._breaker_mutex);
  4932. if(chn[jdh-1] != 1)
  4933. {
  4934. breakerManager->breaker_chn = jdh;
  4935. }else
  4936. {
  4937. jdh_flag = 1;
  4938. }
  4939. if(jdh_flag == 1)
  4940. {
  4941. free(breakerManager);
  4942. breakerManager = NULL;
  4943. ack_str = ctrl_breaker_err_ack_to_json("channel or id is existing!!!!");
  4944. }else{
  4945. dev_insert_breaker_genera_manage(__globalDeviceManage.db,breakerManager);
  4946. pthread_mutex_lock(&__globalDeviceManage._breaker_mutex);
  4947. list_add_tail(&breakerManager->list,&__globalDeviceManage.g_new_global_breaker.list);
  4948. pthread_mutex_unlock(&__globalDeviceManage._breaker_mutex);
  4949. ack_str=ctrl_sts_ack_to_json();
  4950. }
  4951. }else {
  4952. free(breakerManager);
  4953. breakerManager = NULL;
  4954. ack_str = ctrl_breaker_err_ack_to_json("jdh error!!!!");
  4955. }
  4956. }else
  4957. {
  4958. ack_str = ctrl_breaker_err_ack_to_json("ID More 48 !!!!");
  4959. }
  4960. }
  4961. #endif
  4962. }else if(strcmp(_Over_equipment_mintenance.type,"switchUpdate") == 0)
  4963. {
  4964. #if 0
  4965. if(_Over_equipment_mintenance.product_id)
  4966. cur_dev_addr = atoi(_Over_equipment_mintenance.product_id);
  4967. if(cur_dev_addr) ///slave
  4968. {
  4969. cmd_data_t cmd;
  4970. cmd.datas.data1.switch_id = _Over_equipment_mintenance.switchId;
  4971. strcpy(cmd.datas.data1.breaker_chns,_Over_equipment_mintenance.productChids);
  4972. strcpy(cmd.datas.data1.switch_name,_Over_equipment_mintenance.switchName);
  4973. cmd.cmd = CASCADE_CMD_BREAKER_SAVE_UPDATE;
  4974. cmd.obj = OBJ_OVERALL;
  4975. cascade_request(&cmd);
  4976. ack_str=ctrl_sts_ack_to_json();
  4977. }else
  4978. {
  4979. GlobalBreakerManager *temp = NULL;
  4980. int switch_id = _Over_equipment_mintenance.switchId;
  4981. pthread_mutex_lock(&__globalDeviceManage._breaker_mutex);
  4982. list_for_each_entry(temp, &__globalDeviceManage.g_new_global_breaker.list, list)
  4983. {
  4984. if(temp->breaker_id == switch_id)
  4985. {
  4986. strcpy(temp->breaker_switch_name,_Over_equipment_mintenance.switchName);
  4987. strcpy(temp->breaker_chns_name,_Over_equipment_mintenance.productChids);
  4988. dev_update_breaker_genera_manage(__globalDeviceManage.db,
  4989. __globalDeviceManage._globalDevInfo.product_id,switch_id,temp);
  4990. break;
  4991. }
  4992. }
  4993. pthread_mutex_unlock(&__globalDeviceManage._breaker_mutex);
  4994. ack_str=ctrl_sts_ack_to_json();
  4995. }
  4996. #endif
  4997. }else if(strcmp(_Over_equipment_mintenance.type,"switchDelete") == 0)
  4998. {
  4999. #if 0
  5000. if(_Over_equipment_mintenance.product_id)
  5001. cur_dev_addr = atoi(_Over_equipment_mintenance.product_id);
  5002. if(cur_dev_addr) ///slave
  5003. {
  5004. cmd_data_t cmd;
  5005. cmd.datas.data2.switch_id = _Over_equipment_mintenance.switchId;
  5006. cmd.cmd = CASCADE_CMD_BREAKER_SAVE_DELETE;
  5007. cmd.obj = OBJ_OVERALL;
  5008. cascade_request(&cmd);
  5009. GlobalBreakerManager* node = NULL;
  5010. GlobalBreakerManager* next = NULL;
  5011. pthread_mutex_lock(&__globalDeviceManage._breaker_mutex);
  5012. list_for_each_entry_safe(node,next,&__globalDeviceManage2.g_new_global_breaker.list, list)
  5013. {
  5014. if(node->breaker_id == _Over_equipment_mintenance.switchId)
  5015. {
  5016. // dev_delete_breaker_manage(__globalDeviceManage2.db,__globalDeviceManage._globalDevInfo.product_id,
  5017. // _Over_equipment_mintenance.switchId);
  5018. list_del(&node->list);
  5019. free(node);
  5020. break;
  5021. }
  5022. }
  5023. pthread_mutex_unlock(&__globalDeviceManage._breaker_mutex);
  5024. ack_str=ctrl_sts_ack_to_json();
  5025. }else
  5026. {
  5027. int switch_id = _Over_equipment_mintenance.switchId;
  5028. //GlobalBreakerManager *temp = NULL;
  5029. GlobalBreakerManager* node;
  5030. GlobalBreakerManager* next;
  5031. pthread_mutex_lock(&__globalDeviceManage._breaker_mutex);
  5032. list_for_each_entry_safe(node,next,&__globalDeviceManage.g_new_global_breaker.list, list)
  5033. {
  5034. if(node->breaker_id == switch_id)
  5035. {
  5036. dev_delete_breaker_manage(__globalDeviceManage.db,__globalDeviceManage._globalDevInfo.product_id,switch_id);
  5037. list_del(&node->list);
  5038. free(node);
  5039. node = NULL;
  5040. break;
  5041. }
  5042. }
  5043. pthread_mutex_unlock(&__globalDeviceManage._breaker_mutex);
  5044. ack_str=ctrl_sts_ack_to_json();
  5045. }
  5046. #endif
  5047. }
  5048. else if(strcmp(_Over_equipment_mintenance.type,"restoreFactorySettings")==0) { //restore to factory
  5049. char temp[100];
  5050. //sprintf(temp, "$系统$|$恢复出厂设置$");
  5051. if(atoi(_Over_equipment_mintenance.product_id) == __globalDeviceManage._globalDevInfo.product_id)
  5052. {
  5053. sprintf(temp, "Factory reset!");
  5054. dev_insert_alarm_ctrl(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, 3, temp);
  5055. for (size_t i = 0; i < MAX_CHN_COUNT; i++)
  5056. {
  5057. if (__globalDeviceManage._all_ctrl_board[i].product_saddr <= 0)
  5058. {
  5059. continue;
  5060. }
  5061. g_switch_get_all_reset(&__globalDeviceManage._globalRelaySampManger,__globalDeviceManage._all_ctrl_board[i].product_type,__globalDeviceManage._all_ctrl_board[i].product_saddr);
  5062. }
  5063. sys_set_factory();
  5064. }else
  5065. {
  5066. int saddr = 0;
  5067. cmd_data_t cmd = {0};
  5068. saddr = atoi(_Over_equipment_mintenance.product_id);
  5069. sprintf(temp, "Factory reset cascade address %d!",saddr);
  5070. dev_insert_alarm_ctrl(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, 3, temp);
  5071. cmd.cmd = CASCADE_CMD_RECOVERY;
  5072. cmd.obj = OBJ_CHANNEL;
  5073. cmd.chId = 0;
  5074. cascade_request_saddr(&cmd,saddr,0);
  5075. //cascade_request(&cmd);
  5076. }
  5077. }
  5078. else if (strcmp(_Over_equipment_mintenance.type,"resetChannel") == 0)
  5079. {
  5080. http_reply(conn, 200, ack_str);
  5081. //__globalDeviceManage._ReloadChm_flag=true;
  5082. pthread_mutex_lock(&__globalDeviceManage._power_update);
  5083. ResetChmData(1);
  5084. pthread_mutex_unlock(&__globalDeviceManage._power_update);
  5085. //__globalDeviceManage._ReloadChm_flag=false;
  5086. }
  5087. else if (strcmp(_Over_equipment_mintenance.type,"cleanUp") == 0)
  5088. {
  5089. if (_Over_equipment_mintenance.cleanSelectItem!=NULL)
  5090. {
  5091. char *pItemlist;
  5092. char *pItemListSave;
  5093. pItemlist = strtok_r(_Over_equipment_mintenance.cleanSelectItem, ",", &pItemListSave);
  5094. while (pItemlist != NULL)
  5095. {
  5096. int ItemID=atoi(pItemlist) ;
  5097. if (1==ItemID)
  5098. {
  5099. log_i("CleanUp all power history Information!\n");
  5100. dev_delete_ac_power_info_all(__globalDeviceManage.db);
  5101. dev_delete_power_info_all(__globalDeviceManage.db);
  5102. }
  5103. else if (2==ItemID)
  5104. {
  5105. log_i("CleanUp all sensor history Information!\n");
  5106. dev_delete_sensor_info_all(__globalDeviceManage.db);
  5107. }
  5108. else if (3==ItemID)
  5109. {
  5110. log_i("CleanUp all alarm log Information!\n");
  5111. dev_delete_alarm_info_all(__globalDeviceManage.db,ALARM_TYPE_POWER);
  5112. dev_delete_alarm_info_all(__globalDeviceManage.db,ALARM_TYPE_SENSOR);
  5113. dev_delete_alarm_info_all(__globalDeviceManage.db,ALARM_TYPE_NETWORK);
  5114. }
  5115. else if (4==ItemID)
  5116. {
  5117. log_i("CleanUp all operation log Information!\n");
  5118. dev_delete_alarm_info_all(__globalDeviceManage.db,ALARM_TYPE_OPRATION);
  5119. }
  5120. else if (5==ItemID)
  5121. {
  5122. log_i("CleanUp all system log Information!\n");
  5123. dev_delete_alarm_info_all(__globalDeviceManage.db,ALARM_TYPE_RUNNING);
  5124. }
  5125. pItemlist = strtok_r(NULL, ",", &pItemListSave);
  5126. }
  5127. }
  5128. dev_sql_VACCUM(__globalDeviceManage.db);
  5129. log_i("Database SQLite VACCUM!\n");
  5130. ack_str=ctrl_sts_ack_to_json();
  5131. }else if(strcmp(_Over_equipment_mintenance.type,"restartAll") == 0)
  5132. {
  5133. char temp[100];
  5134. sprintf(temp, "System reboot all device!!");
  5135. cmd_data_t cmd = {0};
  5136. dev_insert_alarm_ctrl(__globalDeviceManage.db,__globalDeviceManage._globalDevInfo.product_id, 3, temp);
  5137. cmd.cmd = CASCADE_CMD_REBOOT;
  5138. cmd.obj = OBJ_CHANNEL;
  5139. cmd.chId = 0;
  5140. cascade_request_saddr(&cmd,0,0);
  5141. sqlite3_close(__globalDeviceManage.db);
  5142. sys_reboot();
  5143. }else if(strcmp(_Over_equipment_mintenance.type,"restoreAll") == 0)
  5144. {
  5145. char temp[100];
  5146. sprintf(temp, "Factory reset all device!");
  5147. dev_insert_alarm_ctrl(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, 3, temp);
  5148. cmd_data_t cmd = {0};
  5149. cmd.cmd = CASCADE_CMD_RECOVERY;
  5150. cmd.obj = OBJ_CHANNEL;
  5151. cmd.chId = 0;
  5152. cascade_request_saddr(&cmd,0,0);
  5153. for (size_t i = 0; i < MAX_CHN_COUNT; i++)
  5154. {
  5155. if (__globalDeviceManage._all_ctrl_board[i].product_saddr <= 0)
  5156. {
  5157. continue;
  5158. }
  5159. g_switch_get_all_reset(&__globalDeviceManage._globalRelaySampManger,__globalDeviceManage._all_ctrl_board[i].product_type,__globalDeviceManage._all_ctrl_board[i].product_saddr);
  5160. }
  5161. sys_set_factory();
  5162. }
  5163. cJSON_Delete(cjson);
  5164. http_reply(conn, 200, ack_str);
  5165. cJSON_free((void*)ack_str);
  5166. }
  5167. static void equipmentMintenanceUpload(void *conn)
  5168. {
  5169. int r = -1 ;
  5170. char* ack_str = NULL ;
  5171. mg_stream_t *s=(mg_stream_t*)conn;
  5172. struct mg_http_message *hm=s->ev_data;
  5173. char path[200];
  5174. if(strstr(hm->uri.buf, "uploadType=gjsj")) { //firmware upload
  5175. sprintf(path, "%s/%s", DOWN_FOLDER, UPG_PKG_NAME);
  5176. r = upload_handle(conn, path);
  5177. if(r==0) {
  5178. printf("_____ upg_start\n");
  5179. upg_start();
  5180. }
  5181. }
  5182. else if(strstr(hm->uri.buf, "uploadType=shfw")) { //logo upload
  5183. //char *save_logo="productNumber=Vq1&productVersion=undefined&uploadType=shfw&type=importData&token=b6cdd10e-e1a7-4bd9-8283-c6d6ecbae28c";
  5184. sprintf(path, "%s/%s", IMAGE_PATH, LOGO_FILE);
  5185. upload_handle(conn, path);
  5186. }
  5187. ack_str = ctrl_sts_ack_to_json();
  5188. http_reply(conn, 200, ack_str);
  5189. cJSON_free(ack_str);
  5190. }
  5191. static void equipmentMintenanceExport(void *conn)
  5192. {
  5193. int r = -1 ;
  5194. char* ack_str = NULL ;
  5195. mg_stream_t *s=(mg_stream_t*)conn;
  5196. struct mg_http_message *hm=s->ev_data;
  5197. char *rx_body_buf = (char*)hm->body.buf;
  5198. char path[200];
  5199. if(strstr(hm->uri.buf, "export=2")) {
  5200. //export_handle(conn, 0);
  5201. }
  5202. //http_reply(conn, 200, "操作成功");
  5203. }
  5204. static int webSetCallback(void)
  5205. {
  5206. httpAddCallback("/login", loginFunc);//登录
  5207. httpAddCallback("/logout", loginOutFunc);//登出
  5208. httpAddCallback("/getInfo", getUserInfo);//获取用户信息
  5209. httpAddCallback("/pdu/changeLanguages", changeLanguages);//切换语言
  5210. httpAddCallback("/pdu/systemConfiguration", systemConfiguration);//登录
  5211. httpAddCallback("/getRouters", getUserRouters);//获取菜单接口
  5212. httpAddCallback("/pdu/overallStatusMonitoring", overallStatusMonitoring);//设备电源监控信息
  5213. httpAddCallback("/pdu/channelStatusMonitoring", channelStatusMonitoring);//设备通道电源监控信息
  5214. httpAddCallback("/pdu/sensorStatusMonitoring", sensorStatusMonitoring);//传感器总体请求信息
  5215. httpAddCallback("/pdu/alarmProtect", alarmProtect);//告警历史信息
  5216. httpAddCallback("/pdu/logInformation", logInformation);//日志
  5217. httpAddCallback("/pdu/communicationManagement", communicationManagement);//通信设置
  5218. httpAddCallback("/pdu/serviceManagement", serviceManagement);//服务管理
  5219. httpAddCallback("/pdu/system", systemManagent);//用户管理
  5220. httpAddCallback("/pdu/equipmentMintenance", equipmentMintenance);//设备重启
  5221. httpAddCallback("/pdu/equipmentMintenanceUpload", equipmentMintenanceUpload); //固件升级
  5222. httpAddCallback("/pdu/equipmentMintenanceExport", equipmentMintenanceExport);
  5223. return 0;
  5224. }
  5225. int appweb_init(void)
  5226. {
  5227. thread_start(THREAD_ID_WEB, web_thread, &__globalDeviceManage, 16*MB, 0);
  5228. return 0;
  5229. }