From 8502fb2a1648d1453f96b4288d68c16dfcf5bae5 Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期一, 12 五月 2025 16:19:49 +0800 Subject: [PATCH] feat(data): 新增mqtt电表数据解析和写入,新增opcua电表和温湿度计数据解析和写入 --- src/main/java/com/zhitan/util/PowerDataMapper.java | 114 ++++ src/main/java/com/zhitan/model/entity/PowerEntity.java | 50 + src/main/java/com/zhitan/controller/OpcController.java | 73 ++ src/main/java/com/zhitan/model/entity/DeviceData.java | 45 + src/main/java/com/zhitan/service/IOpcService.java | 56 ++ src/main/java/com/zhitan/handler/OpcDataHandler.java | 44 + src/main/java/com/zhitan/MQTTGatewayApplication.java | 2 src/main/resources/application-prod.yml | 298 +++++++++++ pom.xml | 43 + src/main/java/com/zhitan/service/IDataService.java | 8 src/main/java/com/zhitan/config/opc/OpcConfig.java | 48 + src/main/java/com/zhitan/service/impl/OpcServiceImpl.java | 392 ++++++++++++++ src/main/java/com/zhitan/influxdb/InfluxdbRepository.java | 30 + src/main/java/com/zhitan/model/entity/OpcData.java | 46 + src/main/java/com/zhitan/redis/RedisCache.java | 35 src/main/resources/application-dev.yml | 244 ++++++++ src/main/java/com/zhitan/service/impl/DataServiceImpl.java | 59 ++ src/main/resources/application.yml | 4 src/main/java/com/zhitan/handler/MqttMessageHandler.java | 15 19 files changed, 1,575 insertions(+), 31 deletions(-) diff --git a/pom.xml b/pom.xml index 9ccc7d2..8fd71d4 100644 --- a/pom.xml +++ b/pom.xml @@ -15,13 +15,14 @@ </parent> <properties> - <maven.compiler.source>8</maven.compiler.source> - <maven.compiler.target>8</maven.compiler.target> + <maven.compiler.source>17</maven.compiler.source> + <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <integration.version>3.4.3</integration.version> <druid.version>1.2.20</druid.version> <mybatis-plus.version>3.5.6</mybatis-plus.version> <influxdb-client.version>6.6.0</influxdb-client.version> + <milo.version>0.6.13</milo.version> </properties> <dependencies> @@ -93,7 +94,37 @@ <version>26.0.2</version> <scope>compile</scope> </dependency> + <!-- Eclipse Milo OPC UA 瀹㈡埛绔� --> + <dependency> + <groupId>org.eclipse.milo</groupId> + <artifactId>sdk-client</artifactId> + <version>${milo.version}</version> + </dependency> + <dependency> + <groupId>org.eclipse.milo</groupId> + <artifactId>stack-core</artifactId> + <version>${milo.version}</version> + </dependency> </dependencies> + <profiles> + <profile> + <id>dev</id> + <properties> + <build.profile.id>dev</build.profile.id> + <profileActive>dev</profileActive> + </properties> + <activation> + <activeByDefault>true</activeByDefault> + </activation> + </profile> + <profile> + <id>prod</id> + <properties> + <build.profile.id>prod</build.profile.id> + <profileActive>prod</profileActive> + </properties> + </profile> + </profiles> <repositories> <repository> @@ -136,6 +167,14 @@ </execution> </executions> </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <source>9</source> + <target>9</target> + </configuration> + </plugin> </plugins> <finalName>${project.artifactId}</finalName> </build> diff --git a/src/main/java/com/zhitan/MQTTGatewayApplication.java b/src/main/java/com/zhitan/MQTTGatewayApplication.java index e24a8ff..01e4c81 100644 --- a/src/main/java/com/zhitan/MQTTGatewayApplication.java +++ b/src/main/java/com/zhitan/MQTTGatewayApplication.java @@ -3,11 +3,13 @@ import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; /** * application */ @SpringBootApplication +@EnableScheduling @MapperScan(basePackages = {"com.zhitan.mapper"}) public class MQTTGatewayApplication { public static void main(String[] args) { diff --git a/src/main/java/com/zhitan/config/opc/OpcConfig.java b/src/main/java/com/zhitan/config/opc/OpcConfig.java new file mode 100644 index 0000000..f2054ff --- /dev/null +++ b/src/main/java/com/zhitan/config/opc/OpcConfig.java @@ -0,0 +1,48 @@ +package com.zhitan.config.opc; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * OPC UA閰嶇疆绫� + */ +@Data +@Component +@ConfigurationProperties(prefix = "opc") +public class OpcConfig { + /** + * OPC UA鏈嶅姟鍣ㄥ湴鍧� + */ + private String serverUrl; + + /** + * 鐢ㄦ埛鍚� + */ + private String username; + + /** + * 瀵嗙爜 + */ + private String password; + + /** + * 鏄惁鍚敤 + */ + private boolean enable; + + /** + * 閲囬泦闂撮殧(姣) + */ + private long scanRate = 5000; + + /** + * 杩炴帴瓒呮椂鏃堕棿(姣) + */ + private int connectionTimeout = 10000; + + /** + * 鑺傜偣鍒楄〃锛屾牸寮忎负锛氬悕绉�=鑺傜偣ID + */ + private String[] nodes; +} \ No newline at end of file diff --git a/src/main/java/com/zhitan/controller/OpcController.java b/src/main/java/com/zhitan/controller/OpcController.java new file mode 100644 index 0000000..b3b7713 --- /dev/null +++ b/src/main/java/com/zhitan/controller/OpcController.java @@ -0,0 +1,73 @@ +package com.zhitan.controller; + +import com.zhitan.model.entity.OpcData; +import com.zhitan.service.IOpcService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * OPC UA鎺у埗鍣� + */ +@Slf4j +@RestController +@RequestMapping("/api/opc") +public class OpcController { + + private final IOpcService opcService; + + @Autowired + public OpcController(IOpcService opcService) { + this.opcService = opcService; + } + + /** + * 鑾峰彇OPC UA杩炴帴鐘舵�� + */ + @GetMapping("/status") + public boolean getConnectionStatus() { + return opcService.isConnected(); + } + + /** + * 鎵嬪姩杩炴帴OPC UA鏈嶅姟鍣� + */ + @PostMapping("/connect") + public boolean connect() { + return opcService.connect(); + } + + /** + * 鏂紑OPC UA杩炴帴 + */ + @PostMapping("/disconnect") + public void disconnect() { + opcService.disconnect(); + } + + /** + * 鍚姩鏁版嵁閲囬泦 + */ + @PostMapping("/start") + public void startCollection() { + opcService.startDataCollection(); + } + + /** + * 鍋滄鏁版嵁閲囬泦 + */ + @PostMapping("/stop") + public void stopCollection() { + opcService.stopDataCollection(); + } + + /** + * 璇诲彇鎵�鏈夎妭鐐规暟鎹� + */ + @GetMapping("/data") + public List<OpcData> readAllData() { + return opcService.readAllNodes(); + } +} \ No newline at end of file diff --git a/src/main/java/com/zhitan/handler/MqttMessageHandler.java b/src/main/java/com/zhitan/handler/MqttMessageHandler.java index d1f8b83..7913d74 100644 --- a/src/main/java/com/zhitan/handler/MqttMessageHandler.java +++ b/src/main/java/com/zhitan/handler/MqttMessageHandler.java @@ -1,13 +1,19 @@ package com.zhitan.handler; import com.fasterxml.jackson.databind.ObjectMapper; +import com.zhitan.model.entity.DeviceData; import com.zhitan.model.entity.ElectricPower; +import com.zhitan.model.entity.PowerEntity; import com.zhitan.service.IDataService; +import com.zhitan.util.PowerDataMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.integration.mqtt.support.MqttHeaders; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHandler; import org.springframework.messaging.MessagingException; + +import java.util.ArrayList; +import java.util.List; /** * mqtt 娑堟伅澶勭悊绫� @@ -31,8 +37,13 @@ ObjectMapper objectMapper = new ObjectMapper(); try { // 灏� JSON 瀛楃涓茶浆鎹负 SensorData 瀵硅薄 - ElectricPower electricPower = objectMapper.readValue(payload, ElectricPower.class); - dataService.writeTimeSeriesData(electricPower); + //ElectricPower electricPower = objectMapper.readValue(payload, ElectricPower.class); + DeviceData data = objectMapper.readValue(payload, DeviceData.class); + List<PowerEntity> powerMeters = PowerDataMapper.mapToEntities(data); + for (PowerEntity powerMeter : powerMeters) { + dataService.writeTimeSeriesData(powerMeter); + } + // dataService.writeTimeSeriesData(electricPower) } catch (Exception e) { log.error(e.getMessage()); } diff --git a/src/main/java/com/zhitan/handler/OpcDataHandler.java b/src/main/java/com/zhitan/handler/OpcDataHandler.java new file mode 100644 index 0000000..29c3940 --- /dev/null +++ b/src/main/java/com/zhitan/handler/OpcDataHandler.java @@ -0,0 +1,44 @@ +package com.zhitan.handler; + +import com.zhitan.model.entity.OpcData; +import com.zhitan.service.IDataService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * OPC UA鏁版嵁澶勭悊鍣� + */ +@Slf4j +@Component +public class OpcDataHandler { + private final IDataService dataService; + + public OpcDataHandler(IDataService dataService) { + this.dataService = dataService; + } + + /** + * 澶勭悊OPC UA鏁版嵁 + * + * @param dataList OPC UA鏁版嵁鍒楄〃 + */ + public void handleOpcData(List<OpcData> dataList) { + if (dataList == null || dataList.isEmpty()) { + return; + } + + for (OpcData data : dataList) { + if (data.getValue() != null) { + // 鏋勫缓JSON鏍煎紡鏁版嵁 + String jsonData = String.format("{\"%s\":%f}", data.getName(), data.getValue()); + // 浣跨敤鐜版湁鐨勬暟鎹湇鍔″啓鍏ユ椂搴忔暟鎹� + dataService.writeTimeSeriesData(jsonData); + log.debug("澶勭悊OPC UA鏁版嵁: {} = {}", data.getName(), data.getValue()); + } else if (data.getErrorMessage() != null) { + log.warn("OPC UA鏁版嵁澶勭悊澶辫触: {} - {}", data.getName(), data.getErrorMessage()); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/com/zhitan/influxdb/InfluxdbRepository.java b/src/main/java/com/zhitan/influxdb/InfluxdbRepository.java index b55ef44..8835285 100644 --- a/src/main/java/com/zhitan/influxdb/InfluxdbRepository.java +++ b/src/main/java/com/zhitan/influxdb/InfluxdbRepository.java @@ -5,6 +5,8 @@ import com.influxdb.client.InfluxDBClientFactory; import com.influxdb.client.WriteApiBlocking; import com.influxdb.client.write.Point; +import com.influxdb.query.FluxRecord; +import com.influxdb.query.FluxTable; import com.zhitan.config.influxdb.InfluxdbConfig; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -73,4 +75,32 @@ WriteApiBlocking writeApi = client.getWriteApiBlocking(); writeApi.writePoints(points); } + + public double getLastPoint(String measurement, String tag, String s) { + if (client == null || !config.isEnable()) { + log.warn("InfluxDB client is not initialized or disabled."); + return 0; + } + + String query = String.format("from(bucket: \"%s\") " + + "|> range(start: -1h) " + + "|> filter(fn: (r) => r._measurement == \"%s\" and r._field == \"value\") " + + "|> filter(fn: (r) => r.tag == \"%s\") " + + "|> last()", config.getBucket(), measurement, s); + + List<FluxTable> tables = client.getQueryApi().query(query, config.getOrg()); + + if (tables != null && !tables.isEmpty()) { + List<FluxRecord> records = tables.get(0).getRecords(); + if (records != null && !records.isEmpty()) { + FluxRecord record = records.get(0); + double value = (double) record.getValue(); + + return value; + } + } + + log.warn("No data found for measurement: {}, tag: {}, field: {}", measurement, tag, s); + return 0; + } } diff --git a/src/main/java/com/zhitan/model/entity/DeviceData.java b/src/main/java/com/zhitan/model/entity/DeviceData.java new file mode 100644 index 0000000..0dc8e33 --- /dev/null +++ b/src/main/java/com/zhitan/model/entity/DeviceData.java @@ -0,0 +1,45 @@ +package com.zhitan.model.entity; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class DeviceData { + @JsonProperty("params") + private Params params; + + @Data + public static class Params { + @JsonProperty("dir") + private String dir; + + @JsonProperty("id") + private String id; + + @JsonProperty("sys_sn") + private String sysSn; + + @JsonProperty("sys_imei") + private String sysImei; + + @JsonProperty("sys_time") + private Long sysTime; // 鏃堕棿鎴崇敤Long绫诲瀷 + + @JsonProperty("r_data") + private List<RDataItem> rData; + } + + @Data + public static class RDataItem { + @JsonProperty("name") + private String name; + + @JsonProperty("value") + private String value; // 鏍规嵁瀹為檯鏁版嵁鏍煎紡閫夋嫨String/Double + + @JsonProperty("err") + private String error; + } +} diff --git a/src/main/java/com/zhitan/model/entity/OpcData.java b/src/main/java/com/zhitan/model/entity/OpcData.java new file mode 100644 index 0000000..be7ef0e --- /dev/null +++ b/src/main/java/com/zhitan/model/entity/OpcData.java @@ -0,0 +1,46 @@ +package com.zhitan.model.entity; + +import lombok.Data; + +import java.time.Instant; + +/** + * OPC UA鏁版嵁妯″瀷 + */ +@Data +public class OpcData { + /** + * 鑺傜偣鍚嶇О + */ + private String name; + + /** + * 鑺傜偣ID + */ + private String nodeId; + + /** + * 鏁版嵁鍊� + */ + private Double value; + + /** + * 鏁版嵁绫诲瀷 + */ + private String dataType; + + /** + * 鏃堕棿鎴� + */ + private Instant timestamp; + + /** + * 鐘舵�佺爜 + */ + private Integer statusCode; + + /** + * 閿欒淇℃伅 + */ + private String errorMessage; +} \ No newline at end of file diff --git a/src/main/java/com/zhitan/model/entity/PowerEntity.java b/src/main/java/com/zhitan/model/entity/PowerEntity.java new file mode 100644 index 0000000..0d7a543 --- /dev/null +++ b/src/main/java/com/zhitan/model/entity/PowerEntity.java @@ -0,0 +1,50 @@ +package com.zhitan.model.entity; + +import lombok.Data; + +@Data +public class PowerEntity { + // sys_sn + private String sn; + //sys_imei + private String imei; + //sys_time + private Long time; + // Uab + private Double uab; + // Ubc + private Double ubc; + // Uca + private Double uca; + // Ua + private Double ua; + // Ub + private Double ub; + // Uc + private Double uc; + // Ia + private Double ia; + // Ib + private Double ib; + // Ic + private Double ic; + // 闆跺簭鐢垫祦 Io + private Double io; + // 鎬诲姛鐜囧洜鏁� PF + private Double pf; + // 鎬绘湁鍔熷姛鐜� psum + private Double psum; + // 鎬绘湁鍔熺數鑳� eps + private Double eps; + // 鎬绘棤鍔熺數鑳� eqs + private Double eqs; + // 姝e悜鎬绘湁鍔熺數鑳� epsp + private Double epsp; + // 鍙嶅悜鎬绘湁鍔熺數鑳� epsn + private Double epsn; + // 姝e悜鎬绘棤鍔熺數鑳� eqsp + private Double eqsp; + // 鍙嶅悜鎬绘棤鍔熺數鑳� eqsn + private Double eqsn; + +} diff --git a/src/main/java/com/zhitan/redis/RedisCache.java b/src/main/java/com/zhitan/redis/RedisCache.java index d008cb7..567d67f 100644 --- a/src/main/java/com/zhitan/redis/RedisCache.java +++ b/src/main/java/com/zhitan/redis/RedisCache.java @@ -80,22 +80,29 @@ } /** - * 缂撳瓨List鏁版嵁 - * - * @param key 缂撳瓨鐨勯敭鍊� - * @param dataList 寰呯紦瀛樼殑List鏁版嵁 - * @return 缂撳瓨鐨勫璞� - */ - public <T> ListOperations<String, T> setCacheList(String key, List<T> dataList) { - ListOperations listOperation = redisTemplate.opsForList(); - if (null != dataList) { - int size = dataList.size(); - for (int i = 0; i < size; i++) { - listOperation.leftPush(key, dataList.get(i)); - } + * 缂撳瓨List鏁版嵁锛屽苟璁剧疆杩囨湡鏃堕棿 + * + * @param key 缂撳瓨鐨勯敭鍊� + * @param dataList 寰呯紦瀛樼殑List鏁版嵁 + * @param timeout 杩囨湡鏃堕棿 + * @param timeUnit 鏃堕棿鍗曚綅 + * @return 缂撳瓨鐨勫璞� + */ +public <T> ListOperations<String, T> setCacheList(String key, List<T> dataList, Integer timeout, TimeUnit timeUnit) { + ListOperations listOperation = redisTemplate.opsForList(); + if (null != dataList) { + int size = dataList.size(); + for (int i = 0; i < size; i++) { + listOperation.leftPush(key, dataList.get(i)); } - return listOperation; } + // 璁剧疆杩囨湡鏃堕棿 + if (timeout > 0) { + redisTemplate.expire(key, timeout, timeUnit); + } + return listOperation; +} + /** * 鑾峰緱缂撳瓨鐨刲ist瀵硅薄 diff --git a/src/main/java/com/zhitan/service/IDataService.java b/src/main/java/com/zhitan/service/IDataService.java index f04f0cc..4edd3ac 100644 --- a/src/main/java/com/zhitan/service/IDataService.java +++ b/src/main/java/com/zhitan/service/IDataService.java @@ -1,6 +1,7 @@ package com.zhitan.service; import com.zhitan.model.entity.ElectricPower; +import com.zhitan.model.entity.PowerEntity; import org.jetbrains.annotations.NotNull; /** @@ -21,4 +22,11 @@ * @param electricPower 鍥哄畾鏍煎紡鐨勬暟鎹� */ void writeTimeSeriesData(@NotNull ElectricPower electricPower); + + /** + * 鍐欏叆鐢靛姏鐩稿叧鏁版嵁-鍥哄畾鏍煎紡锛屽彲鑷畾涔変慨鏀� + * + * @param powerEntity 鍥哄畾鏍煎紡鐨勬暟鎹� + */ + void writeTimeSeriesData(@NotNull PowerEntity powerEntity); } diff --git a/src/main/java/com/zhitan/service/IOpcService.java b/src/main/java/com/zhitan/service/IOpcService.java new file mode 100644 index 0000000..85d5fb1 --- /dev/null +++ b/src/main/java/com/zhitan/service/IOpcService.java @@ -0,0 +1,56 @@ +package com.zhitan.service; + +import com.zhitan.model.entity.OpcData; + +import java.util.List; + +/** + * OPC UA鏈嶅姟鎺ュ彛 + */ +public interface IOpcService { + + /** + * 杩炴帴鍒癘PC UA鏈嶅姟鍣� + * + * @return 鏄惁杩炴帴鎴愬姛 + */ + boolean connect(); + + /** + * 鏂紑涓嶰PC UA鏈嶅姟鍣ㄧ殑杩炴帴 + */ + void disconnect(); + + /** + * 璇诲彇鍗曚釜鑺傜偣鐨勬暟鎹� + * + * @param nodeId 鑺傜偣ID + * @param name 鑺傜偣鍚嶇О + * @return OPC鏁版嵁 + */ + OpcData readNode(String nodeId, String name); + + /** + * 璇诲彇鎵�鏈夐厤缃殑鑺傜偣鏁版嵁 + * + * @return OPC鏁版嵁鍒楄〃 + */ + List<OpcData> readAllNodes(); + + /** + * 鍚姩鏁版嵁閲囬泦 + */ + void startDataCollection(); + + /** + * 鍋滄鏁版嵁閲囬泦 + */ + void stopDataCollection(); + + /** + * 妫�鏌ヨ繛鎺ョ姸鎬� + * + * @return 鏄惁宸茶繛鎺� + */ + boolean isConnected(); +} \ No newline at end of file diff --git a/src/main/java/com/zhitan/service/impl/DataServiceImpl.java b/src/main/java/com/zhitan/service/impl/DataServiceImpl.java index fc1af3d..18d8376 100644 --- a/src/main/java/com/zhitan/service/impl/DataServiceImpl.java +++ b/src/main/java/com/zhitan/service/impl/DataServiceImpl.java @@ -11,6 +11,7 @@ import com.zhitan.model.entity.ElectricPower; import com.zhitan.influxdb.InfluxdbRepository; import com.zhitan.mapper.CommonMapper; +import com.zhitan.model.entity.PowerEntity; import com.zhitan.redis.RedisCache; import com.zhitan.service.IDataService; import lombok.extern.slf4j.Slf4j; @@ -23,6 +24,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; /** * 鏁版嵁service @@ -118,6 +120,61 @@ repository.writePoints(points); } + + /** + * 鍐欏叆鐢靛姏鐩稿叧鏁版嵁-鍥哄畾鏍煎紡锛屽彲鑷畾涔変慨鏀� + * + * @param powerEntity 鍥哄畾鏍煎紡鐨勬暟鎹� + */ + @Override + public void writeTimeSeriesData(@NotNull PowerEntity powerEntity) { + List<IndexTemplate> templates = getIndexTemplate(); + // 鑾峰彇绫讳腑鎵�鏈夊0鏄庣殑瀛楁 + Field[] fields = powerEntity.getClass().getDeclaredFields(); + List<Point> points = new ArrayList<>(); + for (Field field : fields) { + IndexTemplate indexTemplate = templates.stream().filter(template -> + field.getName().equalsIgnoreCase(template.getGatewayKey())) + .findFirst().orElse(null); + if (indexTemplate != null) { + Point point = Point + .measurement(influxdbConfig.getMeasurement()) + .addTag(TAG, powerEntity.getSn() + "_" + indexTemplate.getCode()) + .time(Instant.now(), WritePrecision.S); + // 璁剧疆瀛楁鍙闂紝鍏佽璁块棶绉佹湁瀛楁 + field.setAccessible(true); + if (Number.class.isAssignableFrom(field.getType()) || field.getType().isPrimitive()) { + try { + // 鑾峰彇瀛楁鍊� + Object o = field.get(powerEntity); + if (o==null) { + // 鏌ヨ鍑烘渶鍚庝竴娆″啓鍏nfluxdb鐨勬暟鎹� + double lastValue = repository.getLastPoint(influxdbConfig.getMeasurement(), + TAG, powerEntity.getSn() + "_" + indexTemplate.getCode()); + if (lastValue>0) { + log.info("鏌ヨ鍑烘渶鍚庝竴娆″啓鍏nfluxdb鐨勬暟鎹�:{}", lastValue); + } + point.addField(FIELD_VALUE, lastValue); + } else { + // 瀹夊叏绫诲瀷杞崲 + if (o instanceof Number) { + double value = ((Number) o).doubleValue(); + point.addField(FIELD_VALUE, value); + // 浣跨敤 value... + } else { + log.error("瀛楁 {} 绫诲瀷闈炴硶: {}", field.getName(), o.getClass()); + } + } + points.add(point); + } catch (IllegalAccessException e) { + log.error("鑾峰彇灞炴�у�煎け璐�:{}", e.getMessage()); + } + } + } + } + repository.writePoints(points); + } + /** * 鑾峰彇鐐逛綅妯℃澘 */ @@ -126,7 +183,7 @@ List<IndexTemplate> result = redisCache.getCacheList(TEMPLATE_KEY); if (result == null || result.isEmpty()) { result = commonMapper.getIndexTemplate(); - redisCache.setCacheList(TEMPLATE_KEY, result); + redisCache.setCacheList(TEMPLATE_KEY, result, 120, TimeUnit.SECONDS); } return result; } diff --git a/src/main/java/com/zhitan/service/impl/OpcServiceImpl.java b/src/main/java/com/zhitan/service/impl/OpcServiceImpl.java new file mode 100644 index 0000000..b456832 --- /dev/null +++ b/src/main/java/com/zhitan/service/impl/OpcServiceImpl.java @@ -0,0 +1,392 @@ +package com.zhitan.service.impl; + +import com.influxdb.client.domain.WritePrecision; +import com.influxdb.client.write.Point; +import com.zhitan.config.influxdb.InfluxdbConfig; +import com.zhitan.config.opc.OpcConfig; +import com.zhitan.handler.OpcDataHandler; +import com.zhitan.influxdb.InfluxdbRepository; +import com.zhitan.model.entity.OpcData; +import com.zhitan.service.IOpcService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.milo.opcua.sdk.client.OpcUaClient; +import org.eclipse.milo.opcua.sdk.client.api.config.OpcUaClientConfig; +import org.eclipse.milo.opcua.sdk.client.api.config.OpcUaClientConfigBuilder; +import org.eclipse.milo.opcua.sdk.client.api.identity.AnonymousProvider; +import org.eclipse.milo.opcua.sdk.client.api.identity.UsernameProvider; +import org.eclipse.milo.opcua.stack.client.DiscoveryClient; +import org.eclipse.milo.opcua.stack.core.AttributeId; +import org.eclipse.milo.opcua.stack.core.UaException; +import org.eclipse.milo.opcua.stack.core.types.builtin.*; +import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger; +import org.eclipse.milo.opcua.stack.core.types.enumerated.TimestampsToReturn; +import org.eclipse.milo.opcua.stack.core.types.structured.EndpointDescription; +import org.eclipse.milo.opcua.stack.core.types.structured.ReadResponse; +import org.eclipse.milo.opcua.stack.core.types.structured.ReadValueId; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import java.text.ParseException; +import java.time.Instant; +import java.util.*; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * OPC UA鏈嶅姟瀹炵幇绫� + */ +@Slf4j +@Service +public class OpcServiceImpl implements IOpcService { + + private final OpcConfig opcConfig; + private final InfluxdbRepository influxdbRepository; + private final InfluxdbConfig influxdbConfig; + private final OpcDataHandler opcDataHandler; + + private OpcUaClient client; + private final AtomicBoolean isRunning = new AtomicBoolean(false); + private final Map<String, String> nodeMap = new HashMap<>(); + private final String TAG = "tag"; + private final String FIELD_VALUE = "value"; + + @Autowired + public OpcServiceImpl(OpcConfig opcConfig, InfluxdbRepository influxdbRepository, + InfluxdbConfig influxdbConfig, OpcDataHandler opcDataHandler) { + this.opcConfig = opcConfig; + this.influxdbRepository = influxdbRepository; + this.influxdbConfig = influxdbConfig; + this.opcDataHandler = opcDataHandler; + parseNodeConfig(); + } + + /** + * 瑙f瀽鑺傜偣閰嶇疆 + */ + private void parseNodeConfig() { + if (opcConfig.getNodes() != null) { + for (String nodeConfig : opcConfig.getNodes()) { + String[] parts = nodeConfig.split("=", 2); + if (parts.length == 2) { + String name = parts[0]; + String nodeId = parts[1]; + nodeMap.put(nodeId, name); + log.info("宸查厤缃甇PC UA鑺傜偣: {} -> {}", name, nodeId); + } + } + } + } + + /** + * 搴旂敤鍚姩鏃惰嚜鍔ㄨ繛鎺ュ苟寮�濮嬫暟鎹噰闆� + */ + @PostConstruct + public void init() { + if (opcConfig.isEnable()) { + log.info("姝e湪鍒濆鍖朞PC UA瀹㈡埛绔�..."); + if (connect()) { + startDataCollection(); + } + } else { + log.info("OPC UA瀹㈡埛绔凡绂佺敤"); + } + } + + /** + * 搴旂敤鍏抽棴鏃舵柇寮�杩炴帴 + */ + @PreDestroy + public void destroy() { + stopDataCollection(); + disconnect(); + } + + @Override + public boolean connect() { + if (client != null && isConnected()) { + log.info("OPC UA瀹㈡埛绔凡杩炴帴"); + return true; + } + + try { + log.info("姝e湪杩炴帴OPC UA鏈嶅姟鍣�: {}", opcConfig.getServerUrl()); + + // 鍙戠幇绔偣 + List<EndpointDescription> endpoints = DiscoveryClient.getEndpoints(opcConfig.getServerUrl()).get(); + EndpointDescription endpoint = endpoints.stream() + .findFirst() + .orElseThrow(() -> new Exception("鏈壘鍒板彲鐢ㄧ殑OPC UA绔偣")); + + // 閰嶇疆瀹㈡埛绔� + OpcUaClientConfigBuilder configBuilder = OpcUaClientConfig.builder() + .setEndpoint(endpoint) + .setRequestTimeout(UInteger.valueOf(opcConfig.getConnectionTimeout())); + + // 璁剧疆璁よ瘉鏂瑰紡 + if (opcConfig.getUsername() != null && !opcConfig.getUsername().isEmpty()) { + configBuilder.setIdentityProvider(new UsernameProvider( + opcConfig.getUsername(), + opcConfig.getPassword() + )); + } else { + configBuilder.setIdentityProvider(new AnonymousProvider()); + } + + // 鍒涘缓瀹㈡埛绔苟杩炴帴 + client = OpcUaClient.create(configBuilder.build()); + client.connect().get(); + List<String> namespaceUris = Arrays.asList(client.getNamespaceTable().toArray()); + for (int i = 0; i < namespaceUris.size(); i++) { + System.out.println("Namespace Index: " + i + ", URI: " + namespaceUris.get(i)); + } + log.info("OPC UA瀹㈡埛绔繛鎺ユ垚鍔�"); + return true; + } catch (Exception e) { + log.error("OPC UA瀹㈡埛绔繛鎺ュけ璐�: {}", e.getMessage(), e); + return false; + } + } + + @Override + public void disconnect() { + if (client != null) { + try { + client.disconnect().get(); + log.info("OPC UA瀹㈡埛绔凡鏂紑杩炴帴"); + } catch (Exception e) { + log.error("OPC UA瀹㈡埛绔柇寮�杩炴帴澶辫触: {}", e.getMessage(), e); + } finally { + client = null; + } + } + } + + @Override + public OpcData readNode(String nodeId, String name) { + log.info("姝e湪璇诲彇鑺傜偣: {},鍚嶇О锛� {}", nodeId, name); + OpcData data = new OpcData(); + data.setNodeId(nodeId); + data.setName(name); + data.setTimestamp(Instant.now()); + + if (client == null || !isConnected()) { + data.setErrorMessage("OPC UA瀹㈡埛绔湭杩炴帴"); + return data; + } + + try { + // 鍒涘缓璇诲彇璇锋眰 + ReadValueId readValueId = new ReadValueId( + NodeId.parse(nodeId), + AttributeId.Value.uid(), + null, + QualifiedName.NULL_VALUE + ); + + // 鎵ц璇诲彇 + ReadResponse response = client.read( + 0.0, + TimestampsToReturn.Both, + List.of(readValueId) + ).get(); + + // 澶勭悊缁撴灉 + DataValue[] results = response.getResults(); + if (results == null || results.length == 0) { + data.setStatusCode(-1); + data.setErrorMessage("璇诲彇澶辫触: 鍝嶅簲涓棤缁撴灉鏁版嵁"); + return data; + } + + DataValue value = results[0]; + data.setStatusCode((int) value.getStatusCode().getValue()); + + if (value.getStatusCode().isGood()) { + Variant variant = value.getValue(); + if (variant != null && variant.getValue() != null) { + Object rawValue = variant.getValue(); + data.setDataType(rawValue.getClass().getSimpleName()); + + // 杞崲涓篋ouble + if (rawValue instanceof Number) { + data.setValue(((Number) rawValue).doubleValue()); + } else if (rawValue instanceof Boolean) { + data.setValue((Boolean) rawValue ? 1.0 : 0.0); + } else { + data.setValue(null); + data.setErrorMessage("涓嶆敮鎸佺殑鏁版嵁绫诲瀷: " + rawValue.getClass().getName()); + } + } + } else { + data.setErrorMessage("璇诲彇澶辫触: " + value.getStatusCode().toString()); + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); // 鎭㈠涓柇鐘舵�� + data.setErrorMessage("璇诲彇寮傚父: " + e.getMessage()); + log.error("璇诲彇OPC UA鑺傜偣 {} 琚腑鏂�: {}", nodeId, e.getMessage(), e); + } catch (ExecutionException e) { + data.setErrorMessage("璇诲彇寮傚父: " + e.getCause() != null ? e.getCause().getMessage() : e.getMessage()); + log.error("璇诲彇OPC UA鑺傜偣 {} 澶辫触: {}", nodeId, e.getMessage(), e); + } catch (Exception e) { + data.setErrorMessage("鏈煡寮傚父: " + e.getMessage()); + log.error("璇诲彇OPC UA鑺傜偣 {} 鍙戠敓鏈煡寮傚父", nodeId, e); + } + + return data; + } + + + @Override + public List<OpcData> readAllNodes() { + List<OpcData> results = new ArrayList<>(); + log.info("寮�濮嬭鍙栨墍鏈夎妭鐐规椂闂�: {}", Instant.now()); + if (nodeMap.isEmpty()) { + log.warn("娌℃湁閰嶇疆OPC UA鑺傜偣"); + return results; + } + + try { + // 鏋勫缓鎵归噺璇诲彇璇锋眰 + List<ReadValueId> readValueIds = new ArrayList<>(); + Map<Integer, Map.Entry<String, String>> indexMap = new HashMap<>(); + + int index = 0; + for (Map.Entry<String, String> entry : nodeMap.entrySet()) { + ReadValueId readValueId = new ReadValueId( + NodeId.parse(entry.getKey()), + AttributeId.Value.uid(), + null, + QualifiedName.NULL_VALUE + ); + readValueIds.add(readValueId); + indexMap.put(index++, entry); + } + + // 鎵ц鎵归噺璇诲彇 + ReadResponse response = client.read(0.0, TimestampsToReturn.Both, readValueIds).get(); + DataValue[] dataValues = response.getResults(); + + if (dataValues == null || dataValues.length != readValueIds.size()) { + log.error("鎵归噺璇诲彇澶辫触: 杩斿洖缁撴灉鏁伴噺涓嶅尮閰�"); + return results; + } + + // 澶勭悊鍝嶅簲鏁版嵁 + for (int i = 0; i < dataValues.length; i++) { + Map.Entry<String, String> entry = indexMap.get(i); + String nodeId = entry.getKey(); + String name = entry.getValue(); + DataValue value = dataValues[i]; + + OpcData data = new OpcData(); + data.setNodeId(nodeId); + data.setName(name); + data.setTimestamp(Instant.now()); + + if (value.getStatusCode().isGood() && value.getValue() != null) { + Variant variant = value.getValue(); + Object rawValue = variant.getValue(); + data.setDataType(rawValue.getClass().getSimpleName()); + data.setStatusCode((int) value.getStatusCode().getValue()); + + if (rawValue instanceof Number) { + data.setValue(((Number) rawValue).doubleValue()); + } else if (rawValue instanceof Boolean) { + data.setValue((Boolean) rawValue ? 1.0 : 0.0); + } else { + data.setValue(null); + data.setErrorMessage("涓嶆敮鎸佺殑鏁版嵁绫诲瀷: " + rawValue.getClass().getName()); + } + } else { + data.setStatusCode((int) value.getStatusCode().getValue()); + data.setErrorMessage("璇诲彇澶辫触: " + value.getStatusCode().toString()); + } + + results.add(data); + } + + } catch (Exception e) { + log.error("鎵归噺璇诲彇OPC UA鑺傜偣澶辫触", e); + } + log.info("璇诲彇鎵�鏈夎妭鐐瑰畬鎴�, 鍏辫 {} 涓妭鐐�, 鏃堕棿: {}", results.size(), Instant.now()); + return results; + } + + + @Override + public void startDataCollection() { + if (isRunning.compareAndSet(false, true)) { + log.info("OPC UA鏁版嵁閲囬泦宸插惎鍔�"); + } + } + + @Override + public void stopDataCollection() { + if (isRunning.compareAndSet(true, false)) { + log.info("OPC UA鏁版嵁閲囬泦宸插仠姝�"); + } + } + @Override + public boolean isConnected() { + if (client == null) { + return false; + } + try { + return client.getSession().get() != null; + } catch (Exception e) { + log.warn("鑾峰彇OPC UA浼氳瘽澶辫触: {}", e.getMessage()); + return false; + } + } + + + + /** + * 瀹氭椂閲囬泦鏁版嵁骞跺啓鍏nfluxDB + */ + @Scheduled(fixedDelayString = "${opc.scan-rate}") + public void collectAndStoreData() { + if (!opcConfig.isEnable() || !isRunning.get()) { + return; + } + + if (!isConnected() && !connect()) { + log.warn("OPC UA瀹㈡埛绔湭杩炴帴锛屾棤娉曢噰闆嗘暟鎹�"); + return; + } + + try { + List<OpcData> dataList = readAllNodes(); + List<Point> points = new ArrayList<>(); + + // 浣跨敤涓ょ鏂瑰紡瀛樺偍鏁版嵁 + // 1. 鐩存帴閫氳繃InfluxDB瀛樺偍搴撳啓鍏� + for (OpcData data : dataList) { + if (data.getValue() != null) { + Point point = Point + .measurement(influxdbConfig.getMeasurement()) + .addTag(TAG, data.getName()) + .addField(FIELD_VALUE, data.getValue()) + .time(data.getTimestamp(), WritePrecision.NS); + points.add(point); + log.debug("閲囬泦OPC UA鏁版嵁: {} = {}", data.getName(), data.getValue()); + } else if (data.getErrorMessage() != null) { + log.warn("閲囬泦OPC UA鏁版嵁澶辫触: {} - {}", data.getName(), data.getErrorMessage()); + } + } + + if (!points.isEmpty()) { + influxdbRepository.writePoints(points); + log.info("鎴愬姛鍐欏叆 {} 鏉PC UA鏁版嵁鍒癐nfluxDB", points.size()); + } + + // 2. 閫氳繃鏁版嵁澶勭悊鍣ㄤ娇鐢ㄧ幇鏈夌殑鏁版嵁鏈嶅姟鎺ュ彛鍐欏叆 + opcDataHandler.handleOpcData(dataList); + } catch (Exception e) { + log.error("OPC UA鏁版嵁閲囬泦寮傚父: {}", e.getMessage(), e); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/zhitan/util/PowerDataMapper.java b/src/main/java/com/zhitan/util/PowerDataMapper.java new file mode 100644 index 0000000..563c497 --- /dev/null +++ b/src/main/java/com/zhitan/util/PowerDataMapper.java @@ -0,0 +1,114 @@ +package com.zhitan.util; + +import com.zhitan.model.entity.DeviceData; +import com.zhitan.model.entity.PowerEntity; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class PowerDataMapper { + + public static List<PowerEntity> mapToEntities(DeviceData deviceData) { + List<PowerEntity> meters = IntStream.rangeClosed(1, 8) + .mapToObj(i -> createBaseEntity(deviceData, i)) + .collect(Collectors.toList()); + + for (DeviceData.RDataItem item : deviceData.getParams().getRData()) { + // 绀轰緥锛氬皢 "Ia1" 鎷嗗垎涓� "Ia" 鍜� "1" + String[] parts = item.getName().split("(?<=\\D)(?=\\d)"); + if (parts.length != 2) continue; + + String fieldCode = parts[0]; // 濡� "Ia" + int meterIndex = Integer.parseInt(parts[1]) - 1; // 杞暟缁勪笅鏍� + + if (meterIndex >= 0 && meterIndex < 8) { + setMeterField(meters.get(meterIndex), fieldCode, item.getValue()); + } + // Uab1 Ubc1 Uca1鏄�8涓數琛ㄥ叡鐢ㄧ殑瀛楁锛屽鏋渋tem.getName鏄疷ab1 Ubc1 Uca1鍒欓亶鍘嗘墍鏈夌數琛ㄥ苟璧嬪�� + if ("Uab Ubc Uca Ua Ub Uc".contains(fieldCode)) { + for (int i = 0; i < 8; i++) { + setMeterField(meters.get(i), fieldCode, item.getValue()); + } + } + } + return meters; + } + + private static PowerEntity createBaseEntity(DeviceData data, int meterNumber) { + PowerEntity entity = new PowerEntity(); + entity.setSn(data.getParams().getSysSn() + "_" + meterNumber); + entity.setImei(data.getParams().getSysImei()); + entity.setTime(data.getParams().getSysTime()); + return entity; + } + + private static void setMeterField(PowerEntity entity, String fieldCode, String value) { + try { + switch (fieldCode.toUpperCase()) { + case "UAB": + entity.setUab(parseDouble(value)); + break; + case "UBC": + entity.setUbc(parseDouble(value)); + break; + case "UCA": + entity.setUca(parseDouble(value)); + break; + case "UA": + entity.setUa(parseDouble(value)); + break; + case "UB": + entity.setUb(parseDouble(value)); + break; + case "UC": + entity.setUc(parseDouble(value)); + break; + case "IA": + entity.setIa(parseDouble(value)); + break; + case "IB": + entity.setIb(parseDouble(value)); + break; + case "IC": + entity.setIc(parseDouble(value)); + break; + case "IO": + entity.setIo(parseDouble(value)); + break; + case "PF": + entity.setPf(parseDouble(value)); + break; + case "PSUM": + entity.setPsum(parseDouble(value)); + break; + case "EPS": + entity.setEps(parseDouble(value)); + break; + case "EQS": + entity.setEqs(parseDouble(value)); + break; + case "EPSP": + entity.setEpsp(parseDouble(value)); + break; + case "EPSN": + entity.setEpsn(parseDouble(value)); + break; + case "EQSP": + entity.setEqsp(parseDouble(value)); + break; + case "EQSN": + entity.setEqsn(parseDouble(value)); + break; + + + } + } catch (NumberFormatException e) { + // 澶勭悊鏁板�艰浆鎹㈠紓甯� + } + } + + private static Double parseDouble(String s) { + return s != null ? Double.parseDouble(s) : null; + } +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 3804c3f..4403e84 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -4,9 +4,9 @@ driverClassName: org.postgresql.Driver druid: master: - url: jdbc:postgresql://localhost:5432/energy + url: jdbc:postgresql://192.168.0.24:5432/postgres username: postgres - password: postgres + password: 123456 # 鍒濆杩炴帴鏁� initialSize: 5 # 鏈�灏忚繛鎺ユ睜鏁伴噺 @@ -52,13 +52,13 @@ multi-statement-allow: true mqtt: # 鑷畾涔� - client-id: 202503181042 + client-id: 2025031810421 # 鍏叡MQTT鏈嶅姟鍣紝鐢熶骇鐜闇�瑕佹浛鎹负鑷繁鐨� - broker-url: tcp://broker.emqx.io - username: - password: + broker-url: tcp://lanpucloud.cn:1883 + username: youren + password: 123456 #榛樿璁㈤槄鐨勪富棰� - default-topic: zhitan + default-topic: lanbao/nygl/device/up timeout: 30 keep-alive: 60 redis: @@ -67,12 +67,232 @@ port: 6379 password: influxdb: - host: "http://localhost:8086" + host: "http://192.168.0.24:8086" #淇敼涓鸿嚜宸辩殑鏃跺簭搴撹闂畂rg - org: "org" + org: "lanbao" #淇敼涓鸿嚜宸辩殑鏃跺簭搴揵ucket - bucket: "bucket" + bucket: "nygl" #淇敼涓鸿嚜宸辩殑鏃跺簭搴撹闂畉oken - token: "token" + token: "i8WwVZz3RvkEVF3qGaY8uIDXTFEe2PzjgrKebDzcxlYGKnR-kOK5Hf1S5G4z3p-lc9UO7MQS4qKGL4lIeHSw1A==" measurement: data - enable: true \ No newline at end of file + enable: true +# OPC UA閰嶇疆 +opc: + # OPC UA鏈嶅姟鍣ㄥ湴鍧� + server-url: "opc.tcp://192.168.254.195:49320" + # 鐢ㄦ埛鍚� + username: "" + # 瀵嗙爜 + password: "" + # 鏄惁鍚敤 + enable: true + # 閲囬泦闂撮殧(姣) + scan-rate: 30000 + # 杩炴帴瓒呮椂鏃堕棿(姣) + connection-timeout: 10000 + # 鑺傜偣鍒楄〃锛屾牸寮忎负锛氬悕绉�=鑺傜偣ID + nodes: + # 缁勮皟绾� LeftWorkshop + - "1-1#yijidiankonggui_1_VoltageA=ns=2;s=modbus.1-1#yijidiankonggui.tag1" + - "1-1#yijidiankonggui_1_VoltageB=ns=2;s=modbus.1-1#yijidiankonggui.tag2" + - "1-1#yijidiankonggui_1_VoltageC=ns=2;s=modbus.1-1#yijidiankonggui.tag3" + - "1-1#yijidiankonggui_1_CurrentA=ns=2;s=modbus.1-1#yijidiankonggui.tag7" + - "1-1#yijidiankonggui_1_CurrentB=ns=2;s=modbus.1-1#yijidiankonggui.tag8" + - "1-1#yijidiankonggui_1_CurrentC=ns=2;s=modbus.1-1#yijidiankonggui.tag9" + - "1-1#yijidiankonggui_1_ActivePow=ns=2;s=modbus.1-1#yijidiankonggui.tag10" + - "1-1#yijidiankonggui_1_PowFactorT=ns=2;s=modbus.1-1#yijidiankonggui.tag13" + - "1-1#yijidiankonggui_1_ActiveZN=ns=2;s=modbus.1-1#yijidiankonggui.tag16" + - "1-1#yijidiankonggui_1_ActiveZT=ns=2;s=modbus.1-1#yijidiankonggui.tag14" + - "1-1#yijidiankonggui_1_Exp=ns=2;s=modbus.1-1#yijidiankonggui.tag15" + - "1-1#yijidiankonggui_1_ExpZN=ns=2;s=modbus.1-1#yijidiankonggui.tag17" + # 灏佺綈闂� CanSeamerRoom + - "1-1#yijidiankonggui_2_VoltageA=ns=2;s=modbus.1-1#yijidiankonggui.tag1" + - "1-1#yijidiankonggui_2_VoltageB=ns=2;s=modbus.1-1#yijidiankonggui.tag2" + - "1-1#yijidiankonggui_2_VoltageC=ns=2;s=modbus.1-1#yijidiankonggui.tag3" + - "1-1#yijidiankonggui_2_CurrentA=ns=2;s=modbus.1-1#yijidiankonggui.tag21" + - "1-1#yijidiankonggui_2_CurrentB=ns=2;s=modbus.1-1#yijidiankonggui.tag22" + - "1-1#yijidiankonggui_2_CurrentC=ns=2;s=modbus.1-1#yijidiankonggui.tag23" + - "1-1#yijidiankonggui_2_ActivePow=ns=2;s=modbus.1-1#yijidiankonggui.tag24" + - "1-1#yijidiankonggui_2_PowFactorT=ns=2;s=modbus.1-1#yijidiankonggui.tag27" + - "1-1#yijidiankonggui_2_ActiveZN=ns=2;s=modbus.1-1#yijidiankonggui.tag30" + - "1-1#yijidiankonggui_2_ActiveZT=ns=2;s=modbus.1-1#yijidiankonggui.tag28" + - "1-1#yijidiankonggui_2_Exp=ns=2;s=modbus.1-1#yijidiankonggui.tag29" + - "1-1#yijidiankonggui_2_ExpZN=ns=2;s=modbus.1-1#yijidiankonggui.tag31" + # 鎴愬搧搴� FinishedStore + - "1-1#yijidiankonggui_3_VoltageA=ns=2;s=modbus.1-1#yijidiankonggui.tag1" + - "1-1#yijidiankonggui_3_VoltageB=ns=2;s=modbus.1-1#yijidiankonggui.tag2" + - "1-1#yijidiankonggui_3_VoltageC=ns=2;s=modbus.1-1#yijidiankonggui.tag3" + - "1-1#yijidiankonggui_3_CurrentA=ns=2;s=modbus.1-1#yijidiankonggui.tag35" + - "1-1#yijidiankonggui_3_CurrentB=ns=2;s=modbus.1-1#yijidiankonggui.tag36" + - "1-1#yijidiankonggui_3_CurrentC=ns=2;s=modbus.1-1#yijidiankonggui.tag37" + - "1-1#yijidiankonggui_3_ActivePow=ns=2;s=modbus.1-1#yijidiankonggui.tag38" + - "1-1#yijidiankonggui_3_PowFactorT=ns=2;s=modbus.1-1#yijidiankonggui.tag41" + - "1-1#yijidiankonggui_3_ActiveZN=ns=2;s=modbus.1-1#yijidiankonggui.tag44" + - "1-1#yijidiankonggui_3_ActiveZT=ns=2;s=modbus.1-1#yijidiankonggui.tag42" + - "1-1#yijidiankonggui_3_Exp=ns=2;s=modbus.1-1#yijidiankonggui.tag43" + - "1-1#yijidiankonggui_3_ExpZN=ns=2;s=modbus.1-1#yijidiankonggui.tag45" + # 娓呮礂闂� RightWorkshop + - "1-1#yijidiankonggui_4_VoltageA=ns=2;s=modbus.1-1#yijidiankonggui.tag1" + - "1-1#yijidiankonggui_4_VoltageB=ns=2;s=modbus.1-1#yijidiankonggui.tag2" + - "1-1#yijidiankonggui_4_VoltageC=ns=2;s=modbus.1-1#yijidiankonggui.tag3" + - "1-1#yijidiankonggui_4_CurrentA=ns=2;s=modbus.1-1#yijidiankonggui.tag49" + - "1-1#yijidiankonggui_4_CurrentB=ns=2;s=modbus.1-1#yijidiankonggui.tag50" + - "1-1#yijidiankonggui_4_CurrentC=ns=2;s=modbus.1-1#yijidiankonggui.tag51" + - "1-1#yijidiankonggui_4_ActivePow=ns=2;s=modbus.1-1#yijidiankonggui.tag52" + - "1-1#yijidiankonggui_4_PowFactorT=ns=2;s=modbus.1-1#yijidiankonggui.tag55" + - "1-1#yijidiankonggui_4_ActiveZN=ns=2;s=modbus.1-1#yijidiankonggui.tag58" + - "1-1#yijidiankonggui_4_ActiveZT=ns=2;s=modbus.1-1#yijidiankonggui.tag56" + - "1-1#yijidiankonggui_4_Exp=ns=2;s=modbus.1-1#yijidiankonggui.tag57" + - "1-1#yijidiankonggui_4_ExpZN=ns=2;s=modbus.1-1#yijidiankonggui.tag59" + #缁翠慨瀹ゅ姩鍔� MaintenanceRoom + - "1-2#yijidiankonggui_1_VoltageA=ns=2;s=modbus.1-2#yijidiankonggui.tag1" + - "1-2#yijidiankonggui_1_VoltageB=ns=2;s=modbus.1-2#yijidiankonggui.tag2" + - "1-2#yijidiankonggui_1_VoltageC=ns=2;s=modbus.1-2#yijidiankonggui.tag3" + - "1-2#yijidiankonggui_1_CurrentA=ns=2;s=modbus.1-2#yijidiankonggui.tag7" + - "1-2#yijidiankonggui_1_CurrentB=ns=2;s=modbus.1-2#yijidiankonggui.tag8" + - "1-2#yijidiankonggui_1_CurrentC=ns=2;s=modbus.1-2#yijidiankonggui.tag9" + - "1-2#yijidiankonggui_1_ActivePow=ns=2;s=modbus.1-2#yijidiankonggui.tag10" + - "1-2#yijidiankonggui_1_PowFactorT=ns=2;s=modbus.1-2#yijidiankonggui.tag13" + - "1-2#yijidiankonggui_1_ActiveZN=ns=2;s=modbus.1-2#yijidiankonggui.tag16" + - "1-2#yijidiankonggui_1_ActiveZT=ns=2;s=modbus.1-2#yijidiankonggui.tag14" + - "1-2#yijidiankonggui_1_Exp=ns=2;s=modbus.1-2#yijidiankonggui.tag15" + - "1-2#yijidiankonggui_1_ExpZN=ns=2;s=modbus.1-2#yijidiankonggui.tag17" + # 鍘熸潗鏂欎粨搴� RawMaterialWarehouse + - "1-2#yijidiankonggui_2_VoltageA=ns=2;s=modbus.1-2#yijidiankonggui.tag1" + - "1-2#yijidiankonggui_2_VoltageB=ns=2;s=modbus.1-2#yijidiankonggui.tag2" + - "1-2#yijidiankonggui_2_VoltageC=ns=2;s=modbus.1-2#yijidiankonggui.tag3" + - "1-2#yijidiankonggui_2_CurrentA=ns=2;s=modbus.1-2#yijidiankonggui.tag21" + - "1-2#yijidiankonggui_2_CurrentB=ns=2;s=modbus.1-2#yijidiankonggui.tag22" + - "1-2#yijidiankonggui_2_CurrentC=ns=2;s=modbus.1-2#yijidiankonggui.tag23" + - "1-2#yijidiankonggui_2_ActivePow=ns=2;s=modbus.1-2#yijidiankonggui.tag24" + - "1-2#yijidiankonggui_2_PowFactorT=ns=2;s=modbus.1-2#yijidiankonggui.tag27" + - "1-2#yijidiankonggui_2_ActiveZN=ns=2;s=modbus.1-2#yijidiankonggui.tag30" + - "1-2#yijidiankonggui_2_ActiveZT=ns=2;s=modbus.1-2#yijidiankonggui.tag28" + - "1-2#yijidiankonggui_2_Exp=ns=2;s=modbus.1-2#yijidiankonggui.tag29" + - "1-2#yijidiankonggui_2_ExpZN=ns=2;s=modbus.1-2#yijidiankonggui.tag31" + # 鎭掓俯瀹� ThermostaticChamber + - "1-2#yijidiankonggui_3_VoltageA=ns=2;s=modbus.1-2#yijidiankonggui.tag1" + - "1-2#yijidiankonggui_3_VoltageB=ns=2;s=modbus.1-2#yijidiankonggui.tag2" + - "1-2#yijidiankonggui_3_VoltageC=ns=2;s=modbus.1-2#yijidiankonggui.tag3" + - "1-2#yijidiankonggui_3_CurrentA=ns=2;s=modbus.1-2#yijidiankonggui.tag35" + - "1-2#yijidiankonggui_3_CurrentB=ns=2;s=modbus.1-2#yijidiankonggui.tag36" + - "1-2#yijidiankonggui_3_CurrentC=ns=2;s=modbus.1-2#yijidiankonggui.tag37" + - "1-2#yijidiankonggui_3_ActivePow=ns=2;s=modbus.1-2#yijidiankonggui.tag38" + - "1-2#yijidiankonggui_3_PowFactorT=ns=2;s=modbus.1-2#yijidiankonggui.tag41" + - "1-2#yijidiankonggui_3_ActiveZN=ns=2;s=modbus.1-2#yijidiankonggui.tag44" + - "1-2#yijidiankonggui_3_ActiveZT=ns=2;s=modbus.1-2#yijidiankonggui.tag42" + - "1-2#yijidiankonggui_3_Exp=ns=2;s=modbus.1-2#yijidiankonggui.tag43" + - "1-2#yijidiankonggui_3_ExpZN=ns=2;s=modbus.1-2#yijidiankonggui.tag45" + # 鍖呰兌闂� PackGlueRoom + - "1-2#yijidiankonggui_4_VoltageA=ns=2;s=modbus.1-2#yijidiankonggui.tag1" + - "1-2#yijidiankonggui_4_VoltageB=ns=2;s=modbus.1-2#yijidiankonggui.tag2" + - "1-2#yijidiankonggui_4_VoltageC=ns=2;s=modbus.1-2#yijidiankonggui.tag3" + - "1-2#yijidiankonggui_4_CurrentA=ns=2;s=modbus.1-2#yijidiankonggui.tag49" + - "1-2#yijidiankonggui_4_CurrentB=ns=2;s=modbus.1-2#yijidiankonggui.tag50" + - "1-2#yijidiankonggui_4_CurrentC=ns=2;s=modbus.1-2#yijidiankonggui.tag51" + - "1-2#yijidiankonggui_4_ActivePow=ns=2;s=modbus.1-2#yijidiankonggui.tag52" + - "1-2#yijidiankonggui_4_PowFactorT=ns=2;s=modbus.1-2#yijidiankonggui.tag55" + - "1-2#yijidiankonggui_4_ActiveZN=ns=2;s=modbus.1-2#yijidiankonggui.tag58" + - "1-2#yijidiankonggui_4_ActiveZT=ns=2;s=modbus.1-2#yijidiankonggui.tag56" + - "1-2#yijidiankonggui_4_Exp=ns=2;s=modbus.1-2#yijidiankonggui.tag57" + - "1-2#yijidiankonggui_4_ExpZN=ns=2;s=modbus.1-2#yijidiankonggui.tag59" + # 宸﹁溅闂寸┖璋� leftWkshopVRVS + - "2-1#yijidiankonggui_2_VoltageA=ns=2;s=modbus.2-1#yijidiankonggui.tag1" + - "2-1#yijidiankonggui_2_VoltageB=ns=2;s=modbus.2-1#yijidiankonggui.tag2" + - "2-1#yijidiankonggui_2_VoltageC=ns=2;s=modbus.2-1#yijidiankonggui.tag3" + - "2-1#yijidiankonggui_2_CurrentA=ns=2;s=modbus.2-1#yijidiankonggui.tag21" + - "2-1#yijidiankonggui_2_CurrentB=ns=2;s=modbus.2-1#yijidiankonggui.tag22" + - "2-1#yijidiankonggui_2_CurrentC=ns=2;s=modbus.2-1#yijidiankonggui.tag23" + - "2-1#yijidiankonggui_2_ActivePow=ns=2;s=modbus.2-1#yijidiankonggui.tag24" + - "2-1#yijidiankonggui_2_PowFactorT=ns=2;s=modbus.2-1#yijidiankonggui.tag27" + - "2-1#yijidiankonggui_2_ActiveZN=ns=2;s=modbus.2-1#yijidiankonggui.tag30" + - "2-1#yijidiankonggui_2_ActiveZT=ns=2;s=modbus.2-1#yijidiankonggui.tag28" + - "2-1#yijidiankonggui_2_Exp=ns=2;s=modbus.2-1#yijidiankonggui.tag29" + - "2-1#yijidiankonggui_2_ExpZN=ns=2;s=modbus.2-1#yijidiankonggui.tag31" + # 杞﹂棿鍔炲叕瀹� WorkshopOffice + - "2-1#yijidiankonggui_3_VoltageA=ns=2;s=modbus.2-1#yijidiankonggui.tag1" + - "2-1#yijidiankonggui_3_VoltageB=ns=2;s=modbus.2-1#yijidiankonggui.tag2" + - "2-1#yijidiankonggui_3_VoltageC=ns=2;s=modbus.2-1#yijidiankonggui.tag3" + - "2-1#yijidiankonggui_3_CurrentA=ns=2;s=modbus.2-1#yijidiankonggui.tag35" + - "2-1#yijidiankonggui_3_CurrentB=ns=2;s=modbus.2-1#yijidiankonggui.tag36" + - "2-1#yijidiankonggui_3_CurrentC=ns=2;s=modbus.2-1#yijidiankonggui.tag37" + - "2-1#yijidiankonggui_3_ActivePow=ns=2;s=modbus.2-1#yijidiankonggui.tag38" + - "2-1#yijidiankonggui_3_PowFactorT=ns=2;s=modbus.2-1#yijidiankonggui.tag41" + - "2-1#yijidiankonggui_3_ActiveZN=ns=2;s=modbus.2-1#yijidiankonggui.tag44" + - "2-1#yijidiankonggui_3_ActiveZT=ns=2;s=modbus.2-1#yijidiankonggui.tag42" + - "2-1#yijidiankonggui_3_Exp=ns=2;s=modbus.2-1#yijidiankonggui.tag43" + - "2-1#yijidiankonggui_3_ExpZN=ns=2;s=modbus.2-1#yijidiankonggui.tag45" + # 1銆�2妤间笢鍔炲叕瀹� EastOffice + - "2-1#yijidiankonggui_4_VoltageA=ns=2;s=modbus.2-1#yijidiankonggui.tag1" + - "2-1#yijidiankonggui_4_VoltageB=ns=2;s=modbus.2-1#yijidiankonggui.tag2" + - "2-1#yijidiankonggui_4_VoltageC=ns=2;s=modbus.2-1#yijidiankonggui.tag3" + - "2-1#yijidiankonggui_4_CurrentA=ns=2;s=modbus.2-1#yijidiankonggui.tag49" + - "2-1#yijidiankonggui_4_CurrentB=ns=2;s=modbus.2-1#yijidiankonggui.tag50" + - "2-1#yijidiankonggui_4_CurrentC=ns=2;s=modbus.2-1#yijidiankonggui.tag51" + - "2-1#yijidiankonggui_4_ActivePow=ns=2;s=modbus.2-1#yijidiankonggui.tag52" + - "2-1#yijidiankonggui_4_PowFactorT=ns=2;s=modbus.2-1#yijidiankonggui.tag55" + - "2-1#yijidiankonggui_4_ActiveZN=ns=2;s=modbus.2-1#yijidiankonggui.tag58" + - "2-1#yijidiankonggui_4_ActiveZT=ns=2;s=modbus.2-1#yijidiankonggui.tag56" + - "2-1#yijidiankonggui_4_Exp=ns=2;s=modbus.2-1#yijidiankonggui.tag57" + - "2-1#yijidiankonggui_4_ExpZN=ns=2;s=modbus.2-1#yijidiankonggui.tag59" + #鐓ф槑 Lighting + - "3-1#yijidiankonggui_1_VoltageA=ns=2;s=modbus.3-1#yijidiankonggui.tag1" + - "3-1#yijidiankonggui_1_VoltageB=ns=2;s=modbus.3-1#yijidiankonggui.tag2" + - "3-1#yijidiankonggui_1_VoltageC=ns=2;s=modbus.3-1#yijidiankonggui.tag3" + - "3-1#yijidiankonggui_1_CurrentA=ns=2;s=modbus.3-1#yijidiankonggui.tag7" + - "3-1#yijidiankonggui_1_CurrentB=ns=2;s=modbus.3-1#yijidiankonggui.tag8" + - "3-1#yijidiankonggui_1_CurrentC=ns=2;s=modbus.3-1#yijidiankonggui.tag9" + - "3-1#yijidiankonggui_1_ActivePow=ns=2;s=modbus.3-1#yijidiankonggui.tag10" + - "3-1#yijidiankonggui_1_PowFactorT=ns=2;s=modbus.3-1#yijidiankonggui.tag13" + - "3-1#yijidiankonggui_1_ActiveZN=ns=2;s=modbus.3-1#yijidiankonggui.tag16" + - "3-1#yijidiankonggui_1_ActiveZT=ns=2;s=modbus.3-1#yijidiankonggui.tag14" + - "3-1#yijidiankonggui_1_Exp=ns=2;s=modbus.3-1#yijidiankonggui.tag15" + - "3-1#yijidiankonggui_1_ExpZN=ns=2;s=modbus.3-1#yijidiankonggui.tag17" + # 杞﹂棿2妤� SecondFloorWorkshop + - "3-1#yijidiankonggui_2_VoltageA=ns=2;s=modbus.3-1#yijidiankonggui.tag1" + - "3-1#yijidiankonggui_2_VoltageB=ns=2;s=modbus.3-1#yijidiankonggui.tag2" + - "3-1#yijidiankonggui_2_VoltageC=ns=2;s=modbus.3-1#yijidiankonggui.tag3" + - "3-1#yijidiankonggui_2_CurrentA=ns=2;s=modbus.3-1#yijidiankonggui.tag21" + - "3-1#yijidiankonggui_2_CurrentB=ns=2;s=modbus.3-1#yijidiankonggui.tag22" + - "3-1#yijidiankonggui_2_CurrentC=ns=2;s=modbus.3-1#yijidiankonggui.tag23" + - "3-1#yijidiankonggui_2_ActivePow=ns=2;s=modbus.3-1#yijidiankonggui.tag24" + - "3-1#yijidiankonggui_2_PowFactorT=ns=2;s=modbus.3-1#yijidiankonggui.tag27" + - "3-1#yijidiankonggui_2_ActiveZN=ns=2;s=modbus.3-1#yijidiankonggui.tag30" + - "3-1#yijidiankonggui_2_ActiveZT=ns=2;s=modbus.3-1#yijidiankonggui.tag28" + - "3-1#yijidiankonggui_2_Exp=ns=2;s=modbus.3-1#yijidiankonggui.tag29" + - "3-1#yijidiankonggui_2_ExpZN=ns=2;s=modbus.3-1#yijidiankonggui.tag31" + # 鐢熶骇鍔炲叕瀹� ProductionOffice + - "3-1#yijidiankonggui_3_VoltageA=ns=2;s=modbus.3-1#yijidiankonggui.tag1" + - "3-1#yijidiankonggui_3_VoltageB=ns=2;s=modbus.3-1#yijidiankonggui.tag2" + - "3-1#yijidiankonggui_3_VoltageC=ns=2;s=modbus.3-1#yijidiankonggui.tag3" + - "3-1#yijidiankonggui_3_CurrentA=ns=2;s=modbus.3-1#yijidiankonggui.tag35" + - "3-1#yijidiankonggui_3_CurrentB=ns=2;s=modbus.3-1#yijidiankonggui.tag36" + - "3-1#yijidiankonggui_3_CurrentC=ns=2;s=modbus.3-1#yijidiankonggui.tag37" + - "3-1#yijidiankonggui_3_ActivePow=ns=2;s=modbus.3-1#yijidiankonggui.tag38" + - "3-1#yijidiankonggui_3_PowFactorT=ns=2;s=modbus.3-1#yijidiankonggui.tag41" + - "3-1#yijidiankonggui_3_ActiveZN=ns=2;s=modbus.3-1#yijidiankonggui.tag44" + - "3-1#yijidiankonggui_3_ActiveZT=ns=2;s=modbus.3-1#yijidiankonggui.tag42" + - "3-1#yijidiankonggui_3_Exp=ns=2;s=modbus.3-1#yijidiankonggui.tag43" + - "3-1#yijidiankonggui_3_ExpZN=ns=2;s=modbus.3-1#yijidiankonggui.tag45" + # 楂樹綆娓╄瘯楠屽尯 HLTempTest + - "3-1#yijidiankonggui_4_VoltageA=ns=2;s=modbus.3-1#yijidiankonggui.tag1" + - "3-1#yijidiankonggui_4_VoltageB=ns=2;s=modbus.3-1#yijidiankonggui.tag2" + - "3-1#yijidiankonggui_4_VoltageC=ns=2;s=modbus.3-1#yijidiankonggui.tag3" + - "3-1#yijidiankonggui_4_CurrentA=ns=2;s=modbus.3-1#yijidiankonggui.tag49" + - "3-1#yijidiankonggui_4_CurrentB=ns=2;s=modbus.3-1#yijidiankonggui.tag50" + - "3-1#yijidiankonggui_4_CurrentC=ns=2;s=modbus.3-1#yijidiankonggui.tag51" + - "3-1#yijidiankonggui_4_ActivePow=ns=2;s=modbus.3-1#yijidiankonggui.tag52" + - "3-1#yijidiankonggui_4_PowFactorT=ns=2;s=modbus.3-1#yijidiankonggui.tag55" + - "3-1#yijidiankonggui_4_ActiveZN=ns=2;s=modbus.3-1#yijidiankonggui.tag58" + - "3-1#yijidiankonggui_4_ActiveZT=ns=2;s=modbus.3-1#yijidiankonggui.tag56" + - "3-1#yijidiankonggui_4_Exp=ns=2;s=modbus.3-1#yijidiankonggui.tag57" + - "3-1#yijidiankonggui_4_ExpZN=ns=2;s=modbus.3-1#yijidiankonggui.tag59" + # 鎴愬搧浠撳簱娓╂箍搴� chengpincangku + - "chengpincangku_WD=ns=2;s=_AdvancedTags.cpk_wd" + - "chengpincangku_SD=ns=2;s=_AdvancedTags.cpk_sd" + # 鐢熶骇杞﹂棿 shengchanchejian + - "shengchanchejian_WD=ns=2;s=_AdvancedTags.sccj_wd" + - "shengchanchejian_SD=ns=2;s=_AdvancedTags.sccj_sd" + # 鍘熸枡浠撳簱 yuliaocangku + - "yuliaocangku_WD=ns=2;s=_AdvancedTags.ylk_wd" + - "yuliaocangku_SD=ns=2;s=_AdvancedTags.ylk_sd" \ No newline at end of file diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml new file mode 100644 index 0000000..69a92ef --- /dev/null +++ b/src/main/resources/application-prod.yml @@ -0,0 +1,298 @@ +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: org.postgresql.Driver + druid: + master: + url: jdbc:postgresql://192.168.0.24:5432/postgres + username: postgres + password: 123456 + # 鍒濆杩炴帴鏁� + initialSize: 5 + # 鏈�灏忚繛鎺ユ睜鏁伴噺 + minIdle: 10 + # 鏈�澶ц繛鎺ユ睜鏁伴噺 + maxActive: 20 + # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂� + maxWait: 60000 + # 閰嶇疆杩炴帴瓒呮椂鏃堕棿 + connectTimeout: 30000 + # 閰嶇疆缃戠粶瓒呮椂鏃堕棿 + socketTimeout: 60000 + # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣 + timeBetweenEvictionRunsMillis: 60000 + # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 + minEvictableIdleTimeMillis: 300000 + # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 + maxEvictableIdleTimeMillis: 900000 + # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁� + validationQuery: SELECT 1 + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂� + allow: + url-pattern: /druid/* + # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮� + login-username: admin + login-password: 123456 + filter: + stat: + enabled: true + # 鎱QL璁板綍 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + mqtt: + # 鑷畾涔� + client-id: 202503181042 + # 鍏叡MQTT鏈嶅姟鍣紝鐢熶骇鐜闇�瑕佹浛鎹负鑷繁鐨� + broker-url: tcp://lanpucloud.cn:1883 + username: youren + password: 123456 + #榛樿璁㈤槄鐨勪富棰� + default-topic: lanbao/nygl/device/up + timeout: 30 + keep-alive: 60 + redis: + database: 0 + host: localhost + port: 6379 + password: +influxdb: + host: "http://192.168.0.24:8086" + #淇敼涓鸿嚜宸辩殑鏃跺簭搴撹闂畂rg + org: "lanbao" + #淇敼涓鸿嚜宸辩殑鏃跺簭搴揵ucket + bucket: "nygl" + #淇敼涓鸿嚜宸辩殑鏃跺簭搴撹闂畉oken + token: "i8WwVZz3RvkEVF3qGaY8uIDXTFEe2PzjgrKebDzcxlYGKnR-kOK5Hf1S5G4z3p-lc9UO7MQS4qKGL4lIeHSw1A==" + measurement: data + enable: true +# OPC UA閰嶇疆 +opc: + # OPC UA鏈嶅姟鍣ㄥ湴鍧� + server-url: "opc.tcp://192.168.254.195:49320" + # 鐢ㄦ埛鍚� + username: "" + # 瀵嗙爜 + password: "" + # 鏄惁鍚敤 + enable: true + # 閲囬泦闂撮殧(姣) + scan-rate: 30000 + # 杩炴帴瓒呮椂鏃堕棿(姣) + connection-timeout: 10000 + # 鑺傜偣鍒楄〃锛屾牸寮忎负锛氬悕绉�=鑺傜偣ID + nodes: + # 缁勮皟绾� LeftWorkshop + - "1-1#yijidiankonggui_1_VoltageA=ns=2;s=modbus.1-1#yijidiankonggui.tag1" + - "1-1#yijidiankonggui_1_VoltageB=ns=2;s=modbus.1-1#yijidiankonggui.tag2" + - "1-1#yijidiankonggui_1_VoltageC=ns=2;s=modbus.1-1#yijidiankonggui.tag3" + - "1-1#yijidiankonggui_1_CurrentA=ns=2;s=modbus.1-1#yijidiankonggui.tag7" + - "1-1#yijidiankonggui_1_CurrentB=ns=2;s=modbus.1-1#yijidiankonggui.tag8" + - "1-1#yijidiankonggui_1_CurrentC=ns=2;s=modbus.1-1#yijidiankonggui.tag9" + - "1-1#yijidiankonggui_1_ActivePow=ns=2;s=modbus.1-1#yijidiankonggui.tag10" + - "1-1#yijidiankonggui_1_PowFactorT=ns=2;s=modbus.1-1#yijidiankonggui.tag13" + - "1-1#yijidiankonggui_1_ActiveZN=ns=2;s=modbus.1-1#yijidiankonggui.tag16" + - "1-1#yijidiankonggui_1_ActiveZT=ns=2;s=modbus.1-1#yijidiankonggui.tag14" + - "1-1#yijidiankonggui_1_Exp=ns=2;s=modbus.1-1#yijidiankonggui.tag15" + - "1-1#yijidiankonggui_1_ExpZN=ns=2;s=modbus.1-1#yijidiankonggui.tag17" + # 灏佺綈闂� CanSeamerRoom + - "1-1#yijidiankonggui_2_VoltageA=ns=2;s=modbus.1-1#yijidiankonggui.tag1" + - "1-1#yijidiankonggui_2_VoltageB=ns=2;s=modbus.1-1#yijidiankonggui.tag2" + - "1-1#yijidiankonggui_2_VoltageC=ns=2;s=modbus.1-1#yijidiankonggui.tag3" + - "1-1#yijidiankonggui_2_CurrentA=ns=2;s=modbus.1-1#yijidiankonggui.tag21" + - "1-1#yijidiankonggui_2_CurrentB=ns=2;s=modbus.1-1#yijidiankonggui.tag22" + - "1-1#yijidiankonggui_2_CurrentC=ns=2;s=modbus.1-1#yijidiankonggui.tag23" + - "1-1#yijidiankonggui_2_ActivePow=ns=2;s=modbus.1-1#yijidiankonggui.tag24" + - "1-1#yijidiankonggui_2_PowFactorT=ns=2;s=modbus.1-1#yijidiankonggui.tag27" + - "1-1#yijidiankonggui_2_ActiveZN=ns=2;s=modbus.1-1#yijidiankonggui.tag30" + - "1-1#yijidiankonggui_2_ActiveZT=ns=2;s=modbus.1-1#yijidiankonggui.tag28" + - "1-1#yijidiankonggui_2_Exp=ns=2;s=modbus.1-1#yijidiankonggui.tag29" + - "1-1#yijidiankonggui_2_ExpZN=ns=2;s=modbus.1-1#yijidiankonggui.tag31" + # 鎴愬搧搴� FinishedStore + - "1-1#yijidiankonggui_3_VoltageA=ns=2;s=modbus.1-1#yijidiankonggui.tag1" + - "1-1#yijidiankonggui_3_VoltageB=ns=2;s=modbus.1-1#yijidiankonggui.tag2" + - "1-1#yijidiankonggui_3_VoltageC=ns=2;s=modbus.1-1#yijidiankonggui.tag3" + - "1-1#yijidiankonggui_3_CurrentA=ns=2;s=modbus.1-1#yijidiankonggui.tag35" + - "1-1#yijidiankonggui_3_CurrentB=ns=2;s=modbus.1-1#yijidiankonggui.tag36" + - "1-1#yijidiankonggui_3_CurrentC=ns=2;s=modbus.1-1#yijidiankonggui.tag37" + - "1-1#yijidiankonggui_3_ActivePow=ns=2;s=modbus.1-1#yijidiankonggui.tag38" + - "1-1#yijidiankonggui_3_PowFactorT=ns=2;s=modbus.1-1#yijidiankonggui.tag41" + - "1-1#yijidiankonggui_3_ActiveZN=ns=2;s=modbus.1-1#yijidiankonggui.tag44" + - "1-1#yijidiankonggui_3_ActiveZT=ns=2;s=modbus.1-1#yijidiankonggui.tag42" + - "1-1#yijidiankonggui_3_Exp=ns=2;s=modbus.1-1#yijidiankonggui.tag43" + - "1-1#yijidiankonggui_3_ExpZN=ns=2;s=modbus.1-1#yijidiankonggui.tag45" + # 娓呮礂闂� RightWorkshop + - "1-1#yijidiankonggui_4_VoltageA=ns=2;s=modbus.1-1#yijidiankonggui.tag1" + - "1-1#yijidiankonggui_4_VoltageB=ns=2;s=modbus.1-1#yijidiankonggui.tag2" + - "1-1#yijidiankonggui_4_VoltageC=ns=2;s=modbus.1-1#yijidiankonggui.tag3" + - "1-1#yijidiankonggui_4_CurrentA=ns=2;s=modbus.1-1#yijidiankonggui.tag49" + - "1-1#yijidiankonggui_4_CurrentB=ns=2;s=modbus.1-1#yijidiankonggui.tag50" + - "1-1#yijidiankonggui_4_CurrentC=ns=2;s=modbus.1-1#yijidiankonggui.tag51" + - "1-1#yijidiankonggui_4_ActivePow=ns=2;s=modbus.1-1#yijidiankonggui.tag52" + - "1-1#yijidiankonggui_4_PowFactorT=ns=2;s=modbus.1-1#yijidiankonggui.tag55" + - "1-1#yijidiankonggui_4_ActiveZN=ns=2;s=modbus.1-1#yijidiankonggui.tag58" + - "1-1#yijidiankonggui_4_ActiveZT=ns=2;s=modbus.1-1#yijidiankonggui.tag56" + - "1-1#yijidiankonggui_4_Exp=ns=2;s=modbus.1-1#yijidiankonggui.tag57" + - "1-1#yijidiankonggui_4_ExpZN=ns=2;s=modbus.1-1#yijidiankonggui.tag59" + #缁翠慨瀹ゅ姩鍔� MaintenanceRoom + - "1-2#yijidiankonggui_1_VoltageA=ns=2;s=modbus.1-2#yijidiankonggui.tag1" + - "1-2#yijidiankonggui_1_VoltageB=ns=2;s=modbus.1-2#yijidiankonggui.tag2" + - "1-2#yijidiankonggui_1_VoltageC=ns=2;s=modbus.1-2#yijidiankonggui.tag3" + - "1-2#yijidiankonggui_1_CurrentA=ns=2;s=modbus.1-2#yijidiankonggui.tag7" + - "1-2#yijidiankonggui_1_CurrentB=ns=2;s=modbus.1-2#yijidiankonggui.tag8" + - "1-2#yijidiankonggui_1_CurrentC=ns=2;s=modbus.1-2#yijidiankonggui.tag9" + - "1-2#yijidiankonggui_1_ActivePow=ns=2;s=modbus.1-2#yijidiankonggui.tag10" + - "1-2#yijidiankonggui_1_PowFactorT=ns=2;s=modbus.1-2#yijidiankonggui.tag13" + - "1-2#yijidiankonggui_1_ActiveZN=ns=2;s=modbus.1-2#yijidiankonggui.tag16" + - "1-2#yijidiankonggui_1_ActiveZT=ns=2;s=modbus.1-2#yijidiankonggui.tag14" + - "1-2#yijidiankonggui_1_Exp=ns=2;s=modbus.1-2#yijidiankonggui.tag15" + - "1-2#yijidiankonggui_1_ExpZN=ns=2;s=modbus.1-2#yijidiankonggui.tag17" + # 鍘熸潗鏂欎粨搴� RawMaterialWarehouse + - "1-2#yijidiankonggui_2_VoltageA=ns=2;s=modbus.1-2#yijidiankonggui.tag1" + - "1-2#yijidiankonggui_2_VoltageB=ns=2;s=modbus.1-2#yijidiankonggui.tag2" + - "1-2#yijidiankonggui_2_VoltageC=ns=2;s=modbus.1-2#yijidiankonggui.tag3" + - "1-2#yijidiankonggui_2_CurrentA=ns=2;s=modbus.1-2#yijidiankonggui.tag21" + - "1-2#yijidiankonggui_2_CurrentB=ns=2;s=modbus.1-2#yijidiankonggui.tag22" + - "1-2#yijidiankonggui_2_CurrentC=ns=2;s=modbus.1-2#yijidiankonggui.tag23" + - "1-2#yijidiankonggui_2_ActivePow=ns=2;s=modbus.1-2#yijidiankonggui.tag24" + - "1-2#yijidiankonggui_2_PowFactorT=ns=2;s=modbus.1-2#yijidiankonggui.tag27" + - "1-2#yijidiankonggui_2_ActiveZN=ns=2;s=modbus.1-2#yijidiankonggui.tag30" + - "1-2#yijidiankonggui_2_ActiveZT=ns=2;s=modbus.1-2#yijidiankonggui.tag28" + - "1-2#yijidiankonggui_2_Exp=ns=2;s=modbus.1-2#yijidiankonggui.tag29" + - "1-2#yijidiankonggui_2_ExpZN=ns=2;s=modbus.1-2#yijidiankonggui.tag31" + # 鎭掓俯瀹� ThermostaticChamber + - "1-2#yijidiankonggui_3_VoltageA=ns=2;s=modbus.1-2#yijidiankonggui.tag1" + - "1-2#yijidiankonggui_3_VoltageB=ns=2;s=modbus.1-2#yijidiankonggui.tag2" + - "1-2#yijidiankonggui_3_VoltageC=ns=2;s=modbus.1-2#yijidiankonggui.tag3" + - "1-2#yijidiankonggui_3_CurrentA=ns=2;s=modbus.1-2#yijidiankonggui.tag35" + - "1-2#yijidiankonggui_3_CurrentB=ns=2;s=modbus.1-2#yijidiankonggui.tag36" + - "1-2#yijidiankonggui_3_CurrentC=ns=2;s=modbus.1-2#yijidiankonggui.tag37" + - "1-2#yijidiankonggui_3_ActivePow=ns=2;s=modbus.1-2#yijidiankonggui.tag38" + - "1-2#yijidiankonggui_3_PowFactorT=ns=2;s=modbus.1-2#yijidiankonggui.tag41" + - "1-2#yijidiankonggui_3_ActiveZN=ns=2;s=modbus.1-2#yijidiankonggui.tag44" + - "1-2#yijidiankonggui_3_ActiveZT=ns=2;s=modbus.1-2#yijidiankonggui.tag42" + - "1-2#yijidiankonggui_3_Exp=ns=2;s=modbus.1-2#yijidiankonggui.tag43" + - "1-2#yijidiankonggui_3_ExpZN=ns=2;s=modbus.1-2#yijidiankonggui.tag45" + # 鍖呰兌闂� PackGlueRoom + - "1-2#yijidiankonggui_4_VoltageA=ns=2;s=modbus.1-2#yijidiankonggui.tag1" + - "1-2#yijidiankonggui_4_VoltageB=ns=2;s=modbus.1-2#yijidiankonggui.tag2" + - "1-2#yijidiankonggui_4_VoltageC=ns=2;s=modbus.1-2#yijidiankonggui.tag3" + - "1-2#yijidiankonggui_4_CurrentA=ns=2;s=modbus.1-2#yijidiankonggui.tag49" + - "1-2#yijidiankonggui_4_CurrentB=ns=2;s=modbus.1-2#yijidiankonggui.tag50" + - "1-2#yijidiankonggui_4_CurrentC=ns=2;s=modbus.1-2#yijidiankonggui.tag51" + - "1-2#yijidiankonggui_4_ActivePow=ns=2;s=modbus.1-2#yijidiankonggui.tag52" + - "1-2#yijidiankonggui_4_PowFactorT=ns=2;s=modbus.1-2#yijidiankonggui.tag55" + - "1-2#yijidiankonggui_4_ActiveZN=ns=2;s=modbus.1-2#yijidiankonggui.tag58" + - "1-2#yijidiankonggui_4_ActiveZT=ns=2;s=modbus.1-2#yijidiankonggui.tag56" + - "1-2#yijidiankonggui_4_Exp=ns=2;s=modbus.1-2#yijidiankonggui.tag57" + - "1-2#yijidiankonggui_4_ExpZN=ns=2;s=modbus.1-2#yijidiankonggui.tag59" + # 宸﹁溅闂寸┖璋� leftWkshopVRVS + - "2-1#yijidiankonggui_2_VoltageA=ns=2;s=modbus.2-1#yijidiankonggui.tag1" + - "2-1#yijidiankonggui_2_VoltageB=ns=2;s=modbus.2-1#yijidiankonggui.tag2" + - "2-1#yijidiankonggui_2_VoltageC=ns=2;s=modbus.2-1#yijidiankonggui.tag3" + - "2-1#yijidiankonggui_2_CurrentA=ns=2;s=modbus.2-1#yijidiankonggui.tag21" + - "2-1#yijidiankonggui_2_CurrentB=ns=2;s=modbus.2-1#yijidiankonggui.tag22" + - "2-1#yijidiankonggui_2_CurrentC=ns=2;s=modbus.2-1#yijidiankonggui.tag23" + - "2-1#yijidiankonggui_2_ActivePow=ns=2;s=modbus.2-1#yijidiankonggui.tag24" + - "2-1#yijidiankonggui_2_PowFactorT=ns=2;s=modbus.2-1#yijidiankonggui.tag27" + - "2-1#yijidiankonggui_2_ActiveZN=ns=2;s=modbus.2-1#yijidiankonggui.tag30" + - "2-1#yijidiankonggui_2_ActiveZT=ns=2;s=modbus.2-1#yijidiankonggui.tag28" + - "2-1#yijidiankonggui_2_Exp=ns=2;s=modbus.2-1#yijidiankonggui.tag29" + - "2-1#yijidiankonggui_2_ExpZN=ns=2;s=modbus.2-1#yijidiankonggui.tag31" + # 杞﹂棿鍔炲叕瀹� WorkshopOffice + - "2-1#yijidiankonggui_3_VoltageA=ns=2;s=modbus.2-1#yijidiankonggui.tag1" + - "2-1#yijidiankonggui_3_VoltageB=ns=2;s=modbus.2-1#yijidiankonggui.tag2" + - "2-1#yijidiankonggui_3_VoltageC=ns=2;s=modbus.2-1#yijidiankonggui.tag3" + - "2-1#yijidiankonggui_3_CurrentA=ns=2;s=modbus.2-1#yijidiankonggui.tag35" + - "2-1#yijidiankonggui_3_CurrentB=ns=2;s=modbus.2-1#yijidiankonggui.tag36" + - "2-1#yijidiankonggui_3_CurrentC=ns=2;s=modbus.2-1#yijidiankonggui.tag37" + - "2-1#yijidiankonggui_3_ActivePow=ns=2;s=modbus.2-1#yijidiankonggui.tag38" + - "2-1#yijidiankonggui_3_PowFactorT=ns=2;s=modbus.2-1#yijidiankonggui.tag41" + - "2-1#yijidiankonggui_3_ActiveZN=ns=2;s=modbus.2-1#yijidiankonggui.tag44" + - "2-1#yijidiankonggui_3_ActiveZT=ns=2;s=modbus.2-1#yijidiankonggui.tag42" + - "2-1#yijidiankonggui_3_Exp=ns=2;s=modbus.2-1#yijidiankonggui.tag43" + - "2-1#yijidiankonggui_3_ExpZN=ns=2;s=modbus.2-1#yijidiankonggui.tag45" + # 1銆�2妤间笢鍔炲叕瀹� EastOffice + - "2-1#yijidiankonggui_4_VoltageA=ns=2;s=modbus.2-1#yijidiankonggui.tag1" + - "2-1#yijidiankonggui_4_VoltageB=ns=2;s=modbus.2-1#yijidiankonggui.tag2" + - "2-1#yijidiankonggui_4_VoltageC=ns=2;s=modbus.2-1#yijidiankonggui.tag3" + - "2-1#yijidiankonggui_4_CurrentA=ns=2;s=modbus.2-1#yijidiankonggui.tag49" + - "2-1#yijidiankonggui_4_CurrentB=ns=2;s=modbus.2-1#yijidiankonggui.tag50" + - "2-1#yijidiankonggui_4_CurrentC=ns=2;s=modbus.2-1#yijidiankonggui.tag51" + - "2-1#yijidiankonggui_4_ActivePow=ns=2;s=modbus.2-1#yijidiankonggui.tag52" + - "2-1#yijidiankonggui_4_PowFactorT=ns=2;s=modbus.2-1#yijidiankonggui.tag55" + - "2-1#yijidiankonggui_4_ActiveZN=ns=2;s=modbus.2-1#yijidiankonggui.tag58" + - "2-1#yijidiankonggui_4_ActiveZT=ns=2;s=modbus.2-1#yijidiankonggui.tag56" + - "2-1#yijidiankonggui_4_Exp=ns=2;s=modbus.2-1#yijidiankonggui.tag57" + - "2-1#yijidiankonggui_4_ExpZN=ns=2;s=modbus.2-1#yijidiankonggui.tag59" + #鐓ф槑 Lighting + - "3-1#yijidiankonggui_1_VoltageA=ns=2;s=modbus.3-1#yijidiankonggui.tag1" + - "3-1#yijidiankonggui_1_VoltageB=ns=2;s=modbus.3-1#yijidiankonggui.tag2" + - "3-1#yijidiankonggui_1_VoltageC=ns=2;s=modbus.3-1#yijidiankonggui.tag3" + - "3-1#yijidiankonggui_1_CurrentA=ns=2;s=modbus.3-1#yijidiankonggui.tag7" + - "3-1#yijidiankonggui_1_CurrentB=ns=2;s=modbus.3-1#yijidiankonggui.tag8" + - "3-1#yijidiankonggui_1_CurrentC=ns=2;s=modbus.3-1#yijidiankonggui.tag9" + - "3-1#yijidiankonggui_1_ActivePow=ns=2;s=modbus.3-1#yijidiankonggui.tag10" + - "3-1#yijidiankonggui_1_PowFactorT=ns=2;s=modbus.3-1#yijidiankonggui.tag13" + - "3-1#yijidiankonggui_1_ActiveZN=ns=2;s=modbus.3-1#yijidiankonggui.tag16" + - "3-1#yijidiankonggui_1_ActiveZT=ns=2;s=modbus.3-1#yijidiankonggui.tag14" + - "3-1#yijidiankonggui_1_Exp=ns=2;s=modbus.3-1#yijidiankonggui.tag15" + - "3-1#yijidiankonggui_1_ExpZN=ns=2;s=modbus.3-1#yijidiankonggui.tag17" + # 杞﹂棿2妤� SecondFloorWorkshop + - "3-1#yijidiankonggui_2_VoltageA=ns=2;s=modbus.3-1#yijidiankonggui.tag1" + - "3-1#yijidiankonggui_2_VoltageB=ns=2;s=modbus.3-1#yijidiankonggui.tag2" + - "3-1#yijidiankonggui_2_VoltageC=ns=2;s=modbus.3-1#yijidiankonggui.tag3" + - "3-1#yijidiankonggui_2_CurrentA=ns=2;s=modbus.3-1#yijidiankonggui.tag21" + - "3-1#yijidiankonggui_2_CurrentB=ns=2;s=modbus.3-1#yijidiankonggui.tag22" + - "3-1#yijidiankonggui_2_CurrentC=ns=2;s=modbus.3-1#yijidiankonggui.tag23" + - "3-1#yijidiankonggui_2_ActivePow=ns=2;s=modbus.3-1#yijidiankonggui.tag24" + - "3-1#yijidiankonggui_2_PowFactorT=ns=2;s=modbus.3-1#yijidiankonggui.tag27" + - "3-1#yijidiankonggui_2_ActiveZN=ns=2;s=modbus.3-1#yijidiankonggui.tag30" + - "3-1#yijidiankonggui_2_ActiveZT=ns=2;s=modbus.3-1#yijidiankonggui.tag28" + - "3-1#yijidiankonggui_2_Exp=ns=2;s=modbus.3-1#yijidiankonggui.tag29" + - "3-1#yijidiankonggui_2_ExpZN=ns=2;s=modbus.3-1#yijidiankonggui.tag31" + # 鐢熶骇鍔炲叕瀹� ProductionOffice + - "3-1#yijidiankonggui_3_VoltageA=ns=2;s=modbus.3-1#yijidiankonggui.tag1" + - "3-1#yijidiankonggui_3_VoltageB=ns=2;s=modbus.3-1#yijidiankonggui.tag2" + - "3-1#yijidiankonggui_3_VoltageC=ns=2;s=modbus.3-1#yijidiankonggui.tag3" + - "3-1#yijidiankonggui_3_CurrentA=ns=2;s=modbus.3-1#yijidiankonggui.tag35" + - "3-1#yijidiankonggui_3_CurrentB=ns=2;s=modbus.3-1#yijidiankonggui.tag36" + - "3-1#yijidiankonggui_3_CurrentC=ns=2;s=modbus.3-1#yijidiankonggui.tag37" + - "3-1#yijidiankonggui_3_ActivePow=ns=2;s=modbus.3-1#yijidiankonggui.tag38" + - "3-1#yijidiankonggui_3_PowFactorT=ns=2;s=modbus.3-1#yijidiankonggui.tag41" + - "3-1#yijidiankonggui_3_ActiveZN=ns=2;s=modbus.3-1#yijidiankonggui.tag44" + - "3-1#yijidiankonggui_3_ActiveZT=ns=2;s=modbus.3-1#yijidiankonggui.tag42" + - "3-1#yijidiankonggui_3_Exp=ns=2;s=modbus.3-1#yijidiankonggui.tag43" + - "3-1#yijidiankonggui_3_ExpZN=ns=2;s=modbus.3-1#yijidiankonggui.tag45" + # 楂樹綆娓╄瘯楠屽尯 HLTempTest + - "3-1#yijidiankonggui_4_VoltageA=ns=2;s=modbus.3-1#yijidiankonggui.tag1" + - "3-1#yijidiankonggui_4_VoltageB=ns=2;s=modbus.3-1#yijidiankonggui.tag2" + - "3-1#yijidiankonggui_4_VoltageC=ns=2;s=modbus.3-1#yijidiankonggui.tag3" + - "3-1#yijidiankonggui_4_CurrentA=ns=2;s=modbus.3-1#yijidiankonggui.tag49" + - "3-1#yijidiankonggui_4_CurrentB=ns=2;s=modbus.3-1#yijidiankonggui.tag50" + - "3-1#yijidiankonggui_4_CurrentC=ns=2;s=modbus.3-1#yijidiankonggui.tag51" + - "3-1#yijidiankonggui_4_ActivePow=ns=2;s=modbus.3-1#yijidiankonggui.tag52" + - "3-1#yijidiankonggui_4_PowFactorT=ns=2;s=modbus.3-1#yijidiankonggui.tag55" + - "3-1#yijidiankonggui_4_ActiveZN=ns=2;s=modbus.3-1#yijidiankonggui.tag58" + - "3-1#yijidiankonggui_4_ActiveZT=ns=2;s=modbus.3-1#yijidiankonggui.tag56" + - "3-1#yijidiankonggui_4_Exp=ns=2;s=modbus.3-1#yijidiankonggui.tag57" + - "3-1#yijidiankonggui_4_ExpZN=ns=2;s=modbus.3-1#yijidiankonggui.tag59" + # 鎴愬搧浠撳簱娓╂箍搴� chengpincangku + - "chengpincangku_WD=ns=2;s=_AdvancedTags.cpk_wd" + - "chengpincangku_SD=ns=2;s=_AdvancedTags.cpk_sd" + # 鐢熶骇杞﹂棿 shengchanchejian + - "shengchanchejian_WD=ns=2;s=_AdvancedTags.sccj_wd" + - "shengchanchejian_SD=ns=2;s=_AdvancedTags.sccj_sd" + # 鍘熸枡浠撳簱 yuliaocangku + - "yuliaocangku_WD=ns=2;s=_AdvancedTags.ylk_wd" + - "yuliaocangku_SD=ns=2;s=_AdvancedTags.ylk_sd" \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 50a8bde..33575d5 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,3 +1,7 @@ +# 寮�鍙戠幆澧冮厤缃� +server: + # 鏈嶅姟鍣ㄧ殑HTTP绔彛锛岄粯璁や负8080 + port: 8089 spring: profiles: active: dev -- Gitblit v1.9.3