diff --git a/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/KnpcTemperatureDecodeHandler.java b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/KnpcTemperatureDecodeHandler.java
new file mode 100644
index 0000000..9d6c8f5
--- /dev/null
+++ b/src/main/java/com/isu/gaswellwatch/modbus/data/decode/impl/KnpcTemperatureDecodeHandler.java
@@ -0,0 +1,38 @@
+package com.isu.gaswellwatch.modbus.data.decode.impl;
+
+import com.isu.gaswellwatch.modbus.data.decode.DecodeHandler;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.math.NumberUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * KNPC 温度解析
+ *
+ * @author 王仕龙
+ * 2024/12/12 20:15
+ */
+@Component(KnpcTemperatureDecodeHandler.NAME + DecodeHandler.DECODE_NAME)
+public class KnpcTemperatureDecodeHandler extends SignedNumberDecodeHandler {
+ public static final String NAME = "knpcTemperature";
+
+ @Override
+ public String decode(Map commandPointMap, String value) {
+ if (StringUtils.isBlank(value) || !NumberUtils.isCreatable(value)) {
+ return value;
+ }
+ int decimalNumber = Integer.parseInt(value, 16);
+ if (decimalNumber == 0) {
+ return String.valueOf(decimalNumber);
+ }
+ String binaryNumber = super.decode(commandPointMap, value);
+ Long resultValue = NumberUtils.createLong(binaryNumber);
+ if (Objects.nonNull(resultValue) && resultValue < 0) {
+ binaryNumber = Long.toString(-(resultValue + 32768));
+ }
+ return binaryNumber;
+ }
+
+}