diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml
index 271417e..8872c9e 100644
--- a/yudao-dependencies/pom.xml
+++ b/yudao-dependencies/pom.xml
@@ -34,6 +34,7 @@
9.0.1.jre7
7.0.0-RC3-og
3.9.2
+ 2.0.8
2.3.6
@@ -312,6 +313,12 @@
${taos.version}
+
+ org.apache.iotdb
+ iotdb-jdbc
+ ${iotdb.version}
+
+
cn.iocoder.boot
diff --git a/yudao-module-iot/yudao-module-iot-biz/pom.xml b/yudao-module-iot/yudao-module-iot-biz/pom.xml
index 75cdd32..b671a62 100644
--- a/yudao-module-iot/yudao-module-iot-biz/pom.xml
+++ b/yudao-module-iot/yudao-module-iot-biz/pom.xml
@@ -50,6 +50,10 @@
com.taosdata.jdbc
taos-jdbcdriver
+
+ org.apache.iotdb
+ iotdb-jdbc
+
cn.iocoder.boot
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/IotDeviceMessageController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/IotDeviceMessageController.java
index 03461d5..61d936a 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/IotDeviceMessageController.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/IotDeviceMessageController.java
@@ -10,7 +10,6 @@ import cn.iocoder.yudao.module.iot.controller.admin.device.vo.message.IotDeviceM
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.message.IotDeviceMessageSendReqVO;
import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceMessageDO;
-import cn.iocoder.yudao.module.iot.dal.tdengine.IotDeviceMessageMapper;
import cn.iocoder.yudao.module.iot.service.device.IotDeviceService;
import cn.iocoder.yudao.module.iot.service.device.message.IotDeviceMessageService;
import cn.iocoder.yudao.module.iot.service.thingmodel.IotThingModelService;
@@ -41,8 +40,6 @@ public class IotDeviceMessageController {
private IotDeviceService deviceService;
@Resource
private IotThingModelService thingModelService;
- @Resource
- private IotDeviceMessageMapper deviceMessageMapper;
@GetMapping("/page")
@Operation(summary = "获得设备消息分页")
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/device/IotDeviceMessageDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/device/IotDeviceMessageDO.java
index 233b2c1..3b24aa9 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/device/IotDeviceMessageDO.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/device/IotDeviceMessageDO.java
@@ -11,7 +11,7 @@ import lombok.NoArgsConstructor;
/**
* IoT 设备消息数据 DO
*
- * 目前使用 TDengine 存储
+ * 支持 TDengine、IoTDB 存储,由 yudao.iot.storage.type 选择
*
* @author alwayssuper
*/
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/thingmodel/model/ThingModelProperty.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/thingmodel/model/ThingModelProperty.java
index 2fe103a..96d3cfd 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/thingmodel/model/ThingModelProperty.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/thingmodel/model/ThingModelProperty.java
@@ -21,6 +21,16 @@ import java.util.List;
public class ThingModelProperty {
/**
+ * STRUCT、ARRAY 等 JSON 属性值的长度上限:按 UTF-8 编码后的字节数计算,不是字符数
+ *
+ * 1. 写入前:JSON 字符串超过该长度时,转换为 null,不写入该属性
+ * 2. 各存储后端共用,例如说 TDengine 的 VARCHAR 长度
+ *
+ * 注意:TDengine 一行(所有列)有总长度上限,调大该长度,会减少一个产品可以定义的 STRUCT、ARRAY 属性数量
+ */
+ public static final int LENGTH_JSON = 1024;
+
+ /**
* 属性标识符
*/
@NotEmpty(message = "属性标识符不能为空")
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/iotdb/IoTDBSystemMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/iotdb/IoTDBSystemMapper.java
new file mode 100644
index 0000000..4c5c55b
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/iotdb/IoTDBSystemMapper.java
@@ -0,0 +1,52 @@
+package cn.iocoder.yudao.module.iot.dal.iotdb;
+
+import cn.iocoder.yudao.module.iot.framework.iotdb.core.IoTDBUtils;
+import cn.iocoder.yudao.module.iot.framework.iotdb.core.annotation.IoTDBDS;
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * IoTDB 系统信息 Mapper:只读取配置,用于启动前提检查
+ *
+ * @author 芋道源码
+ */
+@Mapper
+@IoTDBDS
+@InterceptorIgnore(tenantLine = "true", dataPermission = "true") // 避免 SQL 解析,因为 JSqlParser 对 IoTDB 的 SQL 解析会报错
+public interface IoTDBSystemMapper {
+
+ @Select("SHOW VARIABLES")
+ List