diff --git a/app.db b/app.db index 5007c8e..674552a 100644 Binary files a/app.db and b/app.db differ diff --git a/digester.zip b/digester.zip deleted file mode 100644 index 737dcc8..0000000 Binary files a/digester.zip and /dev/null differ diff --git a/pom.xml b/pom.xml index 27c2f7a..414dbf4 100644 --- a/pom.xml +++ b/pom.xml @@ -15,7 +15,7 @@ com.my digester - 0.0.1-SNAPSHOT + 0.0.1 digester digester diff --git a/publish.ps1 b/publish.ps1 new file mode 100644 index 0000000..9db13c1 --- /dev/null +++ b/publish.ps1 @@ -0,0 +1,24 @@ +# update version in pom.xml +$pomData = [xml](Get-Content pom.xml) +$version = $pomData.project.version -split '\.' +$version[2] = [int]$version[2] + 1 +$version = $version -join '.' +mvn versions:set -DnewVersion="$version" +git add pom.xml +git commit -m "update version to $version" +git push + +# build +mvn clean package +Rename-Item -Path target/graphite_digester_bg-$version.jar -NewName "app-$version.jar" + +# upload +scp target/app-$version.jar root@192.168.8.10:/app/ +scp D:/device.db root@192.168.8.10:/app/device.db + +# start +ssh root:zwsd@192.168.8.10 "killall java" +ssh root:zwsd@192.168.8.10 "rm /app/app.jar" +ssh root:zwsd@192.168.8.10 "ln -s /app/app-$version.jar /app/app.jar" +ssh root:zwsd@192.168.8.10 "nohup /app/java/jdk-18.0.2.1/bin/java -jar /app/app.jar --spring.profiles.active=test > /app/app.log 2>&1 &" +ssh root:zwsd@192.168.8.10 "tail -f /app/app.log" \ No newline at end of file diff --git a/src/main/java/com/iflytop/digester/DigesterApplicationRunner.java b/src/main/java/com/iflytop/digester/DigesterApplicationRunner.java index b2e4efc..32147ac 100644 --- a/src/main/java/com/iflytop/digester/DigesterApplicationRunner.java +++ b/src/main/java/com/iflytop/digester/DigesterApplicationRunner.java @@ -24,5 +24,6 @@ public class DigesterApplicationRunner implements ApplicationRunner { System.load(this.pylonLibraryPath); System.load(this.pylonWrapperPath); this.device.liquidAddition.setup(); + DigestionTaskTheadManager.getInstance().setup(); } } diff --git a/src/main/java/com/iflytop/digester/DigestionTaskTheadManager.java b/src/main/java/com/iflytop/digester/DigestionTaskTheadManager.java index 31691fc..cf2578c 100644 --- a/src/main/java/com/iflytop/digester/DigestionTaskTheadManager.java +++ b/src/main/java/com/iflytop/digester/DigestionTaskTheadManager.java @@ -3,6 +3,9 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.iflytop.digester.model.MdbDigestionTask; +import com.iflytop.digester.model.MdbRuntimeLog; +import com.iflytop.digester.underframework.dao.model.UfMdbNotification; +import com.iflytop.digester.underframework.dao.model.UfMdbOption; import com.iflytop.digester.underframework.util.UfJsonHelper; import jakarta.annotation.PostConstruct; import org.eclipse.paho.client.mqttv3.*; @@ -22,19 +25,6 @@ public class DigestionTaskTheadManager { // Mqtt client private MqttClient client; - @Value("${mqtt-broker.uri}") - private String mqttBrokerUri; - @Value("${mqtt-broker.username}") - private String mqttBrokerUsername; - @Value("${mqtt-broker.password}") - private String mqttBrokerPassword; - @Value("${mqtt-broker.clientId}") - private String mqttBrokerClientId; - @Value("${mqtt-broker.my-topic}") - private String mqttBrokerMyTopic; - @Value("${mqtt-broker.transbot-topic}") - private String mqttBrokerTransbotTopic; - // Get instance public static DigestionTaskTheadManager getInstance() { return instance; @@ -44,39 +34,47 @@ public class DigestionTaskTheadManager { public void init() { this.tasks = new ArrayList<>(); instance = this; + } + + // setup + public void setup() { this.setupMqttBroker(); } // setup mqtt broker private void setupMqttBroker() { + String uri = UfMdbOption.getString("DigestionTaskMqttBrokerUri", ""); + String clientId = UfMdbOption.getString("DigestionTaskMqttClientId", ""); + String myTopic = UfMdbOption.getString("DigestionTaskMqttMyTopic", ""); + this.client = null; try { - this.client = new MqttClient(this.mqttBrokerUri, this.mqttBrokerClientId, new MemoryPersistence()); + this.client = new MqttClient(uri, clientId, new MemoryPersistence()); } catch (MqttException e) { throw new RuntimeException(e); } this.client.setCallback(new MqttCallback() { - public void connectionLost(Throwable cause) { - System.out.println("connectionLost: " + cause.getMessage()); - } public void messageArrived(String topic, MqttMessage message) { DigestionTaskTheadManager.this.handleOnMessageArrived(topic, message); } + public void connectionLost(Throwable cause) { + UfMdbNotification.error("消解任务 MQTT 服务器断开连接"); + System.out.println("connectionLost: " + cause.getMessage()); + } public void deliveryComplete(IMqttDeliveryToken token) { - // nothing to do here + System.out.println("xxxx"); } }); try { MqttConnectOptions options = new MqttConnectOptions(); -// options.setUserName(this.mqttBrokerUsername); -// options.setPassword(this.mqttBrokerPassword.toCharArray()); client.connect(options); } catch (MqttException e) { + UfMdbNotification.error("消解任务 MQTT 服务器连接失败 : %s : %s", uri, e.getMessage()); throw new RuntimeException(e); } try { - client.subscribe(this.mqttBrokerMyTopic, 2); + client.subscribe(myTopic, 2); } catch (MqttException e) { throw new RuntimeException(e); } @@ -84,6 +82,8 @@ public class DigestionTaskTheadManager { // Handle on message arrived private void handleOnMessageArrived(String topic, MqttMessage message) { + MdbRuntimeLog.log("DigestionTaskMqttMessage", "Topic : %s; \nPayload : \n%s", topic, message.toString()); + String content = new String(message.getPayload()); JsonNode actionJsonTree = null; try { @@ -120,16 +120,18 @@ public class DigestionTaskTheadManager { // Send message to trans bot public void sendMessageToTransBot(String action, Map params) { + String myTopic = UfMdbOption.getString("DigestionTaskMqttMyTopic", ""); + String transTopic = UfMdbOption.getString("DigestionTaskMqttTransBotTopic", ""); try { var message = Map.of( - "src", "stw-a80", + "src", myTopic, "action", action, "params", params ); var messageJson = UfJsonHelper.objectToJson(message); MqttMessage mqttMessage = new MqttMessage(messageJson.getBytes()); mqttMessage.setQos(2); - this.client.publish(this.mqttBrokerTransbotTopic, mqttMessage); + this.client.publish(transTopic, mqttMessage); } catch (MqttException e) { throw new RuntimeException(e); } diff --git a/src/main/java/com/iflytop/digester/StartResetTaskThread.java b/src/main/java/com/iflytop/digester/StartResetTaskThread.java index fffd692..a820985 100644 --- a/src/main/java/com/iflytop/digester/StartResetTaskThread.java +++ b/src/main/java/com/iflytop/digester/StartResetTaskThread.java @@ -49,42 +49,6 @@ public class StartResetTaskThread extends Thread { UfMdbRuntimeVariable.setString("设备已就绪","device.message"); } - // 设置蠕动泵 - private void setupPeristalticPump() { - for ( int i=0; i<16; i++ ) { - this.setProgressMessage("设备初始化 : 初始化蠕动泵 " + (i+1) + "/16"); - UfCmdSnippetExecutor.execute(String.format("PeristalticPumpEnable.%d",i)); - } - - Boolean enableSetup = UfMdbOption.getBoolean("LiquidPeristalticPumpPipeSetupEnable", false); - if ( !enableSetup ) { - return ; - } - - this.setProgressMessage("设备初始化 : 初始化加液管路"); - UfCmdSnippetExecutor.execute("DoorOpen"); - UfMdbNotification.action("TaskStartResetPumpPipeSetupTubeRankPutIn", new HashMap<>()); - this.waitAction("TaskStartResetPumpPipeSetupTubeRankPutIn"); - UfCmdSnippetExecutor.execute("DoorClose"); - - // 加液管充满 - int liquidPipeVolume = UfMdbOption.getInteger("LiquidPeristalticPumpPipeVolume", 1); - Device device = Device.getInstance(); - var tubes = List.of(0,4, 3,2, 15,11, 12,13, 1,5, 6,7, 14,10, 9,8); - for ( int i=0; i<8; i++ ) { - this.setProgressMessage("设备初始化 : 初始化加液管路 " + (i+1) + "/8"); - var tubeList = tubes.subList(i*2, i*2+2); - var pumpList = List.of(2*i, 2*i+1); - device.liquidAddition.addLiquidToTubes(tubeList, pumpList, liquidPipeVolume); - } - - // 加液管充满, 需要取出试管架 - UfCmdSnippetExecutor.execute("DoorOpen"); - UfMdbNotification.action("TaskStartResetPumpPipeSetupTubeRankTakeOut", new HashMap<>()); - this.waitAction("TaskStartResetPumpPipeSetupTubeRankTakeOut"); - UfCmdSnippetExecutor.execute("DoorClose"); - } - /** * 清理试管架 * @issue : 无法获取加液位置是否存在试管架 @@ -179,4 +143,46 @@ public class StartResetTaskThread extends Thread { private void setProgressMessage(String message) { UfMdbRuntimeVariable.setString(message, "device.start.message"); } + + // 设置蠕动泵 + private void setupPeristalticPump() { + // 说是不要在开机的时候初始化蠕动泵了 + boolean enable = System.currentTimeMillis() < 0; + if ( !enable ) { + return ; + } + + for ( int i=0; i<16; i++ ) { + this.setProgressMessage("设备初始化 : 初始化蠕动泵 " + (i+1) + "/16"); + UfCmdSnippetExecutor.execute(String.format("PeristalticPumpEnable.%d",i)); + } + + Boolean enableSetup = UfMdbOption.getBoolean("LiquidPeristalticPumpPipeSetupEnable", false); + if ( !enableSetup ) { + return ; + } + + this.setProgressMessage("设备初始化 : 初始化加液管路"); + UfCmdSnippetExecutor.execute("DoorOpen"); + UfMdbNotification.action("TaskStartResetPumpPipeSetupTubeRankPutIn", new HashMap<>()); + this.waitAction("TaskStartResetPumpPipeSetupTubeRankPutIn"); + UfCmdSnippetExecutor.execute("DoorClose"); + + // 加液管充满 + int liquidPipeVolume = UfMdbOption.getInteger("LiquidPeristalticPumpPipeVolume", 1); + Device device = Device.getInstance(); + var tubes = List.of(0,4, 3,2, 15,11, 12,13, 1,5, 6,7, 14,10, 9,8); + for ( int i=0; i<8; i++ ) { + this.setProgressMessage("设备初始化 : 初始化加液管路 " + (i+1) + "/8"); + var tubeList = tubes.subList(i*2, i*2+2); + var pumpList = List.of(2*i, 2*i+1); + device.liquidAddition.addLiquidToTubes(tubeList, pumpList, liquidPipeVolume); + } + + // 加液管充满, 需要取出试管架 + UfCmdSnippetExecutor.execute("DoorOpen"); + UfMdbNotification.action("TaskStartResetPumpPipeSetupTubeRankTakeOut", new HashMap<>()); + this.waitAction("TaskStartResetPumpPipeSetupTubeRankTakeOut"); + UfCmdSnippetExecutor.execute("DoorClose"); + } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index ce1953a..8f9c7b1 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -14,8 +14,7 @@ device: key : zcancmder enable : false type : ZcancmderWebsocket -# uri: ws://192.168.8.10:19005 - uri : ws://127.0.0.1:19005 + uri: ws://192.168.8.10:19005 - name : modbus key : modbus enable : false @@ -23,14 +22,6 @@ device: host: 192.168.8.10 port: 20000 -mqtt-broker: - uri: tcp://broker.emqx.io:1883 - username: admin - password: public - clientId: digester - my-topic : "stw-a80" - transbot-topic : "transbot" - app : errorSlotIndex : 4 liquidWaterBucketIndex : 2 diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index 1423367..4df67e4 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -22,14 +22,6 @@ device: host: 127.0.0.1 port: 502 -mqtt-broker: - uri: tcp://broker.emqx.io:1883 - username: admin - password: public - clientId: digester - my-topic : "stw-a80" - transbot-topic : "transbot" - app : errorSlotIndex : 4 opencv-library-path: /userdata/rootfs_overlay/usr/lib/jni/libopencv_java420.so