Selaa lähdekoodia

南瑞网关备份

xhj 1 kuukausi sitten
vanhempi
sitoutus
05458c199a

BIN
.ninja_deps


+ 83 - 55
.ninja_log

@@ -1,51 +1,51 @@
 # ninja log v6
-540	28676	7691620008866687	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/report/MyIec61850Server.cpp.o	8c8a43e9c83cbe39
+229	19702	7725187506183551	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/report/MyIec61850Server.cpp.o	8c8a43e9c83cbe39
 249	4681	7691620005960781	modules/gateway-basic/CMakeFiles/gateway-basic.dir/src/utils/ThreadUtils.cpp.o	5d6f9aa9d944d2fb
-35	4995	7708960780657415	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/insulated-switch-server/insulated_switch_server.cpp.o	6debb6056819d6de
+61	4766	7713956890633987	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/insulated-switch-server/insulated_switch_server.cpp.o	6debb6056819d6de
 112	13421	7693237478779411	modules/gateway-server/CMakeFiles/gateway-server.dir/src/repository/FlowerOperatorRepository.cpp.o	233fc5403da47fc5
 286	5142	7691620006330796	modules/gateway-basic/CMakeFiles/gateway-basic.dir/src/utils/TimeUtils.cpp.o	95636d2c4ca71b0b
-358	9741	7691620007056128	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/executant/GPIOExecutant.cpp.o	893c68b9cd60acae
+103	5356	7725187504936335	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/executant/GPIOExecutant.cpp.o	893c68b9cd60acae
 129	6628	7691620004759231	modules/gateway-basic/CMakeFiles/gateway-basic.dir/src/utils/JsonUtils.cpp.o	9cf481573112ce8e
 168	9496	7691620005149262	modules/gateway-basic/CMakeFiles/gateway-basic.dir/src/utils/RedisUtils.cpp.o	f7d32068021064aa
 80	7925	7691620004303970	modules/gateway-basic/CMakeFiles/gateway-basic.dir/src/service/RedisService.cpp.o	fde1f11b47c774fb
 86	13556	7693237478529220	modules/gateway-server/CMakeFiles/gateway-server.dir/src/repository/FlowerNodeRepository.cpp.o	494298649b2ef9bc
-322	9937	7691620006686140	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/executant/BasicExecutant.cpp.o	d7958f5e095708f6
+70	5181	7725187504608639	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/executant/BasicExecutant.cpp.o	d7958f5e095708f6
 212	11890	7691620005580642	modules/gateway-basic/CMakeFiles/gateway-basic.dir/src/utils/StringUtils.cpp.o	3455906afd556d5d
 490	26034	7693234381769501	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/FlowerOperatorController.cpp.o	9e70dc771e46a6ed
 11892	13391	7691620122386315	deploy/library/libgateway-basic.so	a41b40461b2daf81
-36	5680	7713238057123905	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/main.cpp.o	4edd25c30a70ee81
-5143	16743	7691620054903649	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/repository/ScheduleDeviceCommunicationRepository.cpp.o	2dafd0bf2b8e5e58
-5215	17164	7691620055629305	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/repository/ScheduleDeviceProtocolRepository.cpp.o	5ec11890d69fb2d0
-18268	25883	7691620186149992	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/ScheduleCommunicationService.cpp.o	e5ce0e16cfd3b4d0
-13391	20004	7691620137387730	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/CalculateService.cpp.o	c90b26f4dff37da2
+196	11613	7725187505858399	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/main.cpp.o	4edd25c30a70ee81
+347	9070	7725187507379451	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/repository/ScheduleDeviceCommunicationRepository.cpp.o	2dafd0bf2b8e5e58
+390	9119	7725187507805560	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/repository/ScheduleDeviceProtocolRepository.cpp.o	5ec11890d69fb2d0
+9168	14931	7725187595579157	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/ScheduleCommunicationService.cpp.o	e5ce0e16cfd3b4d0
+5182	9548	7725187555720389	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/CalculateService.cpp.o	c90b26f4dff37da2
 22623	24113	7693234603094503	modules/gateway-server/CMakeFiles/gateway-server.dir/src/main.cpp.o	4bd0c13801b7615a
-6629	18266	7691620069772543	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/repository/ScheduleDeviceRepository.cpp.o	f1a247a78d6186d7
-394	25452	7691620007416130	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/executant/ModbusExecutant.cpp.o	b381e1cf0fe99883
-17165	33704	7691620175126545	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/QueueService.cpp.o	88acd5ec7d4bacae
-9497	22880	7691620098448378	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/repository/ScheduleTaskFormatterRepository.cpp.o	b31a3da0e8ff7f9f
+421	9167	7725187508110820	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/repository/ScheduleDeviceRepository.cpp.o	f1a247a78d6186d7
+137	17598	7725187505268349	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/executant/ModbusExecutant.cpp.o	b381e1cf0fe99883
+9120	22758	7725187595099164	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/QueueService.cpp.o	88acd5ec7d4bacae
+493	10777	7725187508830844	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/repository/ScheduleTaskFormatterRepository.cpp.o	b31a3da0e8ff7f9f
 25623	32153	7693234633098131	modules/gateway-server/CMakeFiles/gateway-server.dir/src/repository/DeviceRepository.cpp.o	6a9c6dc336f49823
-9742	23080	7691620100892555	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/repository/ScheduleTaskRepository.cpp.o	c8fce6244c833d55
-15223	27522	7691620155714566	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/FlowerExecutorService.cpp.o	99db711d5addf15e
-19026	25948	7691620193740028	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/ScheduleDeviceCommunicationService.cpp.o	6e4ed4e4ef97649f
-9939	24659	7691620102861588	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/BasicExecutorService.cpp.o	6d274e34e2f48a94
-25884	32573	7691620262315621	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/ScheduleTaskService.cpp.o	13abac91e7dbdcfe
-20005	27008	7691620203528285	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/ScheduleDeviceProtocolService.cpp.o	2b6875a00b33dc78
-22882	29779	7691620232289129	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/ScheduleDeviceService.cpp.o	2752b0acd445c9c7
-23082	30201	7691620234294120	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/ScheduleProtocolService.cpp.o	de175f9c3841b6ba
+521	10721	7725187509101241	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/repository/ScheduleTaskRepository.cpp.o	c8fce6244c833d55
+5358	15060	7725187557482505	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/FlowerExecutorService.cpp.o	99db711d5addf15e
+9549	14986	7725187599386908	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/ScheduleDeviceCommunicationService.cpp.o	6e4ed4e4ef97649f
+1896	12868	7725187522872631	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/BasicExecutorService.cpp.o	6d274e34e2f48a94
+14987	20923	7725187653776723	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/ScheduleTaskService.cpp.o	13abac91e7dbdcfe
+10722	16616	7725187611128028	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/ScheduleDeviceProtocolService.cpp.o	2b6875a00b33dc78
+10778	16911	7725187611678045	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/ScheduleDeviceService.cpp.o	2752b0acd445c9c7
+11614	17862	7725187620043144	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/ScheduleProtocolService.cpp.o	de175f9c3841b6ba
 61	13507	7693237478271719	modules/gateway-server/CMakeFiles/gateway-server.dir/src/repository/ExecutorRepository.cpp.o	c7a99916ca640505
-16744	29045	7691620170914899	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/FormatterExecutorService.cpp.o	e19a30a4e763f3d4
-27524	29344	7691620278703571	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/utils/HashUtils.cpp.o	99a36625c566d329
-4686	35334	7691620050334767	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/repository/ScheduleCommunicationRepository.cpp.o	2f30878c2bf5c9f2
-574	31290	7691620009206658	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/report/TaskReportService.cpp.o	fdb5dbe067f415ad
+9071	19046	7725187594613623	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/FormatterExecutorService.cpp.o	e19a30a4e763f3d4
+16912	18285	7725187673022106	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/utils/HashUtils.cpp.o	99a36625c566d329
+305	24032	7725187506953958	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/repository/ScheduleCommunicationRepository.cpp.o	2f30878c2bf5c9f2
+264	21977	7725187506543455	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/report/TaskReportService.cpp.o	fdb5dbe067f415ad
 133	22622	7693234378187973	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/DashboardDeviceHistoryController.cpp.o	609d7e8616d2e027
 195	25622	7693234378813505	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/DeviceCommunicationController.cpp.o	7869e4aafe3f0751
-25453	34238	7691620257999509	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/ScheduleTaskFormatterService.cpp.o	cd4625953f7043b0
-25949	35387	7691620262971103	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/TaskExecutorService.cpp.o	bcd1dbd7090d01c0
-7926	36428	7691620082729303	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/repository/ScheduleProtocolRepository.cpp.o	3aaf10c249eda0fa
-82	7579	7699481774642067	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/tcp_server/TcpServer.cpp.o	a1f99320b3b8c883
-24660	43655	7691620250075588	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/ScheduleService.cpp.o	1eb6b9ea730c9467
+14932	22603	7725187653229656	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/ScheduleTaskFormatterService.cpp.o	cd4625953f7043b0
+15061	23558	7725187654512454	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/TaskExecutorService.cpp.o	bcd1dbd7090d01c0
+462	23939	7725187508520832	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/repository/ScheduleProtocolRepository.cpp.o	3aaf10c249eda0fa
+16617	26786	7725187670071892	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/tcp_server/TcpServer.cpp.o	a1f99320b3b8c883
+12869	30079	7725187632592549	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/service/ScheduleService.cpp.o	1eb6b9ea730c9467
 293	11083	7693237480593128	modules/gateway-server/CMakeFiles/gateway-server.dir/src/service/CommunicationService.cpp.o	2041fa7ba093b046
-4999	6148	7708960830294005	deploy/bin/gateway-scheduler	6ad2153f61ff76af
+3518	4591	7719367612661229	deploy/bin/gateway-scheduler	399acf951fc7de84
 191	15276	7693237479564856	modules/gateway-server/CMakeFiles/gateway-server.dir/src/repository/TaskRepository.cpp.o	6e0681073bd91793
 365	21180	7693234380520195	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/ExecutorController.cpp.o	a7fc8017e09a004f
 623	22319	7693234383107329	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/RedisCacheController.cpp.o	590f8c53ce8621cf
@@ -83,29 +83,57 @@
 15424	22892	7693237631909631	modules/gateway-server/CMakeFiles/gateway-server.dir/src/service/TaskService.cpp.o	e3eabcaf25bac6e2
 345	21002	7693237481111927	modules/gateway-server/CMakeFiles/gateway-server.dir/src/service/DashboardDeviceService.cpp.o	7dd237d8a43ca343
 6036	8182	7711605383631211	deploy/bin/gateway-server	ce0929752e1db5b2
-54	371	7713238472517946	build.ninja	6a763902b4018f1
+54	371	7725187999211506	build.ninja	6a763902b4018f1
 65	14786	7711585551315968	modules/gateway-server/CMakeFiles/gateway-server.dir/src/large_screen_display/devices_info.cpp.o	690840fd0b4fbc98
-472	5214	7691620008191376	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/lora_server/LoRaServer.cpp.o	fc2812624c6741a
+167	1893	7725187505568479	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/lora_server/LoRaServer.cpp.o	fc2812624c6741a
 13	152	7691619997487718	clean	92ade73078083541
-50	3566	7713238532815261	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/insulated-switch-server/SerialWriterThread.cpp.o	d98f59d899431c04
-3568	4743	7713238567991067	deploy/bin/gateway-scheduler	399acf951fc7de84
-55	3780	7713241808650466	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/insulated-switch-server/SerialWriterThread.cpp.o	d98f59d899431c04
-3781	4992	7713241845917583	deploy/bin/gateway-scheduler	399acf951fc7de84
-82	3919	7713243452083284	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/insulated-switch-server/SerialWriterThread.cpp.o	d98f59d899431c04
-3921	5162	7713243490476239	deploy/bin/gateway-scheduler	399acf951fc7de84
-65	3932	7713271903240848	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/insulated-switch-server/SerialWriterThread.cpp.o	d98f59d899431c04
-3933	5269	7713271941927708	deploy/bin/gateway-scheduler	399acf951fc7de84
-68	5041	7713932742722389	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/insulated-switch-server/insulated_switch_server.cpp.o	6debb6056819d6de
-5043	6081	7713932792461075	deploy/bin/gateway-scheduler	399acf951fc7de84
-46	3623	7713937161333468	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/insulated-switch-server/SerialWriterThread.cpp.o	d98f59d899431c04
-72	5197	7713937161593666	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/insulated-switch-server/insulated_switch_server.cpp.o	6debb6056819d6de
-5198	6229	7713937212853512	deploy/bin/gateway-scheduler	399acf951fc7de84
-50	4761	7713938780902396	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/insulated-switch-server/insulated_switch_server.cpp.o	6debb6056819d6de
-4763	5763	7713938828025818	deploy/bin/gateway-scheduler	399acf951fc7de84
-56	5019	7713941508109567	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/insulated-switch-server/insulated_switch_server.cpp.o	6debb6056819d6de
-84	5489	7713941508389584	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/main.cpp.o	4edd25c30a70ee81
-5490	6472	7713941562447823	deploy/bin/gateway-scheduler	399acf951fc7de84
-47	5193	7713956526097464	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/insulated-switch-server/insulated_switch_server.cpp.o	6debb6056819d6de
-5195	6307	7713956577570219	deploy/bin/gateway-scheduler	399acf951fc7de84
-61	4766	7713956890633987	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/insulated-switch-server/insulated_switch_server.cpp.o	6debb6056819d6de
-4769	5702	7713956937713902	deploy/bin/gateway-scheduler	399acf951fc7de84
+50	3515	7719367577978767	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/insulated-switch-server/SerialWriterThread.cpp.o	d98f59d899431c04
+57	7365	7725188101122027	modules/gateway-scheduler/CMakeFiles/gateway-scheduler.dir/src/command_poller/command_poller.cpp.o	29745cbcddd17a4d
+7366	8359	7725188174212089	deploy/bin/gateway-scheduler	c90563d061dbec8d
+213	20577	7725188310616391	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/ExecutorController.cpp.o	a7fc8017e09a004f
+323	22121	7725188311717568	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/RedisCacheController.cpp.o	590f8c53ce8621cf
+98	22178	7725188309464513	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/DashboardDeviceHistoryController.cpp.o	609d7e8616d2e027
+71	22366	7725188309194582	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/DashboardDeviceController.cpp.o	31ad4be0c512f625
+353	22667	7725188312022802	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/RedisReportCacheController.cpp.o	989a2c9c28564ed7
+22179	23990	7725188530283234	modules/gateway-server/CMakeFiles/gateway-server.dir/src/main.cpp.o	4bd0c13801b7615a
+154	26009	7725188310026383	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/DeviceController.cpp.o	bf3ea8515f11c96f
+125	26422	7725188309744696	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/DeviceCommunicationController.cpp.o	7869e4aafe3f0751
+239	26557	7725188310877600	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/FlowerNodeController.cpp.o	40608f0dbb6a72bf
+43	26614	7725188308914707	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/CommunicationController.cpp.o	838a5e0d6eb18825
+184	26720	7725188310326401	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/DeviceProtocolController.cpp.o	50cbbd9e87268343
+296	27272	7725188311447583	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/ProtocolController.cpp.o	8335f95c50e52873
+268	27595	7725188311167611	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/FlowerOperatorController.cpp.o	9e70dc771e46a6ed
+415	30148	7725188312642795	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/TaskFormatterController.cpp.o	e6cbc0e76c930217
+386	31525	7725188312342786	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/TaskController.cpp.o	90d044655ee89d22
+22669	33975	7725188535180953	modules/gateway-server/CMakeFiles/gateway-server.dir/src/repository/DashboardDeviceHistoryRepository.cpp.o	2e93b71537372f8
+23991	34087	7725188548395078	modules/gateway-server/CMakeFiles/gateway-server.dir/src/repository/DeviceCommunicationRepository.cpp.o	2ec071e68ac3bd88
+26011	35401	7725188568596042	modules/gateway-server/CMakeFiles/gateway-server.dir/src/repository/DeviceProtocolRepository.cpp.o	7eac28e6cf344653
+26721	36829	7725188575712118	modules/gateway-server/CMakeFiles/gateway-server.dir/src/repository/FlowerOperatorRepository.cpp.o	233fc5403da47fc5
+26615	36970	7725188574646189	modules/gateway-server/CMakeFiles/gateway-server.dir/src/repository/FlowerNodeRepository.cpp.o	494298649b2ef9bc
+26423	37263	7725188572724291	modules/gateway-server/CMakeFiles/gateway-server.dir/src/repository/DeviceRepository.cpp.o	6a9c6dc336f49823
+26558	37789	7725188574076137	modules/gateway-server/CMakeFiles/gateway-server.dir/src/repository/ExecutorRepository.cpp.o	c7a99916ca640505
+27596	38848	7725188584454149	modules/gateway-server/CMakeFiles/gateway-server.dir/src/repository/TaskFormatterRepository.cpp.o	89cfe1dd34b3b8ac
+31526	41103	7725188623757179	modules/gateway-server/CMakeFiles/gateway-server.dir/src/repository/UserRepository.cpp.o	8848a32b5b9e5dd3
+30149	41771	7725188609983642	modules/gateway-server/CMakeFiles/gateway-server.dir/src/repository/TaskRepository.cpp.o	6e0681073bd91793
+35402	42378	7725188662507020	modules/gateway-server/CMakeFiles/gateway-server.dir/src/service/CommunicationService.cpp.o	2041fa7ba093b046
+36830	42561	7725188676795909	modules/gateway-server/CMakeFiles/gateway-server.dir/src/service/DashboardDeviceHistoryService.cpp.o	fc9e49560a5e31d1
+37264	42982	7725188681136671	modules/gateway-server/CMakeFiles/gateway-server.dir/src/service/DeviceCommunicationService.cpp.o	bcefd60e0924624c
+37790	43639	7725188686394202	modules/gateway-server/CMakeFiles/gateway-server.dir/src/service/DeviceProtocolService.cpp.o	5c7ae9502624e799
+38848	44572	7725188696974536	modules/gateway-server/CMakeFiles/gateway-server.dir/src/service/DeviceService.cpp.o	1385ef52e5633e59
+41104	45365	7725188719530531	modules/gateway-server/CMakeFiles/gateway-server.dir/src/service/ExecutorService.cpp.o	c0a13ca6c85a5bf6
+41772	47217	7725188726216776	modules/gateway-server/CMakeFiles/gateway-server.dir/src/service/FlowerNodeService.cpp.o	de3b010aaccdaf3f
+42378	47790	7725188732283142	modules/gateway-server/CMakeFiles/gateway-server.dir/src/service/FlowerOperatorService.cpp.o	52d4734515aa9129
+20580	48004	7725188514326331	modules/gateway-server/CMakeFiles/gateway-server.dir/src/controller/UserController.cpp.o	59ff219136851c98
+42983	48164	7725188738331704	modules/gateway-server/CMakeFiles/gateway-server.dir/src/service/RedisCacheService.cpp.o	728b74b27c194261
+42561	48819	7725188734105513	modules/gateway-server/CMakeFiles/gateway-server.dir/src/service/ProtocolService.cpp.o	5666432150f2aa35
+33976	49462	7725188648257125	modules/gateway-server/CMakeFiles/gateway-server.dir/src/server/BasicRouter.cpp.o	6b318a01684442a5
+22367	50837	7725188532164392	modules/gateway-server/CMakeFiles/gateway-server.dir/src/repository/CommunicationRepository.cpp.o	32644d195faed402
+47218	51387	7725188780669705	modules/gateway-server/CMakeFiles/gateway-server.dir/src/service/UserService.cpp.o	a1eb9022e1ce919
+44573	51487	7725188754230705	modules/gateway-server/CMakeFiles/gateway-server.dir/src/service/TaskFormatterService.cpp.o	2b681b720ee5565d
+34088	52115	7725188649372675	modules/gateway-server/CMakeFiles/gateway-server.dir/src/server/BasicServer.cpp.o	3a059b9bc50684e9
+45366	52295	7725188762161434	modules/gateway-server/CMakeFiles/gateway-server.dir/src/service/TaskService.cpp.o	e3eabcaf25bac6e2
+22122	52567	7725188529716814	modules/gateway-server/CMakeFiles/gateway-server.dir/src/large_screen_display/devices_info.cpp.o	690840fd0b4fbc98
+27273	52577	7725188581229401	modules/gateway-server/CMakeFiles/gateway-server.dir/src/repository/ProtocolRepository.cpp.o	c85c732f030cc6f6
+36971	52763	7725188678200433	modules/gateway-server/CMakeFiles/gateway-server.dir/src/service/DashboardDeviceService.cpp.o	7dd237d8a43ca343
+43640	54484	7725188744895154	modules/gateway-server/CMakeFiles/gateway-server.dir/src/service/RedisReportCacheService.cpp.o	56450d89e102d75c
+54484	56043	7725188853327859	deploy/bin/gateway-server	ce0929752e1db5b2

+ 2 - 2
Testing/Temporary/LastTest.log

@@ -1,3 +1,3 @@
-Start testing: Jun 13 17:29 中国标准时间
+Start testing: Jun 25 09:41 中国标准时间
 ----------------------------------------------------------
-End testing: Jun 13 17:29 中国标准时间
+End testing: Jun 25 09:41 中国标准时间

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 10 - 0
build.ninja


+ 1 - 113
modules/gateway-scheduler/src/insulated-switch-server/insulated_switch_server.cpp

@@ -275,117 +275,6 @@ float get_serial_pressure(const std::string& port_name) {
 
 
 
-
-// 将字节数组转为十六进制字符串
-std::string bytes_to_hex(const uint8_t* data, size_t length) {
-  std::stringstream ss;
-  for (size_t i = 0; i < length; ++i) {
-    ss << std::hex << std::setw(2) << std::setfill('0')
-       << static_cast<int>(data[i]) << " ";
-  }
-  return ss.str();
-}
-float get_usb_serial_pressure() {
-  // USB转串口设备路径(Linux下通常为/dev/ttyUSB0或/dev/ttyACM0)
-  const std::string usb_serial_port = "/dev/ttyUSB0";  // 根据实际设备修改
-
-  // 打开USB转串口(读写模式)
-  int serial_port = open(usb_serial_port.c_str(), O_RDWR | O_NOCTTY);
-  if (serial_port < 0) {
-    std::cerr << "无法打开USB转串口设备: " << usb_serial_port
-              << " (错误: " << strerror(errno) << ")" << std::endl;
-    return -1.0f;
-  }
-
-  // 配置串口参数
-  struct termios tty;
-  memset(&tty, 0, sizeof(tty));
-
-  if (tcgetattr(serial_port, &tty) != 0) {
-    std::cerr << "tcgetattr 错误: " << strerror(errno) << std::endl;
-    close(serial_port);
-    return -1.0f;
-  }
-
-  // 设置波特率
-  cfsetospeed(&tty, B9600);
-  cfsetispeed(&tty, B9600);
-
-  // 设置串口参数
-  tty.c_cflag &= ~PARENB;      // 无校验位
-  tty.c_cflag &= ~CSTOPB;      // 1个停止位
-  tty.c_cflag &= ~CSIZE;
-  tty.c_cflag |= CS8;          // 8数据位
-  tty.c_cflag &= ~CRTSCTS;     // 无硬件流控
-  tty.c_cflag |= CREAD | CLOCAL; // 启用接收,忽略调制解调器状态
-
-  // 输入模式设置
-  tty.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // 非规范模式
-  tty.c_iflag &= ~(IXON | IXOFF | IXANY);         // 禁用软件流控
-  tty.c_oflag &= ~OPOST;                          // 原始输出模式
-
-  // 设置超时:100ms (VTIME以0.1秒为单位)
-  tty.c_cc[VMIN] = 0;
-  tty.c_cc[VTIME] = 1;
-
-  if (tcsetattr(serial_port, TCSANOW, &tty) != 0) {
-    std::cerr << "tcsetattr 错误: " << strerror(errno) << std::endl;
-    close(serial_port);
-    return -1.0f;
-  }
-
-  std::cout << "已连接USB转串口设备: " << usb_serial_port << std::endl;
-
-  // 准备发送的Modbus RTU命令
-  std::string hexstr = "010300000002C40B";
-  std::vector<uint8_t> byte_data = hex_to_bytes(hexstr);
-
-  // 发送数据
-  ssize_t bytes_written = write(serial_port, byte_data.data(), byte_data.size());
-  if (bytes_written < 0) {
-    std::cerr << "发送数据失败: " << strerror(errno) << std::endl;
-    close(serial_port);
-    return -1.0f;
-  }
-
-
-  std::cout << "发送数据长度: " << byte_data.size() << "   ";
-  for (uint8_t byte : byte_data) {
-    std::cout << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(byte) << " ";
-  }
-  std::cout << std::endl;
-
-  // 读取返回数据
-  // 接收响应(循环读取)
-  std::vector<uint8_t> response;
-  uint8_t buffer[256];
-  while (true) {
-    ssize_t bytes_read = read(serial_port, buffer, sizeof(buffer));
-    if (bytes_read <= 0) break;
-    response.insert(response.end(), buffer, buffer + bytes_read);
-    if (response.size() >= 9) break;  // 根据预期长度退出
-  }
-  std::cout << "接收数据长度: " << response.size() << "   接收数据: ";
-  for (int i = 0; i < response.size(); ++i) {
-    std::cout << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(response[i]) << " ";
-  }
-  std::cout << std::endl;
-
-  // 解析数据(假设返回9字节,第3-4字节为有效数据)
-  if (response.size() == 9)  {
-    uint16_t decimal_value = (response[3] << 8) | response[4];
-    if (decimal_value < 2000) {
-      float final_value = decimal_value / 10.0f;
-      std::cout << "解析值: " << final_value << std::endl;
-      close(serial_port);
-      return final_value;
-    }
-  }
-  close(serial_port);
-  return -1.0f; // 失败
-}
-
-
 struct FileEntry {
   fs::path path;
   fs::file_time_type time;
@@ -440,8 +329,7 @@ void SerialPortReader::dataHandler(const std::string& data){
 //      res.insert(res.end(), temp.begin(), temp.end());
 
 
-//      float pressure = get_serial_pressure("/dev/ttyS8");
-      float pressure = get_usb_serial_pressure();
+      float pressure = get_serial_pressure("/dev/ttyS8");
       res.push_back(std::to_string(pressure));
       res.emplace_back("0");  //计算压力
       res.push_back(temp[2]); //电池电压

+ 1 - 1
modules/gateway-scheduler/src/insulated-switch-server/insulated_switch_server.h

@@ -63,7 +63,7 @@ class SerialPortReader {
     while (running_.load()) {
       int n = read(fd_, buf, sizeof(buf));
       if (n > 0) {
-//        std::cout << buf << std::endl;
+        std::cout << buf << std::endl;
         std::lock_guard<std::mutex> lock(mutex_);
 
         write_to_serial("/dev/ttyS4", buf);

+ 21 - 23
modules/gateway-scheduler/src/main.cpp

@@ -2,43 +2,41 @@
 #include <exception>
 
 #include "gateway-basic/src/configuration.h"
-#include "gateway-scheduler/src/insulated-switch-server/SerialWriterThread.h"
-#include "gateway-scheduler/src/insulated-switch-server/insulated_switch_server.h"
-#include "gateway-scheduler/src/lora_server/LoRaServer.h"
-#include "gateway-scheduler/src/report/MyIec61850Server.h"
-#include "gateway-scheduler/src/report/TaskReportService.h"
 #include "gateway-scheduler/src/service/QueueService.h"
 #include "gateway-scheduler/src/service/ScheduleService.h"
+#include "gateway-scheduler/src/report/TaskReportService.h"
 #include "gateway-scheduler/src/tcp_server/TcpServer.h"
+#include "gateway-scheduler/src/report/MyIec61850Server.h"
+#include "gateway-scheduler/src/lora_server/LoRaServer.h"
+#include "gateway-scheduler/src/insulated-switch-server/insulated_switch_server.h"
+#include "gateway-scheduler/src/command_poller/command_poller.h"
 
+void terminate() { std::exit(1); }
 
 using namespace server::service;
-//void terminate() noexcept {
-//  std::cerr << "Custom terminate handler called." << std::endl;
-//  std::exit(1);
-//}
+
 int main(int argc, char* argv[]) {
   std::set_terminate(terminate);
   MESSAGE_PRINT(" scheduler starting");
   try {
 
-//    int port = 512;
-//    // if(argc == 2){
-//    //   port = std::stoi(argv[1]);
-//    // }
-//    TcpServer server(port);
-//    server.start_server();
-
+    int port = 8888;
+    // if(argc == 2){
+    //   port = std::stoi(argv[1]);
+    // }
+    TcpServer server(port);
+    server.start_server();
 
-    SerialPortReader reader("/dev/ttyS9");
-    if (!reader.start()) {
-      std::cerr << "Failed to start serial reader" << std::endl;
-      return 1;
-    }
 
-    SerialWriterThread serialWriter;
-    serialWriter.start();
+    CommandPoller poller(server);
+    poller.start();
 
+//    SerialPortReader reader("/dev/ttyS9");
+//    if (!reader.start()) {
+//      std::cerr << "Failed to start serial reader" << std::endl;
+//      return 1;
+//    }
+//
     while(true){
       sleep(1);
     }

+ 250 - 52
modules/gateway-scheduler/src/tcp_server/TcpServer.cpp

@@ -20,10 +20,10 @@ static int sql_callback(void *NotUsed, int argc, char **argv, char **azColName)
 
 
 // 计算CRC16的表格(预先计算以提高效率)
-uint16_t crc16_table[256];
+static uint16_t crc16_table[256];
 
 // 初始化CRC16表格
-void init_crc16_table() {
+static void init_crc16_table() {
     uint16_t polynomial = 0xA001;
     for (uint16_t i = 0; i < 256; i++) {
         uint16_t crc = i;
@@ -39,7 +39,7 @@ void init_crc16_table() {
 }
 
 // 计算给定数据缓冲区的CRC16校验值
-uint16_t calculate_crc16(uint8_t *data, size_t length) {
+static uint16_t calculate_crc16(uint8_t *data, size_t length) {
     uint16_t crc = 0xFFFF; // 初始值
     for (size_t i = 0; i < length; i++) {
         uint8_t table_index = (crc ^ data[i]) & 0xFF;
@@ -113,21 +113,34 @@ void TcpServer::start_server() {
     init_crc16_table();
 
 
+
     accept_thread = std::thread([this]() {
         while (this->running) {
-            int new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen);
-            if (new_socket < 0) {
-                // 打印错误信息
-                std::cerr << "Accept failed with error: " << strerror(errno) << std::endl;
-                if (errno == EINTR) {
-                    // 如果是信号中断,继续等待连接
-                    continue;
-                } else {
-                    // 其他错误,继续等待连接
-                    continue;
-                }
+          char client_ip[INET_ADDRSTRLEN];
+          int new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen);
+          if (new_socket < 0) {
+              // 打印错误信息
+              std::cerr << "Accept failed with error: " << strerror(errno) << std::endl;
+              if (errno == EINTR) {
+                  // 如果是信号中断,继续等待连接
+                  continue;
+              } else {
+                  // 其他错误,继续等待连接
+                  continue;
+              }
+            }
+
+            // 获取客户端 IP 和端口
+            inet_ntop(AF_INET, &(address.sin_addr), client_ip, INET_ADDRSTRLEN);
+            int client_port = ntohs(address.sin_port);
+            std::string ip_str(client_ip);
+
+            std::cout << "客户端已连接: " << ip_str << ":" << client_port << std::endl;
+            {
+              std::lock_guard<std::mutex> lock(mtx_client_addrs);
+              client_addrs.push_back({ip_str, client_port, new_socket});
             }
-            std::cout << "New client connected" << std::endl;
+
             {
                 std::lock_guard<std::mutex> lock(mtx);
                 this->conn_num++;
@@ -138,10 +151,14 @@ void TcpServer::start_server() {
             threads.emplace_back(&TcpServer::handle_client, this, new_socket);
         }
     });
-//    accept_thread.detach();  // 让接受线程独立运行
-    accept_thread.join();
+    accept_thread.detach();  // 让接受线程独立运行
+//    accept_thread.join();
 }
 
+std::vector<ClientAddr> TcpServer::get_connected_clients() {
+  std::lock_guard<std::mutex> lock(mtx_client_addrs);
+  return client_addrs;
+}
 
 // 处理客户端连接
 void TcpServer::handle_client(int client_socket) {
@@ -173,7 +190,7 @@ void TcpServer::handle_client(int client_socket) {
             std::cout << "error crc msg!" << std::endl;
             continue;
         }
-        std::cout << "CRC = " <<  calculate_crc16(buffer, bytes_received - 2) <<std::endl;
+        std::cout << "CRC = " <<  CRC <<std::endl;
 
         int dev_addr = buffer[0];
         int fun_code = buffer[1];
@@ -182,6 +199,16 @@ void TcpServer::handle_client(int client_socket) {
         std::string device_name;
 
         nlohmann::json json_save;
+
+        if(dev_type == 9) {
+          std::cout << "门锁" << std::endl;
+        }
+        if(dev_type == 10) {
+          std::cout << "噪声" << std::endl;
+        }
+        if(dev_type == 12) {
+          std::cout << "蓄电池" << std::endl;
+        }
         // 公共字段
         json_save["status"] = "run";
         json_save["gateway_id"] = 0;
@@ -231,7 +258,6 @@ void TcpServer::handle_client(int client_socket) {
             // 烟感对象
             nlohmann::json smoke_data;
             smoke_data["name"] = "报警状态";
-//            smoke_data["value"] = ((buffer[7] << 8) + buffer[8]); // 0 表示无烟,1 表示有烟
             if((buffer[7] << 8) + buffer[8] == 0)
               smoke_data["value"] = "正常";
             else
@@ -239,8 +265,7 @@ void TcpServer::handle_client(int client_socket) {
             smoke_data["format"] = "";
             smoke_data["format_id"] = 0;
             json_save["data"].push_back(smoke_data);
-        }
-        else if (dev_type == 7) {
+        }else if (dev_type == 7) {
           device_name = "空调-" + std::to_string(dev_addr);
           json_save["device_name"] = "空调-" + std::to_string(dev_addr);
           json_save["device_id"] = dev_addr;
@@ -280,42 +305,215 @@ void TcpServer::handle_client(int client_socket) {
           wind_direction_data["format"] = "";
           wind_direction_data["format_id"] = 0;
           json_save["data"].push_back(wind_direction_data);
-        }
+        }else if (dev_type == 6) { // 照明
+          device_name = "照明-" + std::to_string(dev_addr);
+          json_save["device_name"] = "照明-" + std::to_string(dev_addr);
+          json_save["device_id"] = dev_addr;
 
-        // 创建 Redis 连接
-        redisContext *context = redisConnect("127.0.0.1", 6379);
-        if (context == NULL || context->err) {
-            if (context) {
-                printf("Error: %s\n", context->errstr);
-                redisFree(context);
-            } else {
-                printf("Can't allocate redis context\n");
-            }
-            return ;
-        }
+          //开关
+          nlohmann::json switch_data;
+          switch_data["name"] = "开关";
+          switch_data["value"] = (buffer[7] << 8) + buffer[8];
+//          if((buffer[7] << 8) + buffer[8] == 0)
+//            switch_data["value"] = "关闭";
+//          else
+//            switch_data["value"] = "开启";
+          switch_data["format"] = "";
+          switch_data["format_id"] = 0;
+          json_save["data"].push_back(switch_data);
+        }else if (dev_type == 8) { // 门磁
+          device_name = "门磁-" + std::to_string(dev_addr);
+          json_save["device_name"] = "门磁-" + std::to_string(dev_addr);
+          json_save["device_id"] = dev_addr;
 
-        // 设置键值对
-        std::cout << "devaice_name  " << dev_name << "json_save "<< json_save.dump(4) << std::endl;
-        std::string out = json_save.dump(0);
-        redisReply *reply = (redisReply *)redisCommand(context, "SET %s %s", dev_name.c_str(), out.c_str());
-        if (reply == NULL) {
-            printf("Error: %s\n", context->errstr);
-            redisFree(context);
-            return ;
-        }
+          //开关
+          nlohmann::json switch_data;
+          switch_data["name"] = "开关";
+          if((buffer[7] << 8) + buffer[8] == 0)
+            switch_data["value"] = "关闭";
+          else
+            switch_data["value"] = "开启";
+          switch_data["format"] = "";
+          switch_data["format_id"] = 0;
+          json_save["data"].push_back(switch_data);
+        }else if (dev_type == 5) { // 风机
+          device_name = "风机-" + std::to_string(dev_addr);
+          json_save["device_name"] = "风机-" + std::to_string(dev_addr);
+          json_save["device_id"] = dev_addr;
 
-        // 检查 SET 命令的返回值
-        if (reply->type == REDIS_REPLY_STATUS && strcmp(reply->str, "OK") == 0) {
-            // printf("Key '%s' set to value '%s'\n", key, value);
-        } else {
-            // printf("Failed to set key '%s'\n", key);
-        }
+          //开关
+          nlohmann::json switch_data;
+          switch_data["name"] = "开关";
+          switch_data["value"] = (buffer[7] << 8) + buffer[8];
+//          if((buffer[7] << 8) + buffer[8] == 0)
+//            switch_data["value"] = "关闭";
+//          else
+//            switch_data["value"] = "开启";
+          switch_data["format"] = "";
+          switch_data["format_id"] = 0;
+          json_save["data"].push_back(switch_data);
+        }else if (dev_type == 9) { // 智能门锁
+          device_name = "智能门锁-" + std::to_string(dev_addr);
+          json_save["device_name"] = "智能门锁-" + std::to_string(dev_addr);
+          json_save["device_id"] = dev_addr;
 
-        // 释放 reply 结构
-        freeReplyObject(reply);
+          //开关
+          nlohmann::json switch_data;
+          switch_data["name"] = "门状态";
+          if((buffer[7] << 8) + buffer[8] == 0)
+            switch_data["value"] = "关闭";
+          else
+            switch_data["value"] = "开启";
+          switch_data["format"] = "";
+          switch_data["format_id"] = 0;
+          json_save["data"].push_back(switch_data);
+
+          switch_data["name"] = "门控制";
+          if((buffer[9] << 8) + buffer[10] == 0)
+            switch_data["value"] = "关闭";
+          else
+            switch_data["value"] = "开启";
+          switch_data["format"] = "";
+          switch_data["format_id"] = 0;
+          json_save["data"].push_back(switch_data);
+        }else if (dev_type == 4) { // 双气
+          device_name = "双气-" + std::to_string(dev_addr);
+          json_save["device_name"] = "双气-" + std::to_string(dev_addr);
+          json_save["device_id"] = dev_addr;
+
+          // 氧气浓度
+          nlohmann::json temp_data;
+          temp_data["name"] = "氧气浓度";
+          temp_data["value"] = ((buffer[7] << 8) + buffer[8])/10.0;
+          temp_data["format"] = "0.1%";
+          temp_data["format_id"] = 0;
+          json_save["data"].push_back(temp_data);
+
+          // SF6浓度
+          nlohmann::json humidity_data;
+          humidity_data["name"] = "SF6浓度";
+          humidity_data["value"] = ((buffer[9] << 8) + buffer[10])/10.0;
+          humidity_data["format"] = "ppm";
+          humidity_data["format_id"] = 0;
+          json_save["data"].push_back(humidity_data);
+        }else if (dev_type == 10) { // 噪声
+          device_name = "噪声-" + std::to_string(dev_addr);
+          json_save["device_name"] = "噪声-" + std::to_string(dev_addr);
+          json_save["device_id"] = dev_addr;
+
+          // 噪声值
+          nlohmann::json temp_data;
+          temp_data["name"] = "噪声值";
+          temp_data["value"] = ((buffer[7] << 8) + buffer[8])/10.0;
+          temp_data["format"] = "db";
+          temp_data["format_id"] = 40;
+          json_save["data"].push_back(temp_data);
+        }else if (dev_type == 11) { // 噪声
+          device_name = "臭氧-" + std::to_string(dev_addr);
+          json_save["device_name"] = "臭氧-" + std::to_string(dev_addr);
+          json_save["device_id"] = dev_addr;
+
+          // 臭氧浓度
+          nlohmann::json temp_data;
+          temp_data["name"] = "臭氧浓度";
+          temp_data["value"] = ((buffer[7] << 8) + buffer[8])/10.0;
+          temp_data["format"] = "0.1ppm";
+          temp_data["format_id"] = 40;
+          json_save["data"].push_back(temp_data);
+        }else if (dev_type == 12) { // 蓄电池
+          device_name = "蓄电池-" + std::to_string(dev_addr);
+          json_save["device_name"] = "蓄电池-" + std::to_string(dev_addr);
+          json_save["device_id"] = dev_addr;
+
+          // 开关对象
+          nlohmann::json group_voltage;
+          group_voltage["name"] = "组电压";
+          group_voltage["value"] = (((buffer[7] << 8) + buffer[8]))/10.0;
+          group_voltage["format"] = "V";
+          group_voltage["format_id"] = 0;
+          json_save["data"].push_back(group_voltage);
+          // 模式对象
+          nlohmann::json group_current;
+          group_current["name"] = "组电流";
+          group_current["value"] = ((buffer[9] << 8) + buffer[10]) / 100.0;
+          group_current["format"] = "A";
+          group_current["format_id"] = 0;
+          json_save["data"].push_back(group_current);
+
+          for(int i = 0; i <= 8; i++) {
+            nlohmann::json sigle_voltage;
+            sigle_voltage["name"] = "电池-" + std::to_string(i+1) + " 电压";
+            sigle_voltage["value"] = ((buffer[11 + i * 2] << 8) + buffer[12 + i * 2]) / 1000.0;
+            sigle_voltage["format"] = "V";
+            sigle_voltage["format_id"] = 40;
+            json_save["data"].push_back(sigle_voltage);
+          }
+          // 模式对象
+          for(int i = 0; i <= 8; i++) {
+            nlohmann::json sigle_temp;
+            sigle_temp["name"] = "电池-" + std::to_string(i+1) + " 温度";
+            sigle_temp["value"] = ((buffer[29 + i * 2] << 8) + buffer[30 + i * 2]) / 100.0;
+            sigle_temp["format"] = "℃";
+            sigle_temp["format_id"] = 40;
+            json_save["data"].push_back(sigle_temp);
+          }
+          // 模式对象
+          for(int i = 0; i <= 8; i++) {
+            nlohmann::json sigle_resistance;
+            sigle_resistance["name"] = "电池-" + std::to_string(i+1) + " 内阻";
+            sigle_resistance["value"] = ((buffer[47 + i * 2] << 8) + buffer[48 + i * 2]) / 1000.0;
+            sigle_resistance["format"] = "mΩ";
+            sigle_resistance["format_id"] = 0;
+            json_save["data"].push_back(sigle_resistance);
+          }
+
+          for(int i = 0; i <= 8; i++) {
+            nlohmann::json sigle_volumn;
+            sigle_volumn["name"] = "电池-" + std::to_string(i+1) + " 容量";
+            sigle_volumn["value"] = ((buffer[65 + i * 2] << 8) + buffer[66 + i * 2]) / 100.0;
+            sigle_volumn["format"] = "";
+            sigle_volumn["format_id"] = 0;
+            json_save["data"].push_back(sigle_volumn);
+          }
+        }else{
+          std::cout << "未知设备类型: " << dev_type << std::endl;
+          return;
+        }
 
-        // 断开 Redis 连接
-        redisFree(context);
+//        // 创建 Redis 连接
+//        redisContext *context = redisConnect("127.0.0.1", 6379);
+//        if (context == NULL || context->err) {
+//            if (context) {
+//                printf("Error: %s\n", context->errstr);
+//                redisFree(context);
+//            } else {
+//                printf("Can't allocate redis context\n");
+//            }
+//            return ;
+//        }
+//
+//        // 设置键值对
+        std::cout << "devaice_name  " << dev_name << "json_save "<< json_save.dump(1) << std::endl;
+//        std::string out = json_save.dump(0);
+//        redisReply *reply = (redisReply *)redisCommand(context, "SET %s %s", dev_name.c_str(), out.c_str());
+//        if (reply == NULL) {
+//            printf("Error: %s\n", context->errstr);
+//            redisFree(context);
+//            return ;
+//        }
+//
+//        // 检查 SET 命令的返回值
+//        if (reply->type == REDIS_REPLY_STATUS && strcmp(reply->str, "OK") == 0) {
+//            // printf("Key '%s' set to value '%s'\n", key, value);
+//        } else {
+//            // printf("Failed to set key '%s'\n", key);
+//        }
+//
+//        // 释放 reply 结构
+//        freeReplyObject(reply);
+//
+//        // 断开 Redis 连接
+//        redisFree(context);
 
 
 

+ 14 - 0
modules/gateway-scheduler/src/tcp_server/TcpServer.h

@@ -12,6 +12,14 @@
 #include <stdexcept>
 #include <cerrno>
 #define BUFFER_SIZE 1024
+
+
+struct ClientAddr{
+  std::string ip;
+  int port;
+  int sockfd;
+};
+
 class TcpServer {
 private:
     int server_fd;
@@ -19,16 +27,22 @@ private:
     socklen_t addrlen;
     bool running;
     std::thread accept_thread;
+    std::thread cmd_thread;
     std::vector<std::thread> threads;
     std::mutex mtx;
     int conn_num;
 
+
+    std::vector<ClientAddr> client_addrs; // 存储所有客户端地址
+    std::mutex mtx_client_addrs;          // 线程锁保护 client_addrs
+
 public:
     TcpServer(int port);
     ~TcpServer();
 
     void start_server();
     void handle_client(int client_socket);
+    std::vector<ClientAddr> get_connected_clients();
 };
 
 

+ 164 - 34
modules/gateway-server/src/large_screen_display/devices_info.cpp

@@ -30,7 +30,7 @@ struct HistoryData {
 };
 
 
-
+const char* dbPath = "/usr/local/bin/database/sqlite/history_data.db";
 
 string device_info_path = "./outputs/";
 
@@ -98,6 +98,9 @@ std::vector<string> readSingleLineCSV(const std::string& filename) {
     }
   }
 
+
+
+
   return row;
 }
 
@@ -398,7 +401,7 @@ std::vector<Device> createNariDeviceInfo() {
     throw std::runtime_error("查询执行错误: " + std::string(sqlite3_errmsg(db)));
   }
 
-  std::cout << "\n===== 查询完成,共找到 " << results.size() << " 条记录 =====" << std::endl;
+//  std::cout << "\n===== 查询完成,共找到 " << results.size() << " 条记录 =====" << std::endl;
   // 释放资源
   if (stmt) sqlite3_finalize(stmt);
   if (db) sqlite3_close(db);
@@ -550,38 +553,103 @@ std::vector<AllowDevice> allowDevice() {
 //  };
 }
 
+
+std::vector<Device> get_device_status(std::string dev_name){
+  std::vector<Device> res;
+
+  sqlite3* db;
+  sqlite3_stmt* stmt;
+  int rc;
+  // 打开数据库
+  rc = sqlite3_open(dbPath, &db);
+  if (rc != SQLITE_OK) {
+    std::cerr << "无法打开数据库: " << sqlite3_errmsg(db) << std::endl;
+    return {};
+  }
+
+  std::cout << "数据库已成功打开。" << std::endl;
+
+  std::string sql = R"(
+    WITH RankedRecords AS (
+        SELECT
+            id,
+            data,
+            time,
+            device_id,
+            device_name,
+            gateway_id,
+            status,
+            ROW_NUMBER() OVER (PARTITION BY device_name ORDER BY time DESC) as rn
+        FROM history_data
+        WHERE device_name LIKE ?
+    )
+    SELECT id, data, time, device_id, device_name, gateway_id, status
+    FROM RankedRecords
+    WHERE rn = 1;
+)";
+  // 准备语句
+  rc = sqlite3_prepare_v2(db, sql.c_str(), -1, &stmt, nullptr);
+  if (rc != SQLITE_OK) {
+    std::cerr << "SQL 准备失败: " << sqlite3_errmsg(db) << std::endl;
+    sqlite3_close(db);
+    return {};
+  }
+  std::string pattern = dev_name + "%";
+
+  sqlite3_bind_text(stmt, 1, pattern.c_str(), -1, SQLITE_STATIC);
+
+
+  // 遍历查询结果
+  while ((rc = sqlite3_step(stmt)) == SQLITE_ROW) {
+    int id = sqlite3_column_int(stmt, 0);
+    const char* data = reinterpret_cast<const char*>(sqlite3_column_text(stmt, 1));
+    const char* time = reinterpret_cast<const char*>(sqlite3_column_text(stmt, 2));
+    int device_id = sqlite3_column_int(stmt, 3);
+    const char* device_name = reinterpret_cast<const char*>(sqlite3_column_text(stmt, 4));
+    int gateway_id = sqlite3_column_int(stmt, 5);
+    const char* status = reinterpret_cast<const char*>(sqlite3_column_text(stmt, 6));
+
+    std::cout << " Device ID: " << device_id << std::endl;
+    std::cout     << "Data: " << data<< std::endl;
+
+    // 解析 JSON
+    json jsonArray = json::parse(data);
+
+    // 定义 vector<Measure>
+    std::vector<Measure> measures;
+    // 遍历并转换
+    for (const auto& item : jsonArray) {
+      Measure m;
+      m.point = item.value("name", "unknown");  // 获取 name 字段
+      m.value = std::to_string(item.value("value", 0));  // 转换 value 为 string
+      measures.push_back(m);
+    }
+    res.push_back({dev_name + "-"+ to_string(device_id), measures});
+  }
+
+  if (rc != SQLITE_DONE) {
+    std::cerr << "执行查询时出错: " << sqlite3_errmsg(db) << std::endl;
+  }
+
+  // 清理资源
+  sqlite3_finalize(stmt);
+  sqlite3_close(db);
+
+  return res;
+}
+
+
 std::vector<Device> control_devices_status() {
-  return {
-//      {"空调-1", {{ "水浸状态", "正常" }}},
-//      {"空调-2", {{ "水浸状态", "正常" }}},
-//      {"温湿度-2", {{ "温度", "28℃" }, { "湿度", "56%" }}},
-//      {"水浸-3", {{ "水浸状态", "正常" }}},
-//      {"温湿度-3", {{ "温度", "28℃" }, { "湿度", "56%" }}},
-//      {"水浸-4", {{ "水浸状态", "正常" }}},
-//      {"温湿度-4", {{ "温度", "28℃" }, { "湿度", "56%" }}},
-//      {"水浸-5", {{ "水浸状态", "正常" }}},
-//      {"温湿度-5", {{ "温度", "28℃" }, { "湿度", "56%" }}},
-        {"空调-1",{
-                       {"开关", "0"},
-                       {"模式", "0"},
-                       {"温度", "30"},
-                       {"风速", "强风"},
-                       {"风向", "0"}}
-        },
-        {"空调-2",{
-                       {"开关", "1"},
-                       {"模式", "2"},
-                       {"设定温度", "20"},
-                       {"风速", "弱风"},
-                       {"风向", "2"}}
-        },
-        {"门禁控制器-1",{{"开关", "1"}},},
-        {"门禁控制器-2",{{"开关", "1"}},},
-        {"照明控制器-1",{{"开关", "0"}},},
-        {"照明控制器-2",{{"开关", "1"}},},
-        {"风机控制器-1",{{"开关", "0"}},},
-        {"风机控制器-2",{{"开关", "1"}},},
-  };
+  std::vector<Device> air_conditions = get_device_status("空调");
+  std::vector<Device> fans = get_device_status("风机");
+  std::vector<Device> lights = get_device_status("照明");
+  std::vector<Device> all_devices;
+
+  all_devices.insert(all_devices.end(), air_conditions.begin(), air_conditions.end());
+  all_devices.insert(all_devices.end(), fans.begin(), fans.end());
+  all_devices.insert(all_devices.end(), lights.begin(), lights.end());
+  return all_devices;
+
 }
 
 //json createDeviceHistoryData() {
@@ -912,7 +980,7 @@ json createNariDeviceHistoryData() {
     throw std::runtime_error("无法打开数据库: " + std::string(sqlite3_errmsg(db)));
   }
 
-  std::cout << "===== 111开始查询每个设备的最新记录 =====" << std::endl;
+  std::cout << "===== createNariDeviceHistoryData =====" << std::endl;
 
   // 使用窗口函数的SQL查询(SQLite 3.25.0+)
   const char* sql_select_data = "SELECT data, time, device_name FROM history_data";
@@ -1073,3 +1141,65 @@ json deviceInfoToJson(const std::vector<Device>& devices) {
 //
 //    return j;
 //}
+
+void save_cmd_to_sqlite(const std::string& device_name, const std::string& json_body) {
+  sqlite3* db;
+  sqlite3_stmt* stmt;
+
+  // 数据库文件路径
+  const char* db_path = "/usr/local/bin/database/sqlite/device_cmd.db";
+
+  // 打开数据库(如果不存在会自动创建)
+  int rc = sqlite3_open(db_path, &db);
+  if (rc != SQLITE_OK) {
+    std::cerr << "无法打开数据库: " << sqlite3_errmsg(db) << std::endl;
+    return;
+  }
+
+  // 创建表(如果不存在)
+  const char* create_sql = R"(
+        CREATE TABLE IF NOT EXISTS device_commands (
+            id INTEGER PRIMARY KEY AUTOINCREMENT,
+            device_name TEXT NOT NULL,
+            json_command TEXT NOT NULL,
+            timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
+        );
+    )";
+
+  rc = sqlite3_exec(db, create_sql, nullptr, nullptr, nullptr);
+  if (rc != SQLITE_OK) {
+    std::cerr << "创建表失败: " << sqlite3_errmsg(db) << std::endl;
+    sqlite3_close(db);
+    return;
+  }
+
+  // 插入数据的 SQL 语句
+  const char* insert_sql = R"(
+        INSERT INTO device_commands (device_name, json_command)
+        VALUES (?, ?);
+    )";
+
+  // 准备语句
+  rc = sqlite3_prepare_v2(db, insert_sql, -1, &stmt, nullptr);
+  if (rc != SQLITE_OK) {
+    std::cerr << "准备SQL失败: " << sqlite3_errmsg(db) << std::endl;
+    sqlite3_close(db);
+    return;
+  }
+
+  // 绑定参数
+  sqlite3_bind_text(stmt, 1, device_name.c_str(), -1, SQLITE_STATIC);
+  sqlite3_bind_text(stmt, 2, json_body.c_str(), -1, SQLITE_STATIC);
+
+  // 执行插入
+  rc = sqlite3_step(stmt);
+  if (rc != SQLITE_DONE) {
+    std::cerr << "执行插入失败: " << sqlite3_errmsg(db) << std::endl;
+  } else {
+    std::cout << "成功保存设备 [" << device_name << "] 的命令到数据库。" << std::endl;
+  }
+
+  // 清理资源
+  sqlite3_finalize(stmt);
+  sqlite3_close(db);
+}

+ 1 - 0
modules/gateway-server/src/large_screen_display/devices_info.h

@@ -57,4 +57,5 @@ json createDeviceHistoryData(const char* start_time, const char* end_time);
 json createNariDeviceHistoryData();
 json deviceHistoryToJson(const vector<DeviceHistory>& devices_history);
 json allowDeviceInfoToJson(const vector<AllowDevice>& devices);
+void save_cmd_to_sqlite(const std::string& device_name, const std::string& json_body);
 #endif //DEVICES_INFO_H

+ 87 - 17
modules/gateway-server/src/server/BasicServer.cpp

@@ -53,7 +53,8 @@ BasicRoute generate_route(std::string path, std::string method) { /**/
 } /**/
 
 
-MHD_Result BasicServer::requestHandler(void* cls, struct MHD_Connection* connection, const char* url, const char* method, const char* version, const char* upload_data, size_t* upload_data_size, void** req_cls) { /**/
+MHD_Result BasicServer::requestHandler(void* cls, struct MHD_Connection* connection, const char* url,
+                                       const char* method, const char* version, const char* upload_data, size_t* upload_data_size, void** req_cls) { /**/
   // 打印 cls
 //  std::cout << "cls: " << cls << std::endl;
 //
@@ -118,34 +119,34 @@ MHD_Result BasicServer::requestHandler(void* cls, struct MHD_Connection* connect
       } else if (url_string.find("/history_data") != std::string::npos) {
         std::cout << "largeScreenDisplay history_data " << url_string << std::endl;
         // 获取 GET 参数
-        const char *start_time = MHD_lookup_connection_value(connection, MHD_GET_ARGUMENT_KIND, "start_time");
-        const char *end_time = MHD_lookup_connection_value(connection, MHD_GET_ARGUMENT_KIND, "end_time");
-        const char *page = MHD_lookup_connection_value(connection, MHD_GET_ARGUMENT_KIND, "page");
-        const char *page_size = MHD_lookup_connection_value(connection, MHD_GET_ARGUMENT_KIND, "page_size");
-
-        if (start_time) std::cout << "start_time: " << start_time << std::endl;
-        if (end_time) std::cout << "end_time: " << end_time << std::endl;
-        if (page) std::cout << "page: " << page << std::endl;
-        if (page_size) std::cout << "page_size: " << page_size << std::endl;
+//        const char *start_time = MHD_lookup_connection_value(connection, MHD_GET_ARGUMENT_KIND, "start_time");
+//        const char *end_time = MHD_lookup_connection_value(connection, MHD_GET_ARGUMENT_KIND, "end_time");
+//        const char *page = MHD_lookup_connection_value(connection, MHD_GET_ARGUMENT_KIND, "page");
+//        const char *page_size = MHD_lookup_connection_value(connection, MHD_GET_ARGUMENT_KIND, "page_size");
+//
+//        if (start_time) std::cout << "start_time: " << start_time << std::endl;
+//        if (end_time) std::cout << "end_time: " << end_time << std::endl;
+//        if (page) std::cout << "page: " << page << std::endl;
+//        if (page_size) std::cout << "page_size: " << page_size << std::endl;
 
 //        auto devices_history = createDeviceHistoryData();
-        Json response_json = createDeviceHistoryData(start_time, end_time);
-//        Json response_json = createNariDeviceHistoryData();
+//        Json response_json = createDeviceHistoryData(start_time, end_time);
+        Json response_json = createNariDeviceHistoryData();
 //        std::cout << response_json.dump(4) << std::endl;
         response = response_json.dump();
       } else if (url_string.find("/devices_info") != std::string::npos) {
         std::cout << "largeScreenDisplay devices_info" << std::endl;
-        auto devices = createDeviceInfo();
-//        auto devices = createNariDeviceInfo();
+//        auto devices = createDeviceInfo();
+        auto devices = createNariDeviceInfo();
         Json response_json = deviceInfoToJson(devices);
 //         std::cout << response_json.dump() << std::endl;
-//         std::cout <<  createNariAbnormalStatus().dump() << std::endl;
+         std::cout <<  createNariAbnormalStatus().dump() << std::endl;
         response = response_json.dump();
       } else if (url_string.find("/abnormal_status") != std::string::npos) {
         std::cout << "largeScreenDisplay abnormal_status" << std::endl;
-        auto devices = getAbnormalStatus();
+//        auto devices = getAbnormalStatus();
 //          auto devices = createDeviceInfo();
-//        Json devices = createNariAbnormalStatus();
+        Json devices = createNariAbnormalStatus();
 //        Json response_json = deviceInfoToJson(devices);
 //        std::cout << devices.dump() << std::endl;
         response = devices.dump();
@@ -182,6 +183,75 @@ MHD_Result BasicServer::requestHandler(void* cls, struct MHD_Connection* connect
         //        std::string sensorName = urldecode(query); // 解码
         std::cout << "设备名称: " << query << std::endl; // "空调-3"
       }
+    }else if (url_string.find("/update-device") != std::string::npos){
+      // 提取设备名称
+      std::string device_name = url_string.substr(strlen("/api/update-device/"));
+      if (!device_name.empty() && device_name.back() == '/') {
+        device_name.pop_back();
+      }
+
+      std::cout << "Device name: " << device_name << std::endl;
+
+      // 初始化 con_cls 缓冲区
+      if (*req_cls == NULL) {
+        // 第一次进入此连接,分配一个新的缓冲区
+        std::string *postData = new std::string();
+        *req_cls = postData;
+        return MHD_YES;
+      }
+
+      // 获取数据并追加到缓冲区
+      std::string *postData = static_cast<std::string*>(*req_cls);
+      if (*upload_data_size > 0 && upload_data != NULL) {
+        postData->append(upload_data, *upload_data_size);
+        *upload_data_size = 0; // 清空标志位
+        return MHD_YES;
+      }
+      save_cmd_to_sqlite(device_name, *postData);
+
+
+      // 数据接收完毕,开始处理
+      std::string json_body = *postData;
+
+      // 打印原始JSON字符串用于调试
+      std::cout << "json_body: " << json_body << std::endl;
+
+      try {
+        json jsonData = json::parse(json_body);
+
+        // 提取字段并打印
+        std::cout << "开关: " << jsonData.value("开关", "") << std::endl;
+        std::cout << "模式: " << jsonData.value("模式", "") << std::endl;
+        std::cout << "温度: " << jsonData.value("温度", "") << std::endl;
+        std::cout << "风速: " << jsonData.value("风速", "") << std::endl;
+        std::cout << "风向: " << jsonData.value("风向", "") << std::endl;
+
+        // 返回成功响应
+        std::string response_str = "{\"status\": \"success\"}";
+        struct MHD_Response *response = MHD_create_response_from_buffer(
+            response_str.size(), (void*)response_str.c_str(), MHD_RESPMEM_MUST_COPY);
+        MHD_add_response_header(response, "Content-Type", "application/json");
+        int ret = MHD_queue_response(connection, MHD_HTTP_OK, response);
+        MHD_destroy_response(response);
+
+        delete postData; // 释放缓冲区
+        *req_cls = NULL;
+        return MHD_YES;
+      }
+      catch (const json::parse_error &e) {
+        std::cerr << "JSON 解析失败: " << e.what() << std::endl;
+        std::string response_str = "{\"error\": \"Invalid JSON\"}";
+        struct MHD_Response *response = MHD_create_response_from_buffer(
+            response_str.size(), (void*)response_str.c_str(), MHD_RESPMEM_MUST_COPY);
+        MHD_add_response_header(response, "Content-Type", "application/json");
+        int ret = MHD_queue_response(connection, MHD_HTTP_BAD_REQUEST, response);
+        MHD_destroy_response(response);
+
+        delete postData; // 释放缓冲区
+        *req_cls = NULL;
+        return MHD_YES;
+      }
+
     }
     else {
       BasicRoute route = generate_route(url, method);

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä