appweb_handle.c 242 KB

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